SPI 从属实例

此模块包含用于 SPI 从属通信的平台抽象。

摘要

类型定义符

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 事务准备数据。

类型定义符

otPlatSpiSlaveTransactionCompleteCallback

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

表示 SPI 交易已完成给定长度。

写入从属实例的数据已写入之前调用 otPlatSpiSlavePrepareTransaction()aInputBuf 参数所指示的指针。

调用此函数后,otPlatSpiSlavePrepareTransaction() 无效,必须再次调用才能使下一个事务有效。

请注意,此函数始终在事务结束时调用,即使尚未调用 otPlatSpiSlavePrepareTransaction()。在这种情况下,aOutputBufLenaInputBufLen 将为零。

此回调可从 ISR 上下文调用。此函数的返回值指示是否需要进一步处理。如果返回 TRUE,平台 spi-slave 驱动程序实现必须调用事务进程回调(在 otPlatSpiSlaveEnable() 中设置的 aProcessCallback)。与这个回调不同的是,该回调必须从调用任何其他 OpenThread API/回调的同一操作系统上下文调用。

具体说明
参数
[in] aContext
上下文指针传递到了 otPlatSpiSlaveEnable()
[in] aOutputBuf
上次调用 otPlatSpiSlavePrepareTransaction() 时的 aOutputBuf 值。
[in] aOutputBufLen
上次调用 otPlatSpiSlavePrepareTransaction() 时的 aOutputBufLen 值。
[in] aInputBuf
上次调用 otPlatSpiSlavePrepareTransaction() 时 aInputBuf 的值。
[in] aInputBufLen
上次调用 otPlatSpiSlavePrepareTransaction() 时 aInputBufLen 的值
[in] aTransactionLength
已完成事务的长度(以字节为单位)。
返回值
如果在此调用返回后,平台应调用进程回调 aProcessCallback,则为 TRUE;如果没有要处理的内容,且无需调用进程回调,则为 FALSE。

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

系统会在事务完成回调被调用后调用,并返回 TRUE 以进行所需的进一步处理。

otPlatSpiSlaveTransactionCompleteCallback 不同,它可以从任何操作系统上下文(例如ISR),该回调必须从与任何其他 OpenThread API/回调相同的操作系统上下文调用。

具体说明
参数
[in] aContext
上下文指针传递到了 otPlatSpiSlaveEnable()

函数

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

关闭并停用 SPI 从接口。

otPlatSpiSlaveEnable

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

初始化 SPI 从接口。

请注意,在使用 otPlatSPISlavePrepareTransaction() 准备好事务之前,SPI 从属实例不会完全准备就绪。

如果为 otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` 字节,并舍弃收到的所有字节。

具体说明
参数
[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 主节点发起交易之前,可以多次调用此回调函数。每次成功调用此函数,都会导致之前调用中的先前值被舍弃。

在完成事务后不调用此函数,等同于调用此函数之前将两个缓冲区长度都设为 0 并将 aRequestTransactionFlag 设为 false

一旦 aOutputBufaOutputBufLen 个字节被时钟输出,MISO 引脚应设置为高值,直到主组件完成 SPI 事务。这在功能上等效于使用 0xFF 个字节填充 aOutputBuf 的末尾,以至于事务的长度。

一旦从 MOSI 输入 aInputBuf 的 aInputBufLen 个字节,就会忽略 MOSI 引脚的所有后续值,直到 SPI 主组件完成事务。

请注意,即使 aInputBufLen 和/或 aOutputBufLen 在 SPI 主实例完成事务之前已用尽,系统仍然必须跟踪该事务的正在进行的大小,以将其传递给事务完成回调。例如,如果 aInputBufLen 等于 10 且 aOutputBufLen 等于 20,而 SPI 主服务器时钟输出为 30 个字节,则系统会将值 30 传递给事务完成回调。

如果将 NULL 指针作为 aOutputBufaInputBuf 传入,则意味着缓冲区指针不应从其先前/当前值发生更改。在这种情况下,应忽略相应的长度参数。例如,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()

资源

OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源