微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640的协议栈SPI传输问题

CC2640的协议栈SPI传输问题

时间:10-02 整理:3721RD 点击:

看了一下官网提供的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 顶部的注释,有任何疑问的,请看这个头文件的顶部注释。

自己已经解决此问题。

可能是误操作,感谢分享

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

 

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top