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

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

Details
Parameter
[in] aCompleteCallback
Zeiger auf den abgeschlossenen Callback der Transaktion.
[in] aProcessCallback
Zeiger zur Verarbeitung 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
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.

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
[in] aOutputBuf
Daten, die in die MISO-PIN geschrieben werden sollen
[in] aOutputBufLen
Größe des Ausgabepuffers in Byte
[in] aInputBuf
Von MOSI-PIN gelesene Daten
[in] aInputBufLen
Größe des Eingabezwischenspeichers in Byte
[in] aRequestTransactionFlag
Wird auf „true“ gesetzt, wenn eine Hostunterbrechung festgelegt werden soll
Rückgabewerte
OT_ERROR_NONE
Die Transaktion wurde vorbereitet.
OT_ERROR_BUSY
Eine Transaktion wird gerade ausgeführt.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() wurde aufgerufen.

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.