CC2640的协议栈SPI传输问题
看了一下官网提供的CC2640软件设计指南,里面有一小节讲到如何使用SPI的,
uint8 txbuf[] = {0,1,2,3,4};
uint8 rxbuf[5];
SPI_Transaction spiTransaction;
spiTransaction.arg = NULL;
spiTransaction.count = 5;
spiTransaction.txBuf = txbuf;
spiTransaction.rxBuf = rxbuf;
SPI_transfer(SbpSpiHandle, &spiTransaction);
这种情况适用于 发送与接收的数据个数相同的情况,
问题来了,如果发送数据的个数是确定值,而待接收的数据个数不确定,总之和发送数据个数不同,
该如何处理?
这样处理是否可以:发送的时候将rxBuf = NULL,接收的时候将 txBuf = NULL;
问题二: 如果接收的数据个数不确定,如何处理? SPI_transfer 什么时候返回? 或者说设定 超时来解决?
超时返回后,接收的数据个数怎么确定? 如果用非阻塞模式,什么时候产生中断,然后调用回调?
希望TI的工程师们,能够给予明确回答,在此先谢谢你们!
吼吼,TI 的专家们太忙了,自己解决了。
The SPI driver supports partial return, that can be used if the * transfer size is unknown. If PARTIAL_RETURN is enabled, the transfer will end when * chip select is deasserted. The ::SPI_Transaction.status and the ::SPI_Transaction.count * will be updated to indicate whether the transfer ended due to a chip select deassertion * and how many bytes were transferred. See [Slave Mode With Return Partial] (@ref USE_CASE_RP) * use case below
有疑问的小伙伴们,请看UDMACC26XX.h 文件的 顶部注释,
讲的很详细,而且有示例代码。
我自己的回复为什么会被删除?
The SPI driver supports partial return, that can be used if the * transfer size is unknown. If PARTIAL_RETURN is enabled, the transfer will end when * chip select is deasserted. The ::SPI_Transaction.status and the ::SPI_Transaction.count * will be updated to indicate whether the transfer ended due to a chip select deassertion * and how many bytes were transferred. See [Slave Mode With Return Partial] (@ref USE_CASE_RP) * use case below
这是头文件 UDMACC26XX.h 顶部的注释,有任何疑问的,请看这个头文件的顶部注释。
自己已经解决此问题。
可能是误操作,感谢分享
注释里面说的是从机模式,可以采用这种方法解决 我帖子里面的问题二,
如果是主机模式,貌似没有讲到。