蓝牙BLE的最大特点就是低功耗,而低速率和简单的交互协议是降低功耗的重要组成部分。因此BLE一般应用于低速率的近场控制和数据交互,如智能家电、运动手环等等,小数量的控制和交互对传输速度没有要求,每秒1K字节就可以了,有时为了功耗可能会更低。但在某些场景下,可能要求BLE尽可能提高传输速率,如无线空中升级OTA、无线对讲语音传输等等。接下来,我们来分析如何提高BLE的速率来满足需求,并探讨BLE连接的稳定性。

一、BLE数据包分析

BLE包的结构是:

preamble(1 Byte)+ AccessAddress(4 Bytes)+ PDU + CRC(3 Bytes)

1)preamble = 10101010 or 01010101

2)Access Address = 0x8e89bedd6

3)连接以后的数据传输的PDU是:Header(2 Bytes)+ Payload (27 Bytes max)+MIC(4bytes),所以传输一个包的 最大长度是1+4+33+3=41字节,有效数据最大是27字节。

二、自定义characteristic的最大长度

从上面分析可见,通过WRITE或者NOTIFY characteristic发送一个包的最大长度是27字节。但是这个27字节指的是BLE底层的协议包格式。对于profile层的characteristic,其最大的长度是20字节,也即是每个包最大的长度是20字节。

这是因为profile所用的characteristic处于GATT协议层,而GATT到ATT层需要增加一个字节的op code,两个自己的attribute handle。然后ATT到L2CAP适配层需要增加4个字节的L2CAP头。所以从GATT到底层需要封装7个字节的额外协议数据,因此GATT层最大是20字节。

其实,按照蓝牙BLE的协议,L2CAP协议层自动对数据包进行拆包和封装,理论上是支持ATT/GATT层更大的数据包的。但一般SDK默认ATT_MTU=23,这样L2CAP的工作会变得很简单,事实上,BLE的应用场景也不需要定义太长的数据包,20个字节足够了。

三、BLE的传输速率分析

根据蓝牙BLE协议, 物理层physical layer的传输速率是1Mbps,相当于每秒125K字节。事实上,其只是基准传输速率,协议规定BLE不能连续不断地传输数据包,否则就不能称为低功耗蓝牙了。连续传输自然会带来高功耗。所以,蓝牙的最高传输速率并不由物理层的工作频率决定的。

在实际的操作过程中,如果主机连线不断地发送数据包,要么丢包严重要么连接出现异常而断开。

在BLE里面,传输速度受其连接参数所影响。连接参数定义如下:

1)连接间隔。蓝牙基带是跳频工作的,主机和从机会商定多长时间进行跳频连接,连接上才能进行数据传输。这个连接和广播状态和连接状态的连接不是一样的意思。主机在从机广播时进行连接是应用层的主动软件行为。而跳频过程中的连接是蓝牙基带协议的规定,完全由硬件控制,对应用层透明。明显,如果这个连接间隔时间越短,那么传输的速度就增大。连接上传完数据后,蓝牙基带即进入休眠状态,保证低功耗。其是1.25毫秒一个单位。

2)连接延迟。其是为了低功耗考虑,允许从机在跳频过程中不理会主机的跳频指令,继续睡眠一段时间。而主机不能因为从机睡眠而认为其断开连接了。其是1.25毫秒一个单位。明显,这个数值越小,传输速度也高。

蓝牙BLE协议规定连接参数最小是5,即7.25毫秒;而Android手机规定连接参数最小是8,即10毫秒。iOS规定是16,即20毫秒。

连接参数完全由主机决定,但从机可以发出更新参数申请,主机可以接受也可以拒绝。Android手机一部接受,而ios比较严格,拒绝的概率比较高。

一般场景,连接参数设置16,即20毫秒,一般的传输速率是50* 20 = 1000字节/每秒。如果每个连接事件传输更多的包,可以获得更高的传输速率。

四、BLE高速传输的应用场景和技术实践

降低连接间隔,提高每个连接事件的发包数能够显著地提高速率,但是两者往往是矛盾的。因为一个连接事件的传送时间总是有限的。从实践来看,BLE的传输速率不仅跟连接参数有关,还跟CPU的处理能力有关[CC2541的51核要比DA14580的M0逊色不少]。此外还要对发送和接收流程进行优化处理,这个非常重要。需要注意的是,高速率也会带来稳定性问题,需要优化profile的数据交互场景和一些参数。

高速率传输会带来更高的功耗,但是这个功耗应该是远比经典蓝牙的功耗低的。语音传输以往一般使用经典蓝牙芯片,功耗一般在毫安级别。便携式电子产品对功耗要求很高,对于单纯的语音对讲场景来说,BLE是可以满足需求的。语音使用8K采样率,16位量化,一秒即是16K字节/每秒。如果使用ADPCM编码压缩,可以压缩四分之一,即4K字节每秒。对于BLE来说,这个速度是完全可以达到的。如果是8bit量化,不压缩也是8K字节每秒。TI官方宣称CC2541的最大的传输速率是5.9K字节每秒。而DA14580则可以达到8K字节/每秒的速率。嵌入式企鹅圈基于目前最低功耗蓝牙单芯片DA14580已经demo通过,距离超过10米,稳定性也有保证。

如何提高蓝牙BLE的传输速率和稳定性相关推荐

  1. nRF52832 — 提高蓝牙BLE的数据传输速率

    文章出处:可不可以不取名(转载文章,如有不妥,通知后我会立即删除) 讲解2点: 为什么 nordic的4.0协议栈中ble只能发送20字节的应用负载数据. 大量数据发送时如何提高发送速率 1:为何上层 ...

  2. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  3. KT6368A国产蓝牙BLE芯片驱动程序硬件注意事项

    目录 1.1 简介 KT6368A芯片是一款支持蓝牙双模的纯数据芯片,蓝牙5.1版本.芯片的亮点在超小尺寸,超级价格.以及简单明了的透传和串口AT控制功能.大大降低了嵌入蓝牙在其它产品的开发难度和成本 ...

  4. Android低功耗蓝牙BLE

    低功耗蓝牙BLE与传统的蓝牙相比最大的优势是功耗降低90%,同时传输距离增大(超过100米).安全和稳定性提高(支持AES加密和CRC验证),允许Android应用程序与具有更严格电源要求的BLE设备 ...

  5. 蓝牙BLE芯片|伦茨科技智能电容笔芯片-ST17H65

    随着平板电脑的流行,有不少厂商都投入到了电容笔的开发当中,现在的电容笔不仅在精度上有了提高,甚至在笔触和压感上的研究都有进步. 电容笔是利用导体材料制作的具有导电特性.用来触控电容式屏幕完成人机对话操 ...

  6. 蓝牙技术|蓝牙BLE在可穿戴设备上的应用

    提到智能可穿戴设备,我们第一时间回想起Apple Watch,AirPdos,谷歌智能眼镜等,市场研究机构 Canalys 发布 2021 年第二季度全球可穿戴腕带设备市场报告.这一季度这类产品出货量 ...

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

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

  8. BLE的传输速率分析

    2019独角兽企业重金招聘Python工程师标准>>> 根据蓝牙BLE协议, 物理层physical layer的传输速率是1Mbps,相当于每秒125K字节.事实上,其只是基准传输 ...

  9. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

最新文章

  1. Android开发--蓝牙操作
  2. Redhat 5 无法安装elfutils-libelf-devel-0.137问题
  3. 李宏毅线性代数笔记9:特征值与特征向量
  4. [云炬python3玩转机器学习笔记] 3-4创建Numpy数组和矩阵
  5. .net core通过多路复用实现单服务百万级别RPS吞吐
  6. mc有什么红石机器人_我的世界10月考试!来测测你的MC成绩吧~
  7. paip.项目开发效率提升之思索
  8. DeepFake捏脸真假难辨,汤姆·克鲁斯比本人还像本人!
  9. SpringMVC运行原理
  10. 十大经典排序算法(C语言实现)
  11. Excel字符串拼接
  12. Word+PS制作拼音表格
  13. 小程序优购商城项目总结
  14. 代码覆盖率工具lcov
  15. java.lang.ArrayStoreException
  16. 电脑管理android手机版下载安装,airdroid下载
  17. 如果今天是生命里的最后一天你想做点啥?
  18. MySQL自定义函数调用不出结果
  19. CAS实现的单点登录系统
  20. Hadoop安装及部署

热门文章

  1. 数据分析真题日刷 | 京东2018秋招数据分析工程师笔试题
  2. Python程序设计之列表
  3. 如何读懂DataSheet
  4. C语言中exit(0) 、exit(1) 和return的区别
  5. nn.AdaptiveAvgPool2d
  6. 尚硅谷Kubernetes教程(K8s入门到精通) 01
  7. c# 委托实例的几种执行方式详解
  8. EE302 - Lab 5
  9. 基于多次傅里叶变换算法的快速相位解包裹算法研究
  10. 109_《Delphi4核心编程技术》