SPI ведомый

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

Резюме

Определения типов

otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) определение типа
bool(*
Указывает, что транзакция SPI завершена с заданной длиной.
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) определение типа
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.

Определения типов

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() еще не была вызвана. В таких случаях 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
Длина завершенной транзакции в байтах.
Возвращает
TRUE, если после возврата этого вызова платформа должна вызвать обратный вызов процесса aProcessCallback , FALSE, если обрабатывать нечего и нет необходимости вызывать обратный вызов процесса.

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 Slave.
OT_ERROR_ALREADY
Интерфейс SPI Slave уже включен.
OT_ERROR_FAILED
Не удалось включить интерфейс SPI Slave.

otPlatSpiSlavePrepareTransaction

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

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

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

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

Отказ от вызова этой функции после завершения транзакции аналогичен тому, как если бы эта функция была ранее вызвана с обеими длинами буфера, установленными на ноль, и aRequestTransactionFlag , установленным на false .

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

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

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

Ресурсы

Разделы справочника по API OpenThread взяты из исходного кода, доступного на GitHub . Чтобы получить дополнительную информацию или внести свой вклад в нашу документацию, обратитесь к разделу Ресурсы .