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

CC2540/CC2541 如何清除RF中TX和RX缓存

是否可以直接写RFD = 0;? 或者调用 HCI_ResetCmd();   或LL_Reset();其中一个函数就能清空   TXFIFO/RXFIFO呢? 求解答。

Yan:

yunan lin,

RFD这个是开放给proprietary模式用的,BLE下不推荐使用,而且这个只是修改寄存器,TX RX的数据还有可能在内存里面。

 HCI_ResetCmd() 或 LL_Reset()当然可以,但是这么做会直接导致中断当前的BLE事件,比如你连接就直接断了之类。

yunan lin:

回复 Yan:

你好:

    问题:设备在进入低功耗前有操作上报数据给APP,APP也接收(但未处理这串数据)。设备进入低功耗后再次唤醒,APP连接会收到同样的数据,但是设备唤醒连接时并没有发这串数据(可以很确定没调用上发的函数)。我想问题可能有两种:

    1、这数据还在TXFIFO里,等待下次连接重发。

    2、这数据在APP的缓存里。

但是现在问题是我没发验证是哪个?请求支招。谢谢!!

Yan:

回复 yunan lin:

yunan lin,

1. 如果已经发送成功出去的数据,FIFO里面是不会再存在的。这个“成功”的定义就是收到对方的link layer层的ack,从你app已经收到数据来看,100%手机已经回复了ack, 所以FIFO里面的数据是不会再存在的,link layer是不可能再自动重发。

2. 只能是你自己向下发送数据的时候出了问题,也就是你自己的代码,应用层那里。

总之,link layer 不会重复发送数据,除非对方没有收到。

HG:

回复 yunan lin:

最简单的方法是接个示波器,看波形,到底有没有发出去。

yunan lin:

回复 Yan:

你好:

  

       很确定的是APP有收到那串数据。

       那这么说的话,是APP那边需要清除接收缓存?

Yan:

回复 yunan lin:

yunan lin,

如果你确定APP那里收到了两次一样的数据,而你的本意只是从254x发送一次,那么你应该去254x上你自己的应用层代码那里看一下,是否有发送两次一样数据的可能性。

赞(0)
未经允许不得转载:TI中文支持网 » CC2540/CC2541 如何清除RF中TX和RX缓存
分享到: 更多 (0)