BLE传输性能主要受以下几个因素影响:操作类型,Connection Interval,每个Connection Event内发送的帧数、每一帧数据的长度。具体参见如下链接:

https://en.wikipedia.org/wiki/Bluetooth_low_energy

https://devzone.nordicsemi.com/question/3440/how-do-i-calculate-throughput-for-a-ble-link/

https://atmosphere.anaren.com/wiki/Data_rates_using_BLE

https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android

目前的一个项目对BLE传输性能有较高要求,将以上几个因素逐一确认,使用协议支持的最优值,其中Connection Interval设置为7.5ms,每一帧数据长度为20字节,每个Connection Event根据业务需要设置为2,依此计算出的理论传输速度约为5600Bps。为了测试实际效果,在Android端写了一个小程序,将数据流和时间戳打印出来,如下:

[]:TS 238.794720 PN  []:
[]:TS 238.795954 PN []:
[]:TS 238.802182 PN []:
[]:TS 238.802373 PN []:
[]:TS 238.810432 PN []:
[]:TS 238.832608 PN []:
[]:TS 238.832650 PN []:
[]:TS 238.832728 PN []:
[]:TS 238.832751 PN []:
[]:TS 238.832820 PN []:
[]:TS 238.832843 PN []:
[]:TS 238.833862 PN []:
[]:TS 238.839201 PN []:
[]:TS 238.839403 PN []:
[]:TS 238.848280 PN []:
[]:TS 238.848894 PN []:
……
[]:TS 288.128815 PN []:
[]:TS 288.128977 PN []:
[]:TS 288.136323 PN []:
[]:TS 288.136908 PN []:
[]:TS 288.159292 PN []:
[]:TS 288.159569 PN []:
[]:TS 288.159922 PN []:
[]:TS 288.165079 PN []:
[]:TS 288.167879 PN []:
[]:TS 288.168157 PN []:
[]:TS 288.173809 PN []:
[]:TS 288.173906 PN []:

其中21为数据长度、TS为时间戳、PN为包号,1和2是一个Connection Event内的包的类型。可以看到,一般情况下,一个Connection Event发送两帧数据,这两帧数据的时间间隔在1ms以内,两个Connection Event之间的时间间隔约为7ms。为了直观呈现测试结果,在PC端写了一个工具以分析抓取的LOG,主要根据包号、包的类型、字节长度和时间戳,统计丢包率和传输速度,如下图所示。

可以看到,一共传输了约16.3万个包,没有数据丢失,两帧之间最大时间间隔约为22.384ms,最大传输速度为5641Bps,平均速度约为5583Bps,与理论值(5600Bps)相差不多。Connection Interval对传输性能的影响对比下图,其Connection Interval为11.25ms。

BLE传输延迟(Latency)主要是指设备端将数据放至蓝牙协议栈到Android主机收到的时间间隔。由于通信双方时间戳不统一,无法按照前面通过打印时间戳的方式来做统计传输延迟,只能通过硬件信号做同步。设备端将数据放至蓝牙协议栈时给出一个信号,Android主机收到该数据时也给出一个信号,使用示波器抓取两个信号即可得到数据通过蓝牙BLE传输的延迟,如下图所示。

Channel3为发送端的信号,Channel2为接收端的信号,可以看到BLE传输延迟约为8ms左右,会上下波动。

数据传输延迟还跟Android端软件读取数据的均匀程度有关,Android端软件需及时将数据从缓存中读取出来,否则也会造成一定的延迟。评估数据读取均匀程度的方法同上,也是通过示波器抓取波形来看,如下图所示。

其中1通道为设备端发送数据,2通道为Android端读取数据,双方节奏基本保持一致,确保了及时读取和分发设备端上报的数据。

本文主要是通过打流和抓波形的方法,验证了蓝牙BLE的传输性能和延时。实际调试过程中还可以使用FTS4BT工具分析btsnoop_hci.log文件,以探究BLE建立链接、Update Parameters和数据传输等细节。

蓝牙BLE传输性能及延迟分析的更多相关文章

  1. 蓝牙BLE设备断线回连分析

    在 文章中分析了Hogp的连接的流程 ,这里分析一下回连的流程. 在使用ble设备的过程中,我们发现当设备和主机配对之后,如果没有解除配对,那么即便设备和主机断开,那么也是可以重新连接而不需要重新走配 ...

  2. 蓝牙BLE实用教程

    蓝牙BLE实用教程 Bluetooth BLE 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Re ...

  3. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  4. 蓝牙接收苹果手机通知 ANCS协议分析

    蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...

  5. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  6. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  7. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  8. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

    本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...

  9. 一:MySQL数据库的性能的影响分析及其优化

    MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...

随机推荐

  1. 谈I/O模型

    一个IO操作涉及两个系统对象: 调用这个IO的用户Process/Thread 系统内核 - System Kernel 一个具体的Read操作包括两个阶段: 内核等待数据准备就绪:Waiting f ...

  2. PetaPoco4.0 实体某个字段不赋值会更新成null解决方案

    最新用PetaPoco4.0做项目发现有个需求,就是比如说:在mvc表单中,只显示部分字段,一个表单还有其他状态等字段,没有显示到mvc页面上 但是当MVC收集表单提交更新的时候,会发现会把数据库中的 ...

  3. 使用NPOI组件完成的Excel导出导入(附源代码,测试通过)

    最近遇到一个Excel导入导出的问题,要支持winform和webform,这里我是一个认真严谨的coder,所以决定把这个记录下来!和大家一起分享一下!如果需要的同学可以下载哦! 对于NPOI这个组 ...

  4. css遮罩代码(已验证)

    #mask { background-color: rgb(0, 0, 0); display:none; opacity: 0.0; /* Safari, Opera */ -moz-opacity ...

  5. 用Java语言编写一个简易画板

    讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目 ...

  6. 房地产行业的商业智能BusinessIntelligence介绍

    商业智能(BI)的需求            随着企业信息化程度的深入,企业内部对获取决策信息的效率.正确性.全面性和准确度的要求也越来越高.但是,伴之而来的却是繁多的报表和信息孤岛的出现,同时由于各 ...

  7. 复杂的xml转化为java实体

    一.样例一: 以根据订单号向支付宝查询支付是否成功为例(成功信息) 失败信息: <?xml version="1.0" encoding="utf-8"? ...

  8. Netty(四)分隔符与定长解码器的使用

    TCP以流的形式进行数据传输,上层的应用协议为了对消息进行划分,往往采用如下的4种方式. (1)消息长度固定,累计读到长度总和为定长len的报文后,就认为读取到了一个完整的消息:然后重新开始读取下一个 ...

  9. jQuery实现侧边导航栏效果

    效果图: 效果体验:http://keleyi.com/keleyi/phtml/jqmenu/2.htm 以下是完整代码: <!DOCTYPE html> <html> &l ...

  10. 使用hovertree菜单作为后台导航

    hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果. 0.1.3版本:http://keleyi.com/ ...