SPI 从属实例
此模块包含用于 SPI 从属通信的平台抽象。
摘要
类型定义符 |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
表示 SPI 交易已完成给定长度。 |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
系统会在事务完成回调被调用后调用,并返回 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()
。在这种情况下,aOutputBufLen
和 aInputBufLen
将为零。
此回调可从 ISR 上下文调用。此函数的返回值指示是否需要进一步处理。如果返回 TRUE
,平台 spi-slave 驱动程序实现必须调用事务进程回调(在 otPlatSpiSlaveEnable()
中设置的 aProcessCallback
)。与这个回调不同的是,该回调必须从调用任何其他 OpenThread API/回调的同一操作系统上下文调用。
具体说明 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
如果在此调用返回后,平台应调用进程回调
aProcessCallback ,则为 TRUE;如果没有要处理的内容,且无需调用进程回调,则为 FALSE。 |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
系统会在事务完成回调被调用后调用,并返回 TRUE
以进行所需的进一步处理。
与 otPlatSpiSlaveTransactionCompleteCallback
不同,它可以从任何操作系统上下文(例如ISR),该回调必须从与任何其他 OpenThread API/回调相同的操作系统上下文调用。
具体说明 | |||
---|---|---|---|
参数 |
|
函数
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 all
0xFF` 字节,并舍弃收到的所有字节。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
为下一项 SPI 事务准备数据。
在 SPI 从驱动程序调用事务完成回调之前,或下次调用 otPlatSpiSlavePrepareTransaction()
之前,数据指针必须一直有效。
在 SPI 主节点发起交易之前,可以多次调用此回调函数。每次成功调用此函数,都会导致之前调用中的先前值被舍弃。
在完成事务后不调用此函数,等同于调用此函数之前将两个缓冲区长度都设为 0 并将 aRequestTransactionFlag
设为 false
。
一旦 aOutputBuf
的 aOutputBufLen
个字节被时钟输出,MISO 引脚应设置为高值,直到主组件完成 SPI 事务。这在功能上等效于使用 0xFF
个字节填充 aOutputBuf
的末尾,以至于事务的长度。
一旦从 MOSI 输入 aInputBuf 的 aInputBufLen
个字节,就会忽略 MOSI 引脚的所有后续值,直到 SPI 主组件完成事务。
请注意,即使 aInputBufLen
和/或 aOutputBufLen
在 SPI 主实例完成事务之前已用尽,系统仍然必须跟踪该事务的正在进行的大小,以将其传递给事务完成回调。例如,如果 aInputBufLen
等于 10 且 aOutputBufLen
等于 20,而 SPI 主服务器时钟输出为 30 个字节,则系统会将值 30 传递给事务完成回调。
如果将 NULL
指针作为 aOutputBuf
或 aInputBuf
传入,则意味着缓冲区指针不应从其先前/当前值发生更改。在这种情况下,应忽略相应的长度参数。例如,otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
会更改输入缓冲区指针及其长度,但使输出缓冲区指针和之前相同。
在事务执行期间调用此函数将导致所有参数都被忽略,并且返回值为 OT_ERROR_BUSY
。
具体说明 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
资源
OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源。