最近CC2640对应产品在使用时遇到通信问题。请帮忙分析一下原因。
现象:CC2640透传心电数据到手机端,绘制的心电波形明显卡顿,约1~2S卡顿一次。华为P10和mata10 pro上稳定复现。
看上去像是,adndroid 7.0系统及以上版本会出现该现象。7.0以下版本未发现该问题。
测试:通过蓝牙工具查看华为P10收到的心电数据,发现数据不完整、有数据丢失等现象。
例如:一帧心电数据是定长的(14Bytes),结构:0xA5 + 心电数据(12Bytes)+校验和。导联脱落是心电数据全为0x22,
所以校验和是固定的0xB0。出现卡顿的位置,帧长度经常大于或小于14Bytes,且校验和仍是0XB0。说明心电数据是在蓝牙
传输过程中丢失的,而非数据处理或打包的问题。
请问是不是CC2640协议栈与Android 7.0及以上版本存在兼容性问题?是否由此导致数据丢失或错位
Alvin Chen:
请用抓包工具查看你的数据包.
建议你先用ble peripheral的demo 配合手机app 建议你使用BLE Scanner 测试一下收发性能。
user4748792:
回复 Alvin Chen:
Alvin Chen:使用SmartRF Packet Sniffer工具空中抓包,发现确实存在丢包现象。与APP端丢包情况一致。且丢包时,函数ECG_SetParameter()返回值为0x16。
查看了mate10 pro与cc2640连接后的3个参数。interval为15*1.25ms,lentency值为0,timeout值为0xF4。
我们在一个间隙或更短时间发送一包数据(20Bytes),就会发生丢包现象。大于一个间隙发送一包数据,就不会丢包。
这样的话,带宽就太低了,之前我们每个间隙发3包都不会丢包(其他手机均不会丢包)。
请问该问题该如何解决啊?
Alvin Chen:
回复 user4748792:
你不能小于一个interval 。我建议你是用下面的方法先进行返回值判断然后再发协议包:
github.com/…/throughput_example.md