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)
|
typedefbool(*
Indica che una transazione SPI è stata completata con la lunghezza specificata. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
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 |
|
||||||||||||
| 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 |
|
||
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 |
|
||||||
| Valori restituiti |
|
||||||
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 |
|
||||||||||
| Valori restituiti |
|
||||||||||
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.