SPI slave
Este módulo inclui a abstração da plataforma para comunicação de escravos SPI.
Resumo
Typedefs |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Indica que uma transação SPI foi concluída com o comprimento especificado. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Invocado após um callback completo de transação ser chamado e retorna TRUE para fazer qualquer outro processamento necessário. |
Functions |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Encerra e desativa a interface de SPI slave.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inicialize a interface de escravo SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Prepare os dados para a próxima transação do SPI.
|
Typedefs
OtPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Indica que uma transação SPI foi concluída com o comprimento especificado.
Os dados gravados no escravo foram gravados no ponteiro indicado pelo argumento aInputBuf
na chamada anterior para otPlatSpiSlavePrepareTransaction()
.
Quando essa função for chamada, otPlatSpiSlavePrepareTransaction()
será inválido e precisará ser chamado novamente para que a próxima transação seja válida.
Observe que essa função é sempre chamada no final de uma transação, mesmo que otPlatSpiSlavePrepareTransaction()
ainda não tenha sido chamado. Nesses casos, aOutputBufLen
e aInputBufLen
serão zero.
Esse callback pode ser chamado no contexto do ISR. O valor de retorno dessa função indica se algum processamento adicional é necessário. Se TRUE
for retornado, a implementação do driver escravo spi-pa da plataforma precisará invocar o callback do processo de transações (aProcessCallback
definido em otPlatSpiSlaveEnable()
), que, diferentemente desse callback, precisa ser chamado no mesmo contexto do SO que qualquer outro callback/API OpenThread seja chamado.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Retorna |
TRUE se, depois dessa chamada de retorno, a plataforma invocar o callback do processo
aProcessCallback , FALSE se não houver nada para processar e não for necessário invocar o callback do processo. |
OtPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Invocado após um callback completo de transação ser chamado e retorna TRUE
para fazer qualquer outro processamento necessário.
Ao contrário de otPlatSpiSlaveTransactionCompleteCallback
, que pode ser chamado em qualquer contexto do SO (por exemplo, ISR), esse callback PRECISA ser chamado a partir do mesmo contexto de SO que qualquer outra API/callback do OpenThread.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
Functions
OtPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Encerra e desativa a interface de SPI slave.
OtPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicialize a interface de escravo SPI.
O escravo SPI não estará totalmente pronto até que uma transação seja preparada usando otPlatSPISlavePrepareTransaction()
.
Se otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` e descartar todos os bytes recebidos.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Valores de retorno |
|
OtPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Prepare os dados para a próxima transação do SPI.
Os ponteiros de dados PRECISAM permanecer válidos até que o callback de transação concluído seja chamado pelo driver escravo do SPI ou até a próxima chamada para otPlatSpiSlavePrepareTransaction()
.
Essa função pode ser chamada mais de uma vez antes que o mestre do SPI inicie a transação. Cada chamada bem-sucedida a esta função fará com que os valores anteriores de chamadas anteriores sejam descartados.
Não chamar essa função após uma transação concluída é como se ela tivesse sido chamada anteriormente com os comprimentos do buffer definidos como zero e aRequestTransactionFlag
definido como false
.
Depois que os aOutputBufLen
bytes de aOutputBuf
forem esgotados, o pino MISO será definido como alto até que o mestre termine a transação do SPI. Esse é o equivalente funcional do preenchimento do fim de aOutputBuf
com 0xFF
bytes até a duração da transação.
Depois que aInputBufLen
bytes de aInputBuf forem transferidos do relógio de MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o mestre do SPI conclua a transação.
Observe que, mesmo que aInputBufLen
ou aOutputBufLen
(ou ambos) se esgotem antes que o mestre da SPI conclua uma transação, o tamanho contínuo da transação ainda precisa ser rastreado para ser transmitido para o retorno de chamada completo da transação. Por exemplo, se aInputBufLen
for igual a 10 e aOutputBufLen
for igual a 20 e o mestre do SPI registrar um tempo limite de 30 bytes, o valor 30 será transmitido para a chamada de retorno de transação concluída.
Se um ponteiro de NULL
for transmitido como aOutputBuf
ou aInputBuf
, isso significa que esse ponteiro de buffer não mudará do valor anterior/atual. Nesse caso, o argumento de tamanho correspondente precisa ser ignorado. Por exemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
altera o ponteiro do buffer de entrada e seu comprimento, mas mantém o ponteiro do buffer de saída como antes.
Qualquer chamada para essa função enquanto uma transação estiver em andamento fará com que todos os argumentos sejam ignorados e o valor de retorno seja OT_ERROR_BUSY
.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||
Valores de retorno |
|
Recursos
Os tópicos de referência da API OpenThread são originados do código-fonte, disponível no GitHub. Para saber mais ou contribuir com nossa documentação, consulte Recursos.