TI中文支持网
TI专业的中文技术问题搜集分享网站

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的工程师们,能够给予明确回答,在此先谢谢你们!

Chunbo Fan:

吼吼,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 文件的 顶部注释,

讲的很详细,而且有示例代码。

Viki Shi:

回复 Chunbo Fan:

可能是误操作,感谢分享

Chunbo Fan:

回复 Viki Shi:

注释里面说的是从机模式,可以采用这种方法解决 我帖子里面的问题二,

 

如果是主机模式,貌似没有讲到。

sir pan:

你好我做的跟你的一样,也是蓝牙从模式,也看了文档操作,但是我的接收数据还是有问题,能不能发你的code给我看一下,谢了

赞(0)
未经允许不得转载:TI中文支持网 » CC2640的协议栈SPI传输问题
分享到: 更多 (0)