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() .

Функции

отПлатСпиСлавеДисабле

void otPlatSpiSlaveDisable(
  void
)

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

отПлатСпиСлавеEnable

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 уже включен.
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 в 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 . Для получения дополнительной информации или внесения вклада в нашу документацию обратитесь к Ресурсам .