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
,平台 sla-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
的方法相同。
待 aOutputBufLen
字节的 aOutputBuf
被锁定后,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 上的源代码。 如需了解详情或为我们的文档做贡献,请参阅资源。