第五章:基带处理架构
深入解析蓝牙基带层架构:数据包结构、时序控制、链路管理、ARQ 机制及状态机
5.1 基带层概述
5.1.1 基带层功能
基带层 (Baseband) 位于物理层之上,负责:
- 数据包组装/解析:将上层数据封装为蓝牙包格式
- 时序控制:管理时隙、跳频同步
- ARQ 机制:自动重传请求,保证可靠传输
- 加密/解密:链路层安全
- 链路管理:连接建立、维护、释放
- 功耗管理:休眠模式控制
5.1.2 基带处理器架构
| ┌─────────────────────────────────────────────────────────────┐
│ 基带处理器 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 包构建器 │ │ FEC 编码器 │ │ 白化器 │ │
│ │ (Builder) │ │ (Encoder) │ │ (Whitener) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 发送 FIFO 缓冲区 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 时序控制 │ │ 跳频控制 │ │ GFSK 调制 │ │
│ │ (Timing) │ │ (Hopping) │ │ (Modulator) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ GFSK 解调 │ │ 去交织 │ │ FEC 解码器 │ │
│ │ (Demod) │ │ (Deinter) │ │ (Decoder) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 接收 FIFO 缓冲区 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 包解析器 │ │ ARQ 处理 │ │ 加密引擎 │ │
│ │ (Parser) │ │ (ARQ) │ │ (Crypto) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 链路管理器 (LMP) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
|
5.2 数据包结构
5.2.1 经典蓝牙包结构
基本包格式:
| ┌─────────────┬─────────────┬─────────────┬─────────────┐
│ 访问码 │ 包头部 │ 有效载荷 │ 可选 │
│ (Access) │ (Header) │ (Payload) │ (CRC) │
│ 68/72 bit │ 54 bit │ 0-2745 bit │ 0/24 bit │
└─────────────┴─────────────┴─────────────┴─────────────┘
│ │ │
│ │ │
▼ ▼ ▼
同步/识别 控制信息 用户数据
|
访问码 (Access Code):
| ┌──────────┬──────────┬──────────┐
│ 前导码 │ 同步字 │ 尾随码 │
│ 4 bit │ 64 bit │ 4 bit │
└──────────┴──────────┴──────────┘
前导码:0101 或 1010 (用于 DC 平衡)
同步字:由蓝牙地址生成 (64 bit)
尾随码:0101 或 1010 (用于符号定时)
功能:
├── 包检测
├── 频率同步
├── 符号定时恢复
└── 设备识别
|
包头部 (Header):
| ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ AM │ Type│ Flow│ ARQN│ SEQN│ HEC │ │
│ 3b │ 4b │ 1b │ 1b │ 1b │ 8b │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘
│
▼
共 18 bit
1/3 FEC 编码后 54 bit
字段说明:
├── AM_ADDR (3 bit): 活跃从设备地址 (0=广播)
├── Type (4 bit): 包类型 (DM1, DH1, DM3, DH3, etc.)
├── Flow (1 bit): 流量控制 (0=暂停,1=继续)
├── ARQN (1 bit): 确认 (0=NAK, 1=ACK)
├── SEQN (1 bit): 序列号 (0/1 交替)
└── HEC (8 bit): 头部错误校验 (CRC-8)
|
有效载荷 (Payload):
| ┌─────────────┬─────────────┬─────────────┐
│ 同步序列 │ 有效载荷 │ CRC │
│ (可选) │ (Data) │ (可选) │
└─────────────┴─────────────┴─────────────┘
同步序列:用于 SCO 链路同步
有效载荷:0-2745 bit (取决于包类型)
CRC: 24 bit (DM 包有,DH 包无)
|
5.2.2 包类型详解
经典蓝牙包类型:
| 包类型 | 用途 | 时隙数 | 有效载荷 | FEC | CRC |
| ID | 识别/寻呼 | 1 | 0 | 无 | 无 |
| NULL | 轮询/ACK | 1 | 0 | 无 | 无 |
| POLL | 轮询 | 1 | 0 | 无 | 无 |
| FHS | 频率跳频同步 | 1 | 18 byte | ⅔ | 有 |
| DM1 | 数据 | 1 | 17 byte | ⅔ | 有 |
| DH1 | 数据 | 1 | 27 byte | 无 | 无 |
| DM3 | 数据 | 3 | 121 byte | ⅔ | 有 |
| DH3 | 数据 | 3 | 183 byte | 无 | 无 |
| DM5 | 数据 | 5 | 224 byte | ⅔ | 有 |
| DH5 | 数据 | 5 | 339 byte | 无 | 无 |
| HV1 | 语音 | 1 | 10 byte | ⅓ | 无 |
| HV2 | 语音 | 2 | 20 byte | ⅔ | 无 |
| HV3 | 语音 | 3 | 30 byte | 无 | 无 |
| SCO | 同步语音 | 1 | 10 byte | 无 | 无 |
| eSCO | 扩展语音 | ⅓/5 | 可变 | 可选 | 可选 |
BLE 包类型:
| 广播包:
├── ADV_IND: 可连接广播
├── ADV_DIRECT_IND: 直接广播
├── ADV_NONCONN_IND: 不可连接广播
├── ADV_SCAN_IND: 可扫描广播
└── SCAN_RSP: 扫描响应
数据包:
├── CONNECT_IND: 连接请求
├── LL_DATA: 链路层数据
└── LL_CONTROL: 链路层控制
|
5.2.3 BLE 包结构
BLE 包格式:
| ┌──────────┬──────────┬────────────┬───────────┬──────────┐
│ 前导码 │ 访问地址 │ PDU │ CRC │ 尾随 │
│ 1 byte │ 4 bytes │ 2-257 B │ 3 bytes │ - │
└──────────┴──────────┴────────────┴───────────┴──────────┘
│ │ │ │
│ │ │ │
▼ ▼ ▼ ▼
80 μs 32 μs 可变 24 μs
|
LE PDU 结构:
| ┌─────────┬──────────┬─────────────────┐
│ PDU 头 │ PDU 载荷 │ MIC (可选) │
│ 2 bytes │ 0-255 B │ 4 bytes │
└─────────┴──────────┴─────────────────┘
PDU 头 (16 bit):
├── LLID (2 bit): 逻辑链路标识
├── NESN (1 bit): 下一个期望序列号
├── SN (1 bit): 序列号
├── MD (1 bit): 更多数据
├── Length (5 bit): 载荷长度
└── Reserved (6 bit): 保留
|
5.3 时序控制
5.3.1 时隙结构
经典蓝牙时隙:
| 时隙长度:625 μs
时隙编号:k = 0, 1, 2, ...
主设备传输:
├── 偶数时隙 (k=0,2,4...):主设备发送
└── 奇数时隙 (k=1,3,5...):主设备接收
从设备传输:
├── 偶数时隙:从设备接收
└── 奇数时隙:从设备发送
时序图:
主设备 TX ──┐ ┌────┐ ┌────┐ ┌────┐
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬
│ 时隙 0 │ 时隙 1 │ 时隙 2 │ 时隙 3 │
│ (TX) │ (RX) │ (TX) │ (RX) │
└────────┴────────┴────────┴────────┴
从设备 RX ──┐ ┌────┐ ┌────┐ ┌────┐
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬
│ 时隙 0 │ 时隙 1 │ 时隙 2 │ 时隙 3 │
│ (RX) │ (TX) │ (RX) │ (TX) │
└────────┴────────┴────────┴────────┴
|
多时隙包:
| 3 时隙包 (DM3/DH3):
主设备 TX ────────┐
│
▼
┌───────────┬───────┬───────┐
│ 包 │ 空闲 │ 空闲 │
│ (3 时隙) │ │ │
└───────────┴───────┴───────┘
│
▼
占用 3 个时隙 (1875 μs)
下一个传输在时隙 k+3
5 时隙包 (DM5/DH5):
┌───────────────────────────┬───┬───┬───┬───┐
│ 包 (5 时隙) │ │ │ │ │
└───────────────────────────┴───┴───┴───┴───┘
│
▼
占用 5 个时隙 (3125 μs)
|
5.3.2 跳频时序
跳频同步:
| 每个时隙切换到新频率
频率序列:f(k) = 跳频函数 (地址,时钟)
主设备:
├── 使用完整 79 信道跳频序列
└── 决定每个时隙的频率
从设备:
├── 同步到主设备的跳频序列
└── 接收和发送使用相同频率
时序:
时隙 k 时隙 k+1 时隙 k+2
│ │ │
▼ ▼ ▼
f(k) f(k+1) f(k+2)
│ │ │
│ │ │
└─625 μs───┴─625 μs───┘
频率切换时间:< 100 μs
|
自适应跳频 (AFH):
| 检测干扰信道并排除:
正常跳频序列:[0, 15, 32, 47, 63, 78, ...]
│
▼
干扰检测:信道 15, 47 有 WiFi 干扰
│
▼
AFH 映射表:排除信道 15, 47
│
▼
实际跳频:[0, 32, 63, 78, ...]
(只在 77 个好信道上跳)
最少保留信道数:20 个
|
5.4 ARQ 机制
5.4.1 ARQ 原理
自动重传请求 (ARQ):
| 目的:保证数据可靠传输
机制:
├── 发送方:每个包有序列号 (SEQN)
├── 接收方:检测错误,发送 ACK/NAK
└── 发送方:收到 NAK 或超时则重传
停等协议 (Stop-and-Wait):
├── 发送一个包
├── 等待确认
├── 收到 ACK 后发送下一个
└── 收到 NAK 则重传
|
ARQ 状态机:
| 发送方状态机:
┌──────────┐
│ 空闲 │
└────┬─────┘
│ 有数据发送
▼
┌──────────┐
│ 发送 │───► 发送包 (SEQN=n)
└────┬─────┘
│
▼
┌──────────┐
│ 等待 │
│ ACK │
└────┬─────┘
│
├── ACK 收到 ──► ┌──────────┐
│ │ 发送 │ (SEQN=n+1)
│ └──────────┘
│
└── NAK/超时 ──► ┌──────────┐
│ 重传 │ (SEQN=n)
└──────────┘
接收方状态机:
┌──────────┐
│ 期待 │ (期待 SEQN=n)
└────┬─────┘
│
▼
┌──────────┐
│ 接收 │
└────┬─────┘
│
├── 正确且 SEQN=n ──► 发送 ACK, 期待 SEQN=n+1
│
└── 错误或 SEQN≠n ──► 发送 NAK, 期待 SEQN=n (不变)
|
5.4.2 蓝牙 ARQ 实现
ARQ 字段:
| 包头部包含 ARQ 控制字段:
┌─────┬─────┬─────┐
│ ARQN│ SEQN│ Flow│
│ 1b │ 1b │ 1b │
└─────┴─────┴─────┘
ARQN (1 bit):
├── 0 = NAK (未正确接收)
└── 1 = ACK (正确接收)
SEQN (1 bit):
├── 0/1 交替
└── 用于检测重复包
Flow (1 bit):
├── 0 = 暂停 (接收方缓冲区满)
└── 1 = 继续
|
ARQ 时序示例:
| 成功传输:
主设备 从设备
│ │
│── DM1 (SEQN=0) ────────►│
│ │ 检查 CRC
│ │ 正确
│◄────── ACK (ARQN=1) ───│
│ │
│── DM1 (SEQN=1) ────────►│
│ │ 检查 CRC
│ │ 正确
│◄────── ACK (ARQN=1) ───│
│ │
传输错误:
主设备 从设备
│ │
│── DM1 (SEQN=0) ────────►│
│ │ CRC 错误
│◄────── NAK (ARQN=0) ───│
│ │
│── DM1 (SEQN=0) ────────►│ 重传
│ │ 检查 CRC
│ │ 正确
│◄────── ACK (ARQN=1) ───│
│ │
|
5.4.3 BLE ARQ
BLE ARQ 机制:
| BLE 使用类似的 ARQ 但字段不同:
PDU 头中的 ARQ 字段:
├── SN (1 bit): 序列号
└── NESN (1 bit): Next Expected Sequence Number
工作原理:
├── 发送方设置 SN = 当前序列号
├── 接收方设置 NESN = 期望的下一个序列号
└── 当 SN ≠ NESN 时,接收方知道是新包
时序:
发送方 接收方
│ │
│── DATA (SN=0) ─────────►│
│ │ 正确接收
│ │ NESN=1
│◄──── DATA (SN=1,NESN=1)─│
│ 知道对方期望 SN=1 │
│ │
│── DATA (SN=1) ─────────►│
│ │ 正确接收
│ │ NESN=0
│◄──── DATA (SN=0,NESN=0)─│
│ 知道对方期望 SN=0 │
│ │
|
5.5 链路管理
5.5.1 链路类型
SCO 链路 (同步面向连接):
| 用途:语音传输 (如免提通话)
特点:
├── 固定带宽预留
├── 周期性时隙分配
├── 不重传 (低延迟优先)
└── 对称链路
时序:
主设备 TX ──┐ ┌────┐ ┌────┐ ┌────┐
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬
│ SCO0 │ │ SCO1 │ │
└────────┴────────┴────────┴────────┴
│ │
│ │
◄──── T_SCO ──►
T_SCO: SCO 间隔 (典型 3.75 ms)
|
eSCO 链路 (扩展 SCO):
| SCO 的改进版本
改进:
├── 支持重传 (提高可靠性)
├── 可变包类型 (EV3, EV4, EV5)
├── 非对称链路
└── 更好的语音质量
重传窗口:
├── 初始传输
└── 最多 2 次重传
|
ACL 链路 (异步无连接):
| 用途:数据传输
特点:
├── 使用剩余带宽
├── 支持 ARQ 重传
├── 可靠传输
└── 可非对称
与 SCO 共存:
├── SCO 优先
└── ACL 使用 SCO 之外的时隙
|
5.5.2 连接建立流程
经典蓝牙连接建立:
| 1. 待机 (Standby)
│
▼
2. 查询 (Inquiry) - 发现附近设备
│ 发送 ID 包 (广播)
│ 接收 FHS 响应
│
▼
3. 寻呼 (Page) - 建立连接
│ 发送 ID 包 (目标地址)
│ 接收 FHS 响应
│ 发送 FHS (主设备信息)
│ 接收 ID 确认
│
▼
4. 连接 (Connected)
│ 交换链路管理信息
│ 协商加密参数
│ 开始数据传输
|
BLE 连接建立:
| 1. 广播 (Advertising)
│ 外设发送 ADV_IND 包
│ 间隔:20ms - 10.24s
│
▼
2. 扫描 (Scanning)
│ 中心设备监听广播
│ 可发送 SCAN_REQ 请求更多信息
│
▼
3. 发起 (Initiating)
│ 中心设备发送 CONNECT_IND
│ 包含连接参数:
│ - 连接间隔 (7.5ms - 4s)
│ - 从设备延迟
│ - 监督超时
│
▼
4. 连接 (Connected)
│ 进入连接事件
│ 开始数据传输
|
5.5.3 连接参数
BLE 连接参数:
| ┌─────────────────────────────────────────────────────────┐
│ 连接参数 │
├─────────────────────────────────────────────────────────┤
│ │
│ 连接间隔 (Connection Interval): │
│ ├─ 范围:7.5 ms - 4.0 s │
│ ├─ 步长:1.25 ms │
│ └─ 典型值: │
│ ├─ 高速率:7.5-15 ms (音频) │
│ ├─ 一般:20-50 ms (传感器) │
│ └─ 低功耗:100ms-4s (信标) │
│ │
│ 从设备延迟 (Slave Latency): │
│ ├─ 范围:0 - 499 │
│ └─ 允许从设备跳过指定数量的连接事件 │
│ │
│ 监督超时 (Supervision Timeout): │
│ ├─ 范围:100 ms - 32 s │
│ └─ 超过此时间无通信则断开连接 │
│ │
│ 连接事件时长: │
│ └─ 典型 1-5 ms (取决于数据量) │
│ │
└─────────────────────────────────────────────────────────┘
|
5.6 加密与安全
5.6.1 加密架构
| ┌─────────────────────────────────────────────────────────┐
│ 加密引擎 │
├─────────────────────────────────────────────────────────┤
│ │
│ 经典蓝牙 (E0 流密码): │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 4 个 LFSR (25,22,22,17 bit) │ │
│ │ │ │ │ │ │ │
│ │ └─────────┴────────┴────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌───────────────┐ │ │
│ │ │ 组合器函数 │ │ │
│ │ │ (非线性) │ │ │
│ │ └───────┬───────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 密钥流输出 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ BLE (AES-CCM): │
│ ┌─────────────────────────────────────────────────┐ │
│ │ AES-128 加密核心 │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ CCM 模式 (Counter + CBC-MAC) │ │
│ │ ├─ 加密:CTR 模式 │ │
│ │ └─ 认证:CBC-MAC │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
|
5.6.2 加密流程
经典蓝牙加密:
| 加密密钥生成:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 配对 │───►│ 认证 │───►│ 密钥生成 │
│ (Pairing)│ │(Authentication)│(Key Gen)│
└──────────┘ └──────────┘ └──────────┘
│ │ │
│ │ ▼
│ │ ┌──────────┐
│ │ │ K_enc │
│ │ │ (加密密钥)│
│ │ └────┬─────┘
│ │ │
│ │ ▼
│ │ ┌──────────┐
│ │ │ E0 加密 │
│ │ │ 引擎 │
│ │ └──────────┘
│ │
▼ ▼
┌──────────────────────────┐
│ 链路密钥 K_link │
│ (128 bit) │
└──────────────────────────┘
数据传输加密:
明文数据 ──► ⊕ ──► 密文数据
│
▼
E0 密钥流
|
BLE 加密:
| LE 安全连接 (BLE 4.2+):
┌─────────────────────────────────────────────────────────┐
│ 配对流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 阶段 1: 特性交换 │
│ ├─ 交换 IO 能力 │
│ ├─ 交换认证要求 │
│ └─ 确定配对方法 │
│ │
│ 阶段 2: 密钥生成 │
│ ├─ OOB (带外): NFC 等 │
│ ├─ Numeric Compare: 显示并比较 6 位数字 │
│ ├─ Passkey Entry: 输入 6 位密码 │
│ └─ Just Works: 无认证 (最低安全) │
│ │
│ 阶段 3: 密钥分发 │
│ ├─ LTK (Long Term Key): 加密密钥 │
│ ├─ IRK (Identity Resolving Key): 身份解析 │
│ ├─ CSRK (Connection Signature Key): 签名 │
│ └─ 地址信息 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.7 功耗管理
5.7.1 经典蓝牙功耗模式
| ┌─────────────────────────────────────────────────────────┐
│ 功耗模式 │
├─────────────────────────────────────────────────────────┤
│ │
│ Active (活跃模式): │
│ ├─ 正常通信状态 │
│ ├─ 电流:15-30 mA │
│ └─ 监听每个时隙 │
│ │
│ Sniff (监听模式): │
│ ├─ 从设备只在特定时刻监听 │
│ ├─ 电流:5-10 mA │
│ └─ 监听间隔:典型 100 ms - 1 s │
│ │
│ Hold (保持模式): │
│ ├─ 暂时停止 ACL 传输 │
│ ├─ 电流:1-5 mA │
│ └─ 保持时间:协商确定 │
│ │
│ Park (停放模式): │
│ ├─ 从设备释放活跃地址 │
│ ├─ 电流:< 1 mA │
│ └─ 定期监听信标保持同步 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.7.2 BLE 功耗模式
| BLE 超低功耗设计:
┌─────────────────────────────────────────────────────────┐
│ 连接事件 │
├─────────────────────────────────────────────────────────┤
│ │
│ 连接间隔:100 ms │
│ │
│ │◄────── 100 ms ──────►│ │
│ │ │ │
│ ▼ ▼ │
│ ┌────┐ ┌────┐ │
│ │事件│ │事件│ │
│ │ #1 │ │ #2 │ │
│ └─┬──┘ └─┬──┘ │
│ │ │ │
│ │ 2 ms │ 2 ms │
│ │ │ │
│ ▼ ▼ │
│ │
│ 占空比:2 ms / 100 ms = 2% │
│ │
│ 电流: │
│ ├─ 事件期间:10 mA │
│ ├─ 睡眠期间:5 μA │
│ └─ 平均电流:10mA×2% + 5μA×98% ≈ 205 μA │
│ │
│ 电池寿命 (CR2032, 220 mAh): │
│ └─ 220 mAh / 0.205 mA ≈ 1073 小时 ≈ 45 天 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.8 本章小结
本章详细介绍了蓝牙基带处理架构:
- 包结构:访问码、头部、载荷、CRC,经典蓝牙和 BLE 包格式
- 时序控制:625 μs 时隙、跳频同步、多时隙包
- ARQ 机制:停等协议、ACK/NAK、序列号管理
- 链路管理:SCO/eSCO/ACL 链路、连接建立流程
- 加密安全:E0 流密码、AES-CCM、配对流程
- 功耗管理:Active/Sniff/Hold/Park 模式、BLE 超低功耗设计
下一章将深入芯片实现细节,包括射频前端、频率合成器、基带处理器的 Verilog 实现。
上一章:04-调制解调技术
下一章:06-芯片实现详解