请教下cc2541 central扫描广播包时无法收全的原因
两个CC2541, 一个作为外设2S发送一次广播包,一个作为central接收广播,扫描间隔500ms,每收到一个广播包通过串口发送出去,每次扫描结束立即启动扫描,按理说应该能收到所有广播包的,但实际在1M的距离,最多只能收到80%的包,比如外设发了100个广播包,central只收到了80个。是什么原因造成这个现象的?
central扫描时在3个广播信道各监听多长时间?能改吗?
每次扫描结束立即启动扫描, 这里就可能丢包,启动时需要一个过程,如果广播2s一到,启动还没完全好,就丢了。
解决方法,扫描改为,持续扫描
怎么改为持续扫描,只看到DEFAULT_SCAN_DURATION设置,
gap.c里面有扫描窗口的参数,你找一下,类似这个
/**
* @brief Scan window used during connection establishment (n * 0.625 mSec)
*
* default: 240
*
* range: 4-16384
*/
#define TGAP_CONN_SCAN_WIND 13
当扫描窗口等于扫描间距DEFAULT_SCAN_DURATION,就会持续扫描
主机扫描结束后,应用层任务会收到响应的事件通知。
你可以在这个事件通知的处理中重新开启扫描,这样就实现了循环扫描了。
应该说,扫描确实存在一定概率扫描不到,但可以尽量改善。可以参考下这边的网友分享: http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/109771.aspx
测试条件:一个外设一个central,外设每2S发送一次广播包,central循环扫描。周围没有其他BLE设备。
我不需要保存扫描结果,我只要把扫描到的广播包通过串口发送出去就行了。我在收到GAP_DEVICE_INFO_EVENT事件时将串口发送,收到GAP_DEVICE_DISCOVERY_EVENT时启动扫描。应用层没有多余的操作。现在是实现了循环扫描,但是外设发送了100个广播包,central实际只收到了80个。领导现在不相信能丢了20%这么多,能解释下丢这么多的原因吗?
1、启停的过程中丢失的,
2、更改为持续扫描即可
