经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层2 --- 经典蓝牙(BR/EDR)链路层核心机制详解

📅 2026/8/9 12:57:51
经典蓝牙(Classic Bluetooth / BR/EDR)--- 核心协议层2 --- 经典蓝牙(BR/EDR)链路层核心机制详解
文章目录经典蓝牙BR/EDR链路层深度解析一、协议栈定位与总体架构二、链路状态机Link Controller State Machine状态转换图三、连接建立过程详解3.1 设备发现Inquiry / Inquiry Scan3.2 连接建立Page / Page Scan四、物理链路类型4.1 ACLAsynchronous Connection-oriented Link异步连接链路4.2 SCOSynchronous Connection-Oriented同步面向连接链路4.3 eSCOExtended SCO扩展同步链路五、基带数据包格式Baseband Packet Format5.1 接入码Access Code, 72 bits5.2 包头Header, 54 bits 18 bits 1/3 FEC5.3 有效载荷头Payload Header, 8/16 bits六、时隙结构与跳频机制6.1 时隙结构6.2 跳频序列6.3 AFHAdaptive Frequency Hopping自适应跳频七、链路管理协议LMP7.1 主要 LMP 过程分类7.2 认证流程Legacy Pairing7.3 加密流程八、链路模式与电源管理8.1 活跃模式Active Mode8.2 嗅探模式Sniff Mode8.3 保持模式Hold Mode8.4 停靠模式Park Mode⚠️ 已废弃九、ARQ 与 FEC 机制9.1 ARQ自动重传请求9.2 FEC前向纠错十、关键参数速查表十一、链路层与 BLE 的对比简要总结经典蓝牙BR/EDR链路层深度解析一、协议栈定位与总体架构经典蓝牙链路层位于物理层PHY与L2CAP 逻辑链路控制与适配协议之间是蓝牙协议栈的核心枢纽。其主要职责包括职责说明链路建立与管理设备发现Inquiry、连接建立Page、链路维护物理链路复用支持 ACL异步无连接和 SCO/eSCO同步面向连接两种链路类型链路配置认证、加密、功率控制、QoS 协商、时隙分配跳频控制管理 79/23 个信道的自适应跳频序列链路层在实现上通常分为两个子层┌─────────────────────────────────────┐ │ L2CAP 层 │ ├─────────────────────────────────────┤ │ 链路管理协议 (LMP) │ 链路控制 (LC) │ │ - 信令交互 │ - 基带控制 │ │ - 链路配置协商 │ - 数据包封装 │ │ - 安全策略 │ - ARQ/ FEC │ ├─────────────────────────────────────┤ │ 物理层 (Baseband RF) │ └─────────────────────────────────────┘二、链路状态机Link Controller State Machine链路控制器LC维护一个严格的状态机任何时刻设备只能处于以下七种状态之一状态英文功能描述待机Standby默认低功耗状态仅本地时钟运行不参与任何射频活动查询Inquiry主设备广播查询请求发现周围可发现的从设备查询扫描Inquiry Scan从设备周期性监听查询请求响应自身信息寻呼Page主设备向已知地址的从设备发起连接请求寻呼扫描Page Scan从设备周期性监听寻呼请求准备接受连接主设备已连接Master Response主设备收到从设备响应进入连接参数协商从设备已连接Slave Response从设备响应寻呼与主设备同步跳频序列连接态Connection链路建立完成可进行 ACL/SCO 数据传输状态转换图┌──────────┐ │ Standby │ └────┬─────┘ ┌───────────┼───────────┐ ▼ ▼ ▼ ┌────────┐ ┌─────────┐ ┌─────────┐ │ Inquiry│ │Inquiry │ │ Page │ │ │ │ Scan │ │ │ └───┬────┘ └────┬────┘ └────┬────┘ │ │ │ ▼ ▼ ▼ ┌────────┐ ┌─────────┐ ┌─────────┐ │Master │ │ Slave │ │Master/ │ │Response│ │Response │ │Slave │ └───┬────┘ └────┬────┘ │Response │ │ │ └────┬────┘ └────────────┴────────────┘ │ ▼ ┌──────────┐ │Connection│ └──────────┘三、连接建立过程详解3.1 设备发现Inquiry / Inquiry ScanInquiry查询是主设备发现周围蓝牙设备的过程查询序列主设备在 32 个专用查询频点分为 A/B 两组每组 16 个上发送ID 包无编号的 68 位查询访问码 IAC查询响应从设备在接收到查询后延迟一个随机退避时间0~3 个时隙然后在相同的频点发送FHS 包跳频同步包包含设备访问码DAC本地时钟CLK设备类别CoD是否支持扩展查询响应EIR扩展查询响应EIR蓝牙 2.1 支持从设备可在 FHS 之后额外发送一个数据包携带设备名称、TX 功率等扩展信息关键参数查询间隔Inquiry Interval通常为 11.25ms整个查询过程持续约 10.24s256 个查询周期。3.2 连接建立Page / Page ScanPage寻呼用于主设备与已知 BD_ADDR 的从设备建立连接阶段主设备行为从设备行为Step 1根据从设备 BD_ADDR 计算 32 个寻呼跳频序列发送 ID 包包含 DAC在寻呼扫描频点上监听Step 2等待从设备响应ID 包收到 DAC 匹配后发送响应 ID 包Step 3发送FHS 包携带主设备时钟和跳频序列信息—Step 4—收到 FHS 后发送第二个响应 ID 包确认Step 5主设备切换到信道跳频序列发送 POLL 包从设备同步到新序列回复 NULL 包Step 6链路建立完成进入Connection状态—时钟补偿主设备在寻呼前需估计从设备的时钟漂移。由于不知道从设备时钟主设备会在每个频点上发送两个 ID 包分别对应从设备可能的最大时钟偏差因此寻呼实际上覆盖 64 个频点。四、物理链路类型经典蓝牙支持两种物理链路类型分别服务于不同的业务场景4.1 ACLAsynchronous Connection-oriented Link异步连接链路特性说明方向性点对点主设备与某一从设备之间拓扑主设备可与最多7 个活跃从设备建立 ACL 链路散射网中更多双工方式时分双工TDD主设备在偶数时隙发送从设备在奇数时隙回复可靠性支持 ARQ自动重传请求可选择 1/3 FEC、2/3 FEC 或无 FEC数据速率BR: 723.2 kbps对称/ 57.6 kbps非对称EDR: 最高 2.1/3.0 MbpsACL 数据包类型类型时隙数有效载荷字节用途DM110~17控制数据 用户数据2/3 FECDH110~27用户数据无 FECDM330~1212/3 FECDH330~183无 FECDM550~2242/3 FECDH550~339无 FECAUX110~29无 FEC 无 CRC已废弃DM Data Medium带 FECDH Data High无 FEC数字表示占用的时隙数。4.2 SCOSynchronous Connection-Oriented同步面向连接链路特性说明用途语音等实时等时业务64 kbps 全双工数量主设备最多支持3 条 SCO 链路可与同一或不同从设备时隙分配预留固定时隙周期为 T_SCO 2, 4, 6 个时隙可靠性无 ARQ使用 1/3 FEC 或 2/3 FEC数据包HV1 (10B)、HV2 (20B)、HV3 (30B)、DV数据语音混合SCO 数据包类型类型时隙间隔FEC语音编码HV12 时隙1/3无已编码HV24 时隙2/3无HV36 时隙无无DV与 SCO 相同数据部分可选语音部分固定4.3 eSCOExtended SCO扩展同步链路蓝牙 1.2 引入对 SCO 的增强改进项说明重传窗口在预留时隙后提供重传窗口支持有限 ARQ灵活速率支持非 64kbps 的速率如 8~384 kbps更大数据包EV3 (1~30B)、EV4 (1~120B)、EV5 (1~180B)重传策略可配置重传次数Retransmission Effort五、基带数据包格式Baseband Packet Format蓝牙基带数据包是链路层与物理层交互的基本单元┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐ │ 接入码 │ 包头 │ 有效载荷 │ 可选 FEC │ │ (72 bits) │ (54 bits) │ (0~2745 bits) │ │ │ │ (18 bits FEC)│ │ │ ├─────────────────┼─────────────────┼─────────────────┼─────────────────┤ │ 信道接入码(CAC) │ LT_ADDR │ TYPE │ 数据/语音 │ 1/3 或 2/3 FEC │ │ 或设备接入码 │ │ FLOW │ ARQN │ 或控制信息 │ │ │ (DAC) 或查询 │ │ SEQN │ HEC │ │ │ │ 接入码(IAC) │ │ │ │ └─────────────────┴─────────────────┴─────────────────┴─────────────────┘5.1 接入码Access Code, 72 bits类型用途CAC(Channel Access Code)连接态所有数据包使用由主设备 BD_ADDR 派生DAC(Device Access Code)寻呼/寻呼扫描过程使用由目标设备 BD_ADDR 派生IAC(Inquiry Access Code)查询过程使用通用 IAC (GIAC) 或专用 IAC (DIAC)GIAC0x9E8B33通用查询访问码DIAC0x9E8B00~0x9E8B3F专用查询访问码接入码结构Preamble (4b) Sync Word (64b) Trailer (4b)5.2 包头Header, 54 bits 18 bits 1/3 FEC字段位数说明LT_ADDR3逻辑传输地址标识主设备与哪个从设备通信000 为广播TYPE4数据包类型DM1/DH1/2-DH3 等FLOW1ACL 流控位1继续0停止ARQN1ACK/NAK 指示ARQ 机制SEQN1序列号用于 ARQ 去重HEC8包头错误校验Header Error Check5.3 有效载荷头Payload Header, 8/16 bits对于 ACL 数据包┌─────────┬─────────┬─────────┬─────────┐ │ LLID │ FLOW │ Length │ (未使用)│ │ (2b) │ (1b) │ (5/9b) │ │ └─────────┴─────────┴─────────┴─────────┘LLID含义00保留01L2CAP 数据包继续Continuation10L2CAP 数据包开始Start11LMP 消息不经过 L2CAP六、时隙结构与跳频机制6.1 时隙结构蓝牙采用TDD 时分双工时隙长度为625 µs时隙编号: ... n-1 n n1 n2 n3 ... ├─────┤├─────┤├─────┤├─────┤├─────┤ 主设备 TX: │ M │ │ M │ │ 从设备 TX: │ │ S │ │ S │ ───────┘└─────┘└─────┘└─────┘└─────┘偶数时隙CLK[0]0主设备 → 从设备奇数时隙CLK[0]1从设备 → 主设备多槽包DM3/DH3/DM5/DH5在第一个时隙发送后续时隙不切换频率6.2 跳频序列跳频类型信道数用途Page Hopping32寻呼过程Page Response32寻呼响应Inquiry Hopping32查询过程Inquiry Response32查询响应Channel Hopping79BR/EDR或 23AFH 禁用部分连接态数据传输跳频公式79 信道系统f(k) (CLK_{16-12} k × CLK_{4-2,0} N) mod 79其中k为时隙索引N为与设备地址相关的偏移量跳频速率 1600 hops/s每时隙一跳6.3 AFHAdaptive Frequency Hopping自适应跳频蓝牙 1.2 引入用于与 Wi-Fi 等共存┌─────────────────────────────────────────────┐ │ 79 个信道 (2402~2480 MHz) │ │ ┌────┐┌────┐┌────┐┌────┐┌────┐┌────┐ │ │ │ 好 ││ 坏 ││ 好 ││ 好 ││ 坏 ││ 好 │ ... │ │ │ 信道││ 信道││ 信道││ 信道││ 信道││ 信道│ │ │ └────┘└────┘└────┘└────┘└────┘└────┘ │ │ ↑ Wi-Fi 占用 CH1 (2412MHz) │ │ ↑ Wi-Fi 占用 CH6 (2437MHz) │ │ │ │ AFH 后仅使用好信道最少 20 个 │ └─────────────────────────────────────────────┘主设备通过LMP_SET_AFH命令告知从设备禁用哪些信道最少可用信道数20 个信道分类未知 / 好 / 坏七、链路管理协议LMPLMP 负责链路层所有控制信令通过 ACL 链路传输LLID11不经过 L2CAP。7.1 主要 LMP 过程分类类别LMP 过程功能通用LMP_features_req/res交换双方支持的特性LMP_version_req/res交换版本信息LMP_host_connection_req请求建立 L2CAP 连接LMP_setup_complete链路建立完成安全LMP_au_rand / LMP_sres认证Challenge-ResponseLMP_in_rand生成链路密钥LMP_comb_key生成组合密钥LMP_encryption_mode_req设置加密模式LMP_encryption_key_size_req协商密钥长度LMP_start_encryption_req启动加密LMP_stop_encryption_req停止加密链路配置LMP_hold_req进入 Hold 模式LMP_sniff_req进入 Sniff 模式LMP_park_req进入 Park 模式已废弃LMP_max_slot / LMP_max_slot_req协商最大时隙数LMP_timing_accuracy_req/res交换时钟精度LMP_clkoffset_req/res请求时钟偏移QoSLMP_qos协商轮询间隔、N_BCLMP_supervision_timeout设置链路监督超时AFHLMP_set_AFH设置 AFH 信道映射LMP_channel_classification_req请求信道分类SCO/eSCOLMP_sco_link_req建立 SCO 链路LMP_esco_link_req建立 eSCO 链路LMP_remove_sco_link_req移除 SCO 链路测试LMP_test_activate / LMP_test_control进入测试模式7.2 认证流程Legacy Pairing主设备 从设备 │ │ │ ───── LMP_au_rand (AU_RAND) ──▶│ │ │ 使用链路密钥计算 SRES │ ◀──── LMP_sres (SRES) ─────────│ │ 验证 SRES │ │ │ │ ◀──── LMP_au_rand (AU_RAND) ───│ │ 使用链路密钥计算 SRES │ │ ───── LMP_sres (SRES) ───────▶│ │ │ 验证 SRES │ │7.3 加密流程协商加密模式LMP_encryption_mode_req无加密 / E0 加密 / AES-CCM协商密钥长度LMP_encryption_key_size_req1~16 字节经典配对通常为 16生成加密密钥基于链路密钥、随机数、BD_ADDR 生成启动加密LMP_start_encryption_req双方同步加密引擎E0 流密码经典蓝牙使用基于 LFSR 的 E0 算法已被证明存在弱点蓝牙 4.2 引入 AES-CCM 替代。八、链路模式与电源管理8.1 活跃模式Active Mode正常数据传输模式主设备周期性轮询Poll所有活跃从设备8.2 嗅探模式Sniff Mode参数说明T_sniff嗅探间隔以时隙为单位D_sniff嗅探偏移相对于主设备时钟N_sniff attempt每次嗅探周期内尝试监听的时隙数N_sniff timeout嗅探超时后返回休眠从设备仅在指定的嗅探时隙中监听其余时间休眠适用于低吞吐量但需保持连接的场景如鼠标8.3 保持模式Hold Mode临时暂停 ACL 传输保留 ACL 链路但释放时隙用于执行寻呼、查询、扫描等操作由LMP_hold_req协商保持时长8.4 停靠模式Park Mode⚠️ 已废弃从设备释放 LT_ADDR获得 PM_ADDR停靠成员地址主设备通过信标信道Beacon Train与停靠设备通信蓝牙 4.0 已废弃推荐使用 BLE 的低功耗设计替代九、ARQ 与 FEC 机制9.1 ARQ自动重传请求ACL 链路使用Stop-and-Wait ARQ机制说明SEQN序列号1 bit每发一个新包翻转ARQN确认位1ACK0NAK重传条件CRC 错误、HEC 错误、或 ARQNNAK超时未收到确认则重传直到flush timeoutFlush 机制L2CAP 可设置 Flush Timeout超时后丢弃未确认数据避免旧数据阻塞。9.2 FEC前向纠错FEC 类型编码方式开销适用场景1/3 FEC每位重复 3 次3xSCO 语音包头、FHS 包2/3 FEC(15,10) 汉明码1.5xDM 包、部分 SCO 包无 FEC—1xDH 包高吞吐量场景十、关键参数速查表参数值说明射频频段2.4 GHz ISM2402 ~ 2480 MHz信道带宽1 MHz共 79 个信道BR/EDR时隙长度625 µsTDD 基本单位符号速率1 Msps (BR) / 2-3 Msps (EDR)BR 使用 GFSK跳频速率1600 hops/s每时隙一跳最大 ACL 包DH55 时隙339 字节有效载荷SCO 语音速率64 kbps全双工固定预留监督超时默认值 20s无通信则断开连接查询持续时间~10.24s256 个查询周期十一、链路层与 BLE 的对比简要特性经典蓝牙 BR/EDRBLE低功耗蓝牙状态机7 状态复杂5 状态简单连接建立Inquiry Page~3sAdvertising Scanning10ms数秒链路类型ACL SCO/eSCO仅 LE ACL无同步链路时隙625 µs无固定时隙使用事件驱动跳频79 信道1600 hops/s40 信道自适应跳频ARQStop-and-Wait类似但基于连接事件FEC1/3, 2/3无物理层有白化拓扑散射网Scatternet无散射网支持总结经典蓝牙链路层是一个设计精巧、面向语音与数据混合传输的底层协议。其核心设计思想包括TDD 快速跳频在无需频谱许可的 2.4GHz ISM 频段实现抗干扰通信双链路类型ACL 面向可靠数据传输SCO/eSCO 面向实时等时业务严格状态机确保设备间同步和链路管理的确定性LMP 集中控制主设备主导所有链路参数协商从设备响应理解链路层是掌握蓝牙协议栈的基础也是排查连接问题、优化功耗、分析空中包Air Sniffer的关键。