// 开坑BLE协议栈
0 镇楼图
接下来会自下往上粗略分析各个层级,后续会有对各层的细致解读
1 CONTROLLER
1.1 PHY
BLE使用ISM频段(频率范围是2.400-2.4835 GHz)。将整个频带分为40份,每份的带宽为2MHz,称作RF Channel。其中序号为37、38、39的信道作为广播信道,其余37个信道作为连接信道。需要注意的是,RF Channel的序号和实际分配方式不是一一对应的关系,即用于广播的三个信道在物理上不是相连的(甚至是即为分散的),目的是减少信号的干扰。
1.2 LL
Link Layer结构图
1.2.1 广播与连接通信
BLE有两种通信方式,广播和连接。这两种方式从Link Layer开始就进行了特殊区分。
- 对于数据量比较少、发送不频繁、对时延不是很敏感的场景
使用广播通信,所有结点在通信网络里收发自由。 - 对于数据量较大、发送频率较高、对时延较敏感的场景
Link Layer会从剩余的37个Physical Channel中,选取一个,为这种场景里面的通信双方建立单独的通道。同时,为了增加容量,增大抗干扰能力,在多个connection event中不会使用一个固定的Physical Channel,而是在多个Channel之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术。
如图,为确保连接的稳定性和功耗问题,一次主从的连接通信被分为多个connection event进行。以从结点发送广播信号,主结点进行扫描开始。之后主结点为后续沟通规定一系列的参数(如conn_init, ts,tc等),并主动开始connection event。最终双方都不发送数据包并关闭通信。(之后文章会做更详细整理分析)
1.2.2 Logical Transports
作为LL的底层承担着将物理传输抽象成逻辑传输的职责,所以要做的事情有:
- 物理信道抽象:信道的共享(Hopping),设备地址的分类
- 对信道的维护:传输信道的建立,信道白名单
- 数据的抽象:对数据的加密/解密,数据包格式的定义
1.2.3 Logical Link
主要实现校验机制LL Privacy
1.2.4 Control
对比spring MVC中的controller层,思想是一样的。就是下面的东西太多了,我们再抽象出一层,方便统一管理。
实现的功能有:对connection的管理控制(Resolving List/White List),更新Hopping图谱,链路加密,数据包的收发应答流控等
2 HCI
定义了host和controller间的通信协议,实现了白名单机制,将LL中提供的功能封装成特定的Command和Event
3 HOST
3.1 L2CAP
这一层是我擅自命名的。BLE自下而上到L2CAP为止,真正有了最基础的广播和连接通信的能力。
3.1.1 L2CAP
全称Logical Link Control and Adaptation Protocol,这个协议对下层的众多功能进行了整合。包括但不限于:
- 对下:信道的多路复用,错误发现和重传,流处理,QoS等
- 对上:数据包分割重组,PDU分片重组
3.1.2 ATT
全称Attribute Protocol。将采集到的信息以Attribute的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。基于L2CAP,使用固定的Channel ID。
3.2 Profile
可以理解为官方提开发者实现的applications,广播和连接通信在这一层的众多协议里得到最终的封装
3.2.1 SM
全称Security Manager Protocol,实现配对(pairing)、认证(authentication)和加密(encryption)等功能
3.2.2 GATT
全称Generic Attribute Profile,用于服务发现。提供通用的、信息的存储和共享等功能。是使用python进行BLE开发的最外层协议。其层次结构为:Profile—>Service—>characteristic,即蓝牙服务是以特征为最小单位发布的,由一个Properties、一个Value、一个或者多个Descriptor组成
3.2.3 GAP
全称Generic Access Profile。规定了role,以及其必须具备某些能力——mode操作模式/procedure过程。非常重要日后会重点分析。
4 APP
applications所在层级
* 以上皆整理自wowo大神的解读和自己对于Bluetooth core v5.4的理解,未完待续~