Escravo SPI

Este módulo inclui a abstração de plataforma para a comunicação de escravos 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 de SPI foi concluída com o comprimento especificado.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Invocado após um callback completo de transação ser chamado e retornar TRUE para fazer qualquer processamento adicional necessário.

Funções

otPlatSpiSlaveDisable(void)
void
Encerre e desative a interface SP-Slave.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Inicializar a interface de escravo do 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 de 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 é 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 chamada. 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 da plataforma precisará invocar o callback do processo da transação (aProcessCallback definido em otPlatSpiSlaveEnable()), que, ao contrário desse callback, precisa ser chamado no mesmo contexto do SO que qualquer outro callback/API OpenThread é chamado.

Detalhes
Parâmetros
[in] aContext
O ponteiro de contexto foi transmitido para otPlatSpiSlaveEnable().
[in] aOutputBuf
Valor de aOutputBuf da última chamada para otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valor de aOutputBufLen da ú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
Duração da transação concluída, em bytes.
Retorna
TRUE se, depois dessa chamada, a plataforma invocar o callback do processo aProcessCallback, FALSE, se não houver nada a ser processado e não houver necessidade de invocar o callback do processo.

OtPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Invocado após um callback completo de transação ser chamado e retornar TRUE para fazer qualquer processamento adicional necessário.

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

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

Funções

otPlatSpiSlaveDesativar

void otPlatSpiSlaveDisable(
  void
)

Encerre e desative a interface SP-Slave.

Ativar o PlatSpi

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

Inicializar a interface de escravo do SPI.

Observe que o Slave do 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 all0xFF`, e todos os bytes recebidos forem descartados.

Detalhes
Parâmetros
[in] aCompleteCallback
Ponteiro para transação concluída.
[in] aProcessCallback
Ponteiro para processar retorno de chamada.
[in] aContext
Ponteiro de contexto a ser passado para retornos de chamada.
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 do SPI Slave.

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 completo 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 de SPI iniciar a transação. Cada chamada bem-sucedida para essa 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 é 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 de aOutputBufLen bytes do aOutputBuf for atingido, o pino MISO será definido como alto até que o mestre termine a transação do SPI. Esse é o equivalente funcional do preenchimento do final de aOutputBuf com 0xFF bytes até a duração da transação.

Depois que os bytes aInputBufLen do aInputBuf forem contados a partir do MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o mestre SPI conclua a transação.

Mesmo que aInputBufLen ou aOutputBufLen (ou ambos) se esgotem antes que o mestre de SPI conclua uma transação, o tamanho em andamento da transação ainda precisa ser monitorado para ser transmitido para o callback de transação concluída. Por exemplo, se aInputBufLen for igual a 10 e aOutputBufLen igual a 20, e o mestre do SPI ultrapassar 30 bytes, o valor 30 será transmitido para o callback da transação concluída.

Se um ponteiro NULL for transmitido como aOutputBuf ou aInputBuf, esse ponteiro de buffer não vai mudar do valor anterior/atual. Nesse caso, o argumento de tamanho correspondente deve ser ignorado. Por exemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) muda 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 está em andamento fará 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 pino MISO
[in] aOutputBufLen
Tamanho do buffer de saída, em bytes
[in] aInputBuf
Dados a serem lidos no pino MOSI
[in] aInputBufLen
Tamanho do buffer de entrada, em bytes
[in] aRequestTransactionFlag
Definido como "true" se a interrupção do host precisar ser definida
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 tenha sido 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.