SPI-Sklave
Dieses Modul enthält die Plattformabstraktion für die Kommunikation mit dem SPI-Slave.
Fazit
Typdef. |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
Typdefbool(*
Gibt an, dass eine SPI-Transaktion mit der angegebenen Länge abgeschlossen ist. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
Typdefvoid(*
Wird aufgerufen, nachdem ein Callback für die Transaktion aufgerufen wurde, und TRUE zurückgegeben, um die weitere Verarbeitung auszuführen. |
Funktionen |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Fahren Sie die SPI-Slave-Schnittstelle herunter und deaktivieren Sie sie.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Initialisieren Sie die Schnittstelle „SPI-Slave“.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Bereiten Sie Daten für die nächste SPI-Transaktion vor.
|
Typdef.
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Gibt an, dass eine SPI-Transaktion mit der angegebenen Länge abgeschlossen ist.
Die an den Slave geschriebenen Daten wurden in den Zeiger geschrieben, der durch das aInputBuf
-Argument für den vorherigen Aufruf von otPlatSpiSlavePrepareTransaction()
angegeben wurde.
Die Funktion otPlatSpiSlavePrepareTransaction()
ist ungültig und muss wieder aufgerufen werden, damit die nächste Transaktion gültig ist.
Diese Funktion wird immer am Ende einer Transaktion aufgerufen, auch wenn otPlatSpiSlavePrepareTransaction()
noch nicht aufgerufen wurde. In solchen Fällen sind aOutputBufLen
und aInputBufLen
null.
Dieser Callback kann aus dem ISR-Kontext aufgerufen werden. Der Rückgabewert dieser Funktion gibt an, ob eine weitere Verarbeitung erforderlich ist. Wenn TRUE
zurückgegeben wird, muss die Spi-Slave-Treiberimplementierung der Plattform den Callback für den Transaktionsprozess aufrufen (aProcessCallback
, der in otPlatSpiSlaveEnable()
festgelegt wurde). Dieser Callback muss im selben Betriebssystemkontext aufgerufen werden wie alle anderen OpenThread APIs oder Callbacks.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabe |
WAHR, wenn die Plattform nach diesem Aufruf den Prozess-Callback
aProcessCallback aufruft, FALSCH, wenn nichts zu verarbeiten ist und der Prozess-Callback nicht aufgerufen werden muss. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Wird aufgerufen, nachdem ein Callback für die Transaktion aufgerufen wurde, und TRUE
zurückgegeben, um die weitere Verarbeitung auszuführen.
Im Gegensatz zu otPlatSpiSlaveTransactionCompleteCallback
, das aus jedem Betriebssystemkontext aufgerufen werden kann (z.B. ISR) muss dieser Callback aus demselben Betriebssystemkontext aufgerufen werden wie ein anderer OpenThread API oder Callback.
Details | |||
---|---|---|---|
Parameter |
|
Funktionen
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Fahren Sie die SPI-Slave-Schnittstelle herunter und deaktivieren Sie sie.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Initialisieren Sie die Schnittstelle „SPI-Slave“.
Der SPI-Slave ist nicht vollständig bereit, bis eine Transaktion mithilfe von otPlatSPISlavePrepareTransaction()
vorbereitet wurde.
Wenn otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` Byte groß sind und alle empfangenen Byte verworfen werden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Bereiten Sie Daten für die nächste SPI-Transaktion vor.
Datenverweise MÜSSEN gültig sein, bis der Callback der Transaktion vom SPI-Slave-Treiber aufgerufen wird, oder bis zum nächsten Aufruf von otPlatSpiSlavePrepareTransaction()
.
Diese Funktion kann mehr als einmal aufgerufen werden, bevor die Transaktion vom SPI-Master initiiert wird. Bei jedem erfolgreichen Aufruf dieser Funktion werden die vorherigen Werte aus früheren Aufrufen verworfen.
Wenn diese Funktion nach einer abgeschlossenen Transaktion nicht aufgerufen wird, ist dies der Fall, wenn die Funktion zuvor aufgerufen wurde, beide Pufferlängen auf null und aRequestTransactionFlag
auf false
festgelegt waren.
Nachdem das aOutputBufLen
-Byte von aOutputBuf
abgelaufen ist, wird die MISO-PIN hochgestellt, bis die Master-SPI-Transaktion auf dem Master abgeschlossen wird. Das ist die funktionale Entsprechung, d. h., das Ende von aOutputBuf
mit 0xFF
Bytes wird auf die Länge der Transaktion angerechnet.
Sobald aInputBufLen
Byte von aInputBuf von MOSI aus synchronisiert wurden, werden alle nachfolgenden Werte vom MOSI-Pin ignoriert, bis der SPI-Master die Transaktion beendet.
Hinweis: Auch wenn aInputBufLen
oder aOutputBufLen
(oder beides) vor Abschluss des Transaktionen des SPI-Masters aufgebraucht ist, muss die laufende Größe der Transaktion beibehalten werden, damit sie an den Callback der Transaktion übergeben wird. Wenn aInputBufLen
beispielsweise gleich 10 und aOutputBufLen
gleich 20 ist und der SPI-Master 30 Byte ausgibt, wird der Wert 30 an den Callback für die abgeschlossene Transaktion übergeben.
Wenn ein NULL
-Zeiger als aOutputBuf
oder aInputBuf
übergeben wird, darf der Zwischenspeicher nicht seinen vorherigen/aktuellen Wert ändern. In diesem Fall sollte das entsprechende Längenargument ignoriert werden. otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
ändert beispielsweise den Puffer des Eingabezwischenspeichers und seine Länge, behält aber den ursprünglichen Pufferzeiger bei.
Bei einem beliebigen Aufruf dieser Funktion während einer Transaktion werden alle Argumente ignoriert und der Rückgabewert OT_ERROR_BUSY
.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
Ressourcen
Die Themen der Referenzthread API basieren auf dem Quellcode, der auf GitHub verfügbar ist. Weitere Informationen sowie die Möglichkeit, in unserer Dokumentation mitzuwirken, finden Sie unter Ressourcen.