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) typedef
bool(*
Gibt an, dass eine SPI-Transaktion mit der angegebenen Länge abgeschlossen wurde.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
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
[in] aContext
Kontextzeiger, der an otPlatSpiSlaveEnable() übergeben wird.
[in] aOutputBuf
Wert von aOutputBuf seit dem letzten Aufruf bei otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Wert von aOutputBufLen seit dem letzten Aufruf bei otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Wert von aInputBuf vom letzten Aufruf an otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Wert von aInputBufLen seit dem letzten Aufruf an otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Länge der abgeschlossenen Transaktion in Byte.
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
[in] aContext
Kontextzeiger, der an otPlatSpiSlaveEnable() übergeben wird.

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 all0xFF` Byte und alle empfangenen Byte verworfen werden.

Details
Parameter
[in] aCompleteCallback
Zeiger auf einen Callback für den Transaktionsabschluss.
[in] aProcessCallback
Zeiger zum Verarbeiten des Callbacks.
[in] aContext
Kontextzeiger, der an Callbacks übergeben wird.
Rückgabewerte
OT_ERROR_NONE
Die SPI-Slave-Schnittstelle wurde aktiviert.
OT_ERROR_ALREADY
SPI-Slave-Schnittstelle ist bereits aktiviert.
OT_ERROR_FAILED
Die SPI-Slave-Schnittstelle konnte nicht aktiviert werden.

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
[in] aOutputBuf
An MISO-PIN zu schreibende Daten
[in] aOutputBufLen
Größe des Ausgabepuffers in Byte
[in] aInputBuf
Von MOSI-PIN zu lesende Daten
[in] aInputBufLen
Größe des Eingabepuffers in Byte
[in] aRequestTransactionFlag
Geben Sie „true“ an, wenn eine Host-Unterbrechung festgelegt werden soll.
Rückgabewerte
OT_ERROR_NONE
Transaktion wurde vorbereitet.
OT_ERROR_BUSY
Eine Transaktion wird gerade ausgeführt.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() nicht aufgerufen wurde.

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.