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 事务已按给定长度完成。

写入从属设备的数据会写入到 aInputBuf 参数所指示的上一次对 otPlatSpiSlavePrepareTransaction() 的调用中。

调用此函数后,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 主实例启动事务之前多次调用。每次成功调用该函数将导致之前调用的旧值被舍弃。

在完成的事务之后不调用此函数与以前调用此函数时,缓冲区长度均为零且 aRequestTransactionFlag 设置为 false 的情况相同。

一旦 aOutputBufaOutputBufLen 字节被输出,则 MISO 引脚应设置为较高的值,直到主设备完成 SPI 事务。这是在功能上等效的 aOutputBuf,将 0xFF 字节填充到事务的长度。

1 次aInputBufLen已经从 MOSI 对 aInputBuf 的字节进行了时钟输入,并且会忽略 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 上找到。 如需了解详情或为我们的文档做贡献,请参阅资源