蓝牙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,主要根据包号、包的类型、字节长度和时间戳,统计丢包率和传输速度,如下图所示。

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

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

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

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

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

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

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

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

Original: https://www.cnblogs.com/we-hjb/p/6219388.html
Author: sunrain_hjb
Title: 蓝牙BLE传输性能及延迟分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/133990/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 奇怪的问题:Linux执行脚本碰到Permission denied问题(记录)

    2021-08-05 中午,我的同事说,我们的一台生产环境服务器的发布出现了问题,一直无法发布。 [En] At noon, my colleague said that ther…

    Linux 2022年8月13日
    0181
  • Git命令之不得不知的git stash暂存命令

    背景: 经常在某个分支的工作区开发中,临时收到紧急bug需要处理,这时就需要把工作区正在修改的文件存放到一个地方,来紧急处理修复bug。等修复完成bug,有需要把上次暂存的文件恢复…

    Linux 2022年8月30日
    0179
  • Git 审查更改

    但查看提交详细资料后,Jerry 实现字符串的长度不能为负数,所以他决定改变my_strlen函数的返回类型。 [jerry@CentOS project]$ git log 上面…

    Linux 2022年8月30日
    0195
  • git mv重命名

    Original: https://www.cnblogs.com/dream397/p/16198397.htmlAuthor: tycoon3Title: git mv重命名

    Linux 2022年8月30日
    0106
  • 同样的内核,为何linux干净稳定,而android臃肿又乌烟瘴气

    众所周知,现在智能手机操作系统主要有两大类:Android、iOS,采用Android系统的智能机品牌厂商很多(如:华为、Oppo、小米、魅族、三星、还有一些杂牌机等等),而iOS…

    Linux 2022年8月11日
    0131
  • vue动画效果和vue组件——day03

    <div id="app"><br> <input type="button" value="&am…

    Linux 2022年10月18日
    0106
  • Linux下最常用的10个文件压缩工具

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内…

    Linux 2022年8月26日
    0149
  • Linux十大顶级发行版本

    对于Linux新手来说,在各发行版之间困惑得进行选择和不断增加的数量实在令人头晕。这就是写作本文的原因,其中列出的10个(附加一个值得一提的FreeBSD,BSD一族中最为流行的)…

    Linux 2022年8月20日
    0171
  • Ubuntu系统配置双网卡ssh放外网

    (下面的IP,最后一位都用 X代替)先看看网卡设备的名字,下面要用(一般就是前两个):ifconfigsudo lshw -C network| grep -e ‘lo…

    Linux 2022年8月26日
    0118
  • webshell查杀的方法

    从您反馈的情况看,是您的网站被植入了webshel后门文件导致的。您可以先对当前的服务器做下快照备份,然后将您的网站代码拷贝到本地进行下webshell查杀:https://www…

    Linux 2022年9月14日
    0114
  • ubuntu/var/log/下各个日志文件

    本文简单介绍ubuntu/var/log/下各个日志文件,方便出现错误的时候查询相应的log /var/log/alternatives.log-更新替代信息都记录在这个文件中 /…

    Linux 2022年8月26日
    0183
  • linux nodejs express,CentOS安装NodeJS及Express开发框架

    https://blog.csdn.net/weixin_39952502/article/details/117512160 为了更好的配置nodejs,我使用了nodejs 的…

    2022年8月11日
    0196
  • 聊斋-河间生

    人的善恶在转瞬之间就可以改变,发现错误时往往已经差之千里了,但是发现错误及时改正这不也是很美好的一件事情么?河间生就是讲了这么一件事情。 主角简介:河间某生,家里比较富裕,烧火用的…

    Linux 2022年11月8日
    0108
  • Ubuntu 自带 ffmpeg 截取视频

    ffmpeg -i RAW.mp4 -ss 00:03:40 -t 00:06:00 CLIP.mp4 从 00:03:40开始,截取时长 00:06:00 Original: h…

    Linux 2022年8月26日
    0140
  • ubuntu18 任务栏调到底部

    $ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM 原因如下: https:/…

    Linux 2022年8月26日
    0188
  • 如何利用Github+Appveyor+Nuget打造自己的.net core开源库

    以下教程基于你有一个托管在Github上的.net core项目,如果没有的可以自己fork一个或者自己创建了默认的项目即可。 我们打开需要生成nuget包的项目中的 projec…

    Linux 2022年8月30日
    0148
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总