Schiavo SPI

Questo modulo include l'astrazione della piattaforma per la comunicazione SPI slave.

Riepilogo

Typedef

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Indica che una transazione SPI è stata completata con la lunghezza specificata.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Richiamato dopo la chiamata di un callback di completamento della transazione e restituisce TRUE per eseguire eventuali ulteriori elaborazioni.

Funzioni

otPlatSpiSlaveDisable(void)
void
Arresta e disabilita l'interfaccia SPI slave.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Inizializzare l'interfaccia slave SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Prepara i dati per la prossima transazione SPI.

Typedef

otPlatSpiSlaveTransactionCompleteCallback

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

Indica che una transazione SPI è stata completata con la lunghezza specificata.

I dati scritti nello slave sono stati scritti nel puntatore indicato dall'argomento aInputBuf alla chiamata precedente a otPlatSpiSlavePrepareTransaction().

Una volta chiamata questa funzione, otPlatSpiSlavePrepareTransaction() non è valido e deve essere richiamato affinché la transazione successiva sia valida.

Tieni presente che questa funzione viene sempre chiamata al termine di una transazione, anche se otPlatSpiSlavePrepareTransaction() non è stato ancora chiamato. In questi casi, aOutputBufLen e aInputBufLen saranno pari a zero.

Questo callback può essere chiamato dal contesto ISR. Il valore restituito da questa funzione indica se è necessaria un'ulteriore elaborazione. Se viene restituito TRUE, l'implementazione del driver spi-slave della piattaforma deve richiamare il callback del processo di transazione (aProcessCallback impostato in otPlatSpiSlaveEnable()), che, a differenza di questo callback, deve essere chiamato dallo stesso contesto del sistema operativo che viene chiamato da qualsiasi altra API/callback OpenThread.

Dettagli
Parametri
[in] aContext
Puntatore di contesto passato a otPlatSpiSlaveEnable().
[in] aOutputBuf
Valore di aOutputBuf dall'ultima chiamata a otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valore di aOutputBufLen dall'ultima chiamata a otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valore di aInputBuf dall'ultima chiamata a otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valore di aInputBufLen dall'ultima chiamata a otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Lunghezza della transazione completata, in byte.
Restituisce
TRUE se, dopo la restituzione di questa chiamata, la piattaforma deve richiamare il callback di processo aProcessCallback, FALSE se non c'è nulla da elaborare e non è necessario richiamare il callback del processo.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Richiamato dopo la chiamata di un callback di completamento della transazione e restituisce TRUE per eseguire eventuali ulteriori elaborazioni.

A differenza di otPlatSpiSlaveTransactionCompleteCallback, che può essere chiamata da qualsiasi contesto del sistema operativo (ad es. ISR), questo callback DEVE essere chiamato dallo stesso contesto del sistema operativo di qualsiasi altra API/callback OpenThread.

Dettagli
Parametri
[in] aContext
Puntatore di contesto passato a otPlatSpiSlaveEnable().

Funzioni

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Arresta e disabilita l'interfaccia SPI slave.

otPlatSpiSlaveEnable

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

Inizializzare l'interfaccia slave SPI.

Tieni presente che lo slave SPI non è completamente pronto finché non viene preparata una transazione utilizzando otPlatSPISlavePrepareTransaction().

Se otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF" byte ed elimina tutti i byte ricevuti.

Dettagli
Parametri
[in] aCompleteCallback
Puntatore al callback di completamento della transazione.
[in] aProcessCallback
Puntatore per elaborare il callback.
[in] aContext
Puntatore di contesto da passare ai callback.
Valori restituiti
OT_ERROR_NONE
Attivazione dell'interfaccia SPI slave riuscita.
OT_ERROR_ALREADY
L'interfaccia SPI slave è già abilitata.
OT_ERROR_FAILED
Impossibile abilitare l'interfaccia SPI slave.

otPlatSpiSlavePrepareTransaction

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

Prepara i dati per la prossima transazione SPI.

I puntatori ai dati DEVONO rimanere validi fino a quando il callback di completamento della transazione non viene chiamato dal driver slave SPI o fino alla successiva chiamata a otPlatSpiSlavePrepareTransaction().

Può essere chiamato più di una volta prima che il master SPI avvii la transazione. Ogni chiamata successiva a questa funzione causerà l'eliminazione dei valori precedenti delle chiamate precedenti.

Non chiamare questa funzione dopo una transazione completata è come se questa funzione fosse stata chiamata in precedenza con entrambe le lunghezze del buffer impostate su zero e aRequestTransactionFlag impostata su false.

Una volta terminati aOutputBufLen byte di aOutputBuf, il pin MISO deve essere impostato su un valore superiore fino al completamento della transazione SPI da parte del master. Questo è l'equivalente funzionale della spaziatura interna alla fine di aOutputBuf con 0xFF byte fino alla lunghezza della transazione.

Una volta che i aInputBufLen byte di aInputBuf sono stati sincronizzati da MOSI, tutti i valori successivi dal pin MOSI vengono ignorati fino a quando il master SPI non completa la transazione.

Tieni presente che, anche se aInputBufLen o aOutputBufLen (o entrambi) vengono esauriti prima che l'SPI master termini una transazione, è necessario tenere traccia della dimensione in corso della transazione per poter passare al callback di completamento della transazione. Ad esempio, se aInputBufLen è uguale a 10 e aOutputBufLen è uguale a 20 e il master SPI effettua il clock di 30 byte, il valore 30 viene passato al callback di completamento della transazione.

Se un puntatore NULL viene passato come aOutputBuf o aInputBuf, significa che il puntatore del buffer non dovrebbe cambiare rispetto al suo valore precedente/attuale. In questo caso, l'argomento length corrispondente deve essere ignorato. Ad esempio, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) modifica il puntatore del buffer di input e la sua lunghezza, ma mantiene il puntatore del buffer di output uguale a prima.

Qualsiasi chiamata a questa funzione mentre è in corso una transazione farà sì che tutti gli argomenti vengano ignorati e il valore restituito sia OT_ERROR_BUSY.

Dettagli
Parametri
[in] aOutputBuf
Dati da scrivere sul PIN MISO
[in] aOutputBufLen
Dimensione del buffer di output, in byte
[in] aInputBuf
Dati da leggere dal pin MOSI
[in] aInputBufLen
Dimensione del buffer di input, in byte
[in] aRequestTransactionFlag
Imposta il valore su true se è necessario impostare l'interruzione dell'host
Valori restituiti
OT_ERROR_NONE
Transazione preparata correttamente.
OT_ERROR_BUSY
È attualmente in corso una transazione.
OT_ERROR_INVALID_STATE
La funzione otPlatSpiSlaveEnable() non è stata chiamata.

Risorse

Gli argomenti di riferimento dell'API OpenThread provengono dal codice sorgente, disponibile su GitHub. Per saperne di più o per contribuire alla nostra documentazione, consulta la sezione Risorse.