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. html5数字和颜色输入框

    html5功能强大,数字和颜色输入框例子 效果:http://hovertree.com/code/html5/rxujb6g8.htm <!DOCTYPE html> <html& ...

  2. C#模拟Http请求时出现 基础连接已经关闭 未能为 SSLTLS 安全通道建立信任关系

    //解决方法: //引入命名空间: using System.Security.Cryptography.X509Certificates; using System.Net.Security; // ...

  3. EC笔记:第二部分:12、复制对象时勿忘其每一个成分

    EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...

  4. JVM-String比较-字节码分析

    一道String字符串比较问题引发的字节码分析 public class a { public static void main(String[] args)throws Exception{ } p ...

  5. 微信小程序开发总结

    一.设计 无需开发者开发的 1.小程序加载动画: 2.页面下拉刷新加载样式: 3.微信控件(拥有完整的操作反馈):如弹出框.通知.模态框...   建议用微信自己的 1.加载.反馈样式(全局.局部) ...

  6. iOS Version 和 Build 版本号

    Version 和 Build 版本号 开发者都知道,无论是对于 iOS 和 Android 的应用,每个应用都有两个不同的版本号.分别是: Version Build(在 Android 上叫 Ve ...

  7. 如何通过ArcMap Add-in机制实现十字叉线地理配准工具

    下图为自定义的ArcMap Add-in实现的十字叉线位图地理配准功能演示.

  8. IOS开发基础知识--碎片26

    1:UICollectionView如果在数据不够一屏时上下滚动 当数据不多,collectionView.contentSize小于collectionView.frame.size的时候,UICo ...

  9. Intent的七大组件——Android开发之路5

    ------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...

  10. [css]我要用css画幅画(九) - Apple Logo

    接着之前的[css]我要用css画幅画(八) - Hello Kitty,这次画的是苹果公司的logo 这次打算将分析和实现步骤尽量详细的说一说. 其实之前的也打算详细讲分析和设计过程,不过之前的图比 ...