博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝牙BLE传输性能及延迟分析
阅读量:5954 次
发布时间:2019-06-19

本文共 1964 字,大约阅读时间需要 6 分钟。

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

目前的一个项目对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为数据长度、、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的传输性能和延时。实际调试过程中还可以使用工具分析btsnoop_hci.log文件,以探究BLE建立链接、Update Parameters和数据传输等细节。

转载地址:http://yulxx.baihongyu.com/

你可能感兴趣的文章
使用Dom4j进行XML解析
查看>>
SplObserver观察者模式
查看>>
Dubbo架构设计详解
查看>>
使用JavaMail技术发送邮件
查看>>
[C++] 基础知识点:namespace
查看>>
Angular通过CORS实现跨域方案
查看>>
创建线程的四种方式
查看>>
大唐电信[600198]股票
查看>>
yii2 controller 接收get形式传输过来的参数
查看>>
Spring MVC控制流程与简易配置方案
查看>>
开启OpenStack Api跨域请求(CORS)功能
查看>>
拓步T66Ⅱ(牛牛2)Root教程
查看>>
redis的简单学习2.1-redis的数据类型
查看>>
《每个设计师都应该掌握的50个css代码段》11~20段
查看>>
C Primer Plus 第13章 文件输入/输出 13.11 编程练习答案
查看>>
JBoss 系列三十七:jBPM5示例之 Rule Task
查看>>
IOS9 微信支付报 prepayid 获取失败 ErrorDomainSSL, -9802
查看>>
iPhone 手机烧号的一些概念:五码烧号 vs OTA烧号
查看>>
maven模块化分解项目
查看>>
我们来判断一个php函数是否被定义
查看>>