Element podrzędny SPI

Ten moduł zawiera abstrakcję platformy do komunikacji z elementami podrzędnymi SPI.

Podsumowanie

Typy

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

Funkcje

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

Typy

OTPlatSpiSlaveTransactionCompleteCall

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

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

Dane zapisane w podrzędnym urządzeniu podrzędnym są zapisywane w wskaźniku wskazanym przez argument aInputBuf przed poprzednim wywołaniem metody otPlatSpiSlavePrepareTransaction().

Po wywołaniu tej funkcji funkcja otPlatSpiSlavePrepareTransaction() jest nieprawidłowa i musi zostać wywołana ponownie, aby kolejna transakcja była poprawna.

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

Wywołanie zwrotne możesz wykonać w kontekście ISR. Zwracana wartość z tej funkcji wskazuje, czy konieczne jest dalsze przetwarzanie. W przypadku wywołania TRUE zwróconego w ramach platformy spislave sterownik musi wywołać wywołanie zwrotne procesu transakcji (aProcessCallback ustawione w otPlatSpiSlaveEnable()). W przeciwieństwie do tego wywołania zwrotnego musi być wywoływane to samo środowisko operacyjne, które jest wywoływane przez dowolny inny interfejs API/wywołanie zwrotne OpenThread.

Szczegóły
Parametry
[in] aContext
Wskaźnik kontekstowy 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 z ostatniego wywołania do otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Wartość aInputBufLen z ostatniego połączenia z otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Długość zakończonej transakcji w bajtach.
Zwroty
TRUE, jeśli po wysłaniu tego wywołania platforma powinna zwrócić wywołanie zwrotne procesu aProcessCallback, FALSE, jeśli nie ma nic do przetworzenia i nie trzeba wywoływać wywołania zwrotnego procesu.

Wywołanie zwrotne transakcji otPlatSpive SlaveTransactionProcess

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Wywoływana po zakończeniu wywołania zwrotnego transakcji i zwraca TRUE do dalszego przetworzenia.

W przeciwieństwie do otPlatSpiSlaveTransactionCompleteCallback, które można wywoływać z dowolnego kontekstu systemu operacyjnego (np. ISR).

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

Funkcje

Uniemożliwienie dostępu do interfejsu Chrome

void otPlatSpiSlaveDisable(
  void
)

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

OTPlatSpiSlaveWłącz

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

Zainicjuj interfejs podrzędny interfejsu SPI.

Pamiętaj, że moduł podrzędny SPI nie jest w pełni gotowy, dopóki transakcja nie zostanie przygotowana za pomocą otPlatSPISlavePrepareTransaction().

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

Szczegóły
Parametry
[in] aCompleteCallback
Wskaźnik do zainicjowania wywołania zwrotnego.
[in] aProcessCallback
Wskaźnik do przetworzenia wywołania zwrotnego.
[in] aContext
Wskaźnik kontekstowy, który ma być przekazywany do wywołań zwrotnych.
Zwracane wartości
OT_ERROR_NONE
Interfejs SPI Slave został włączony.
OT_ERROR_ALREADY
Interfejs aplikacji SPI Slave jest już włączony.
OT_ERROR_FAILED
Nie udało się włączyć interfejsu użytkownika SPI.

otPlatSpiSlavePrzygotowanie transakcji

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

Przygotuj dane do następnej transakcji SPI.

Wskaźniki danych MUSZĄ być ważne do chwili, gdy wywołanie zwrotne SPI zakończone przez transakcję w SPI Slave lub po następnym wywołaniu otPlatSpiSlavePrepareTransaction().

Tę funkcję można wywołać więcej niż raz, zanim transakcja SPI zostanie zainicjowana przez mastera. Każde wywołane wywołanie tej funkcji powoduje odrzucenie poprzednich wartości z poprzednich wywołań.

Niewywołanie tej funkcji po zakończeniu transakcji jest taka sama jak w przypadku, gdy wcześniej została wywołana z wartościami długości bufora ustawionymi na zero i wartością aRequestTransactionFlag ustawioną na false.

Po przekroczeniu limitu czasu aOutputBufLen bajtów (aOutputBuf) ustaw kod PIN MISO do czasu, aż master zakończy transakcję. Jest to funkcjonalny odpowiednik dopełnienia końca aOutputBuf o długości 0xFF bajtów do długości transakcji.

Po załadowaniu aInputBufLen bajtów z pliku AInputBuf z MOSI wszystkie pozostałe wartości z pinezki MOSI będą ignorowane, dopóki master SPI nie zakończy transakcji.

Pamiętaj, że nawet jeśli wyczerpią się wartości aInputBufLen lub aOutputBufLen (lub obie te wartości) przed zakończeniem transakcji przez główny wskaźnik SPI, bieżący rozmiar transakcji musi być zapisany na bieżąco, by można było przekazać ją do pełnego wywołania zwrotnego. Jeśli na przykład aInputBufLen jest równa 10, a aOutputBufLen równa się 20, a master SPI ma 30 bajtów, wartość 30 jest przekazywana do pełnego wywołania zwrotnego transakcji.

Jeśli wskaźnik NULL jest przekazywany jako aOutputBuf lub aInputBuf, oznacza to, że ten bufor nie powinien się zmieniać ze swojej poprzedniej/bieżącej wartości. W takim przypadku trzeba zignorować argument argumentu długości. Na przykład otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) zmienia wskaźnik bufora wejściowego i jego długość, ale zachowuje dotychczasowy wskaźnik bufora danych wyjściowych.

Każde wywołanie tej funkcji trwającej transakcji spowoduje zignorowanie wszystkich argumentów i zwracanie wartości OT_ERROR_BUSY.

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

Zasoby

Tematy referencyjne interfejsu API OpenThread pochodzą z kodu źródłowego i są dostępne w GitHub. Więcej informacji oraz dodatkowe informacje znajdziesz w materiałach.