Google 致力于为黑人社区推动种族平等。查看具体行动

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,平台 sla-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 的方法相同。

aOutputBufLen 字节的 aOutputBuf 被锁定后,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 PIN 中读取的数据
[in] aInputBufLen
输入缓冲区的大小(以字节为单位)
[in] aRequestTransactionFlag
如果应设置主机中断,则设置为 true
返回值
OT_ERROR_NONE
交易已成功准备。
OT_ERROR_BUSY
有一项交易目前正在处理中。
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() 尚未被调用。

资源

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