是否可以直接写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上你自己的应用层代码那里看一下,是否有发送两次一样数据的可能性。