目标 :掌握 BLE 高级特性与前沿技术,包括多连接/多角色、PHY 进阶、DLE/MTU 优化、BLE Mesh、LE Audio、Direction Finding、Channel Sounding,以及认证与量产流程,具备从"能开发"到"能产品化"的能力。
文章目录
- [6.1 进阶阶段的能力地图](#6.1 进阶阶段的能力地图)
- [6.2 多连接与多角色](#6.2 多连接与多角色)
- [6.2.1 什么是多角色(Dual-Mode Topology)](#6.2.1 什么是多角色(Dual-Mode Topology))
- [6.2.2 多连接的数量与约束](#6.2.2 多连接的数量与约束)
- [6.2.3 多连接工程建议](#6.2.3 多连接工程建议)
- [6.3 PHY 层进阶](#6.3 PHY 层进阶)
- [6.3.1 三种 PHY 对比](#6.3.1 三种 PHY 对比)
- [6.3.2 PHY 切换流程](#6.3.2 PHY 切换流程)
- [6.3.3 PHY 选择决策](#6.3.3 PHY 选择决策)
- [6.4 Data Length Extension 与 MTU 优化](#6.4 Data Length Extension 与 MTU 优化)
- [6.4.1 MTU 与 DLE 的区别](#6.4.1 MTU 与 DLE 的区别)
- [6.4.2 优化四步法](#6.4.2 优化四步法)
- [6.4.3 吞吐量估算](#6.4.3 吞吐量估算)
- [6.4.4 优化决策图](#6.4.4 优化决策图)
- [6.5 BLE Mesh](#6.5 BLE Mesh)
- [6.5.1 Mesh 核心概念速览](#6.5.1 Mesh 核心概念速览)
- [6.5.2 节点角色](#6.5.2 节点角色)
- [6.5.3 配网流程](#6.5.3 配网流程)
- [6.5.4 Mesh 适用与不适用](#6.5.4 Mesh 适用与不适用)
- [6.6 LE Audio(BLE 5.2+)](#6.6 LE Audio(BLE 5.2+))
- [6.6.1 LE Audio 的核心变化](#6.6.1 LE Audio 的核心变化)
- [6.6.2 CIS 与 BIS 对比](#6.6.2 CIS 与 BIS 对比)
- [6.6.3 LE Audio 的优势](#6.6.3 LE Audio 的优势)
- [6.7 Direction Finding(BLE 5.1+)](#6.7 Direction Finding(BLE 5.1+))
- [6.7.1 AoA 与 AoD 原理](#6.7.1 AoA 与 AoD 原理)
- [6.7.2 CTE(Constant Tone Extension)](#6.7.2 CTE(Constant Tone Extension))
- [6.7.3 定位精度与应用](#6.7.3 定位精度与应用)
- [6.8 Channel Sounding(BLE 6.0)](#6.8 Channel Sounding(BLE 6.0))
- [6.8.1 Channel Sounding 是什么](#6.8.1 Channel Sounding 是什么)
- [6.8.2 与 Direction Finding 的对比](#6.8.2 与 Direction Finding 的对比)
- [6.8.3 典型应用](#6.8.3 典型应用)
- [6.9 认证与量产](#6.9 认证与量产)
- [6.9.1 认证体系总览](#6.9.1 认证体系总览)
- [6.9.2 OTA DFU 设计](#6.9.2 OTA DFU 设计)
- [6.9.3 产线测试](#6.9.3 产线测试)
- [6.9.4 量产检查清单](#6.9.4 量产检查清单)
- [6.10 阶段检查点](#6.10 阶段检查点)
- [6.11 动手实验](#6.11 动手实验)
- [6.12 开源项目学习参考](#6.12 开源项目学习参考)
- [6.13 面试与工程高频问题](#6.13 面试与工程高频问题)
- 阶段总结
6.1 进阶阶段的能力地图
前五阶段解决的是"能不能做出来",第六阶段解决的是"能不能做得好、做得对、做得合规"。
#mermaid-svg-V2jClJ2dE2ItsgTo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-V2jClJ2dE2ItsgTo .error-icon{fill:#552222;}#mermaid-svg-V2jClJ2dE2ItsgTo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-V2jClJ2dE2ItsgTo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-V2jClJ2dE2ItsgTo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-V2jClJ2dE2ItsgTo .marker.cross{stroke:#333333;}#mermaid-svg-V2jClJ2dE2ItsgTo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-V2jClJ2dE2ItsgTo p{margin:0;}#mermaid-svg-V2jClJ2dE2ItsgTo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster-label text{fill:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster-label span{color:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster-label span p{background-color:transparent;}#mermaid-svg-V2jClJ2dE2ItsgTo .label text,#mermaid-svg-V2jClJ2dE2ItsgTo span{fill:#333;color:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo .node rect,#mermaid-svg-V2jClJ2dE2ItsgTo .node circle,#mermaid-svg-V2jClJ2dE2ItsgTo .node ellipse,#mermaid-svg-V2jClJ2dE2ItsgTo .node polygon,#mermaid-svg-V2jClJ2dE2ItsgTo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-V2jClJ2dE2ItsgTo .rough-node .label text,#mermaid-svg-V2jClJ2dE2ItsgTo .node .label text,#mermaid-svg-V2jClJ2dE2ItsgTo .image-shape .label,#mermaid-svg-V2jClJ2dE2ItsgTo .icon-shape .label{text-anchor:middle;}#mermaid-svg-V2jClJ2dE2ItsgTo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-V2jClJ2dE2ItsgTo .rough-node .label,#mermaid-svg-V2jClJ2dE2ItsgTo .node .label,#mermaid-svg-V2jClJ2dE2ItsgTo .image-shape .label,#mermaid-svg-V2jClJ2dE2ItsgTo .icon-shape .label{text-align:center;}#mermaid-svg-V2jClJ2dE2ItsgTo .node.clickable{cursor:pointer;}#mermaid-svg-V2jClJ2dE2ItsgTo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-V2jClJ2dE2ItsgTo .arrowheadPath{fill:#333333;}#mermaid-svg-V2jClJ2dE2ItsgTo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-V2jClJ2dE2ItsgTo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-V2jClJ2dE2ItsgTo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-V2jClJ2dE2ItsgTo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-V2jClJ2dE2ItsgTo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-V2jClJ2dE2ItsgTo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster text{fill:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo .cluster span{color:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-V2jClJ2dE2ItsgTo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-V2jClJ2dE2ItsgTo rect.text{fill:none;stroke-width:0;}#mermaid-svg-V2jClJ2dE2ItsgTo .icon-shape,#mermaid-svg-V2jClJ2dE2ItsgTo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-V2jClJ2dE2ItsgTo .icon-shape p,#mermaid-svg-V2jClJ2dE2ItsgTo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-V2jClJ2dE2ItsgTo .icon-shape .label rect,#mermaid-svg-V2jClJ2dE2ItsgTo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-V2jClJ2dE2ItsgTo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-V2jClJ2dE2ItsgTo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-V2jClJ2dE2ItsgTo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 产品化
Bluetooth SIG 认证
射频认证 FCC/CE/SRRC
OTA DFU 与量产测试
定位与测距
Direction Finding(AoA/AoD)
Channel Sounding(BLE 6.0)
组网与音频
BLE Mesh
LE Audio / Auracast
性能进阶
多连接/多角色
PHY 切换与 2M/Coded
DLE + MTU 吞吐优化
| 能力 | 验收标准 |
|---|---|
| 多连接 | 能实现一台设备同时连接多个 Central/Peripheral |
| PHY 进阶 | 能动态切换 1M/2M/Coded 并实测覆盖与吞吐 |
| 吞吐优化 | 能把吞吐优化到理论值的 70% 以上 |
| Mesh | 能搭建并调试小型 Mesh 网络 |
| LE Audio | 能说清 CIS/BIS 区别与 LC3 优势 |
| 定位 | 能说清 AoA/AoD 原理与 Channel Sounding 差异 |
| 产品化 | 能制定认证与量产测试计划 |
6.2 多连接与多角色
6.2.1 什么是多角色(Dual-Mode Topology)
BLE 4.1 引入 Dual-Mode Topology ,允许设备同时扮演 Central 和 Peripheral。
#mermaid-svg-GVARVzWW7nVgm5Sy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GVARVzWW7nVgm5Sy .error-icon{fill:#552222;}#mermaid-svg-GVARVzWW7nVgm5Sy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GVARVzWW7nVgm5Sy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GVARVzWW7nVgm5Sy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GVARVzWW7nVgm5Sy .marker.cross{stroke:#333333;}#mermaid-svg-GVARVzWW7nVgm5Sy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GVARVzWW7nVgm5Sy p{margin:0;}#mermaid-svg-GVARVzWW7nVgm5Sy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster-label text{fill:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster-label span{color:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster-label span p{background-color:transparent;}#mermaid-svg-GVARVzWW7nVgm5Sy .label text,#mermaid-svg-GVARVzWW7nVgm5Sy span{fill:#333;color:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy .node rect,#mermaid-svg-GVARVzWW7nVgm5Sy .node circle,#mermaid-svg-GVARVzWW7nVgm5Sy .node ellipse,#mermaid-svg-GVARVzWW7nVgm5Sy .node polygon,#mermaid-svg-GVARVzWW7nVgm5Sy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GVARVzWW7nVgm5Sy .rough-node .label text,#mermaid-svg-GVARVzWW7nVgm5Sy .node .label text,#mermaid-svg-GVARVzWW7nVgm5Sy .image-shape .label,#mermaid-svg-GVARVzWW7nVgm5Sy .icon-shape .label{text-anchor:middle;}#mermaid-svg-GVARVzWW7nVgm5Sy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GVARVzWW7nVgm5Sy .rough-node .label,#mermaid-svg-GVARVzWW7nVgm5Sy .node .label,#mermaid-svg-GVARVzWW7nVgm5Sy .image-shape .label,#mermaid-svg-GVARVzWW7nVgm5Sy .icon-shape .label{text-align:center;}#mermaid-svg-GVARVzWW7nVgm5Sy .node.clickable{cursor:pointer;}#mermaid-svg-GVARVzWW7nVgm5Sy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GVARVzWW7nVgm5Sy .arrowheadPath{fill:#333333;}#mermaid-svg-GVARVzWW7nVgm5Sy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GVARVzWW7nVgm5Sy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GVARVzWW7nVgm5Sy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GVARVzWW7nVgm5Sy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GVARVzWW7nVgm5Sy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GVARVzWW7nVgm5Sy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster text{fill:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy .cluster span{color:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GVARVzWW7nVgm5Sy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GVARVzWW7nVgm5Sy rect.text{fill:none;stroke-width:0;}#mermaid-svg-GVARVzWW7nVgm5Sy .icon-shape,#mermaid-svg-GVARVzWW7nVgm5Sy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GVARVzWW7nVgm5Sy .icon-shape p,#mermaid-svg-GVARVzWW7nVgm5Sy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GVARVzWW7nVgm5Sy .icon-shape .label rect,#mermaid-svg-GVARVzWW7nVgm5Sy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GVARVzWW7nVgm5Sy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GVARVzWW7nVgm5Sy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GVARVzWW7nVgm5Sy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 传感器
网关设备(Dual-Mode)
手机(Central)
Central
Peripheral 角色
(对手机)
Central 角色
(对传感器)
Peripheral 1
Peripheral 2
Peripheral 3
| 角色组合 | 说明 | 典型场景 |
|---|---|---|
| Central + Central | 同时连接多个外设 | 多传感器采集盒 |
| Peripheral + Peripheral | 同时被多个主机连接 | 共享设备 |
| Central + Peripheral | 同时连接和被连接 | 网关、Hub、桥接器 |
| Broadcaster + Observer | 只广播/只扫描 | 信标、扫描枪 |
6.2.2 多连接的数量与约束
| 约束 | 说明 |
|---|---|
| 芯片连接数上限 | 通常 4--20 个,取决于芯片(Nordic nRF52 约 20,ESP32 约 9) |
| 连接间隔时隙冲突 | 多个连接的事件不能重叠 |
| 最小连接间隔经验公式 | ≥ 12.5 + 5 × n ms(n 为当前连接数) |
| RAM 消耗 | 每增加一个连接约 1--2 KB |
| 射频调度 | 连接越多,单连接可用时隙越少,吞吐下降 |
多连接时隙示意:
text
连接 1:|---事件1---| |---事件1---|
连接 2: |---事件2---| |---事件2---|
连接 3: |---事件3---| |---事件3---|
时间轴 ──────────────────────────────────────────►
↑ 事件不能重叠,否则丢包
6.2.3 多连接工程建议
| 建议 | 说明 |
|---|---|
| 合理设置连接间隔 | 连接越多,间隔应越大 |
| 避免同时高频通知 | 多连接下通知会抢占时隙 |
| 使用连接参数协商 | 让 Central 接受更合理的参数 |
| 监控丢包率 | 多连接下丢包率上升是时隙冲突信号 |
| 分时调度 | 关键连接优先,非关键连接拉长间隔 |
6.3 PHY 层进阶
6.3.1 三种 PHY 对比
| PHY 类型 | 速率 | 引入版本 | 特点 | 典型用途 |
|---|---|---|---|---|
| LE 1M | 1 Mbps | 4.0 | 默认 PHY,覆盖最优 | 通用场景 |
| LE 2M | 2 Mbps | 5.0 | 速率翻倍,传输时间减半 | 高吞吐、省电 |
| LE Coded S=2 | 125 Kbps | 5.0 | 编码增益,覆盖约 2 倍 | 远距离 |
| LE Coded S=8 | 125 Kbps | 5.0 | 编码增益,覆盖约 4 倍 | 超远距离 |
6.3.2 PHY 切换流程
Peripheral Central Peripheral Central #mermaid-svg-1jb4Yr0BgDg3XiAA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1jb4Yr0BgDg3XiAA .error-icon{fill:#552222;}#mermaid-svg-1jb4Yr0BgDg3XiAA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1jb4Yr0BgDg3XiAA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1jb4Yr0BgDg3XiAA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1jb4Yr0BgDg3XiAA .marker.cross{stroke:#333333;}#mermaid-svg-1jb4Yr0BgDg3XiAA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1jb4Yr0BgDg3XiAA p{margin:0;}#mermaid-svg-1jb4Yr0BgDg3XiAA .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1jb4Yr0BgDg3XiAA text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-1jb4Yr0BgDg3XiAA .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-1jb4Yr0BgDg3XiAA .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-1jb4Yr0BgDg3XiAA #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-1jb4Yr0BgDg3XiAA .sequenceNumber{fill:white;}#mermaid-svg-1jb4Yr0BgDg3XiAA #sequencenumber{fill:#333;}#mermaid-svg-1jb4Yr0BgDg3XiAA #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-1jb4Yr0BgDg3XiAA .messageText{fill:#333;stroke:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1jb4Yr0BgDg3XiAA .labelText,#mermaid-svg-1jb4Yr0BgDg3XiAA .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .loopText,#mermaid-svg-1jb4Yr0BgDg3XiAA .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-1jb4Yr0BgDg3XiAA .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-1jb4Yr0BgDg3XiAA .noteText,#mermaid-svg-1jb4Yr0BgDg3XiAA .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-1jb4Yr0BgDg3XiAA .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1jb4Yr0BgDg3XiAA .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1jb4Yr0BgDg3XiAA .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1jb4Yr0BgDg3XiAA .actorPopupMenu{position:absolute;}#mermaid-svg-1jb4Yr0BgDg3XiAA .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-1jb4Yr0BgDg3XiAA .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1jb4Yr0BgDg3XiAA .actor-man circle,#mermaid-svg-1jb4Yr0BgDg3XiAA line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-1jb4Yr0BgDg3XiAA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双方切换到 2M PHY LL_PHY_REQ(请求 2M) 1 LL_PHY_RSP(接受 2M) 2 LL_PHY_UPDATE_IND 3 🔵 2M PHY 数据 4
| 步骤 | 说明 |
|---|---|
| 1 | 任意一方发送 LL_PHY_REQ |
| 2 | 对方回复 LL_PHY_RSP |
| 3 | Central 发送 LL_PHY_UPDATE_IND 指定生效时机 |
| 4 | 双方在指定连接事件切换到新 PHY |
6.3.3 PHY 选择决策
#mermaid-svg-OHZEQY2APM7EPBCi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OHZEQY2APM7EPBCi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OHZEQY2APM7EPBCi .error-icon{fill:#552222;}#mermaid-svg-OHZEQY2APM7EPBCi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OHZEQY2APM7EPBCi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OHZEQY2APM7EPBCi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OHZEQY2APM7EPBCi .marker.cross{stroke:#333333;}#mermaid-svg-OHZEQY2APM7EPBCi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OHZEQY2APM7EPBCi p{margin:0;}#mermaid-svg-OHZEQY2APM7EPBCi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OHZEQY2APM7EPBCi .cluster-label text{fill:#333;}#mermaid-svg-OHZEQY2APM7EPBCi .cluster-label span{color:#333;}#mermaid-svg-OHZEQY2APM7EPBCi .cluster-label span p{background-color:transparent;}#mermaid-svg-OHZEQY2APM7EPBCi .label text,#mermaid-svg-OHZEQY2APM7EPBCi span{fill:#333;color:#333;}#mermaid-svg-OHZEQY2APM7EPBCi .node rect,#mermaid-svg-OHZEQY2APM7EPBCi .node circle,#mermaid-svg-OHZEQY2APM7EPBCi .node ellipse,#mermaid-svg-OHZEQY2APM7EPBCi .node polygon,#mermaid-svg-OHZEQY2APM7EPBCi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OHZEQY2APM7EPBCi .rough-node .label text,#mermaid-svg-OHZEQY2APM7EPBCi .node .label text,#mermaid-svg-OHZEQY2APM7EPBCi .image-shape .label,#mermaid-svg-OHZEQY2APM7EPBCi .icon-shape .label{text-anchor:middle;}#mermaid-svg-OHZEQY2APM7EPBCi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OHZEQY2APM7EPBCi .rough-node .label,#mermaid-svg-OHZEQY2APM7EPBCi .node .label,#mermaid-svg-OHZEQY2APM7EPBCi .image-shape .label,#mermaid-svg-OHZEQY2APM7EPBCi .icon-shape .label{text-align:center;}#mermaid-svg-OHZEQY2APM7EPBCi .node.clickable{cursor:pointer;}#mermaid-svg-OHZEQY2APM7EPBCi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OHZEQY2APM7EPBCi .arrowheadPath{fill:#333333;}#mermaid-svg-OHZEQY2APM7EPBCi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OHZEQY2APM7EPBCi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OHZEQY2APM7EPBCi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OHZEQY2APM7EPBCi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OHZEQY2APM7EPBCi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OHZEQY2APM7EPBCi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OHZEQY2APM7EPBCi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OHZEQY2APM7EPBCi .cluster text{fill:#333;}#mermaid-svg-OHZEQY2APM7EPBCi .cluster span{color:#333;}#mermaid-svg-OHZEQY2APM7EPBCi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OHZEQY2APM7EPBCi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OHZEQY2APM7EPBCi rect.text{fill:none;stroke-width:0;}#mermaid-svg-OHZEQY2APM7EPBCi .icon-shape,#mermaid-svg-OHZEQY2APM7EPBCi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OHZEQY2APM7EPBCi .icon-shape p,#mermaid-svg-OHZEQY2APM7EPBCi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OHZEQY2APM7EPBCi .icon-shape .label rect,#mermaid-svg-OHZEQY2APM7EPBCi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OHZEQY2APM7EPBCi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OHZEQY2APM7EPBCi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OHZEQY2APM7EPBCi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
选择 PHY
需要远距离?
✅ LE Coded S=8
需要高吞吐/省电?
✅ LE 2M
✅ LE 1M(默认)
| 场景 | 推荐 PHY | 理由 |
|---|---|---|
| 普通手环 | 1M | 兼容性最好 |
| 固件升级(OTA) | 2M | 传输时间减半,省电 |
| 室内定位信标 | 1M | 覆盖与功耗平衡 |
| 室外远距离传感器 | Coded S=8 | 覆盖优先 |
| 音频 | 2M | 吞吐需求高 |
6.4 Data Length Extension 与 MTU 优化
6.4.1 MTU 与 DLE 的区别
| 项目 | ATT MTU | LL Data Length (DLE) |
|---|---|---|
| 所在层 | ATT 层 | Link Layer |
| 默认值 | 23 字节 | 27 字节 |
| 最大值 | 517 字节 | 251 字节 |
| 作用 | 单次 ATT PDU 最大长度 | 单个 LL PDU 承载的数据量 |
| 协商方式 | ATT Exchange MTU | LL_LENGTH_REQ/RSP |
6.4.2 优化四步法
| 步骤 | 操作 | 效果 |
|---|---|---|
| 1 | 协商 MTU 到 247 或 517 | 减少 ATT 层分段 |
| 2 | 协商 DLE 到 251 字节 | 单个 LL PDU 承载更多数据 |
| 3 | 启用 2M PHY | 传输时间减半 |
| 4 | 优化 Connection Interval | 每个连接事件传更多包 |
6.4.3 吞吐量估算
text
理论吞吐 ≈ (ATT MTU - 3) × 8 / Connection Interval
示例:MTU=247, CI=7.5ms
≈ (247 - 3) × 8 / 0.0075 ≈ 260 Kbps
优化后(2M PHY + DLE)实际可达理论值 70%--80%
| 优化项 | 对吞吐的影响 |
|---|---|
| MTU 23 → 247 | 显著提升 |
| DLE 27 → 251 | 显著提升 |
| 1M → 2M PHY | 约翻倍 |
| CI 减小 | 提升但功耗上升 |
6.4.4 优化决策图
#mermaid-svg-rpPx8ikK3FloGWKn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rpPx8ikK3FloGWKn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rpPx8ikK3FloGWKn .error-icon{fill:#552222;}#mermaid-svg-rpPx8ikK3FloGWKn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rpPx8ikK3FloGWKn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rpPx8ikK3FloGWKn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rpPx8ikK3FloGWKn .marker.cross{stroke:#333333;}#mermaid-svg-rpPx8ikK3FloGWKn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rpPx8ikK3FloGWKn p{margin:0;}#mermaid-svg-rpPx8ikK3FloGWKn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rpPx8ikK3FloGWKn .cluster-label text{fill:#333;}#mermaid-svg-rpPx8ikK3FloGWKn .cluster-label span{color:#333;}#mermaid-svg-rpPx8ikK3FloGWKn .cluster-label span p{background-color:transparent;}#mermaid-svg-rpPx8ikK3FloGWKn .label text,#mermaid-svg-rpPx8ikK3FloGWKn span{fill:#333;color:#333;}#mermaid-svg-rpPx8ikK3FloGWKn .node rect,#mermaid-svg-rpPx8ikK3FloGWKn .node circle,#mermaid-svg-rpPx8ikK3FloGWKn .node ellipse,#mermaid-svg-rpPx8ikK3FloGWKn .node polygon,#mermaid-svg-rpPx8ikK3FloGWKn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rpPx8ikK3FloGWKn .rough-node .label text,#mermaid-svg-rpPx8ikK3FloGWKn .node .label text,#mermaid-svg-rpPx8ikK3FloGWKn .image-shape .label,#mermaid-svg-rpPx8ikK3FloGWKn .icon-shape .label{text-anchor:middle;}#mermaid-svg-rpPx8ikK3FloGWKn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rpPx8ikK3FloGWKn .rough-node .label,#mermaid-svg-rpPx8ikK3FloGWKn .node .label,#mermaid-svg-rpPx8ikK3FloGWKn .image-shape .label,#mermaid-svg-rpPx8ikK3FloGWKn .icon-shape .label{text-align:center;}#mermaid-svg-rpPx8ikK3FloGWKn .node.clickable{cursor:pointer;}#mermaid-svg-rpPx8ikK3FloGWKn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rpPx8ikK3FloGWKn .arrowheadPath{fill:#333333;}#mermaid-svg-rpPx8ikK3FloGWKn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rpPx8ikK3FloGWKn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rpPx8ikK3FloGWKn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rpPx8ikK3FloGWKn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rpPx8ikK3FloGWKn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rpPx8ikK3FloGWKn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rpPx8ikK3FloGWKn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rpPx8ikK3FloGWKn .cluster text{fill:#333;}#mermaid-svg-rpPx8ikK3FloGWKn .cluster span{color:#333;}#mermaid-svg-rpPx8ikK3FloGWKn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rpPx8ikK3FloGWKn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rpPx8ikK3FloGWKn rect.text{fill:none;stroke-width:0;}#mermaid-svg-rpPx8ikK3FloGWKn .icon-shape,#mermaid-svg-rpPx8ikK3FloGWKn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rpPx8ikK3FloGWKn .icon-shape p,#mermaid-svg-rpPx8ikK3FloGWKn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rpPx8ikK3FloGWKn .icon-shape .label rect,#mermaid-svg-rpPx8ikK3FloGWKn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rpPx8ikK3FloGWKn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rpPx8ikK3FloGWKn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rpPx8ikK3FloGWKn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
否
是
是
否
吞吐不足
MTU 是否已协商?
协商 MTU 247/517
DLE 是否已协商?
协商 DLE 251
是否支持 2M PHY?
切换到 2M PHY
优化 Connection Interval
实测吞吐
6.5 BLE Mesh
6.5.1 Mesh 核心概念速览
BLE Mesh 是在 BLE 广播之上构建的组网协议,核心是广播承载 + 多跳泛洪 + 发布/订阅 + 三层密钥。
#mermaid-svg-x0soBfbkfqHiRMwD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-x0soBfbkfqHiRMwD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-x0soBfbkfqHiRMwD .error-icon{fill:#552222;}#mermaid-svg-x0soBfbkfqHiRMwD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-x0soBfbkfqHiRMwD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-x0soBfbkfqHiRMwD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-x0soBfbkfqHiRMwD .marker.cross{stroke:#333333;}#mermaid-svg-x0soBfbkfqHiRMwD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-x0soBfbkfqHiRMwD p{margin:0;}#mermaid-svg-x0soBfbkfqHiRMwD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-x0soBfbkfqHiRMwD .cluster-label text{fill:#333;}#mermaid-svg-x0soBfbkfqHiRMwD .cluster-label span{color:#333;}#mermaid-svg-x0soBfbkfqHiRMwD .cluster-label span p{background-color:transparent;}#mermaid-svg-x0soBfbkfqHiRMwD .label text,#mermaid-svg-x0soBfbkfqHiRMwD span{fill:#333;color:#333;}#mermaid-svg-x0soBfbkfqHiRMwD .node rect,#mermaid-svg-x0soBfbkfqHiRMwD .node circle,#mermaid-svg-x0soBfbkfqHiRMwD .node ellipse,#mermaid-svg-x0soBfbkfqHiRMwD .node polygon,#mermaid-svg-x0soBfbkfqHiRMwD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-x0soBfbkfqHiRMwD .rough-node .label text,#mermaid-svg-x0soBfbkfqHiRMwD .node .label text,#mermaid-svg-x0soBfbkfqHiRMwD .image-shape .label,#mermaid-svg-x0soBfbkfqHiRMwD .icon-shape .label{text-anchor:middle;}#mermaid-svg-x0soBfbkfqHiRMwD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-x0soBfbkfqHiRMwD .rough-node .label,#mermaid-svg-x0soBfbkfqHiRMwD .node .label,#mermaid-svg-x0soBfbkfqHiRMwD .image-shape .label,#mermaid-svg-x0soBfbkfqHiRMwD .icon-shape .label{text-align:center;}#mermaid-svg-x0soBfbkfqHiRMwD .node.clickable{cursor:pointer;}#mermaid-svg-x0soBfbkfqHiRMwD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-x0soBfbkfqHiRMwD .arrowheadPath{fill:#333333;}#mermaid-svg-x0soBfbkfqHiRMwD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-x0soBfbkfqHiRMwD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-x0soBfbkfqHiRMwD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x0soBfbkfqHiRMwD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-x0soBfbkfqHiRMwD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x0soBfbkfqHiRMwD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-x0soBfbkfqHiRMwD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-x0soBfbkfqHiRMwD .cluster text{fill:#333;}#mermaid-svg-x0soBfbkfqHiRMwD .cluster span{color:#333;}#mermaid-svg-x0soBfbkfqHiRMwD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-x0soBfbkfqHiRMwD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-x0soBfbkfqHiRMwD rect.text{fill:none;stroke-width:0;}#mermaid-svg-x0soBfbkfqHiRMwD .icon-shape,#mermaid-svg-x0soBfbkfqHiRMwD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-x0soBfbkfqHiRMwD .icon-shape p,#mermaid-svg-x0soBfbkfqHiRMwD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-x0soBfbkfqHiRMwD .icon-shape .label rect,#mermaid-svg-x0soBfbkfqHiRMwD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-x0soBfbkfqHiRMwD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-x0soBfbkfqHiRMwD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-x0soBfbkfqHiRMwD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} BLE Mesh 协议栈
Model Layer
Access Layer
Upper Transport
Lower Transport
Network Layer
Bearer Layer
Advertising Bearer
GATT Bearer
| 关键概念 | 说明 |
|---|---|
| Node / Element / Model | 设备 / 功能单元 / 行为定义 |
| Relay | 中继转发,扩展覆盖 |
| Proxy | 通过 GATT 让手机接入 |
| Friend / LPN | 为低功耗节点缓存消息 |
| NetKey / AppKey / DevKey | 三层安全密钥 |
| Managed Flooding | 受控泛洪,无路由表 |
6.5.2 节点角色
#mermaid-svg-ADmQrWz1FQjzuqbO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ADmQrWz1FQjzuqbO .error-icon{fill:#552222;}#mermaid-svg-ADmQrWz1FQjzuqbO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ADmQrWz1FQjzuqbO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ADmQrWz1FQjzuqbO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ADmQrWz1FQjzuqbO .marker.cross{stroke:#333333;}#mermaid-svg-ADmQrWz1FQjzuqbO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ADmQrWz1FQjzuqbO p{margin:0;}#mermaid-svg-ADmQrWz1FQjzuqbO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster-label text{fill:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster-label span{color:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster-label span p{background-color:transparent;}#mermaid-svg-ADmQrWz1FQjzuqbO .label text,#mermaid-svg-ADmQrWz1FQjzuqbO span{fill:#333;color:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO .node rect,#mermaid-svg-ADmQrWz1FQjzuqbO .node circle,#mermaid-svg-ADmQrWz1FQjzuqbO .node ellipse,#mermaid-svg-ADmQrWz1FQjzuqbO .node polygon,#mermaid-svg-ADmQrWz1FQjzuqbO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ADmQrWz1FQjzuqbO .rough-node .label text,#mermaid-svg-ADmQrWz1FQjzuqbO .node .label text,#mermaid-svg-ADmQrWz1FQjzuqbO .image-shape .label,#mermaid-svg-ADmQrWz1FQjzuqbO .icon-shape .label{text-anchor:middle;}#mermaid-svg-ADmQrWz1FQjzuqbO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ADmQrWz1FQjzuqbO .rough-node .label,#mermaid-svg-ADmQrWz1FQjzuqbO .node .label,#mermaid-svg-ADmQrWz1FQjzuqbO .image-shape .label,#mermaid-svg-ADmQrWz1FQjzuqbO .icon-shape .label{text-align:center;}#mermaid-svg-ADmQrWz1FQjzuqbO .node.clickable{cursor:pointer;}#mermaid-svg-ADmQrWz1FQjzuqbO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ADmQrWz1FQjzuqbO .arrowheadPath{fill:#333333;}#mermaid-svg-ADmQrWz1FQjzuqbO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ADmQrWz1FQjzuqbO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ADmQrWz1FQjzuqbO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ADmQrWz1FQjzuqbO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ADmQrWz1FQjzuqbO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ADmQrWz1FQjzuqbO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster text{fill:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO .cluster span{color:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ADmQrWz1FQjzuqbO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ADmQrWz1FQjzuqbO rect.text{fill:none;stroke-width:0;}#mermaid-svg-ADmQrWz1FQjzuqbO .icon-shape,#mermaid-svg-ADmQrWz1FQjzuqbO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ADmQrWz1FQjzuqbO .icon-shape p,#mermaid-svg-ADmQrWz1FQjzuqbO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ADmQrWz1FQjzuqbO .icon-shape .label rect,#mermaid-svg-ADmQrWz1FQjzuqbO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ADmQrWz1FQjzuqbO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ADmQrWz1FQjzuqbO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ADmQrWz1FQjzuqbO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Provisioner
(手机/网关)
普通节点
Relay 节点
普通节点
LPN
(低功耗)
Friend 节点
| 角色 | 职责 | 功耗 |
|---|---|---|
| 普通节点 | 收发自己的消息 | 中 |
| Relay | 转发其他节点消息 | 较高 |
| Proxy | 让 GATT 设备接入 | 较高 |
| Friend | 为 LPN 缓存消息 | 较高 |
| LPN | 休眠 + 周期轮询 | 极低 |
6.5.3 配网流程
未配网设备 Provisioner 未配网设备 Provisioner #mermaid-svg-Yq5qd14MBII54u2h{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Yq5qd14MBII54u2h .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Yq5qd14MBII54u2h .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Yq5qd14MBII54u2h .error-icon{fill:#552222;}#mermaid-svg-Yq5qd14MBII54u2h .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Yq5qd14MBII54u2h .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Yq5qd14MBII54u2h .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Yq5qd14MBII54u2h .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Yq5qd14MBII54u2h .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Yq5qd14MBII54u2h .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Yq5qd14MBII54u2h .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Yq5qd14MBII54u2h .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Yq5qd14MBII54u2h .marker.cross{stroke:#333333;}#mermaid-svg-Yq5qd14MBII54u2h svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Yq5qd14MBII54u2h p{margin:0;}#mermaid-svg-Yq5qd14MBII54u2h .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yq5qd14MBII54u2h text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Yq5qd14MBII54u2h .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Yq5qd14MBII54u2h .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Yq5qd14MBII54u2h .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Yq5qd14MBII54u2h .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Yq5qd14MBII54u2h #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Yq5qd14MBII54u2h .sequenceNumber{fill:white;}#mermaid-svg-Yq5qd14MBII54u2h #sequencenumber{fill:#333;}#mermaid-svg-Yq5qd14MBII54u2h #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Yq5qd14MBII54u2h .messageText{fill:#333;stroke:none;}#mermaid-svg-Yq5qd14MBII54u2h .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yq5qd14MBII54u2h .labelText,#mermaid-svg-Yq5qd14MBII54u2h .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Yq5qd14MBII54u2h .loopText,#mermaid-svg-Yq5qd14MBII54u2h .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Yq5qd14MBII54u2h .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Yq5qd14MBII54u2h .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Yq5qd14MBII54u2h .noteText,#mermaid-svg-Yq5qd14MBII54u2h .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Yq5qd14MBII54u2h .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yq5qd14MBII54u2h .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yq5qd14MBII54u2h .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Yq5qd14MBII54u2h .actorPopupMenu{position:absolute;}#mermaid-svg-Yq5qd14MBII54u2h .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Yq5qd14MBII54u2h .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Yq5qd14MBII54u2h .actor-man circle,#mermaid-svg-Yq5qd14MBII54u2h line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Yq5qd14MBII54u2h :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ECDH P-256 Mesh Beacon 1 Invite / Capabilities 2 Start 3 Public Key 4 Public Key 5 认证(Blink/Input/Output/OOB) 6 分发 NetKey + 单播地址 + IV Index 7 Provisioning Complete 8
6.5.4 Mesh 适用与不适用
| 适用 | 不适用 |
|---|---|
| 大规模灯控 | 大文件传输 |
| 楼宇自动化 | 高实时控制 |
| 工业传感网络 | 高吞吐场景 |
| 资产追踪 | 低延迟音视频 |
详细内容 可参考我此前撰写的《低功耗蓝牙 Mesh 详解》专题文章,涵盖架构、协议栈、安全、配网、开发实践与排障。
6.6 LE Audio(BLE 5.2+)
6.6.1 LE Audio 的核心变化
LE Audio 不是"BLE 传音频"这么简单,它引入了全新的音频架构 ,用 LC3 编码 + 等时信道(Isochronous Channels) 替代经典蓝牙的 A2DP/HFP。
#mermaid-svg-fPxMkTWFz0pKHhnX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fPxMkTWFz0pKHhnX .error-icon{fill:#552222;}#mermaid-svg-fPxMkTWFz0pKHhnX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fPxMkTWFz0pKHhnX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fPxMkTWFz0pKHhnX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fPxMkTWFz0pKHhnX .marker.cross{stroke:#333333;}#mermaid-svg-fPxMkTWFz0pKHhnX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fPxMkTWFz0pKHhnX p{margin:0;}#mermaid-svg-fPxMkTWFz0pKHhnX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster-label text{fill:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster-label span{color:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster-label span p{background-color:transparent;}#mermaid-svg-fPxMkTWFz0pKHhnX .label text,#mermaid-svg-fPxMkTWFz0pKHhnX span{fill:#333;color:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX .node rect,#mermaid-svg-fPxMkTWFz0pKHhnX .node circle,#mermaid-svg-fPxMkTWFz0pKHhnX .node ellipse,#mermaid-svg-fPxMkTWFz0pKHhnX .node polygon,#mermaid-svg-fPxMkTWFz0pKHhnX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fPxMkTWFz0pKHhnX .rough-node .label text,#mermaid-svg-fPxMkTWFz0pKHhnX .node .label text,#mermaid-svg-fPxMkTWFz0pKHhnX .image-shape .label,#mermaid-svg-fPxMkTWFz0pKHhnX .icon-shape .label{text-anchor:middle;}#mermaid-svg-fPxMkTWFz0pKHhnX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fPxMkTWFz0pKHhnX .rough-node .label,#mermaid-svg-fPxMkTWFz0pKHhnX .node .label,#mermaid-svg-fPxMkTWFz0pKHhnX .image-shape .label,#mermaid-svg-fPxMkTWFz0pKHhnX .icon-shape .label{text-align:center;}#mermaid-svg-fPxMkTWFz0pKHhnX .node.clickable{cursor:pointer;}#mermaid-svg-fPxMkTWFz0pKHhnX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fPxMkTWFz0pKHhnX .arrowheadPath{fill:#333333;}#mermaid-svg-fPxMkTWFz0pKHhnX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fPxMkTWFz0pKHhnX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fPxMkTWFz0pKHhnX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fPxMkTWFz0pKHhnX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fPxMkTWFz0pKHhnX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fPxMkTWFz0pKHhnX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster text{fill:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX .cluster span{color:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fPxMkTWFz0pKHhnX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fPxMkTWFz0pKHhnX rect.text{fill:none;stroke-width:0;}#mermaid-svg-fPxMkTWFz0pKHhnX .icon-shape,#mermaid-svg-fPxMkTWFz0pKHhnX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fPxMkTWFz0pKHhnX .icon-shape p,#mermaid-svg-fPxMkTWFz0pKHhnX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fPxMkTWFz0pKHhnX .icon-shape .label rect,#mermaid-svg-fPxMkTWFz0pKHhnX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fPxMkTWFz0pKHhnX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fPxMkTWFz0pKHhnX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fPxMkTWFz0pKHhnX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} LE Audio
LC3 编码
CIS 单播音频
BIS 广播音频
Auracast 广播
经典蓝牙音频
A2DP(SBC/AAC)
HFP(通话)
SCO/eSCO 链路
| 特性 | 说明 |
|---|---|
| LC3 | 低复杂度通信编码,低码率高质量 |
| CIS | Connected Isochronous Stream,点对点同步音频 |
| BIS | Broadcast Isochronous Stream,一对多广播音频 |
| Auracast | 基于 BIS 的广播音频分享 |
| TMAP/HAP/BAP | 标准音频 Profile |
6.6.2 CIS 与 BIS 对比
| 维度 | CIS | BIS |
|---|---|---|
| 连接方式 | 面向连接 | 无连接广播 |
| 拓扑 | 点对点 / 点对多 | 一对多 |
| 可靠性 | 有确认/重传 | 无确认 |
| 典型场景 | 真无线耳机、助听器 | Auracast 广播、多语言导览 |
| 延迟 | 低 | 低 |
6.6.3 LE Audio 的优势
| 优势 | 说明 |
|---|---|
| 更低功耗 | LC3 比 SBC 更高效 |
| 更低延迟 | 等时信道保证时序 |
| 支持助听器 | 标准化助听器支持 |
| 多流音频 | 左右耳独立流 |
| 广播音频 | Auracast 一对多分享 |
6.7 Direction Finding(BLE 5.1+)
6.7.1 AoA 与 AoD 原理
Direction Finding 通过天线阵列测量信号到达/离开角度,实现亚米级定位。
#mermaid-svg-xl1GAQBRLmNtW2Ul{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xl1GAQBRLmNtW2Ul .error-icon{fill:#552222;}#mermaid-svg-xl1GAQBRLmNtW2Ul .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xl1GAQBRLmNtW2Ul .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .marker.cross{stroke:#333333;}#mermaid-svg-xl1GAQBRLmNtW2Ul svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xl1GAQBRLmNtW2Ul p{margin:0;}#mermaid-svg-xl1GAQBRLmNtW2Ul .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster-label text{fill:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster-label span{color:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster-label span p{background-color:transparent;}#mermaid-svg-xl1GAQBRLmNtW2Ul .label text,#mermaid-svg-xl1GAQBRLmNtW2Ul span{fill:#333;color:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .node rect,#mermaid-svg-xl1GAQBRLmNtW2Ul .node circle,#mermaid-svg-xl1GAQBRLmNtW2Ul .node ellipse,#mermaid-svg-xl1GAQBRLmNtW2Ul .node polygon,#mermaid-svg-xl1GAQBRLmNtW2Ul .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .rough-node .label text,#mermaid-svg-xl1GAQBRLmNtW2Ul .node .label text,#mermaid-svg-xl1GAQBRLmNtW2Ul .image-shape .label,#mermaid-svg-xl1GAQBRLmNtW2Ul .icon-shape .label{text-anchor:middle;}#mermaid-svg-xl1GAQBRLmNtW2Ul .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .rough-node .label,#mermaid-svg-xl1GAQBRLmNtW2Ul .node .label,#mermaid-svg-xl1GAQBRLmNtW2Ul .image-shape .label,#mermaid-svg-xl1GAQBRLmNtW2Ul .icon-shape .label{text-align:center;}#mermaid-svg-xl1GAQBRLmNtW2Ul .node.clickable{cursor:pointer;}#mermaid-svg-xl1GAQBRLmNtW2Ul .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .arrowheadPath{fill:#333333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xl1GAQBRLmNtW2Ul .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xl1GAQBRLmNtW2Ul .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xl1GAQBRLmNtW2Ul .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster text{fill:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul .cluster span{color:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xl1GAQBRLmNtW2Ul .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xl1GAQBRLmNtW2Ul rect.text{fill:none;stroke-width:0;}#mermaid-svg-xl1GAQBRLmNtW2Ul .icon-shape,#mermaid-svg-xl1GAQBRLmNtW2Ul .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xl1GAQBRLmNtW2Ul .icon-shape p,#mermaid-svg-xl1GAQBRLmNtW2Ul .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xl1GAQBRLmNtW2Ul .icon-shape .label rect,#mermaid-svg-xl1GAQBRLmNtW2Ul .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xl1GAQBRLmNtW2Ul .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xl1GAQBRLmNtW2Ul .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xl1GAQBRLmNtW2Ul :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} AoD(离开角)
发射端
天线阵列
接收端
单天线
测量离开角度
AoA(到达角)
发射端
单天线
接收端
天线阵列
测量到达角度
| 方式 | 发射端 | 接收端 | 计算方 |
|---|---|---|---|
| AoA | 单天线 | 天线阵列 | 接收端测到达角 |
| AoD | 天线阵列 | 单天线 | 接收端测离开角 |
6.7.2 CTE(Constant Tone Extension)
| 要点 | 说明 |
|---|---|
| 作用 | 在数据包尾部附加恒定频率段,用于相位测量 |
| 长度 | 16--160 μs |
| 类型 | AoA CTE / AoD CTE(1μs/2μs 时隙) |
| 前提 | 双方都支持 Direction Finding |
6.7.3 定位精度与应用
| 指标 | 典型值 |
|---|---|
| 精度 | 亚米级(0.1--1 m) |
| 前提 | 天线阵列校准、多基站融合 |
| 典型应用 | 室内定位、资产追踪、无钥匙进入 |
6.8 Channel Sounding(BLE 6.0)
6.8.1 Channel Sounding 是什么
Channel Sounding 是 BLE 6.0(2024)引入的精确测距 技术,基于信道频率响应(ToF/相位) ,精度可达厘米级 ,并具备抗距离欺骗能力。
#mermaid-svg-vCJEOefTdgo0VsBa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vCJEOefTdgo0VsBa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vCJEOefTdgo0VsBa .error-icon{fill:#552222;}#mermaid-svg-vCJEOefTdgo0VsBa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vCJEOefTdgo0VsBa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vCJEOefTdgo0VsBa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vCJEOefTdgo0VsBa .marker.cross{stroke:#333333;}#mermaid-svg-vCJEOefTdgo0VsBa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vCJEOefTdgo0VsBa p{margin:0;}#mermaid-svg-vCJEOefTdgo0VsBa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vCJEOefTdgo0VsBa .cluster-label text{fill:#333;}#mermaid-svg-vCJEOefTdgo0VsBa .cluster-label span{color:#333;}#mermaid-svg-vCJEOefTdgo0VsBa .cluster-label span p{background-color:transparent;}#mermaid-svg-vCJEOefTdgo0VsBa .label text,#mermaid-svg-vCJEOefTdgo0VsBa span{fill:#333;color:#333;}#mermaid-svg-vCJEOefTdgo0VsBa .node rect,#mermaid-svg-vCJEOefTdgo0VsBa .node circle,#mermaid-svg-vCJEOefTdgo0VsBa .node ellipse,#mermaid-svg-vCJEOefTdgo0VsBa .node polygon,#mermaid-svg-vCJEOefTdgo0VsBa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vCJEOefTdgo0VsBa .rough-node .label text,#mermaid-svg-vCJEOefTdgo0VsBa .node .label text,#mermaid-svg-vCJEOefTdgo0VsBa .image-shape .label,#mermaid-svg-vCJEOefTdgo0VsBa .icon-shape .label{text-anchor:middle;}#mermaid-svg-vCJEOefTdgo0VsBa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vCJEOefTdgo0VsBa .rough-node .label,#mermaid-svg-vCJEOefTdgo0VsBa .node .label,#mermaid-svg-vCJEOefTdgo0VsBa .image-shape .label,#mermaid-svg-vCJEOefTdgo0VsBa .icon-shape .label{text-align:center;}#mermaid-svg-vCJEOefTdgo0VsBa .node.clickable{cursor:pointer;}#mermaid-svg-vCJEOefTdgo0VsBa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vCJEOefTdgo0VsBa .arrowheadPath{fill:#333333;}#mermaid-svg-vCJEOefTdgo0VsBa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vCJEOefTdgo0VsBa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vCJEOefTdgo0VsBa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vCJEOefTdgo0VsBa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vCJEOefTdgo0VsBa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vCJEOefTdgo0VsBa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vCJEOefTdgo0VsBa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vCJEOefTdgo0VsBa .cluster text{fill:#333;}#mermaid-svg-vCJEOefTdgo0VsBa .cluster span{color:#333;}#mermaid-svg-vCJEOefTdgo0VsBa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vCJEOefTdgo0VsBa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vCJEOefTdgo0VsBa rect.text{fill:none;stroke-width:0;}#mermaid-svg-vCJEOefTdgo0VsBa .icon-shape,#mermaid-svg-vCJEOefTdgo0VsBa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vCJEOefTdgo0VsBa .icon-shape p,#mermaid-svg-vCJEOefTdgo0VsBa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vCJEOefTdgo0VsBa .icon-shape .label rect,#mermaid-svg-vCJEOefTdgo0VsBa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vCJEOefTdgo0VsBa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vCJEOefTdgo0VsBa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vCJEOefTdgo0VsBa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 多信道测量
ToF + 相位
设备 A
设备 B
计算距离
厘米级
安全测距
抗欺骗
6.8.2 与 Direction Finding 的对比
| 维度 | Direction Finding | Channel Sounding |
|---|---|---|
| 引入版本 | BLE 5.1 | BLE 6.0 |
| 测量对象 | 角度(AoA/AoD) | 距离(ToF/相位) |
| 精度 | 亚米级 | 厘米级 |
| 抗欺骗 | 较弱 | 强 |
| 典型应用 | 室内定位 | 数字车钥匙、安全门禁 |
6.8.3 典型应用
| 应用 | 说明 |
|---|---|
| 数字车钥匙 | CCC/FiRa 替代方案,防中继攻击 |
| 安全门禁 | 精确距离判断 |
| 资产追踪 | 厘米级定位 |
| 防丢器 | 精确距离提示 |
6.9 认证与量产
6.9.1 认证体系总览
#mermaid-svg-wbi2w7ZdqnhEbDsx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wbi2w7ZdqnhEbDsx .error-icon{fill:#552222;}#mermaid-svg-wbi2w7ZdqnhEbDsx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wbi2w7ZdqnhEbDsx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .marker.cross{stroke:#333333;}#mermaid-svg-wbi2w7ZdqnhEbDsx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wbi2w7ZdqnhEbDsx p{margin:0;}#mermaid-svg-wbi2w7ZdqnhEbDsx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster-label text{fill:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster-label span{color:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster-label span p{background-color:transparent;}#mermaid-svg-wbi2w7ZdqnhEbDsx .label text,#mermaid-svg-wbi2w7ZdqnhEbDsx span{fill:#333;color:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .node rect,#mermaid-svg-wbi2w7ZdqnhEbDsx .node circle,#mermaid-svg-wbi2w7ZdqnhEbDsx .node ellipse,#mermaid-svg-wbi2w7ZdqnhEbDsx .node polygon,#mermaid-svg-wbi2w7ZdqnhEbDsx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .rough-node .label text,#mermaid-svg-wbi2w7ZdqnhEbDsx .node .label text,#mermaid-svg-wbi2w7ZdqnhEbDsx .image-shape .label,#mermaid-svg-wbi2w7ZdqnhEbDsx .icon-shape .label{text-anchor:middle;}#mermaid-svg-wbi2w7ZdqnhEbDsx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .rough-node .label,#mermaid-svg-wbi2w7ZdqnhEbDsx .node .label,#mermaid-svg-wbi2w7ZdqnhEbDsx .image-shape .label,#mermaid-svg-wbi2w7ZdqnhEbDsx .icon-shape .label{text-align:center;}#mermaid-svg-wbi2w7ZdqnhEbDsx .node.clickable{cursor:pointer;}#mermaid-svg-wbi2w7ZdqnhEbDsx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .arrowheadPath{fill:#333333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wbi2w7ZdqnhEbDsx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wbi2w7ZdqnhEbDsx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wbi2w7ZdqnhEbDsx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster text{fill:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx .cluster span{color:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wbi2w7ZdqnhEbDsx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wbi2w7ZdqnhEbDsx rect.text{fill:none;stroke-width:0;}#mermaid-svg-wbi2w7ZdqnhEbDsx .icon-shape,#mermaid-svg-wbi2w7ZdqnhEbDsx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wbi2w7ZdqnhEbDsx .icon-shape p,#mermaid-svg-wbi2w7ZdqnhEbDsx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wbi2w7ZdqnhEbDsx .icon-shape .label rect,#mermaid-svg-wbi2w7ZdqnhEbDsx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wbi2w7ZdqnhEbDsx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wbi2w7ZdqnhEbDsx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wbi2w7ZdqnhEbDsx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} BLE 产品认证
Bluetooth SIG 认证
射频认证
安全认证(可选)
QDID / Declaration
FCC(美)
CE(欧)
SRRC(中)
金融/医疗行业认证
| 认证 | 作用 | 关键产出 |
|---|---|---|
| Bluetooth SIG | 证明符合蓝牙规范 | QDID、Declaration ID |
| FCC | 美国射频合规 | FCC ID |
| CE | 欧盟合规 | CE 标志 |
| SRRC | 中国无线电合规 | SRRC 型号核准 |
6.9.2 OTA DFU 设计
| 要点 | 说明 |
|---|---|
| 传输方式 | BLE OTA(GATT 或 Mesh) |
| 分区设计 | A/B 双分区,支持回滚 |
| 断点续传 | 支持中断后续传 |
| 校验 | CRC/签名校验 |
| 安全 | 固件签名,防刷入恶意固件 |
| 版本管理 | 版本号、兼容性检查 |
6.9.3 产线测试
| 测试项 | 内容 |
|---|---|
| RF 校准 | 发射功率、频偏校准 |
| 连接测试 | 与测试机连接/读写 |
| 功耗验证 | 待机/广播/连接电流 |
| OTA 验证 | 固件升级流程 |
| 互操作性 | 与主流手机兼容矩阵 |
6.9.4 量产检查清单
- SIG 认证 QDID 已获取
- FCC/CE/SRRC 测试通过
- OTA DFU 支持回滚
- 产线 RF 校准流程就绪
- 功耗指标达标
- 与 iOS/Android 兼容性测试通过
- 绑定/解绑流程完整
- 异常恢复机制(看门狗、断连重连)
6.10 阶段检查点
- 能实现 Dual-Mode Topology(同时做 Central 和 Peripheral)
- 能解释多连接时隙冲突及最小连接间隔约束
- 能动态切换 1M/2M/Coded PHY 并说明适用场景
- 能把 BLE 吞吐优化到理论值的 70% 以上
- 能搭建并调试小型 Mesh 网络
- 能说清 LE Audio 的 CIS/BIS 区别与 LC3 优势
- 能说清 AoA/AoD 原理与 Channel Sounding 的差异
- 能制定 BLE 产品的认证与量产测试计划
- 能设计支持回滚的 OTA DFU 方案
6.11 动手实验
| 实验 | 工具 | 预期收获 |
|---|---|---|
| 实现 Central + Peripheral 双角色 | nRF52 / ESP32 | 理解 Dual-Mode Topology |
| 同时连接 3 个外设并观察丢包 | 开发板 + 手机 | 理解时隙冲突 |
| 动态切换 1M ↔ 2M PHY | 开发板 + Sniffer | 看到 PHY Update 流程 |
| 实测 Coded PHY 穿墙能力 | 开发板 + 手机 | 理解覆盖增益 |
| MTU/DLE/2M 组合吞吐测试 | 开发板 + 手机 | 验证优化效果 |
| 搭建 3 节点 Mesh 并组控 | nRF Mesh App | 理解配网与发布/订阅 |
| 用 Sniffer 抓 Mesh 消息 | Wireshark | 看到 NetKey 加密 |
| 设计 OTA DFU 流程 | 开发板 | 理解 A/B 分区与回滚 |
| 查阅 SIG 认证流程 | 官方文档 | 理解 QDID 获取 |
推荐实验顺序
#mermaid-svg-PYZubjfSOLt81n4c{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PYZubjfSOLt81n4c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PYZubjfSOLt81n4c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PYZubjfSOLt81n4c .error-icon{fill:#552222;}#mermaid-svg-PYZubjfSOLt81n4c .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PYZubjfSOLt81n4c .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PYZubjfSOLt81n4c .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PYZubjfSOLt81n4c .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PYZubjfSOLt81n4c .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PYZubjfSOLt81n4c .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PYZubjfSOLt81n4c .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PYZubjfSOLt81n4c .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PYZubjfSOLt81n4c .marker.cross{stroke:#333333;}#mermaid-svg-PYZubjfSOLt81n4c svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PYZubjfSOLt81n4c p{margin:0;}#mermaid-svg-PYZubjfSOLt81n4c .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PYZubjfSOLt81n4c .cluster-label text{fill:#333;}#mermaid-svg-PYZubjfSOLt81n4c .cluster-label span{color:#333;}#mermaid-svg-PYZubjfSOLt81n4c .cluster-label span p{background-color:transparent;}#mermaid-svg-PYZubjfSOLt81n4c .label text,#mermaid-svg-PYZubjfSOLt81n4c span{fill:#333;color:#333;}#mermaid-svg-PYZubjfSOLt81n4c .node rect,#mermaid-svg-PYZubjfSOLt81n4c .node circle,#mermaid-svg-PYZubjfSOLt81n4c .node ellipse,#mermaid-svg-PYZubjfSOLt81n4c .node polygon,#mermaid-svg-PYZubjfSOLt81n4c .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PYZubjfSOLt81n4c .rough-node .label text,#mermaid-svg-PYZubjfSOLt81n4c .node .label text,#mermaid-svg-PYZubjfSOLt81n4c .image-shape .label,#mermaid-svg-PYZubjfSOLt81n4c .icon-shape .label{text-anchor:middle;}#mermaid-svg-PYZubjfSOLt81n4c .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PYZubjfSOLt81n4c .rough-node .label,#mermaid-svg-PYZubjfSOLt81n4c .node .label,#mermaid-svg-PYZubjfSOLt81n4c .image-shape .label,#mermaid-svg-PYZubjfSOLt81n4c .icon-shape .label{text-align:center;}#mermaid-svg-PYZubjfSOLt81n4c .node.clickable{cursor:pointer;}#mermaid-svg-PYZubjfSOLt81n4c .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PYZubjfSOLt81n4c .arrowheadPath{fill:#333333;}#mermaid-svg-PYZubjfSOLt81n4c .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PYZubjfSOLt81n4c .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PYZubjfSOLt81n4c .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PYZubjfSOLt81n4c .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PYZubjfSOLt81n4c .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PYZubjfSOLt81n4c .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PYZubjfSOLt81n4c .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PYZubjfSOLt81n4c .cluster text{fill:#333;}#mermaid-svg-PYZubjfSOLt81n4c .cluster span{color:#333;}#mermaid-svg-PYZubjfSOLt81n4c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PYZubjfSOLt81n4c .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PYZubjfSOLt81n4c rect.text{fill:none;stroke-width:0;}#mermaid-svg-PYZubjfSOLt81n4c .icon-shape,#mermaid-svg-PYZubjfSOLt81n4c .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PYZubjfSOLt81n4c .icon-shape p,#mermaid-svg-PYZubjfSOLt81n4c .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PYZubjfSOLt81n4c .icon-shape .label rect,#mermaid-svg-PYZubjfSOLt81n4c .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PYZubjfSOLt81n4c .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PYZubjfSOLt81n4c .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PYZubjfSOLt81n4c :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 双角色
多连接
PHY 切换
Coded 覆盖
吞吐优化
Mesh 组网
Mesh 抓包
OTA DFU
认证流程
6.12 开源项目学习参考
| 项目 | 语言 | 学习价值 |
|---|---|---|
| Zephyr RTOS BLE Samples | C | Nordic SDK 底层,GATT/Mesh 实现参考 |
| ESP-IDF BLE Examples | C | ESP32 BLE 开发标准示例 |
| BlueZ | C | Linux BLE 协议栈,Host 层实现 |
| NimBLE | C | 轻量 BLE Host 栈,适合嵌入式移植 |
| Android BLE Scanner Sample | Java/Kotlin | Android BLE API 标准用法 |
| nRF Connect SDK Mesh Samples | C | Mesh 灯控/配网示例 |
| Apache Mynewt NimBLE | C | 开源 BLE 协议栈 |
6.13 面试与工程高频问题
| 问题 | 回答要点 |
|---|---|
| 多连接时为什么最小连接间隔会变大? | 时隙不能重叠,连接越多需要越大间隔 |
| 2M PHY 为什么省电? | 传输时间减半,射频开启时间短 |
| Coded PHY 为什么覆盖远? | 编码增益提升灵敏度 |
| MTU 和 DLE 有什么区别? | MTU 在 ATT 层,DLE 在 LL 层 |
| 如何把吞吐优化到理论值 70%? | MTU+DLE+2M+合理 CI |
| Mesh 为什么用泛洪不用路由? | 实现简单、无路由表、适合小控制消息 |
| NetKey 和 AppKey 区别? | NetKey 网络层加密/中继,AppKey 应用隔离 |
| Friend 和 LPN 怎么配合? | Friend 缓存,LPN 轮询取消息 |
| LE Audio 的 CIS 和 BIS 区别? | CIS 面向连接,BIS 广播 |
| AoA 和 AoD 区别? | 到达角 vs 离开角,天线阵列位置不同 |
| Channel Sounding 为什么抗欺骗? | 基于 ToF/相位测距,难被中继伪造 |
| OTA 为什么要 A/B 分区? | 支持回滚,防止升级失败变砖 |
| SIG 认证需要准备什么? | 规范符合性测试、QDID 申请 |
| 多连接下丢包怎么排查? | 看时隙冲突、连接间隔、抓包看丢包 |
阶段总结
第六阶段的核心:从"能开发"走向"能产品化"。
三条主线:
- 性能线:多连接、PHY、DLE/MTU → 把吞吐和覆盖做到位
- 组网与音频线:Mesh、LE Audio → 扩展应用场景
- 产品化线:认证、OTA、产线测试 → 把产品做合规、可量产
最容易卡住的三个点:多连接时隙调度、Mesh 的 Model 绑定/订阅配置、OTA 回滚设计。
建议交付物:一个多连接 Demo + 一份吞吐优化对比数据 + 一个 Mesh 组网 Demo + 一份认证/量产检查清单。这四样做完,第六阶段就算真正过关。