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 事务已按给定长度完成。
写入从属设备的数据会写入到 aInputBuf
参数所指示的上一次对 otPlatSpiSlavePrepareTransaction()
的调用中。
调用此函数后,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 主实例启动事务之前多次调用。每次成功调用该函数将导致之前调用的旧值被舍弃。
在完成的事务之后不调用此函数与以前调用此函数时,缓冲区长度均为零且 aRequestTransactionFlag
设置为 false
的情况相同。
一旦 aOutputBuf
的 aOutputBufLen
字节被输出,则 MISO 引脚应设置为较高的值,直到主设备完成 SPI 事务。这是在功能上等效的 aOutputBuf
,将 0xFF
字节填充到事务的长度。
1 次aInputBufLen
已经从 MOSI 对 aInputBuf 的字节进行了时钟输入,并且会忽略 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 上找到。 如需了解详情或为我们的文档做贡献,请参阅资源。