原文见 https://www.cnblogs.com/wahahahehehe/p/15094324.html
1. 物理信道
低功耗蓝牙的工作频段为2.4GHz,这个唯一一个在所有国家都无需授权的频段。
BLE将2.4GHz频段分为40个RF射频信道,每个信道2M宽度,最低的中心频率为2402MHz,最高的中心频率为2480MHz。同一时刻,只能用一个信道进行数据的收发。
物理信道从0 ~ 39进行编号。index却是,PHY CH0对应37,PHY CH12对应38,PHY CH39对应39。BLE4.2规定,Advertising、Scanning、Initiating 状态只允许在 37、38、39信道上执行数据的收发,这样做的目的是与WIFI的频段隔离,起到抗干扰的作用。在Connection连接状态下可以使用其余37个信道传输数据,并通过跳频技术(Hopping),减少信道干扰增强系统的鲁棒性。
2. 设备地址
同一时刻,在2.4GHz频段下,蓝牙设备是如何辨别各种需要通信的对象呢?此时就需要给每个BLE设备分配一个ID,及设备地址Device Address,共48 bits。
低功耗蓝牙设备地址分配如下:
2.1 公共地址
public device address的地址由company assigned [24 bits] 和 company id [24 bits] 构成,需向蓝牙组织申请。
2.2 随机地址
随机地址用的更广泛,有细分为两类:
-
静态地址
-
私有地址
-
不可解析的私有地址
-
可解析的私有地址
-
2.2.1 静态地址
规则如下:
-
最高两bit恒定为 11
-
上电的时候随机生成,并且在一个上电周期内保持不变
-
除开最高两位,剩余的46bits是一个随机数,不能全部为0,也不能全部为1
-
下一次上电的时候可以改变。但不是强制的,因此也可以保持不变。
2.2.2 私有地址
(1)不可解析的私有地址
Non-resolvable private address会定时更新。更新的周期称是由GAP规定的,称作T_GAP(private_addr_int) ,建议值是15分钟。要求如下:
- 最高两bit恒定为 00
- 除开最高两位,剩余的46bits是一个随机数,不能全部为0,也不能全部为1
- 以T_GAP为周期,定时更新
- 此地址不能和 public device address 冲突。
(2)可解析的私有地址
这种地址也称 RPA 加密地址,只能被拥有相同 Identity Resolving Key (IRK) 的设备扫描到,可以防止被未知设备扫描和追踪。规则如下:
- 最高两bit恒定为 10
- 至少在 random part of prand 有一个 1和一个0
- prand 除了最高两位以外,是一个随机数
- hash 部分是通过公式 hash = ah(IRK, prand) 计算出来的 hash 值
5. 空口包格式
BLE的数据都是在空中进行传输的,在协议中定义为 Air Interface Packets,俗称空口包,BLE链路层(Link Layer)定义其格式为:
5.1 Preamble
Preamble,前导帧,长度为一个字节,只有0x55和0xAA两种取值,根据Access Address的第一个bit,由PHY层自动调整。
由于BLE信号功率强度可以从-90dBm ~ 10dBm,即80dB,接收机需要通过前到帧这样一串0、1交替序列调整增益参数,以适配不同功率的射频信号,优化数据包的鲁棒性。
5.2 Access Address
Access Address,接入地址,用来表示接收者ID或者空中包身份,根据Access Address的不同,可以将空口包分为:广播包和数据包。
- 广播包的Access Address固定为0x8E89BED6,在37/38/39广播信道上传输。
- 数据包的Access Address为一个32 bits的随机值,由Initiator生成,用于设备一对一通信时使用,即用于连接时的master和slave之间通信的。在剩下的37个数据信道传输。每建立一次连接,重新生成一次Access address。
5.3 PDU
PDU,Protocol Data Unit,协议数据单元。是BLE数据传输的基本单元,BLE在不同状态下的PDU组成也不同。
5.4 CRC
24 bits的PDU的CRC校验数据,初始向量为: