SPI (Slave)
Questo modulo include l'astrazione della piattaforma per la comunicazione con lo slave SPI.
Riepilogo
Defdef |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
tipodefbool(*
Indica che una transazione SPI è stata completata con la durata specificata. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
tipodefvoid(*
Richiamato dopo che viene richiamata una transazione completata; restituisce TRUE per eseguire le ulteriori elaborazioni richieste. |
Functions |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Arresta e disattiva l'interfaccia Slave SPI.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inizializzare l'interfaccia dello 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.
|
Defdef
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 durata specificata.
I dati scritti allo slave sono stati scritti nel puntatore indicato dall'argomento aInputBuf
nella chiamata precedente a otPlatSpiSlavePrepareTransaction()
.
Una volta chiamata questa funzione, otPlatSpiSlavePrepareTransaction()
non è valido e deve essere chiamato di nuovo affinché la transazione successiva sia valida.
Tieni presente che questa funzione viene sempre chiamata alla fine di una transazione, anche se otPlatSpiSlavePrepareTransaction()
non è stato ancora chiamato. In questi casi, aOutputBufLen
e aInputBufLen
saranno pari a zero.
Questa richiamata può essere chiamata dal contesto ISR. Il valore restituito da questa funzione indica se sono necessarie ulteriori elaborazioni. 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 utilizzato per le altre chiamate OpenAPI.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Restituisce |
TRUE se dopo questa chiamata restituisce la piattaforma, deve richiamare il callback di processo
aProcessCallback , FALSE se non c'è nulla da elaborare e non è necessario richiamare il callback di processo. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Richiamato dopo che viene richiamata una transazione completata; restituisce TRUE
per eseguire le ulteriori elaborazioni richieste.
A differenza di otPlatSpiSlaveTransactionCompleteCallback
, che può essere chiamato 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 |
|
Functions
Disattiva otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Arresta e disattiva l'interfaccia Slave SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inizializzare l'interfaccia dello 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 all
0xFF` byte ignora tutti i byte ricevuti.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori di ritorno |
|
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 di dati DEVONO rimanere validi finché il driver dello slave SPI non chiama il callback di transazione completo o fino a dopo la chiamata successiva a otPlatSpiSlavePrepareTransaction()
.
Questa funzione può essere chiamata più di una volta prima che il master SPI avvii la transazione. Ogni chiamata riuscita a questa funzione comporterà l'eliminazione dei valori precedenti delle chiamate precedenti.
La chiamata a questa funzione dopo una transazione completata non cambia come se questa funzione fosse stata precedentemente chiamata con entrambe le lunghezze del buffer impostata su zero e aRequestTransactionFlag
impostato su false
.
Una volta che aOutputBufLen
byte di aOutputBuf
sono stati trascorsi, il PIN MISO deve essere impostato su un valore alto fino al completamento della transazione SPI da parte del master. Si tratta dell'equivalente funzionale alla spaziatura interna di aOutputBuf
con 0xFF
byte per la durata della transazione.
Dopo che aInputBufLen
byte di aInputBuf sono stati inseriti da MOSI, tutti i valori successivi del PIN MOSI vengono ignorati fino a quando il master SPI non completa la transazione.
Tieni presente che, anche se le credenziali di aInputBufLen
o aOutputBufLen
(o entrambe) sono esaurite prima che l'SPI master completi una transazione, è comunque necessario monitorare le dimensioni continue della transazione per poter essere trasferite al callback di transazione completata. Ad esempio, se aInputBufLen
è uguale a 10 e aOutputBufLen
è uguale a 20 e il master SPI conta i 30 byte, il valore 30 viene passato al callback completo della transazione.
Se un puntatore NULL
viene passato come aOutputBuf
o aInputBuf
, significa che il puntatore del buffer non deve cambiare rispetto al valore precedente o corrente. In questo caso, l'argomento relativo alla lunghezza 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 come in precedenza.
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 |
|
||||||||||
Valori di ritorno |
|
Risorse
Gli argomenti di riferimento per l'API OpenThread provengono dal codice sorgente, disponibile su GitHub. Per ulteriori informazioni o per contribuire alla nostra documentazione, consulta la sezione Risorse.