Moduł SPI

Ten moduł zawiera abstrakcjonowanie platformy do komunikacji podrzędnej SPI.

Podsumowanie

Definicje typów

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Wskazuje, że transakcja interfejsu SPI została zakończona o podanej długości.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Wywoływana po zakończeniu wywołania zwrotnego w ramach transakcji i zwraca TRUE, aby wykonać dalsze przetwarzanie.

Funkcje

otPlatSpiSlaveDisable(void)
void
Wyłącz i wyłącz interfejs podrzędnego interfejsu SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Zainicjuj interfejs podrzędne interfejsu SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Przygotuj dane do następnej transakcji interfejsu SPI.

Definicje typów

otPlatSpiSlaveTransactionCompleteCallback

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

Wskazuje, że transakcja interfejsu SPI została zakończona o podanej długości.

Dane zapisane w elemencie podrzędnym zostały zapisane w wskaźniku wskazanym przez argument aInputBuf dla poprzedniego wywołania otPlatSpiSlavePrepareTransaction().

Po wywołaniu tej funkcji funkcja otPlatSpiSlavePrepareTransaction() jest nieprawidłowa i trzeba je wywołać ponownie, by kolejna transakcja była prawidłowa.

Pamiętaj, że funkcja ta jest zawsze wywoływana na końcu transakcji, nawet jeśli nie wywołano jeszcze funkcji otPlatSpiSlavePrepareTransaction(). W takich przypadkach wartości aOutputBufLen i aInputBufLen mają wartość 0.

To wywołanie zwrotne może być wywoływane z kontekstu ISR. Wartość zwrócona z tej funkcji wskazuje, czy konieczne jest dalsze przetwarzanie. Jeśli zwracany jest kod TRUE, implementacja sterownika spi-slave platformy musi wywołać wywołanie zwrotne procesu transakcji (aProcessCallback ustawione w otPlatSpiSlaveEnable()). W przeciwieństwie do tego wywołania zwrotnego musi być ono wywoływane z tego samego kontekstu systemu operacyjnego, co inne wywołanie API lub wywołania zwrotne OpenThread.

Szczegóły
Parametry
[in] aContext
Wskaźnik kontekstu przekazany do: otPlatSpiSlaveEnable().
[in] aOutputBuf
Wartość aOutputBuf od ostatniego połączenia do: otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Wartość aOutputBufLen od ostatniego połączenia do: otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Wartość aInputBuf od ostatniego wywołania do otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Wartość aInputBufLen z ostatniego połączenia do: otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Długość zakończonej transakcji w bajtach.
Zwroty
TRUE, jeśli po tym wywołaniu platforma powinna wywołać wywołanie zwrotne procesu aProcessCallback, FALSE, jeśli nie ma nic do przetworzenia ani nie ma potrzeby wywoływania wywołania zwrotnego procesu.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Wywoływana po zakończeniu wywołania zwrotnego w ramach transakcji i zwraca TRUE, aby wykonać dalsze przetwarzanie.

W odróżnieniu od metody otPlatSpiSlaveTransactionCompleteCallback, którą można wywoływać z dowolnego kontekstu systemu operacyjnego (np. ISR), to wywołanie zwrotne MUSI być wywoływane z tego samego kontekstu systemu operacyjnego co dowolny inny interfejs API/wywołanie zwrotne OpenThread.

Szczegóły
Parametry
[in] aContext
Wskaźnik kontekstu przekazany do: otPlatSpiSlaveEnable().

Funkcje

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Wyłącz i wyłącz interfejs podrzędnego interfejsu SPI.

otPlatSpiSlaveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

Zainicjuj interfejs podrzędne interfejsu SPI.

Pamiętaj, że podrzędne SPI nie jest w pełni gotowe, dopóki transakcja nie zostanie gotowa przy użyciu otPlatSPISlavePrepareTransaction().

Jeśli otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0 x FF` i odrzuć wszystkie odebrane bajty.

Szczegóły
Parametry
[in] aCompleteCallback
Wskaźnik informujący o zakończeniu transakcji z wywołaniem zwrotnym.
[in] aProcessCallback
Wskaźnik przetwarzania wywołania zwrotnego.
[in] aContext
Wskaźnik kontekstu, który ma być przekazywany do wywołań zwrotnych.
Zwracane wartości
OT_ERROR_NONE
Interfejs SPI został włączony.
OT_ERROR_ALREADY
Interfejs SPI jest już włączony.
OT_ERROR_FAILED
Nie udało się włączyć interfejsu podrzędnego interfejsu SPI.

otPlatSpiSlavePrepareTransaction

otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

Przygotuj dane do następnej transakcji interfejsu SPI.

Wskaźniki danych MUSZĄ pozostawać prawidłowe do czasu wywołania pełnego wywołania zwrotnego transakcji przez sterownik podrzędnego interfejsu SPI lub do czasu następnego wywołania otPlatSpiSlavePrepareTransaction().

Można je wywołać więcej niż raz przed zainicjowaniem transakcji przez główny interfejs SPI. Każde udane wywołanie tej funkcji powoduje odrzucenie poprzednich wartości z wcześniejszych wywołań.

Niewywoływanie tej funkcji po zakończeniu transakcji działa tak samo jak w przypadku wcześniejszego wywołania tej funkcji przy obu długościach bufora ustawionego na 0, a zasadę aRequestTransactionFlag – na false.

Po wyliczeniu aOutputBufLen bajtów z aOutputBuf kod PIN MISO powinien być ustawiony na wysoką wartość do czasu zakończenia transakcji interfejsu SPI przez mastera. Jest to funkcjonalny odpowiednik dopełnienia zakończenia ciągu aOutputBuf 0xFF B do długości transakcji.

Po zarejestrowaniu aInputBufLen bajtów aInputBuf na podstawie zegara MOSI wszystkie kolejne wartości z pinezki MOSI są ignorowane, dopóki główny interfejs SPI nie zakończy transakcji.

Pamiętaj, że nawet jeśli wyczerpią się zasoby aInputBufLen lub aOutputBufLen (albo oba) przed ukończeniem transakcji przez główny interfejs dostawcy usług, wciąż musi być śledzić bieżący rozmiar transakcji, aby została przekazana do wywołania zwrotnego transakcji. Jeśli na przykład aInputBufLen ma wartość 10, a aOutputBufLen ma wartość 20, a główny interfejs SPI wyczyści 30 bajtów, wartość 30 jest przekazywana do wywołania zwrotnego transakcji w całości.

Jeśli wskaźnik NULL zostanie przekazany jako aOutputBuf lub aInputBuf, oznacza to, że ten wskaźnik nie powinien zmieniać swojej poprzedniej/bieżącej wartości. W tym przypadku odpowiedni argument długości powinien zostać zignorowany. Na przykład otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) zmienia wskaźnik bufora wejściowego i jego długość, ale zachowuje taki sam wskaźnik wyjściowy jak wcześniej.

Każde wywołanie tej funkcji w trakcie transakcji spowoduje, że wszystkie argumenty zostaną zignorowane, a zwracaną wartością będzie OT_ERROR_BUSY.

Szczegóły
Parametry
[in] aOutputBuf
Dane do zapisania do kodu PIN MISO
[in] aOutputBufLen
Rozmiar bufora wyjściowego w bajtach
[in] aInputBuf
Dane do odczytu z piny MOSI
[in] aInputBufLen
Rozmiar bufora wejściowego w bajtach
[in] aRequestTransactionFlag
Ustaw wartość „true”, jeśli powinno być ustawione przerwanie hosta
Zwracane wartości
OT_ERROR_NONE
Transakcja została przygotowana.
OT_ERROR_BUSY
Transakcja jest obecnie w toku.
OT_ERROR_INVALID_STATE
Nie wywołano funkcji otPlatSpiSlaveEnable().

Zasoby

Tematy referencyjne interfejsu OpenThread API pochodzą z kodu źródłowego dostępnego w GitHub. Aby dowiedzieć się więcej lub dołączyć do naszej dokumentacji, skorzystaj z sekcji Zasoby.