蓝牙BLE传输性能及延迟分析

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端写了一个小程序,将数据流和时间戳打印出来,如下:

[21]:TS 238.794720 PN 20780 [1]:
[21]:TS 238.795954 PN 20780 [2]:
[21]:TS 238.802182 PN 20781 [1]:
[21]:TS 238.802373 PN 20781 [2]:
[21]:TS 238.810432 PN 20782 [1]:
[21]:TS 238.832608 PN 20782 [2]:
[21]:TS 238.832650 PN 20783 [1]:
[21]:TS 238.832728 PN 20783 [2]:
[21]:TS 238.832751 PN 20784 [1]:
[21]:TS 238.832820 PN 20784 [2]:
[21]:TS 238.832843 PN 20785 [1]:
[21]:TS 238.833862 PN 20785 [2]:
[21]:TS 238.839201 PN 20786 [1]:
[21]:TS 238.839403 PN 20786 [2]:
[21]:TS 238.848280 PN 20787 [1]:
[21]:TS 238.848894 PN 20787 [2]:
……
[21]:TS 288.128815 PN 27346 [1]:
[21]:TS 288.128977 PN 27346 [2]:
[21]:TS 288.136323 PN 27347 [1]:
[21]:TS 288.136908 PN 27347 [2]:
[21]:TS 288.159292 PN 27348 [1]:
[21]:TS 288.159569 PN 27348 [2]:
[21]:TS 288.159922 PN 27349 [1]:
[21]:TS 288.165079 PN 27349 [2]:
[21]:TS 288.167879 PN 27350 [1]:
[21]:TS 288.168157 PN 27350 [2]:
[21]:TS 288.173809 PN 27351 [1]:
[21]:TS 288.173906 PN 27351 [2]:

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

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

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

可以看到BLE传输延迟约为8ms左右,会上下波动。

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

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

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

时间: 2024-10-23 19:25:13

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

TCP协议在带宽高,延迟长的线路中传输性能不好,这是为什么?有什么办法来提高它的性能?

问题描述 TCP协议在带宽高,延迟长的线路中传输性能不好,这是为什么?有什么办法来提高它的性能? 解决方案

Android 5.0中的蓝牙BLE

一.蓝牙BLE(Bluetooth Low Energy)介绍概要 蓝牙低能耗(BLE)技术是低成本.短距离.可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段.它从一开始就设计为超低功耗(ULP)无线技术. 蓝牙低能耗技术的三大特性成就了ULP性能,这三大特性分别是最大化的待机时间.快速连接和低峰值的发送/接收功耗. 无线"开启"的时间只要不是很短就会令电池寿命急剧降低,因此任何必需的发送或接收任务需要很快完成.被蓝牙低能耗技术用来最小化无线开启时间的第一个技巧是仅

如何使用工具进行线上 PHP 性能追踪及分析?

工作了一两年的 PHPer 大概都多多少少知道一些性能分析的工具,比如 Xdebug.xhprof.New Relic .OneAPM.使用基于 Xdebug 进行 PHP 的性能分析,对于本地开发环境来说是够用了,但如果是线上环境的话,xdebug 消耗较大,配置也不够灵活.相比 Xdebug ,xhprof 性能消耗较小,但是 xhprof 注入代码后我们还需要实现保存 xhprof 数据以及展示数据的 UI,听起来似乎又是一大堆工作. 很多人都知道,New Relic 和 OneAPM 是

android-Android 蓝牙ble配对 发送PIN码无效问题

问题描述 Android 蓝牙ble配对 发送PIN码无效问题 在做蓝牙配对时,发现调用setPin函数发送PIN码,如123456时,蓝牙设备那边一直显示PIN错误.我试过了无论是字符串的123456,还是数字123456都不行,但是使用全0的PIN可以配对成功,请大神指教.. byte[] pin = (byte[]) BluetoothDevice.class.getMethod(""convertPinToBytes"" String.class).invo

Win7蓝牙驱动安装失败的原因分析与解决方法

  蓝牙是一种支持设备短距离通信的无线电技术,现在不管是手机还是电脑都已经普遍的使用蓝牙功能了.如果Win7系统电脑没有安装蓝牙驱动的话,是需要安装后才能使用的.最近,有用户在安装蓝牙驱动的时候,发现安装失败.怎么办?出现这样的问题要怎么解决?现在就和大家说一下Win7蓝牙驱动安装失败的原因分析与解决方法. 步骤如下: 一.原因分析: 优化软件将系统INF文件夹自带文件误删了. 二.解决方法: 1.进入C盘系统分区的Windowsinf目录,查看是否有"bth.inf"文件,备注:如果

ble-安卓蓝牙BLE只能发送数据,不能接收数据,求教求教!

问题描述 安卓蓝牙BLE只能发送数据,不能接收数据,求教求教! 用的QN9021蓝牙模块,串口助手监控: 找到能够发送数据的characteristic,发送数据,串口助手收到数据 串口助手发送数据,接收数据总是null或者0,接收不到数据 所有的characteristic都试过了,还是不能读到数据,十分困惑,求教!!! 解决方案 https://segmentfault.com/q/1010000004363789 解决方案二: 1 能获取到有效特征值,并有读写权限,软硬件操作同一个特征值,

android-Android 蓝牙ble连接前一定需要配对么?

问题描述 Android 蓝牙ble连接前一定需要配对么? Android 蓝牙ble连接前一定需要配对么?从网上查资料有人专做配对的, 但是我要求连接是不需要配对的.我按照官方文档上写的代码,发现写出来连接前需要配对,有没有做过的人帮忙解答一下. 解决方案 BLE是不需要配对的,可能你找到的代码不对吧 解决方案二: public boolean connect(final String address) { if (mBluetoothAdapter == null || address ==

大型网站性能监测、分析与优化常见问题Q&A

大型网站性能监测.分析与优化常见问题Q&A @tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维.运营规划工作:曾任百度T7架构师和百度性能优化TOPIC.百度UAQ.APM平台负责人:畅销书<海量运维.运营规划之道>作者: mmTrix创始人,后并入上市公司高升控股(000971.SZ),出任技术VP. 购买链接:http://item.jd.com/11962556.html Q:基于rest的微服务,有什么好的监控方案推荐的,最好是对系统影响最小的 A:自

嵌入式arm linux蓝牙文件传输移植

嵌入式arm linux蓝牙文件传输移植目前,蓝牙技术已经比较成熟,特别是基于手机和PC得蓝牙文件传输. 本文主要讲述基于嵌入式arm linux的蓝牙文件传输.    现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动.http://www.bluez.org/download/    本为基于2.6版本的内核讲述.对于2.4下载bluez后安装即可.有了bluez蓝牙驱动还需要安装bluez-libs库和bl