2019-12-19 18:08发布
2201 发表于 2018-3-26 14:37 我和楼主有一样的问题,也是暂时搁浅着。 我也做了个采集器,使用的是BLE.与Android通信,最高连续透传是19 ...
pingdan32 发表于 2018-3-29 08:36 采集器作为从机不允许直接修改连接间隙(蓝牙专业术语称之为连接事件间隔--Connection Interval),但是 ...
最多设置5个标签!
我也做了个采集器,使用的是BLE.与Android通信,最高连续透传是19200,但实际呢,我做的IAP手机蓝牙升级一个100kb的bin文件要8分钟。。。我一直都无能为力,查了好多资料,找到的问题大概是蓝牙的连接间隙我采集器作为丛机更改不了Android的蓝牙连接间隙。
采集器作为从机不允许直接修改连接间隙(蓝牙专业术语称之为连接事件间隔--Connection Interval),但是从机可以发起 updateConnectionParameter 请求主机修改这个连接事件参数(参数里面就包含了连接事件间隔)。
所以要解决这个问题建议从以下方面入手:
1,从机发起“更新连接参数”请求。(这个在从机的 BLE SDK 中可以找到相关函数,应该就是类似于 updateConnectionParameter 之类的名字)。
2,如果使用的是 Android 手机,建议 Android5.0以上,当手机连接采集器以后,调用 SetMtu 接口修改 MTU 的值(这个值就是一个连接事件数据包的大小,默认为23字节,可以最大设置到512)。
如果是 IOS9以后,不需要设置,iOS 连接采集器时将自动设置这个 MTU。MTU 设置成功后,就可以将采集器GATT Service的 characteristic 的 Value 设置的更大,可以不局限于20个字节了。这样可以进一步提升吞吐量。
3,建议采集器芯片采用完全支持 BLE 4.2,并且iPhone7以上。这样,当 iPhone7连接采集器后,将自动设置 DataPacketLengthExtension(这是 BLE4.2的一个新特新)。如此一来,可以更加高效的利用带宽。
PS:建议开发者详细研究一下BLE 协议(蓝牙没有想象的那么弱,只是开发者没能真正研究透)。
以上仅供参考。
首先,非常感谢这么详细的回复。
关于第一点,从机发起“更新连接参数”请求:我采集器(丛机)有发起“更新连接参数”, 这个可以确定,因为当我用同样的模块做主机时,主机能允许我采集器(丛机)更改连接间隙,也就是两个BLE模块之间能传输很快;
关于第二点, 调用 SetMtu 接口修改 MTU 的值 :这个我不太了解,安卓开发的兄弟是手动分包的;我采集器这边已经是自动分包了;
关于第一点还补充一个:我一直怀疑的是安卓主机没有允许我丛机的这个“更新连接参数”的请求,因为这个参数的决定权最终还是在主机那,丛机只是可以提出“意见”。
我间接证实过这个观点,我丛机修改我的连接间隙到10ms和到50ms,和安卓主机的传输速度没有丝毫的改变,但和模块的主机速度就是不一样的了;还有, 我试验过 华为的手机和小米的手机(米5),这两个手机和我采集器通信的速度不一样,华为的明显快。
我跟安卓开发的兄弟说了这个,他给我的回复是,这个他也控制不了,他APP不能是否接受丛机的这个请求,是系统决定的。
还补充一点: 所有手机都不允许APP直接修改蓝牙底层的参数,比如 连接间隙 。
关于这一点:“当手机连接采集器以后,调用 SetMtu 接口修改 MTU 的值(这个值就是一个连接事件数据包的大小,默认为23字节,可以最大设置到512)” , 这个是要从机和主机都支持才能设置成功的,而我的采集器是不支持的。。。。。。
一周热门 更多>