SPI subordinado

Este módulo inclui a abstração da plataforma para comunicação escravo do SPI.

Resumo

Typedefs

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Indica que uma transação SPI foi concluída com o tamanho especificado.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE para fazer qualquer processamento adicional necessário.

remotas

otPlatSpiSlaveDisable(void)
void
Encerre e desative a interface subordinada do SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Inicializar a interface subordinada do SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Preparar 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 tamanho especificado.

Os dados gravados no escravo foram gravados no ponteiro indicado pelo argumento aInputBuf na chamada anterior para otPlatSpiSlavePrepareTransaction().

Depois que essa função é chamada, otPlatSpiSlavePrepareTransaction() é inválido e precisa 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.

É possível chamar esse callback no contexto de 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 da plataforma precisará invocar o callback do processo de transação (aProcessCallback definido em otPlatSpiSlaveEnable()). Ao contrário desse callback, ele precisará ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread é chamado.

Detalhes
Parâmetros
[in] aContext
Ponteiro de contexto transmitido para otPlatSpiSlaveEnable().
[in] aOutputBuf
Valor de aOutputBuf desde a última chamada para otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valor de aOutputBufLen desde a última chamada para otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valor de aInputBuf da última chamada para otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valor de aInputBufLen da última chamada para otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Tamanho da transação concluída, em bytes.
Retorna
TRUE se, depois da chamada, a plataforma retornar o callback do processo aProcessCallback, e FALSE se não houver nada a ser processado e a necessidade de invocar o callback do processo.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE para fazer qualquer processamento adicional necessário.

Ao contrário de otPlatSpiSlaveTransactionCompleteCallback, que pode ser chamado em qualquer contexto do SO (por exemplo, ISR), esse callback PRECISA ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread.

Detalhes
Parâmetros
[in] aContext
Ponteiro de contexto transmitido para otPlatSpiSlaveEnable().

remotas

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Encerre e desative a interface subordinada do SPI.

otPlatSpiSlaveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

Inicializar a interface subordinada do SPI.

O SPI subordinado 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 all0xFF` bytes e descartar todos os bytes recebidos.

Detalhes
Parâmetros
[in] aCompleteCallback
Ponteiro para o callback de conclusão da transação.
[in] aProcessCallback
Ponteiro para processar o callback.
[in] aContext
Ponteiro de contexto a ser transmitido para callbacks.
Valores de retorno
OT_ERROR_NONE
A interface SPI Slave foi ativada.
OT_ERROR_ALREADY
A interface SPI Slave já está ativada.
OT_ERROR_FAILED
Falha ao ativar a interface SPI Slave.

otPlatSpiSlavePrepareTransaction

otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

Preparar dados para a próxima transação do SPI.

Os ponteiros de dados PRECISAM permanecer válidos até que o callback de conclusão da transação seja chamado pelo driver escravo do SPI ou até a próxima chamada para otPlatSpiSlavePrepareTransaction().

Pode ser chamado mais de uma vez antes de o mestre do SPI iniciar a transação. Cada chamada bem-sucedida para essa função fará com que os valores anteriores das chamadas anteriores sejam descartados.

Não chamar essa função após a conclusão de uma transação é o mesmo que se ela tivesse sido chamada anteriormente com os comprimentos de buffer definidos como zero e aRequestTransactionFlag definido como false.

Depois que o tempo limite de aOutputBufLen bytes de aOutputBuf for atingido, o alfinete do MISO será definido como alto até que o mestre conclua a transação do SPI. Esse é o equivalente funcional ao preenchimento do final de aOutputBuf com 0xFF bytes até a duração da transação.

Depois que aInputBufLen bytes de aInputBuf tiverem sido processados usando o MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o SPI mestre conclua a transação.

Mesmo que aInputBufLen, aOutputBufLen (ou ambos) sejam esgotados antes que o mestre do SPI conclua uma transação, o tamanho em andamento da transação ainda precisa ser mantido para ser transmitido para o retorno de chamada de conclusão da transação. Por exemplo, se aInputBufLen for igual a 10 e aOutputBufLen for igual a 20 e o mestre do SPI atingir 30 bytes, o valor 30 será transmitido para o callback de conclusão da transação.

Se um ponteiro NULL for transmitido como aOutputBuf ou aInputBuf, isso significa que esse ponteiro de buffer não vai mudar do valor anterior/atual. Nesse caso, o argumento de comprimento correspondente deve ser ignorado. Por exemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) muda o ponteiro do buffer de entrada e o comprimento dele, 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 vai fazer com que todos os argumentos sejam ignorados e o valor de retorno seja OT_ERROR_BUSY.

Detalhes
Parâmetros
[in] aOutputBuf
Dados a serem gravados no alfinete do MISO
[in] aOutputBufLen
Tamanho do buffer de saída em bytes
[in] aInputBuf
Dados a serem lidos do alfinete do MOSI
[in] aInputBufLen
Tamanho do buffer de entrada (em bytes)
[in] aRequestTransactionFlag
Defina como "true" se for necessário definir a interrupção do host
Valores de retorno
OT_ERROR_NONE
A transação foi preparada.
OT_ERROR_BUSY
Uma transação está em andamento.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() não foi chamado.

Recursos

Os tópicos de Referência da API OpenThread são originados do código-fonte, disponível no GitHub. Para mais informações ou para contribuir com nossa documentação, consulte Recursos.