SPI Slave
Este módulo inclui a abstração da plataforma para comunicação do escravo 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 fornecido. |
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) | typedefvoid(* Invocado depois que um retorno de chamada de conclusão de transação é chamado e retorna TRUE para fazer qualquer processamento adicional necessário. |
Funções | |
---|---|
otPlatSpiSlaveDisable (void) | void Desligue e desative a interface do escravo SPI. |
otPlatSpiSlaveEnable (otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext) | Inicialize a interface do 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 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 fornecido.
Os dados gravados no escravo foram gravados no ponteiro indicado pelo argumento aInputBuf
para a chamada anterior de otPlatSpiSlavePrepareTransaction()
.
Assim que esta função é chamada, otPlatSpiSlavePrepareTransaction()
é inválido e deve ser chamado novamente para que a próxima transação seja válida.
Observe que esta função é sempre chamada no final de uma transação, mesmo se otPlatSpiSlavePrepareTransaction()
ainda não tiver sido chamado. Nesses casos, aOutputBufLen
e aInputBufLen
serão zero.
Este retorno de chamada pode ser chamado a partir do contexto ISR. O valor de retorno desta função indica se algum processamento adicional é necessário. Se TRUE
for retornado, a implementação do driver spi-slave da plataforma deve invocar o retorno de chamada do processo de transação ( aProcessCallback
definido em otPlatSpiSlaveEnable()
) que, ao contrário deste retorno de chamada, deve ser chamado a partir do mesmo contexto do sistema operacional em que qualquer outra API / retorno de chamada OpenThread é chamado.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||
Devoluções | TRUE se após esta chamada retornar a plataforma deve invocar o callback do processo aProcessCallback , FALSE se não houver nada para processar e não há necessidade de invocar o callback do processo. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Invocado depois que um retorno de chamada de conclusão de transação é chamado e retorna TRUE
para fazer qualquer processamento adicional necessário.
Ao contrário de otPlatSpiSlaveTransactionCompleteCallback
que pode ser chamado de qualquer contexto do sistema operacional (por exemplo, ISR), esse retorno de chamada DEVE ser chamado do mesmo contexto do sistema operacional que qualquer outra API / retorno de chamada OpenThread.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
Funções
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Desligue e desative a interface do escravo SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicialize a interface do escravo SPI.
Observe que o escravo SPI não está 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
bytes 0xFF` e descartará todos os bytes recebidos.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||
Valores Retornados |
|
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 SPI.
Os ponteiros de dados DEVEM permanecer válidos até que o retorno de chamada completo da transação seja chamado pelo driver escravo SPI ou até depois da próxima chamada para otPlatSpiSlavePrepareTransaction()
.
Esta função pode ser chamada mais de uma vez antes que o mestre SPI inicie a transação. Cada chamada bem-sucedida para esta função fará com que os valores anteriores das chamadas anteriores sejam descartados.
Não chamar esta função após uma transação concluída é o mesmo que se esta função fosse chamada anteriormente com ambos os comprimentos de buffer definidos como zero e aRequestTransactionFlag
definido como false
.
Uma vez que aOutputBufLen
bytes de aOutputBuf
foi cronometrado, o pino MISO deve ser definido alto até que o mestre termine a transação SPI. Isso é o equivalente funcional de preencher o final de aOutputBuf
com bytes 0xFF
até o comprimento da transação.
Depois que os bytes aInputBufLen
de aInputBuf tiverem sido sincronizados a partir do MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o mestre SPI termine a transação.
Observe que mesmo se aInputBufLen
ou aOutputBufLen
(ou ambos) forem esgotados antes que o mestre SPI conclua uma transação, o tamanho em andamento da transação ainda deve ser monitorado para ser passado para o retorno de chamada completo da transação. Por exemplo, se aInputBufLen
for igual a 10 e aOutputBufLen
igual a 20 e o mestre SPI aOutputBufLen
30 bytes, o valor 30 será passado para o callback completo da transação.
Se um ponteiro NULL
for passado como aOutputBuf
ou aInputBuf
isso significa que esse ponteiro de buffer não deve mudar de seu valor anterior / atual. Nesse caso, o argumento de comprimento correspondente deve 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 igual ao anterior.
Qualquer chamada para esta função enquanto uma transação está em andamento fará com que todos os argumentos sejam ignorados e o valor de retorno seja OT_ERROR_BUSY
.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||
Valores Retornados |
|