SPI-Slave
Dieses Modul enthält die Plattformabstraktion für die SPI-Slave-Kommunikation.
Zusammenfassung
Typedefs |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Gibt an, dass eine SPI-Transaktion mit der angegebenen Länge abgeschlossen wurde. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Wird aufgerufen, nachdem ein Callback zum Abschluss der Transaktion aufgerufen wurde, und gibt TRUE zurück, um alle erforderlichen weiteren Verarbeitungen durchzuführen. |
Funktionen |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Fahren Sie die SPI-Slave-Schnittstelle herunter und deaktivieren Sie sie.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Initialisieren der SPI-Slave-Schnittstelle.
|
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.
|
Typedefs
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 wurde.
Die in den Slave geschriebenen Daten wurden in den Zeiger geschrieben, der durch das Argument aInputBuf
für den vorherigen Aufruf von otPlatSpiSlavePrepareTransaction()
angegeben wurde.
Nach dem Aufruf dieser Funktion ist otPlatSpiSlavePrepareTransaction()
ungültig und muss noch einmal aufgerufen werden, damit die nächste Transaktion gültig ist.
Beachten Sie, dass diese Funktion immer am Ende einer Transaktion aufgerufen wird, 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 Implementierung des Plattform-Spitz-Slave-Treibers den Callback des Transaktionsprozesses aufrufen (aProcessCallback
ist in otPlatSpiSlaveEnable()
festgelegt). Dieser Callback muss im Gegensatz zu diesem Callback aus demselben Betriebssystemkontext aufgerufen werden, in dem jede andere OpenThread API bzw. jeder andere OpenThread-API-Callback aufgerufen wird.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabe |
TRUE, wenn die Plattform nach diesem Aufruf den Prozess-Callback
aProcessCallback aufrufen soll, FALSE, wenn nichts zu verarbeiten ist und der Prozess-Callback nicht aufgerufen werden muss. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Wird aufgerufen, nachdem ein Callback zum Abschluss der Transaktion aufgerufen wurde, und gibt TRUE
zurück, um alle erforderlichen weiteren Verarbeitungen durchzuführen.
Im Gegensatz zu otPlatSpiSlaveTransactionCompleteCallback
, das aus jedem Betriebssystemkontext (z.B. ISR), MUSS dieser Callback aus demselben Betriebssystemkontext aufgerufen werden wie jedes andere OpenThread-API/-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 der SPI-Slave-Schnittstelle.
Der SPI-Slave ist erst vollständig bereit, wenn eine Transaktion mit otPlatSPISlavePrepareTransaction()
vorbereitet wird.
Wenn otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` Byte 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.
Datenzeiger MÜSSEN gültig bleiben, bis der Callback zum Abschluss der Transaktion vom SPI-Slave-Treiber oder nach dem nächsten Aufruf von otPlatSpiSlavePrepareTransaction()
aufgerufen wird.
Kann mehrmals aufgerufen werden, bevor der SPI-Master die Transaktion initiiert. Jeder erfolgreiche Aufruf dieser Funktion führt dazu, dass die vorherigen Werte aus früheren Aufrufen verworfen werden.
Wenn diese Funktion nach einer abgeschlossenen Transaktion nicht aufgerufen wird, bedeutet dies, dass diese Funktion zuvor aufgerufen wurde, wobei sowohl die Pufferlänge auf null als auch aRequestTransactionFlag
auf false
gesetzt wurde.
Nachdem aOutputBufLen
Byte von aOutputBuf
ausgegeben wurden, wird die MISO-PIN auf einen hohen Wert gesetzt, bis der Master die SPI-Transaktion abschließt. Dies ist das funktionale Äquivalent zum Auffüllen des Endes von aOutputBuf
mit 0xFF
Byte auf die Länge der Transaktion.
Sobald aInputBufLen
Byte von aInputBuf aus MOSI getaktet sind, werden alle nachfolgenden Werte aus dem MOSI-Pin ignoriert, bis der SPI-Master die Transaktion abgeschlossen hat.
Selbst wenn aInputBufLen
oder aOutputBufLen
(oder beide) ausgeschöpft sind, bevor der SPI-Master eine Transaktion abschließt, muss die laufende Größe der Transaktion weiterhin erfasst werden, um an den Callback für den Transaktionsabschluss übergeben zu werden. Wenn beispielsweise aInputBufLen
gleich 10 und aOutputBufLen
gleich 20 ist und der SPI-Master 30 Byte ausgibt, wird der Wert 30 an den Callback für den Transaktionsabschluss übergeben.
Wenn ein NULL
-Zeiger als aOutputBuf
oder aInputBuf
übergeben wird, bedeutet dies, dass sich dieser Pufferzeiger gegenüber seinem vorherigen/aktuellen Wert nicht ändern sollte. In diesem Fall sollte das entsprechende Längenargument ignoriert werden. Beispiel: otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
ändert den Eingabepufferzeiger und seine Länge, behält den Ausgabepufferzeiger jedoch wie zuvor bei.
Jeder Aufruf dieser Funktion während der Ausführung einer Transaktion führt dazu, dass alle Argumente ignoriert werden und der Rückgabewert OT_ERROR_BUSY
ist.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
Ressourcen
OpenThread API-Referenzthemen stammen aus dem Quellcode, der auf GitHub verfügbar ist. Weitere Informationen finden Sie unter Ressourcen. Dort können Sie auch einen Beitrag zu unserer Dokumentation leisten.