如题,需要做一个从机程序,功能要求如下:
1. 在与主机建立连接之后,等待接收主机的指令;
2. 若是接收到主机的读取指令,则需要将4KB的数据发给主机(可以一次发4KB,也可以分包发,但希望尽量缩短反馈的时间)
根据此需求,在从机中设计了一个Write profile characteristic value 用作主机的TX通道,设计了一个Notification 用作主机的RX通道。
经过实测,从机收到读取指令给与主机反馈时,只能收到前4个数据包,后面的(大约有40个)数据包,主机都没能收到。
请帮忙参谋一下,是我的机制问题?还是实现的细节问题?
谢谢!
YiKai Chen:
建議抓包分析看看
Gilbert:
回复 YiKai Chen:
BLE中有跳频,我不知道该监控哪个频段?是否有手段禁用跳频,将通信固定在某个频段上?
YiKai Chen:
回复 Gilbert:
抓包工具一般只要抓住connection就會自行跟上跳頻信道、最多固定advertising 的信道方便抓包工具抓到advertising 就行
Kevin Qiu1:
只能收到4个数据包,具体是怎么发送的?每包多少个数据
Gilbert:
回复 Kevin Qiu1:
我做了一个测试实例:
若是Perhperal收到一个字节且内容是‘R’,则反馈10个数据包,代码如下:
其中,BLE_Send()的源代码如下图:
测试结果如下图:
Kevin Qiu1:
回复 Gilbert:
设置断点调试看能否运行到发送第6个数据包的位置,最好还是抓包看一下具体情况
另发送数据超过PDU size时协议栈会自动分包
Gilbert:
回复 Kevin Qiu1:
这是我抓包的结果:(从机地址:E4 E1 12 C4 F7 F2)
请帮忙分析下!另外,抓包结果显示FCE ERROR比较多,不知道正不正常?是什么原因导致的?
谢谢!
Kevin Qiu1:
回复 Gilbert:
和你封装的这个BLE_send函数有关,已经相当于私有协议了,连接后ACK这些不能正常识别。
建议你还是按照协议栈中的方式收发数据