1. General Description (总体描述)
1.1 Link Layer States (链路层状态机)
链路层的操作可以描述为一个包含以下 7 种状态的状态机:
- Standby State(待机状态)
- Advertising State(广播状态)
- Scanning State(扫描状态)
- Initiating State(发起状态)
- Connection State(连接状态)
- Synchronization State(同步状态)
- Isochronous Broadcasting State(等时广播状态)
关键规则:
- 链路层状态机在同一时间只能处于一种状态。
- 设备必须至少拥有一台支持 Advertising 或 Scanning 状态的状态机,但可以有多个状态机实例。
- Connection State (连接状态)包含两种角色:
- Central Role (中心角色):从 Initiating 状态进入,负责定义传输时序,可与一个处于外围角色的设备通信。
- Peripheral Role (外围角色):从 Advertising 状态进入,与单一的中心角色设备通信。
- 同步接收者 (Synchronized Receiver):在 Synchronization 状态下接收等时数据包 (BIG) 的设备。
- 等时广播者 (Isochronous Broadcaster):在 Isochronous Broadcasting 状态下传输等时数据包的设备。
1.1.1 允许的状态和角色组合
设备可以支持多个状态机,支持扫描周期性广播的设备至少需要两个状态机。
如果设备支持表 A 中的组合,则必须同样支持表 B 中的组合:
| 组合 A (Combination A) | 组合 B (Combination B) |
|---|---|
| Initiating + 其他状态组合 C | Connection (Central role) + 相同组合 C |
| Connection (Central role) + Initiating + 组合 C | 连接到多个 Peripheral 设备的 Connection (Central role) + 组合 C |
| 可连接的 Advertising 状态 + 组合 C | Connection (Peripheral role) + 组合 C |
| Connection (Peripheral role) + 可连接的 Advertising 状态 + 组合 C | 连接到多个 Central 设备的 Connection (Peripheral role) + 组合 C |
1.2 Bit Ordering (比特序)
- 链路层规范中的数据包或 PDU 内字段采用小端序 (Little-endian)格式。
- 最低有效位 (LSB, Least Significant Bit)对应b0b_0b0,且最先在空中传输。
- 举例:3-bit 参数X=3X=3X=3对应二进制0b0110\text{b}0110b011,发送顺序为 1、1、0。文档中写作
110。 - 多字节字段 (Multi-octet fields):除 CRC (循环冗余校验) 和 MIC 外,均需最低有效字节 (Least significant octet) 先传。每个字节内部以 LSB 优先传输。
- 二进制字段 (如 0b10101010) 或多字节值 (如初始 CRC 0x112233445566) 书写时 MSB 位于左侧。
1.3 Device Address (设备地址)
设备通过48位的设备地址和地址类型进行标识,类型分为公有地址 (Public)和随机地址 (Random)。
设备的 Identity Address 是其在发送数据包时使用的公有地址或随机静态地址。
1.3.1 Public Device Address (公有设备地址)
- 除非用作 BR/EDR 控制器的 BD_ADDR,否则没有 LAP 值的限制。
1.3.2 Random Device Address (随机设备地址)
由最高两位决定具体子类型:
| Address [47:46] | Sub-Type (子类型) |
|---|---|
0b00 | Non-resolvable private address (不可解析私有地址) |
0b01 | Resolvable private address (可解析私有地址) |
0b10 | Reserved for future use (保留) |
0b11 | Static device address (静态设备地址) |
1. 静态设备地址 (Static device address)
- 要求:地址的随机部分至少包含一个
0和一个1。 - 格式:
[ 随机部分 ] + [ 1 1 ](MSB) - 生命周期:设备可以在电源循环后重新初始化静态地址,但在下一次掉电前不可改变。
2. 私有设备地址生成 (Private device address generation)
- 不可解析私有地址:随机部分至少一个
0,至少一个1,且不能等于公有地址。格式为[ 随机部分 ] + [ 0 0 ](MSB)。 - 可解析私有地址 (RPA):使用 Identity Resolving Key (IRK) 和一个 24-bit 随机数 (prandprandprand) 生成。
- prandprandprand的随机部分必须至少有一个
0和一个1,最高两位为1 0。 - hashhashhash生成公式(使用 ah 哈希函数):
hash=ah(IRK,prand)hash = ah(IRK, prand)hash=ah(IRK,prand) - 地址拼接(最低有效字节为 hash 的最低字节,最高有效字节为 prand 的最高字节):
randomAddress=prand∥hashrandomAddress = prand \parallel hashrandomAddress=prand∥hash
- prandprandprand的随机部分必须至少有一个
3. 私有设备地址解析
接收端通过提取 RPA 中的prandprandprand并使用已知的IRKIRKIRK计算本地哈希值来进行验证:
localHash=ah(IRK,prand)localHash = ah(IRK, prand)localHash=ah(IRK,prand)
如果localHashlocalHashlocalHash与 RPA 中提取的hashhashhash匹配,则设备身份解析成功。
1.4 Physical Channel (物理信道)
在 2.4 GHz ISM 频段内划分为40 个 RF 信道。
- Primary advertising channels (主广播信道):3 个,用于初始广播和所有传统广播活动。
- General-purpose channels (通用信道):37 个,用于绝大多数通信。
四个 LE 物理信道:Advertising (广播)、Periodic (周期性)、Isochronous (等时)、Data (数据)。只有广播物理信道同时使用主广播信道和通用信道(次级广播信道),其余仅使用通用信道。
物理信道索引映射 (节选):
- 2402 MHz -> Index 37 (主广播)
- 2404 MHz -> Index 0 (通用)
- 2426 MHz -> Index 38 (主广播)
- 2480 MHz -> Index 39 (主广播)
2. Air Interface Packets (空中接口数据包)
2.1 Packet format for the LE Uncoded PHYs (LE 1M & 2M)
LE Uncoded PHY 的数据包结构如下(各阶段依次传输,保持 1 Msym/s 或 2 Msym/s 符号率):
| 字段 | 大小 | 说明 |
|---|---|---|
| Preamble (前导码) | 1或2 octets | LE 1M 用 8-bit;LE 2M 用 16-bit。交替的 0 和 1 组成 |
| Access Address (接入地址) | 4 octets | 32-bit,用于物理信道识别和防冲突 |
| PDU (协议数据单元) | 2-258 octets | 广播信道、数据信道或等时信道的 PDU |
| CRC (循环冗余校验) | 3 octets | 24-bit,覆盖 PDU 计算 |
| CTE (恒定音调扩展)(可选) | 16 ~ 160μs\mu\text{s}μs | 无白化处理的恒定全 1 调制序列,不参与 CRC/MIC 计算。等时物理信道中禁止存在 |
(注:不含 CTE 的数据包传输耗时介于 44 至 2128μs\mu\text{s}μs之间)
2.1.2 Access Address (接入地址) 规范
- 长度为 32-bit,不得存在连续 6 个以上的 0 或 1,不得超过 24 次跳变。
- 广播物理信道接入地址固定为:
0x8E89BED6(二进制:0b10001110_10001001_10111110_11010110)。 - 等时广播 (Isochronous Broadcasting)会为每个 BIG 随机生成种子接入地址SAA (Seed Access Address),满足:
- SAA19=SAA15SAA_{19} = SAA_{15}SAA19=SAA15
- SAA22=SAA16≠SAA15SAA_{22} = SAA_{16} \neq SAA_{15}SAA22=SAA16=SAA15
- SAA25=0SAA_{25} = 0SAA25=0
- SAA23=1SAA_{23} = 1SAA23=1
- 对于同一个设备发射的 BIG 对,SAA15−0SAA_{15-0}SAA15−0的值必须至少有两位不同。
- BIS 的 Access Address由 SAA 与该逻辑传输的 Diversifier Word (DWDWDW) 按位异或得出。DWDWDW派生公式为:
- D=((35×n)+42)(mod128)D = ((35 \times n) + 42) \pmod{128}D=((35×n)+42)(mod128)(其中 n 为 BIS_Number)
- DW=0bD0D0D0D0D0D0D1D6_D10D5D40D3D20DW = \text{0b}D_0D_0D_0D_0D_0D_0D_1D_6\_D_10D_5D_40D_3D_20DW=0bD0D0D0D0D0D0D1D6_D10D5D40D3D20
2.2 Packet format for the LE Coded PHY (编码物理层包格式)
所有物理信道使用的 LE Coded PHY 数据包结构如下 (1 Msym/s):
- Preamble (80μs\mu\text{s}μs):无编码。
- FEC Block 1 (前向纠错块1):
- 采用S=8S=8S=8编码。
- 包含字段:Access Address (256μs\mu\text{s}μs), Coding Indicator (CI, 16μs\mu\text{s}μs), TERM1 (24μs\mu\text{s}μs)。
- CI (编码指示器):决定 FEC Block 2 采用哪种编码方案。
- FEC Block 2 (前向纠错块2):
- 采用S=2S=2S=2或S=8S=8S=8编码。
- 包含字段:PDU (N×8×S μsN \times 8 \times S\ \mu\text{s}N×8×Sμs), CRC (24×S μs24 \times S\ \mu\text{s}24×Sμs), TERM2 (3×S μs3 \times S\ \mu\text{s}3×Sμs)。