hemeizhi 发表于 2017-2-22 10:20:02

NRF51822如何确保在大量数据传输时不丢包

安卓手机端打开一个文件,然后每20个字节组成一包,通过蓝牙发送给nrf51822,再通过与之连接的单片机写入sd卡。

实验发现,数据包发送间隔为20ms时,会丢几十个包,间隔为30ms时会丢十个包左右,间隔40ms时基本可以不丢包,但是也不是完全可靠。

虽然可以通过延长发送间隔减少丢包,但是整个文件得发送时间就太长了。

如果采用每一包都应答的方式,单片机端的应答包也存在丢包的可能,导致手机端不知道是否发送成功。

请问做过这方面的大神有没有比较好的思路。

dreambox 发表于 2017-2-22 11:18:44

你可以参考OTA 过程,也是发送OTA文件

LinuxTux.China 发表于 2017-2-22 11:24:35

看波形,应该是重叠了,也就是数据尚未发出去,你又调用,然后覆盖了,,

shijianzhou 发表于 2017-2-22 11:41:09

分组发送。每个几十包需要确认没丢包再进行下一组。
丢包的原因很多android本身,空气中,接收端等等,所以加可靠性的确认和重传是比较好的办法。
否则无法保证完全不丢包。

xckhmf 发表于 2017-2-22 12:08:51

传输速度有多少?手机端发给底层使用response 基本不会丢的,在仔细找找安卓端或者底层的代码逻辑为了确保传输稳定的话可以制定传输协议 分包发送加上ACK和重传 可以确保不会出问题

hemeizhi 发表于 2017-2-22 12:31:09

xckhmf 发表于 2017-2-22 12:08
传输速度有多少?手机端发给底层使用response 基本不会丢的,在仔细找找安卓端或者底层的代码逻辑为了确 ...

波特率115200,现在尝试把每个包编号,然后下位机应答,丢包重发

changer15309 发表于 2017-2-22 15:08:53

丢包应该是安卓本身,两片CC2640通讯,interval 7.5ms, 1.38MB的文件90s发完,基本不丢包

Vmao 发表于 2017-2-22 15:12:04

一次发四个包,蓝牙协议一般不会丢包,你40ms 主要看你的蓝牙 配置参数是什么
页: [1]
查看完整版本: NRF51822如何确保在大量数据传输时不丢包