蓝牙 Core Specification 与 Profile 的边界:从 Core_v6.2 出发的系统学习计划
前言
很多刚开始系统阅读 Bluetooth Core Specification 的同学,尤其是做蓝牙协议栈开发的工程师,都会遇到一个疑问:
为什么 Core 文档里有很多 BLE、ATT、GATT、SMP、LE Link Layer 的内容,却没有详细讲 HFP、A2DP、PBAP 这些经典蓝牙常见协议?
这个问题非常关键。因为如果这个边界没搞清楚,后面读文档很容易出现一种错觉:
-
Core 里面 BLE 好像讲得很细;
-
BR/EDR 只讲了 Radio、Baseband、LMP、SDP、L2CAP;
-
但是实际产品里经典蓝牙最常见的 HFP、A2DP、AVRCP、PBAP 又不在 Core 里;
-
于是怀疑自己是不是读错文档了。
答案是:没有读错,只是 Core Specification 和 Profile Specification 分工不同。
简单说:
Core Specification 负责蓝牙系统的“地基、管道、道路和交通规则”;
HFP、A2DP、PBAP 这些 Profile 负责“具体业务怎么跑”。
Core 不是所有蓝牙协议的大杂烩,而是蓝牙系统的核心基础规范。HFP、A2DP、PBAP、AVRCP、MAP、HID 等属于独立的 Profile 规范,需要在掌握 Core 的基础上另行学习。
本文围绕这个问题,给出一份适合蓝牙协议栈软件开发工程师的完整学习计划。
一、先搞清楚:Core Specification 到底讲什么?
Bluetooth Core Specification 主要描述蓝牙系统的核心协议栈能力,包括:
-
无线物理层;
-
链路层;
-
连接建立;
-
设备发现;
-
链路管理;
-
Host 与 Controller 的接口;
-
L2CAP;
-
SDP;
-
ATT;
-
GATT;
-
SMP;
-
安全机制;
-
HCI;
-
BR/EDR Controller;
-
LE Controller;
-
共存机制;
-
测试模式;
-
错误码;
-
版本演进;
-
Core Configuration。
也就是说,Core 更关注这些问题:
| 问题 | 是否属于 Core |
|---|---|
| BLE 如何广播、扫描、连接 | 是 |
| LE Link Layer PDU 如何定义 | 是 |
| BR/EDR 如何 Inquiry / Page / 建 ACL | 是 |
| BR/EDR Baseband 包格式是什么 | 是 |
| LMP 如何做 Feature Exchange / Authentication / Encryption | 是 |
| HCI Command / Event / ACL Data 如何定义 | 是 |
| L2CAP 如何分片、复用、建 Channel | 是 |
| SDP 如何描述服务 | 是 |
| ATT/GATT 如何描述属性、服务和特征值 | 是 |
| SMP 如何配对、分发密钥 | 是 |
| HFP 的 AT Command 如何交互 | 否 |
| A2DP 的 Codec Capability 如何协商 | 否 |
| AVRCP 如何控制播放暂停和音量 | 否 |
| PBAP 如何通过 OBEX 获取电话本 | 否 |
所以 Core 是蓝牙协议栈的底座,不是所有应用 Profile 的合集。
二、为什么 Core 里没有详细讲 HFP、A2DP、PBAP?
因为 HFP、A2DP、PBAP 属于 Profile Specification,不是 Core Specification 的主体。
它们解决的是具体业务场景:
| Profile | 全称 | 典型用途 | 常见底层依赖 |
|---|---|---|---|
| HFP | Hands-Free Profile | 蓝牙通话、免提、耳机电话控制 | BR/EDR、RFCOMM、SCO/eSCO、SDP |
| A2DP | Advanced Audio Distribution Profile | 经典蓝牙音乐播放 | BR/EDR、L2CAP、AVDTP、SDP |
| AVRCP | Audio/Video Remote Control Profile | 播放控制、音量、歌曲信息 | BR/EDR、AVCTP、SDP |
| PBAP | Phone Book Access Profile | 电话本同步 | BR/EDR、OBEX、SDP |
| MAP | Message Access Profile | 短信/消息访问 | BR/EDR、OBEX、SDP |
| HID | Human Interface Device Profile | 鼠标、键盘、手柄 | BR/EDR 或 LE、L2CAP/GATT |
| SPP | Serial Port Profile | 串口透传 | BR/EDR、RFCOMM、SDP |
Core 只提供这些 Profile 运行所需的底层能力。
比如 HFP 要用 RFCOMM 传 AT Command,要用 SCO/eSCO 传语音,要通过 SDP 发现服务。Core 会讲 SDP、L2CAP、HCI、SCO/eSCO、Baseband、LMP,但不会详细讲:
-
AT+BRSF -
AT+CIND -
AT+CMER -
AT+CLIP -
AT+VGS -
AT+VGM -
HFP Audio Connection 状态机
-
Wide Band Speech 的业务协商流程
这些属于 HFP Profile 规范。
再比如 A2DP,Core 会讲 L2CAP 和 BR/EDR ACL 传输,但不会详细讲:
-
SEP Discovery;
-
Codec Capability;
-
SBC 参数协商;
-
AVDTP Signaling;
-
Stream Start / Suspend / Reconfigure;
-
Media Packet 格式。
这些属于 A2DP 和 AVDTP 相关规范。
PBAP 也是类似。Core 会讲 SDP、L2CAP、BR/EDR 链路,但不会详细讲:
-
OBEX Connect;
-
PullPhoneBook;
-
PullvCardListing;
-
vCard 格式;
-
Phonebook path;
-
Repository;
-
PBAP Client / Server 行为。
这些属于 PBAP、OBEX、vCard 相关规范。
三、为什么感觉 BLE 在 Core 里面更详细?
这个感觉是有原因的。
BLE 的主流应用模型是 GATT-based Profile,而 ATT/GATT/SMP/GAP 都属于 Core 规范的一部分。因此你在 Core 里面能看到相对完整的 BLE 应用基础层:
BLE 常见的数据访问流程,例如:
-
发现服务;
-
发现特征值;
-
Read Characteristic;
-
Write Characteristic;
-
Notification;
-
Indication;
-
Pairing;
-
Bonding;
-
Privacy;
-
RPA 地址解析;
很多都可以在 Core 中找到基础定义。
而 BR/EDR 的应用协议体系历史更早、更分散:
所以不是 Core 偏心 BLE,而是两套生态结构不一样:
| 方向 | Core 中的完整度 | 原因 |
|---|---|---|
| BLE | 看起来更完整 | ATT/GATT/SMP 是 Core 的一部分,BLE 服务发现强依赖 GATT |
| BR/EDR | 底层很完整,上层 Profile 分散 | HFP/A2DP/PBAP/AVRCP 是独立 Profile 规范 |
一句话总结:
BLE 的“通用应用模型”就在 Core 里;
BR/EDR 的“具体业务协议”大多在独立 Profile 里。
四、Core 与 Profile 的关系
可以用一张图理解:
Core 是底座,Profile 是业务。
如果把蓝牙协议栈比喻成城市:
| 城市元素 | 蓝牙对应 |
|---|---|
| 地基、道路、红绿灯、交通规则 | Core Specification |
| 出租车调度规则 | HFP |
| 音乐运输车规则 | A2DP |
| 遥控器操作规则 | AVRCP |
| 电话本快递规则 | PBAP |
| 门牌编号系统 | Assigned Numbers |
| 具体小区服务设计 | GATT Service Specification |
五、面向协议栈工程师的总体学习路线
对于蓝牙协议栈软件开发工程师,不能只学 BLE,也不能只学 BR/EDR Profile。比较合理的路线是:
完整学习目标不是“看完 Core_v6.2”,而是建立下面这套能力:
| 能力 | 目标 |
|---|---|
| 看懂 Core | 明白蓝牙底层、Host、Controller、HCI 的分工 |
| 看懂 BLE | 能分析广播、扫描、连接、GATT、SMP、安全、隐私 |
| 看懂 BR/EDR | 能分析 Inquiry、Page、ACL、SCO/eSCO、LMP、安全 |
| 看懂 HCI log | 能从 HCI Command/Event/ACL/SCO/ISO 定位问题 |
| 看懂 Profile | 能分析 HFP/A2DP/AVRCP/PBAP 的业务流程 |
| 能调试互操作 | 能判断问题发生在 Core、Profile、平台还是对端设备 |
| 能做性能优化 | 能分析吞吐、延迟、功耗、音频卡顿、断连等问题 |
六、完整学习计划
下面给出一个 24 周学习计划,适合有一定嵌入式、协议栈或蓝牙开发基础的工程师。
如果每天投入 1.5 到 2 小时,基本可以在 6 个月内建立比较完整的蓝牙协议栈知识体系。
第一阶段:理解 Core 与 Profile 的边界
第 1 周:蓝牙规范体系总览
学习目标
搞清楚下面几个问题:
-
Core Specification 是什么?
-
Profile Specification 是什么?
-
Assigned Numbers 是什么?
-
HFP/A2DP/PBAP 为什么不在 Core 里?
-
BLE 为什么看起来在 Core 里更完整?
-
BR/EDR 和 BLE 的协议栈分层有什么不同?
阅读内容
| 文档 | 阅读重点 |
|---|---|
| Core Vol 0 | 总目录、版本历史、Core Configuration |
| Core Vol 1 Part A | Architecture、Bluetooth application architecture |
| Bluetooth Profile 规范目录 | HFP、A2DP、AVRCP、PBAP、MAP、HID 等 |
| Assigned Numbers | UUID、PSM、Company ID、AD Type |
输出物
写一张规范关系图:
验收标准
能够用一句话说明:
Core 负责蓝牙通用底层和 Host/Controller 基础协议;Profile 负责具体应用场景的互操作规则。
第二阶段:Core 总体架构
第 2 周:Vol 1 Architecture
学习目标
建立蓝牙协议栈全局地图。
阅读内容
| 章节 | 重点 |
|---|---|
| Vol 1 Part A General description | BR/EDR 与 LE 总览 |
| Core system architecture | Host / Controller 分层 |
| Transport architecture | Physical channel、Physical link、Logical link |
| Communication topology | Piconet、LE topology |
| Security overview | BR/EDR Security 与 LE Security |
| Bluetooth application architecture | GAP、Profile hierarchy、GATT architecture |
重点概念
| 概念 | 理解方式 |
|---|---|
| Host | L2CAP、SDP、GAP、ATT、GATT、SMP 等 |
| Controller | Radio、Baseband、LMP、LL、PHY 等 |
| HCI | Host 与 Controller 之间的标准接口 |
| BR/EDR | 经典蓝牙,偏音频和传统 Profile |
| LE | 低功耗蓝牙,偏 GATT、低功耗和新特性 |
| GAP | 所有蓝牙设备都依赖的通用访问框架 |
| Profile | 应用互操作规则 |
输出物
验收标准
能够解释:
-
ATT/GATT 为什么属于 Host;
-
LMP 为什么属于 BR/EDR Controller;
-
LL 为什么属于 LE Controller;
-
SMP 为什么是 LE Host 侧安全协议;
-
HCI 为什么是协议栈调试的关键观察点。
第三阶段:Host 公共协议
第 3 周:L2CAP
学习目标
掌握 BR/EDR 和 BLE 都绕不开的 Host 传输层。
阅读内容
| 内容 | 重点 |
|---|---|
| L2CAP Channel | CID、PSM、Fixed Channel、Dynamic Channel |
| Basic L2CAP Mode | 基础数据传输 |
| Enhanced Retransmission Mode | BR/EDR 场景常见 |
| Streaming Mode | 流式传输 |
| LE Credit Based Flow Control | BLE 动态通道 |
| Enhanced Credit Based Flow Control | EATT 等新能力 |
| Segmentation and Reassembly | 分片与重组 |
| Flow Control | 信用流控和缓冲区管理 |
重点问题
| 问题 | 要能回答 |
|---|---|
| L2CAP SDU 和 PDU 有什么区别? | SDU 是上层数据单元,PDU 是 L2CAP 实际传输单元 |
| CID 和 PSM 有什么区别? | CID 是通道实例,PSM 是协议/服务入口 |
| ATT 为什么走固定 CID? | BLE 中 ATT 有固定承载 |
| SDP 为什么依赖 L2CAP? | SDP 是 BR/EDR 服务发现协议,需要 L2CAP 承载 |
| A2DP 为什么依赖 L2CAP? | AVDTP 信令和媒体流都要用 L2CAP 通道 |
实践任务
用 Wireshark 或 btmon 分析一段 ACL 数据,拆出:
HCI ACL Data
└── L2CAP
└── ATT / SMP / SDP / AVDTP / AVCTP / RFCOMM
第 4 周:SDP 与 GAP
SDP 学习目标
SDP 是理解 BR/EDR Profile 的入口。很多经典蓝牙 Profile 都需要先通过 SDP 查询服务记录。
SDP 重点
| 项 | 说明 |
|---|---|
| Service Record | 服务记录 |
| ServiceClassIDList | 服务类型 |
| ProtocolDescriptorList | 服务使用哪些底层协议 |
| ProfileDescriptorList | Profile 版本信息 |
| Attribute ID | SDP 属性编号 |
| PSM / RFCOMM Channel | 后续连接入口 |
GAP 学习目标
GAP 是所有蓝牙设备的通用访问框架。
GAP 重点
| 方向 | BR/EDR | BLE |
|---|---|---|
| 发现 | Inquiry | Advertising / Scanning |
| 连接 | Page / Page Scan | Initiating / Connectable Advertising |
| 名称 | Remote Name Request | Advertising Data / GAP Characteristic |
| 安全 | Pairing / Link Key | Pairing / Bonding / LTK / IRK |
| 角色 | Central / Peripheral | Central / Peripheral |
输出物
画出 BR/EDR 典型发现和连接流程:
第 5 周:ATT / GATT
学习目标
掌握 BLE 应用数据模型,也理解 GATT over BR/EDR 的可能性。
阅读重点
| 内容 | 重点 |
|---|---|
| ATT Opcode | Request、Response、Command、Notification、Indication |
| Attribute | Handle、Type、Value、Permission |
| GATT Service | Primary Service、Secondary Service |
| Characteristic | Declaration、Value、Properties |
| Descriptor | CCCD、User Description 等 |
| GATT Procedure | Discover、Read、Write、Notify、Indicate |
| EATT | 多 ATT bearer、并发事务 |
重点图
工程重点
| 问题 | 工程意义 |
|---|---|
| ATT_MTU 如何影响吞吐 | OTA、日志传输、传感器数据上报 |
| Notify 和 Indicate 区别 | 是否需要确认 |
| CCCD 作用 | Client 是否允许 Server 主动上报 |
| Service Changed 作用 | GATT 数据库变化后的缓存一致性 |
| EATT 价值 | 避免传统 ATT 串行阻塞 |
第 6 周:SMP 与 LE 安全
学习目标
掌握 LE 配对、绑定、加密、隐私地址。
阅读重点
| 内容 | 重点 |
|---|---|
| Pairing Request / Response | 配对能力协商 |
| IO Capability | 输入输出能力 |
| Association Model | Just Works、Passkey、Numeric Comparison、OOB |
| LE Legacy Pairing | STK |
| LE Secure Connections | ECDH |
| Key Distribution | LTK、IRK、CSRK |
| Privacy | RPA、IRK、Resolving List |
| Reconnection | 使用已保存密钥重新加密 |
流程图
验收标准
能够解释:
-
Pairing 和 Bonding 的区别;
-
LTK、IRK、CSRK 各自用途;
-
Just Works 为什么不能防 MITM;
-
Numeric Comparison 为什么可以防 MITM;
-
RPA 为什么可以保护隐私;
-
重连时如何使用历史密钥加密。
第四阶段:HCI
第 7 周:HCI 基础
学习目标
掌握 Host 与 Controller 交互的标准接口。
重点内容
| HCI 数据类型 | 方向 | 用途 |
|---|---|---|
| HCI Command | Host → Controller | 控制 Controller |
| HCI Event | Controller → Host | 上报状态 |
| HCI ACL Data | 双向 | 传输 L2CAP 数据 |
| HCI SCO Data | 双向 | 经典蓝牙语音 |
| HCI ISO Data | 双向 | LE Isochronous 数据 |
必须掌握
| 内容 | 说明 |
|---|---|
| OGF / OCF | HCI Opcode 的组成 |
| Command Complete | 命令已完成 |
| Command Status | 命令已接收,后续通过事件完成 |
| Connection Handle | 连接标识 |
| PB Flag | ACL 分片标记 |
| Number Of Completed Packets | Controller buffer 回收 |
| HCI Error Code | 定位失败原因 |
HCI 数据路径
第 8 周:BR/EDR HCI
重点命令
| 场景 | HCI 命令 / 事件 |
|---|---|
| 设备发现 | Inquiry、Inquiry Result |
| 连接建立 | Create Connection、Connection Complete |
| 断开连接 | Disconnect、Disconnection Complete |
| 认证 | Authentication Requested、Authentication Complete |
| 加密 | Set Connection Encryption、Encryption Change |
| 远端信息 | Read Remote Supported Features、Remote Name Request |
| 角色切换 | Switch Role、Role Change |
| Sniff | Sniff Mode、Exit Sniff Mode |
| SCO/eSCO | Setup Synchronous Connection |
典型流程
第 9 周:LE HCI
重点命令
| 场景 | HCI 命令 / 事件 |
|---|---|
| 广播 | LE Set Advertising Parameters / Enable |
| 扩展广播 | LE Set Extended Advertising Parameters / Enable |
| 扫描 | LE Set Scan Parameters / Enable |
| 建链 | LE Create Connection |
| 连接完成 | LE Connection Complete |
| 连接参数更新 | LE Connection Update |
| DLE | LE Set Data Length |
| PHY 切换 | LE Set PHY |
| 加密 | LE Start Encryption / LTK Request |
| 隐私 | Resolving List 相关命令 |
| ISO | CIS / BIS / BIG 相关命令 |
| Channel Sounding | CS 相关命令 |
实践任务
抓一段 BLE 连接 HCI log,按下面路径分析:
HCI_Reset
HCI_LE_Set_Advertising_Parameters
HCI_LE_Set_Advertising_Enable
HCI_LE_Connection_Complete
HCI_LE_Read_Remote_Features
HCI_LE_Data_Length_Change
ATT_Exchange_MTU
GATT_Service_Discovery
SMP_Pairing
Encryption_Change
第五阶段:BLE Controller
第 10 周:LE PHY
学习目标
理解 BLE 空口基础。
重点内容
| 内容 | 说明 |
|---|---|
| 40 个信道 | 3 个广播信道 + 37 个数据信道 |
| 1M PHY | 基础速率 |
| 2M PHY | 高吞吐 |
| Coded PHY | 远距离 |
| GFSK | 调制方式 |
| TX/RX 特性 | 发射、接收、灵敏度、干扰 |
| DTM | Direct Test Mode |
工程问题
| 问题 | 关注点 |
|---|---|
| 为什么 2M PHY 不等于应用层 2 Mbps | 协议开销、连接事件、ACK、空口间隔 |
| Coded PHY 为什么远但慢 | 编码冗余换抗干扰 |
| 广播信道为什么是 37/38/39 | 提高发现概率、避开常见 Wi-Fi 干扰 |
| PHY Update 失败怎么查 | HCI、LLCP、Feature、对端能力 |
第 11 周:LE Link Layer 状态机
重点状态
| 状态 | 作用 |
|---|---|
| Standby | 空闲 |
| Advertising | 广播 |
| Scanning | 扫描 |
| Initiating | 发起连接 |
| Connection | 已连接 |
| Synchronization | 周期广播同步 |
| Isochronous Broadcasting | 等时广播 |
状态图
学习重点
-
Legacy Advertising;
-
Extended Advertising;
-
Periodic Advertising;
-
Scan Request / Scan Response;
-
Connectable / Scannable / Directed Advertising;
-
Filter Accept List;
-
Resolving List;
-
Advertising Report;
-
Scan Response Data。
第 12 周:BLE Connection
学习目标
掌握 BLE 连接建立和连接事件。
重点参数
| 参数 | 说明 |
|---|---|
| Access Address | 连接标识 |
| CRC Init | CRC 初始化值 |
| Channel Map | 数据通道映射 |
| Hop Increment | 跳频参数 |
| Connection Interval | 连接间隔 |
| Peripheral Latency | 从设备延迟 |
| Supervision Timeout | 监督超时 |
| Window Size / Offset | 建链接收窗口 |
| Event Counter | 连接事件计数 |
工程问题
| 问题 | 说明 |
|---|---|
| interval 越小越好吗 | 延迟低,但功耗高 |
| latency 越大越好吗 | 省电,但响应慢 |
| supervision timeout 怎么设置 | 太小易误断,太大断链发现慢 |
| channel map 如何影响稳定性 | 避开坏信道 |
| connection event 内能发几个包 | 影响吞吐 |
第 13 周:LL Control Procedure
重点流程
| LL Procedure | 用途 |
|---|---|
| Feature Exchange | 特性交换 |
| Version Exchange | 版本交换 |
| Connection Update | 连接参数更新 |
| Channel Map Update | 信道图更新 |
| PHY Update | PHY 切换 |
| Data Length Update | 数据长度扩展 |
| Encryption Start | 启动加密 |
| Termination | 断开连接 |
| CIS / BIS Control | 等时通道 |
| Channel Sounding Procedure | 测距 |
LLCP 状态机
工程坑
| 坑 | 说明 |
|---|---|
| Procedure Collision | 双方同时发起控制流程 |
| Instant Passed | 生效点错过 |
| Feature 不匹配 | 本地发了对端不支持的过程 |
| LLCP 超时 | 对端不响应或调度异常 |
| 加密过程中插入其他流程 | 容易互操作出问题 |
第 14 周:LE ISO、Channel Sounding、新特性
ISO 重点
| 概念 | 说明 |
|---|---|
| CIS | Connected Isochronous Stream |
| CIG | Connected Isochronous Group |
| BIS | Broadcast Isochronous Stream |
| BIG | Broadcast Isochronous Group |
| ISOAL | Isochronous Adaptation Layer |
| Framed / Unframed | 等时数据适配模式 |
Channel Sounding 重点
| 概念 | 说明 |
|---|---|
| Channel Sounding | BLE 测距能力 |
| Phase-based Ranging | 基于相位的距离估计 |
| RTT-based Ranging | 基于往返时间的距离估计 |
| Attack Resilience | 抗攻击增强 |
| CS HCI Commands | Host 配置测距 |
| CS LL Procedure | Controller 执行测距过程 |
学习目标
能够说明:
-
LE Audio 为什么需要 ISO;
-
CIS 和 BIS 区别;
-
Channel Sounding 和 AoA/AoD 区别;
-
v6.x 新特性主要增强了哪些方向。
第六阶段:BR/EDR Controller
第 15 周:BR/EDR Radio
学习目标
理解经典蓝牙物理层。
重点内容
| 内容 | 说明 |
|---|---|
| Basic Rate | 基础速率 |
| EDR | Enhanced Data Rate |
| GFSK | Basic Rate 调制 |
| π/4-DQPSK | EDR 调制 |
| 8DPSK | EDR 调制 |
| 79 个信道 | 经典蓝牙跳频 |
| Power Class | 发射功率等级 |
| RX Sensitivity | 接收灵敏度 |
第 16 周:BR/EDR Baseband
学习目标
掌握经典蓝牙链路底层。
重点内容
| 内容 | 说明 |
|---|---|
| Bluetooth Clock | 时钟 |
| BD_ADDR | 蓝牙设备地址 |
| Access Code | 访问码 |
| Inquiry | 发现设备 |
| Page | 建立连接 |
| Piconet | 微微网 |
| Central / Peripheral | 主从角色 |
| Time Slot | 625 μs 时隙 |
| Hop Selection | 跳频选择 |
| Packet Header | LT_ADDR、TYPE、FLOW、ARQN、SEQN、HEC |
| ARQ | 自动重传 |
| FEC | 前向纠错 |
| Whitening | 白化 |
| Sniff / Hold | 低功耗模式 |
状态图
第 17 周:BR/EDR Packet、ACL、SCO/eSCO
重点包类型
| 包类型 | 用途 |
|---|---|
| ID | Inquiry / Page 早期阶段 |
| NULL | 空包,常用于 ACK |
| POLL | 轮询 |
| FHS | Frequency Hop Synchronization |
| DM1/DH1/DH3/DH5 | ACL 数据 |
| 2-DH / 3-DH | EDR ACL 数据 |
| HV | SCO |
| EV | eSCO |
学习目标
能够分析:
-
ACL 数据如何承载 L2CAP;
-
SCO/eSCO 如何承载语音;
-
ARQN/SEQN 如何实现确认和重传;
-
Packet Type 如何影响吞吐;
-
Sniff 模式如何影响延迟和功耗。
第 18 周:LMP
学习目标
理解 BR/EDR 的链路管理协议。
重点流程
| LMP 流程 | 用途 |
|---|---|
| Feature Exchange | 能力交换 |
| Version Exchange | 版本交换 |
| Name Request | 名称请求 |
| Authentication | 鉴权 |
| Pairing | 配对 |
| Encryption | 加密 |
| Role Switch | 角色切换 |
| Sniff Mode | 低功耗 |
| Hold Mode | 低功耗 |
| Power Control | 功率控制 |
| AFH | 自适应跳频 |
| QoS | 服务质量 |
| SCO/eSCO Setup | 语音链路 |
LMP 与 LLCP 对比
| 项 | BR/EDR | BLE |
|---|---|---|
| 控制协议 | LMP | LL Control Procedure |
| 能力交换 | LMP_features_req/res | LL_FEATURE_REQ/RSP |
| 版本交换 | LMP_version_req/res | LL_VERSION_IND |
| 加密控制 | LMP Security | LL Encryption |
| PHY/速率控制 | Packet Type / EDR | PHY Update |
| 低功耗 | Sniff / Hold | Connection Parameter / Subrate |
第 19 周:BR/EDR Security
学习目标
掌握经典蓝牙配对、鉴权、加密。
重点内容
| 内容 | 说明 |
|---|---|
| Link Key | BR/EDR 长期密钥 |
| Authentication | 挑战应答 |
| Legacy Pairing | 旧配对 |
| Secure Simple Pairing | SSP |
| Numeric Comparison | 数字比较 |
| Passkey Entry | 密码输入 |
| Out of Band | 外部通道 |
| Just Works | 简单配对 |
| E0 Encryption | 经典加密 |
| AES-CCM for BR/EDR | 新式加密 |
| Encryption Key Size | 密钥长度协商 |
与 LE Security 对比
| 项 | BR/EDR | LE |
|---|---|---|
| 长期密钥 | Link Key | LTK |
| 隐私密钥 | 无 LE RPA 模型 | IRK |
| 签名密钥 | 非核心常用模型 | CSRK |
| 控制位置 | LMP / Controller | SMP / Host + LL / Controller |
| 配对方式 | SSP | LE Legacy / LE Secure Connections |
第七阶段:BR/EDR Profile 依赖协议
第 20 周:RFCOMM、OBEX、AVDTP、AVCTP
Core 学完后,要补上经典蓝牙 Profile 常用的中间协议。
RFCOMM
| 用途 | 典型 Profile |
|---|---|
| 模拟串口 | HFP、SPP、部分 PBAP/MAP |
学习重点:
-
DLCI;
-
SABM / UA;
-
MSC;
-
Flow Control;
-
RFCOMM Channel;
-
SDP 中的 RFCOMM Server Channel。
OBEX
| 用途 | 典型 Profile |
|---|---|
| 对象交换 | PBAP、MAP、OPP |
学习重点:
-
OBEX Connect;
-
OBEX Get;
-
OBEX Put;
-
Header;
-
Body / End Of Body;
-
Authentication;
-
Session。
AVDTP
| 用途 | 典型 Profile |
|---|---|
| 音频流分发控制 | A2DP |
学习重点:
-
SEP Discovery;
-
Get Capabilities;
-
Set Configuration;
-
Open;
-
Start;
-
Suspend;
-
Close;
-
Abort;
-
Media Transport Channel。
AVCTP
| 用途 | 典型 Profile |
|---|---|
| 音视频远程控制 | AVRCP |
学习重点:
-
Command / Response;
-
Transaction Label;
-
Pass Through;
-
Vendor Dependent;
-
Browsing Channel。
第八阶段:具体 Profile 学习
第 21 周:HFP
学习目标
掌握经典蓝牙通话控制。
学习路径
重点内容
| 内容 | 说明 |
|---|---|
| HF / AG | Hands-Free / Audio Gateway |
| SDP Record | 服务发现 |
| RFCOMM Channel | 控制通道 |
| AT+BRSF | 功能交换 |
| AT+CIND | 指示器 |
| AT+CMER | 开启状态上报 |
| AT+CLIP | 来电号码 |
| AT+VGS / AT+VGM | 音量 |
| SCO/eSCO | 语音承载 |
| CVSD / mSBC | 窄带/宽带语音 |
抓包重点
-
HCI ACL 中的 RFCOMM;
-
RFCOMM 中的 AT Command;
-
HCI Synchronous Connection Complete;
-
SCO/eSCO 数据;
-
音频连接建立失败原因。
第 22 周:A2DP + AVRCP
A2DP 学习目标
掌握经典蓝牙音乐播放。
A2DP 路径
A2DP 重点
| 内容 | 说明 |
|---|---|
| Source / Sink | 音频源 / 音频接收端 |
| SEP | Stream Endpoint |
| Discover | 发现 SEP |
| Get Capabilities | 获取 Codec 能力 |
| Set Configuration | 配置 Codec |
| Open / Start | 打开并启动流 |
| Suspend / Close | 暂停和关闭 |
| SBC | 必选 Codec |
| AAC / aptX / LDAC | 可选或厂商 Codec |
AVRCP 重点
| 内容 | 说明 |
|---|---|
| Controller / Target | 控制端 / 被控端 |
| Pass Through | 播放、暂停、下一曲 |
| Absolute Volume | 绝对音量 |
| Metadata | 歌曲信息 |
| Browsing | 媒体浏览 |
第 23 周:PBAP + MAP
PBAP 学习目标
掌握电话本同步流程。
PBAP 路径
PBAP 重点
| 内容 | 说明 |
|---|---|
| PCE / PSE | Client / Server |
| OBEX Connect | 建立 OBEX 会话 |
| SetPath | 切换电话本路径 |
| PullPhoneBook | 拉取电话本 |
| PullvCardListing | 拉取 vCard 列表 |
| PullvCardEntry | 拉取单个联系人 |
| vCard | 联系人数据格式 |
| Repository | 本机、SIM、收藏夹等 |
MAP 重点
| 内容 | 说明 |
|---|---|
| MCE / MSE | Message Client / Server |
| Message Listing | 消息列表 |
| Message Get | 获取消息 |
| Notification | 消息通知 |
| OBEX | 对象传输基础 |
第九阶段:双模融合与互操作
第 24 周:综合实战
实战 1:BLE GATT 连接完整流程
要求能从 HCI log 中分析:
Advertising
Scanning
Connection Complete
Feature Exchange
Data Length Update
PHY Update
Exchange MTU
Service Discovery
Characteristic Discovery
CCCD Write
Notification
Pairing
Encryption
Disconnection
实战 2:BR/EDR HFP 通话完整流程
要求能分析:
Inquiry
Page
ACL Connection
SDP Search
RFCOMM Connection
AT+BRSF
AT+CIND
AT+CMER
SCO/eSCO Setup
Audio Connected
Call Active
Audio Disconnected
RFCOMM Disconnect
ACL Disconnect
实战 3:A2DP 播放完整流程
要求能分析:
ACL Connection
SDP Search
L2CAP AVDTP Signaling Channel
AVDTP Discover
Get Capabilities
Set Configuration
Open
Start
Media Streaming
Suspend
Close
实战 4:PBAP 电话本同步完整流程
要求能分析:
ACL Connection
SDP Search
RFCOMM / L2CAP Channel
OBEX Connect
SetPath
PullPhoneBook
PullvCardListing
PullvCardEntry
OBEX Disconnect
七、不同方向的学习优先级
1. 做 BLE 协议栈
优先级:
-
Vol 1 Architecture;
-
Vol 3 L2CAP;
-
Vol 3 ATT;
-
Vol 3 GATT;
-
Vol 3 SMP;
-
Vol 4 HCI;
-
Vol 6 LE PHY;
-
Vol 6 LE Link Layer;
-
Vol 6 LE Security;
-
LE ISO / Channel Sounding / Privacy。
2. 做 BR/EDR Controller
优先级:
-
Vol 1 Architecture;
-
Vol 2 Radio;
-
Vol 2 Baseband;
-
Vol 2 LMP;
-
Vol 2 Security;
-
Vol 4 HCI;
-
Vol 2 MSC;
-
Vol 2 Sample Data;
-
SCO/eSCO;
-
AFH / Sniff / Role Switch。
3. 做 BR/EDR Profile
优先级:
-
Vol 1 Architecture;
-
Vol 3 L2CAP;
-
Vol 3 SDP;
-
Vol 4 HCI;
-
BR/EDR ACL/SCO/eSCO;
-
RFCOMM;
-
OBEX;
-
AVDTP;
-
AVCTP;
-
HFP/A2DP/AVRCP/PBAP/MAP。
4. 做双模协议栈
优先级:
-
Core 架构;
-
HCI;
-
L2CAP;
-
SDP/GAP;
-
BLE ATT/GATT/SMP;
-
BLE LL;
-
BR/EDR Baseband/LMP;
-
BR/EDR Security;
-
HFP/A2DP/AVRCP/PBAP;
-
CTKD、Privacy、Coexistence。
八、每周学习模板
建议每周固定产出下面这些内容。
# 本周主题
## 1. 阅读章节
- 文档:
- Volume:
- Part:
- Section:
## 2. 核心概念
| 概念 | 解释 | 工程意义 |
|---|---|---|
| | | |
## 3. 协议流程图
```mermaid
sequenceDiagram
participant A
participant B
A->>B: Message
```
`
## 4. 关键字段
|字段|长度|含义|注意事项|
|---|--:|---|---|
|||||
## 5. HCI / 空口抓包对应
|抓包项|说明|
|---|---|
|HCI Command||
|HCI Event||
|ACL Data||
|L2CAP||
|Upper Protocol||
## 6. 常见错误
|错误|可能原因|定位方法|
|---|---|---|
||||
## 7. 本周遗留问题
- 问题 1
- 问题 2
九、调试视角:如何判断问题属于 Core 还是 Profile?
这是协议栈工程师必须掌握的能力。
| 现象 | 可能层级 |
|---|---|
| BLE 扫不到设备 | LE Advertising / Scanning / Filter / Privacy |
| BLE 连不上 | LE Initiating / Connection Parameters / Address Type |
| BLE GATT 读写失败 | ATT/GATT/L2CAP/Security |
| BLE 配对失败 | SMP / IO Capability / Key Size / AuthReq |
| BR/EDR 搜不到设备 | Inquiry / Inquiry Scan / Class of Device |
| BR/EDR 连不上 | Page / Page Scan / ACL / Authentication |
| HFP AT 命令异常 | HFP Profile / RFCOMM |
| HFP 没声音 | SCO/eSCO / Codec / Audio Path |
| A2DP 播放失败 | AVDTP / Codec / L2CAP / ACL |
| AVRCP 音量不同步 | AVRCP / Absolute Volume |
| PBAP 拉不到联系人 | PBAP / OBEX / 权限 / 电话本路径 |
| 音频卡顿 | Coexistence / Buffer / Retransmission / Scheduling |
| 随机断链 | Supervision Timeout / RSSI / MIC Failure / Remote Terminate |
十、最终学习目标
完成这套学习后,应该具备下面能力:
| 能力 | 验收标准 |
|---|---|
| 读懂 Core | 能说明每个 Volume 负责什么 |
| 读懂 HCI log | 能从 Reset 到 Disconnection 复盘流程 |
| 分析 BLE | 能看懂 Advertising、Connection、GATT、SMP |
| 分析 BR/EDR | 能看懂 Inquiry、Page、ACL、LMP、安全 |
| 分析 HFP | 能看懂 RFCOMM 和 AT Command |
| 分析 A2DP | 能看懂 AVDTP 和 Media Streaming |
| 分析 AVRCP | 能看懂播放控制和音量控制 |
| 分析 PBAP | 能看懂 OBEX 和 vCard 拉取 |
| 定位问题 | 能判断问题属于 Controller、Host、Profile、App 还是对端 |
| 做性能优化 | 能分析吞吐、功耗、延迟、音频稳定性 |
十一、总结
Core_v6.2 不是 HFP、A2DP、PBAP 的详细说明书。
它主要讲的是:
蓝牙系统如何发现设备、建立连接、管理链路、承载数据、进行加密、暴露 Host/Controller 接口,以及如何保证 BR/EDR 和 LE 设备的基础互操作。
HFP、A2DP、AVRCP、PBAP 这些属于 Core 之上的应用 Profile。它们依赖 Core 提供的能力,但具体业务状态机和数据格式不放在 Core 中。
所以正确学习路线应该是:
用一句比较接地气的话总结:
Core 是蓝牙的“操作系统内核 + 交通规则”;
HFP/A2DP/PBAP 是跑在上面的“具体 App”。
只学 Core,看业务会懵;只学 Profile,底层出问题也会懵。
真正的协议栈工程师,两边都要会,抓包还得看得比老板脸色还准。

2103

被折叠的 条评论
为什么被折叠?



