目录
1 BLE的优点和局限性
1.1 BLE与经典蓝牙的区别
经典蓝牙 | BLE |
主要用于流媒体应用(音频,文件等) | 主要用于传感器数据,设备控制,低带宽应用 |
操作79个信道 | 操作40个信道 |
在32个信道进行搜索 | 在3个信道进行搜索,比经典蓝牙更快的发现设备和连接 |
1.2 局限性
1.2.1 数据吞吐量
BLE 4.2及前期版本支持1Mbps,蓝牙5之后根据使用的模式和PHY最大支持2Mbps。
影响数据吞吐的因素:
- 数据包间隔:Core spec规定每个数据包之间间隔150微妙
- 数据包开销:每个数据包都包含包头信息和实际的应用负载,包头需要传输但不是应用程序使用的数据
- 从设备包需求:在无数据传输情况下master也需要发送空包给从设备,从设备也需要回复这个空包
- 数据包重传:在有数据包丢失或者遭受干扰的情况下需要进程重传
1.2.2 范围
ble被设计为短距离应用,因此操作范围有限,影响操作范围的因素:
- 2.4G受到周围障碍物的影响较大(金属,墙壁,水,尤其是人体)
- BLE设备的天线设计和性能
- 设备的物理外壳影响天线性能,尤其是内部天线
- 设备的方向会影响天线的位置(例如智能机)
1.3 BLE优势及应用
BLE优势:
- 低功耗:与其他类似技术相比BLE实现了更低的功耗
- 免费的官方规范文档:相对于大部分的其他无线技术,非成员也可以免费使用相关规范文件
- 与其他相似技术相比,模组和芯片的成本低,市场占有率高:市场上的智能机都支持蓝牙功能,这个可能是ble比其他竞争对手(zigbee等)的最大优势
BLE的应用:
- 低带宽数据:适用于类似传感器,控制器等小数据场景的传输
- 辅助设备配置:在BLE不能满足系统的主要需求的情况下仍可以作为其他无线连接的辅助接口,例如作为配置和建立WIFI'连接的辅助
- 使用智能机作为接口:低功耗设备一般没有大屏幕,只能展示有限的数据,智能机可以为小设备提供更丰富的界面展示。通过智能机可以把数据同步到云端。
- 个人可穿戴设备:智能手表/手环等
- 仅广播设备:Beacon设备:只广播数据以便其他设备发现并读取
不适合ble的应用场景:
- 视频流
- 高质量音频流
- 长时间大数据传输
1.4 BLE的角色
Central(中央设备)
发现并监听其他正在进行广播的设备,可以建立和周边设备的连接,通常可以同时连接多个周边设备。
Peripheral(周边设备)
通过发送广播来宣布自己的存在,如果是可连接广播可以接受中央设备的连接请求。
BLE设备的类型
ble有4中类型的设备
Broadcaster | Peripheral | Central | Observer |
无射频接收器 | 需要射频接收器和发射器 | 需要射频接收器和发射器 | 无射频发送器 |
数据单向传输 | 数据双向传输 | 数据双向传输 | 数据单向传输 |
缩减的硬件及软件 | 完善的软件栈 | 完善的软件栈 | 缩减的硬件及软件栈 |
1.5 BLE的层次结构
1.5.1 物理层(PHY)
频段
用于调制/解调的无线电硬件,工作在2.4G频段,划分为40个信道,信道带宽2MHZ。
37,38,39为主广播信道,其余37个信道用于次广播信道和连接期间的数据传输。
调制方式
BLE的调制方式为Gaussian Frequency Shift Keying (GFSK 高斯频移键控)
取所选信道的中心频率,向上移动一个指定的量表示1,向下移动相同的量表示0,然后对信号采用高斯滤波以降低频率突变的噪音。
BLE定义了3种PHY类型:
- LE 1M PHY:使用1 Msym/s符号率,频率偏差至少为185kHZ,所有ble设备必须支持
- LE 2MPHY:使用2 Msym/s符号率,频率偏差至少为370kHZ,可选支持
- LE Coded PHY:使用1 Msym/s符号率,数据包中增加了向前纠错(FEC),因此增加了传输距离,但是减低了传输速率,可选支持
3种PHY的比较:
1M | Coded s=2 | Coded s=8 | 2M | |
符号率 | 1Ms/s | 1Ms/s | 1Ms/s | 2Ms/s |
协议数据速率(Protocol Data Rate) | 1Mb/s | 500kb/s | 125kb/s | 2Mb/s |
应用数据速率 | 800kb/s | 400kb/s | 100kb/s | 1400kb/s |
错误检测 | CRC | CRC | CRC | CRC |
错误校正 | NONE | FEC | FEC | NONE |
通讯范围 | 1 | 2 | 4 | 0.8 |
要求 | 必选 | 可选 | 可选 | 可选 |
分时
BLE的射频是半双工设备,不能同时进行发送和接收,所有的PHY都采用时分双工(TDD)的方案,从而表现为一个全双工类型的设备。
1.5.2 链路层
定义数据包类型,管理射频的状态,信道的选择,数据校验,加密,随机数生成等。
1.5.2.1 数据包格式
链路层定义了2种数据包类型:用于uncoded PHY的数据包和用于coded PHY的数据包
LE coded PHY数据包格式:
Preamble:
前导码主要用于让接收机精确的同步信号频率,就是在发送有效数据之前提醒接收机注意接收,以免丢失有用信号;进行自动增益控制(AGC:automatic gain control)。
ble preamble就是一个固定长度的01序列组成,不同的PHY长度不同:
- 1M PHY的preamble为1个字节
- 2M PHY的preamble为2个字节
- LE Coded PHY的preamble包含80个符号(字节),由10个重复的'00111100'组成,preamble不会被进行coded
Access address:
因为无线通信中存在噪音干扰和其他的链路干扰,接入地址就是被接收器用于识别信号和背景噪音。
接入地址长度为32位,有2种类型:
- 广播接入地址:固定值(0x8E89BED6)
- 数据接入地址:在连接建立时生成,并且通过PDU通知给对端
PDU:
上层传给链路层的数据。
有3种类型:
- 广播信道PDU(也用于periodic physical channel)
- 数据信道PDU
- 登时信道PDU
CRC:
循环冗余检查用于错误检查,通过PDU进行计算得出
PDU和CRC字段在传输前需要进行白化,避免数据包中的0或1的长序列引起接收机的频率锁漂移,在接收机CRC校验之前需要进行逆白化。
CTE:
在使用AOA/AOD测向时才会用到,本章不进行扩展。
FEC block1和FEC block2:
向前纠错编码是专门针对coded PHY的,FEC block1包含接入地址,Coding Indicator(CI),TERM1。
FEC block1使用s=8的编码方式
Coding Indicator:
用来指示FEC block2的编码方式
FEC使用卷积编码方式:
- S=2:2个编码替换1个原数据位
- S=8:8个编码替换1个原数据位
TERM1和TERM2:
每个FEC块的结束符,长度为3位。
1.5.2.2 状态机
链路层状态:
- Standby:默认状态,射频不发送和接受数据
- Advertising:设备发送广播数据以便其他设备可以发现并读取
- Scanning:扫描周边正在处于Advertising的设备
- Initiating:Scanning设备决定和Advertising设备建立连接
- Connection:两个设备已经建立连接并开始交换数据,发起连接的为master,进行广播的为salve
- Isochronous broadcasting:
- Synchronization:
1.5.2.3 设备地址
BLE设备通过设备地址和地址类型区分设备,长度48位,设备地址相同但是地址类型不同认为是不同的设备。
有公共地址和随机地址2种:
公共地址:和经典蓝牙类似,需要向IEEE申请。
随机地址:包含静态地址和私有地址
静态地址:
每个上电周期开始时生成静态地址,一旦生成不能改变,知道上电周期结束。
静态地址随机部分不能全部为0也不能全部为1 。
一旦静态地址改变原来保存的连接信息将失效。
私有地址:有可解析私有地址和不可解析私有地址2种类型
不可解析私有地址
可解析私有地址
系统会定期更改可解析私有地址,Core spec建议15分钟。
在进行配对时会交换IRK,IRK会用来解析可解析的私有地址。
1.5.2.4 Filter Accept List
这个就是原来的白名单机制,Core spec 5.3中White List修改为Filter Accept List。此列表可以填充Host有兴趣接受数据包的设备的地址。
链路层通过对端设备的地址进行过滤,控制上传给HOST的数据包数量,丢弃那些没有传给Host的数据包。
链路层定义了一系列的过滤策略,所有的过滤策略应当使用相同的Filter Accept List。
1.5.2.5 Connection Subrating
subrated connection 与non-subrated connection相比使用连接事件的特定子集,即使连接间隔很短也能够实现叫低的占空比,并且能够更快速的从低占空比切换到高占空比。
上图展示了从长连接间隔修改为短连接间隔,提高占空比的流程。完成本次连接间隔的修改至少需要6个连接事件来处理,会导致更长的延时。例如:把连接间隔由1秒修改为100ms,就需要6秒来完成这个动作。在对时间比较敏感的应用中这个延迟可能无法容忍。
subrated connection连接定义了多个连续的连接事件,只有其中一个是active状态,subrated connection event并不一定是连接事件序列中的第一个,可以通过subrate base event来指定。
subrate factor = 5,subrate base event = 2,latency = 0的连接事件时序(下图)
continuation number = 1时连接事件时序(下图)
- 连接事件#0收到的数据包PDU为0不需要继续,将跳过下一次subrated connection event之前的所有连接事件,因此#1至#4的连接事件将被跳过,不进行数据收发。
- 连接事件#5收到的数据包中PDU长度不为0,#6将被起用为连续事件,其中数据包PDU长度不为0
- 连接事件#6收到的数据包PDU不为0,#7将被起用为连续事件,其中数据包的PDU长度不为0
- 连接事件#7的数据包PDU不为0,#8将被启用为连续事件,其中数据包PDU长度为0
- 连接事件#8的数据包长度为0,因为continuation为1,subrated connection event将在#8结束
continuation number = 2时连接事件时序(下图)
- 连接事件#0收到的数据包PDU长度不为0,continuation为2,其后续的2个连接事件将被启用为连续事件
- 因为#1 #2的数据PDU长度都为0,所以连续窗口在#2结束
- 下一次的subrated connection event#5包含有效数据,#6 #7成为连续事件。
- 连续事件#6有数据处理,因此#8成为连续事件,连续事件#7也有数据处理,因此#9也启用为连续事件
- 连续事件#8 #9中都没有数据处理,因此#5开始的subrated connection event在#9结束,新的subrated connection event将从#10开始。
- 连接事件#10有数据处理,因此#11 #12为连续事件(未标出)
peripheral latency = 1,subrate factor = 3,continuation = 0的连接事件时序(下图)
- #0有数据处理,continuation为0,因此# 1 #2会被跳过,因为latency=1,#3~#5将被跳过
- #6有有效数据,因为continuation=0,#7 #8被跳过,因为latency=1,#9~#11将被跳过
peripheral latency = 1,subrate factor = 3,continuation = 1的连接事件时序(下图)
- #0有有效数据,因为continuation=1,#1启用为连续事件(PDU长度非0),因此#2启用为连续事件(PDU长度为0)
- #2的PDU长度为0,subrated connection event结束,因为latency=1,#3~#5被跳过
- #6开始新的subrated connection event,因为PDU长度非0,#7启用为连续事件,其PDU长度非0
- #7的PDU长度非0,#8启用为连续事件,其PDU长度为0
- #8的PDU长度为0,continuation=1,此subrated connection event结束,因为latency=1,#9~#11被跳过