Подчиненный SPI

Этот модуль включает абстракцию платформы для связи ведомых устройств SPI.

Резюме

Typedefs

otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Указывает, что транзакция SPI с заданной длиной завершена.
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) typedef
void(*
Вызывается после того, как вызывается обратный вызов завершения транзакции и возвращает TRUE для выполнения любой необходимой дальнейшей обработки.

Функции

otPlatSpiSlaveDisable (void)
void
Выключите и отключите подчиненный интерфейс SPI.
otPlatSpiSlaveEnable (otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Инициализируйте подчиненный интерфейс SPI.
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Подготовьте данные для следующей транзакции SPI.

Typedefs

otPlatSpiSlaveTransactionCompleteCallback

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

Указывает, что транзакция SPI с заданной длиной завершена.

Данные, записанные в ведомое устройство, были записаны в указатель, указанный аргументом aInputBuf предыдущего вызова otPlatSpiSlavePrepareTransaction() .

После otPlatSpiSlavePrepareTransaction() этой функции otPlatSpiSlavePrepareTransaction() недействителен и должен быть вызван снова, чтобы следующая транзакция стала действительной.

Обратите внимание, что эта функция всегда вызывается в конце транзакции, даже если otPlatSpiSlavePrepareTransaction() еще не был вызван. В таких случаях aOutputBufLen и aInputBufLen будут равны нулю.

Этот обратный вызов может быть вызван из контекста ISR. Возвращаемое значение этой функции указывает, требуется ли дальнейшая обработка. Если возвращается TRUE реализация драйвера spi-slave платформы должна вызывать обратный вызов процесса транзакции ( aProcessCallback установленный в otPlatSpiSlaveEnable() ), который в отличие от этого обратного вызова должен вызываться из того же контекста ОС, что и любой другой API / обратный вызов OpenThread.

Подробности
Параметры
[in] aContext
Указатель контекста передан в otPlatSpiSlaveEnable() .
[in] aOutputBuf
Значение aOutputBuf от последнего вызова otPlatSpiSlavePrepareTransaction() .
[in] aOutputBufLen
Значение aOutputBufLen от последнего вызова otPlatSpiSlavePrepareTransaction() .
[in] aInputBuf
Значение aInputBuf от последнего вызова otPlatSpiSlavePrepareTransaction() .
[in] aInputBufLen
Значение aInputBufLen от последнего вызова otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Длина завершенной транзакции в байтах.
Возврат
ИСТИНА, если после этого вызова платформа должна вызвать обратный вызов процесса aProcessCallback , ЛОЖЬ, если нечего обрабатывать и нет необходимости вызывать обратный вызов процесса.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Вызывается после того, как вызывается обратный вызов завершения транзакции и возвращает TRUE для выполнения любой необходимой дальнейшей обработки.

В отличие от otPlatSpiSlaveTransactionCompleteCallback который можно вызывать из любого контекста ОС (например, ISR), этот обратный вызов ДОЛЖЕН быть вызван из того же контекста ОС, что и любой другой API / обратный вызов OpenThread.

Подробности
Параметры
[in] aContext
Указатель контекста передан в otPlatSpiSlaveEnable() .

Функции

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Выключите и отключите подчиненный интерфейс SPI.

otPlatSpiSlaveEnable

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

Инициализируйте подчиненный интерфейс SPI.

Обратите внимание, что подчиненное устройство SPI не полностью готово, пока транзакция не будет подготовлена ​​с помощью otPlatSPISlavePrepareTransaction() .

Если otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all байты 0xFF` и отбросит все полученные байты.

Подробности
Параметры
[in] aCompleteCallback
Указатель на обратный вызов завершения транзакции.
[in] aProcessCallback
Указатель на обработку обратного вызова.
[in] aContext
Указатель контекста, передаваемый в обратные вызовы.
Возвращаемые значения
OT_ERROR_NONE
Успешно включен интерфейс подчиненного устройства SPI.
OT_ERROR_ALREADY
Интерфейс SPI Slave уже включен.
OT_ERROR_FAILED
Не удалось включить интерфейс ведомого устройства SPI.

otPlatSpiSlavePrepareTransaction

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

Подготовьте данные для следующей транзакции SPI.

Указатели данных ДОЛЖНЫ оставаться действительными до тех пор, пока обратный вызов завершения транзакции не будет вызван подчиненным драйвером SPI или до следующего вызова otPlatSpiSlavePrepareTransaction() .

Эта функция может быть вызвана несколько раз, прежде чем мастер SPI инициирует транзакцию. Каждый успешный вызов этой функции приведет к тому, что предыдущие значения из предыдущих вызовов будут отброшены.

Не вызывать эту функцию после завершения транзакции - это то же самое, как если бы эта функция была ранее вызвана с обеими длинами буфера, установленными на ноль, и aRequestTransactionFlag установленным на false .

Как aOutputBufLen байты aOutputBufLen из aOutputBuf были синхронизированы, на выводе MISO должен быть установлен высокий уровень до тех пор, пока ведущее устройство не завершит транзакцию SPI. Это функциональный эквивалент заполнения конца aOutputBuf байтами 0xFF до длины транзакции.

После aInputBufLen байты aInputBufLen из aInputBuf были синхронизированы из MOSI, все последующие значения из вывода MOSI игнорируются до тех пор, пока мастер SPI не завершит транзакцию.

Обратите внимание, что даже если aInputBufLen или aOutputBufLen (или оба) исчерпаны до того, как мастер SPI aOutputBufLen транзакцию, текущий размер транзакции все равно должен отслеживаться для передачи в обратный вызов завершения транзакции. Например, если aInputBufLen равно 10, а aOutputBufLen равно 20, а мастер SPI aOutputBufLen 30 байтов, значение 30 передается в обратный вызов завершения транзакции.

Если указатель NULL передается как aOutputBuf или aInputBuf это означает, что указатель буфера не должен изменяться от своего предыдущего / текущего значения. В этом случае соответствующий аргумент длины следует игнорировать. Например, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) изменяет указатель входного буфера и его длину, но сохраняет указатель выходного буфера таким же, как и раньше.

Любой вызов этой функции во время выполнения транзакции приведет к игнорированию всех аргументов и возвращению значения OT_ERROR_BUSY .

Подробности
Параметры
[in] aOutputBuf
Данные для записи на вывод MISO
[in] aOutputBufLen
Размер выходного буфера в байтах
[in] aInputBuf
Данные для чтения с вывода MOSI
[in] aInputBufLen
Размер входного буфера в байтах
[in] aRequestTransactionFlag
Установите значение true, если необходимо установить прерывание хоста
Возвращаемые значения
OT_ERROR_NONE
Транзакция успешно подготовлена.
OT_ERROR_BUSY
В настоящее время выполняется транзакция.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable () не был вызван.