Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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) tipodef
bool(*
Indica che una transazione SPI è stata completata con la durata specificata.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) tipodef
void(*
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
[in] aContext
puntatore del contesto passato in 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
La lunghezza in byte della transazione completata.
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
[in] aContext
puntatore del contesto passato in otPlatSpiSlaveEnable().

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 all0xFF` byte ignora tutti i byte ricevuti.

Dettagli
Parametri
[in] aCompleteCallback
Puntatore alla richiamata completa della transazione.
[in] aProcessCallback
Puntatore per l'elaborazione del callback.
[in] aContext
Puntatore contesto da trasmettere ai callback.
Valori di ritorno
OT_ERROR_NONE
Attivazione dell'interfaccia SPIve 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 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
[in] aOutputBuf
Dati da scrivere nel 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
Impostato su vero se è necessario impostare un'interruzione host
Valori di ritorno
OT_ERROR_NONE
La transazione è stata preparata.
OT_ERROR_BUSY
È attualmente in corso una transazione.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() non è stato chiamato.

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.