蓝牙通信
字数:3668 | 预计阅读时间:12分钟
蓝牙简介
1997 年:Intel 工程师 Jim Kardach 的灵感
在与爱立信谈判新无线协议命名时,Kardach 正阅读哈拉尔的历史小说,提议 Bluetooth——寓意"统一不同设备与通信协议"。
无线电波:频率越高,每秒振荡越多,单位时间可传输数据量越大
为什么蓝牙选择 2.4 GHz?
ISM 频段全球通用:免许可证,任何国家均可使用,设备全球互通
穿墙能力适中:比 5 GHz Wi-Fi 绕射更强,室内覆盖 10~100 m
功放效率高:2.4 GHz 芯片成熟,发射电路功耗低,利于电池供电
芯片成本极低:全球规模量产,蓝牙射频芯片成本约 ¥1~¥15
2.4GHz的分配情况
虽然大家都挤在 2.400 到 2.485 GHz (相当于85MHz)这段空间里,但分配带宽的方式完全不同:
- Wi-Fi 2.4G(宽车道):分割为13个信道,每个间隔5MHz。拥有 3 个不重叠的 22 MHz 宽信道(1,6,11)
- 蓝牙(窄信道):将频段切成了 79 个 1 MHz 的窄信道
- ZigBee:拥有15个 2MHz 的信道(要隔开5MHz),常用于智能家居设备
- BLE:拥有40个 2MHz 的信道
跳频
跳频是蓝牙(Bluetooth)对抗干扰的核心技术:
蓝牙不会一直待在一个固定的信道上,而是以极快的速度(每秒 1600 次)在 79 个信道中随机跳跃。这样可以快速绕过 Wi-Fi 正在使用的信道。如果这一次跳到了被占用的频率导致数据丢失,它会立刻跳到下一个干净的频率重发。
自适应跳频(AFH):现代蓝牙更聪明,它会自动识别哪些信道被 Wi-Fi 占用了,然后把那些“拥堵”的信道从自己的跳频列表中剔除。
在蓝牙连接中,必须有一个 中心设备(Master/Central),比如手机;而耳机或鼠标则是 外围设备(Peripheral)。
手机决定了跳频序列和节拍
那些乱七八糟的频道数字(如 ch 4 → ch 21 → ...),是由数学公式算出来的:
- 共享种子(Seed):当手机和耳机第一次“配对”时,它们会交换一些只有彼此知道的信息(比如设备的唯一物理地址 BD_ADDR)。
- 公式:双方都会把这个“地址”和“当前时间戳”丢进同一个复杂的跳频选择算法(Selection Kernel)里。
还需要时间同步:
- 时钟偏移(Clock Offset):手机会告诉耳机:“我的时钟现在是 X 毫秒,请以此为准。”
- 心跳包:在通信过程中,接收方会不断根据发送方发来信号的到达时间来微调自己的时钟。
GFSK 调制原理
FSK(频移键控):用频率区分 0 和 1
G 代表的“高斯”:给信号“磨个圆角”。
FSK 的问题(像钢琴):当你从 0 突变成 1 时,频率是瞬间跳变的。在物理学上,这种“急转弯”会产生大量的杂散波(谐波)。会产生邻道干扰,干扰到旁边的信道(比如隔壁的 Wi-Fi)。
GFSK 的进化:在频率变化之前,先加一个高斯滤波器。这就像给信号做了一层“磨皮”或“丝滑处理”。
蓝牙数据包
蓝牙数据包结构:
| 前导码 | 接入码 | 头部 | 有效载荷 | CRC |
|---|---|---|---|---|
| 同步 | 设备地址 | 包信息 | 实际数据 | 校验 |
| 8b | 72b | 54b | 0-2745b | 16b |
FEC 前向纠错:
蓝牙在最重要的头部(Header)信息中使用了 \(1/3\) 重复码。也就是说,同一个控制指令我会发 3 遍。
头部信息决定了连接是否会断开,所以这部分必须极其坚固,不需要重传也能自我修复。
ARQ 自动重传:
这是蓝牙处理有效载荷(Payload)损坏的核心手段。
基于CRC校验返回:ACK(确认收到),NAK(没收到/坏了)
只要发送方没收到 ACK,它就会不断重传,直到成功为止。
网络拓扑
| 结构 | 解释 | 应用 |
|---|---|---|
| Piconet 微微网 | 1个主设备(M)最多连接 7 个从设备(S)。经典蓝牙基础单元,主设备控制所有时序。 | 手机+耳机+智能手表 |
| Scatternet 散射网 | 多个Piconet通过桥接节点互联,扩大覆盖范围,一节点可同时属于两个Piconet。 | 多房间音响分区系统 |
| BLE 广播模式 | 广播者持续发射信标,周围任意设备无需配对即可接收。超低功耗,无连接建立开销。 | 室内定位 Beacon、电子价签 |
| Bluetooth Mesh | 节点间多跳中继,无单点依赖。一节点失效,数据自动沿其他路径绕行传递。 | 智慧楼宇照明、工厂传感网 |
系统架构
协议栈架构
| 协议栈 | 解释 |
|---|---|
| Application 应用层 | 用户感知的功能:音乐播放/心率显示/设备控制 |
| Profile 规范层 | A2DP/HID/GATT/GAP——"某类设备该做什么" |
| L2CAP 逻辑链路层 | 数据分片重组,多路复用(同一连接传多类数据) |
| HCI 主机控制器接口 | 软硬件标准分界线接口。往下称为“Controller”(控制器),封装在蓝牙芯片内;往上称为“Host”(主机),运行在手机或电脑的操作系统中。 |
| Link Manager / Link Layer | 连接管理、跳频控制、ARQ自动重传 |
| PHY 物理层 | GFSK调制,实际发射/接收2.4GHz无线电波 |
BR/EDR 与 BLE:两套并行的协议体系
共用 2.4 GHz 频段,却是两套完全独立的软件逻辑,同一芯片可同时支持两者(Dual-Mode)
| 协议 | 场景 |
|---|---|
| BR/EDR 经典蓝牙 | 持续数据流:立体声音频(A2DP)、文件传输(OBEX)、通话(HFP),需要稳定高带宽 |
| BLE 低功耗蓝牙 | 间歇性小数据:传感器、健康监测、资产追踪,数据量小但电池寿命要求极高 |
BR/EDR 经典协议
蓝牙基带以 625 μs 为最小时间单元,主设备控制所有通信节奏
主设备偶数时隙发,从设备奇数时隙发(理想情况,在没有大包的情况下)
多时隙包提升效率:
1-slot(DH1)=27B,3-slot(DH3)=183B,5-slot(DH5)=339B
大文件传输使用5时隙包可减少包头开销
连接建立流程:
发起设备A 目标设备B
│ --------- Inquiry ----------> │ 广播查询
│ <-------- FHS Packet ----------- │ 发送蓝牙地址
│ ------- Inquiry Complete ---------> │ 收到
│ -------- Page ----------> │ 专门呼叫B
│ <--------- Page Response --------- │ 准备完毕
│ -------- FHS Packet ---------> │ 发送时序信息
│ ------ LMP_host_connection_req ------> │ 请求建立连接
│ <------- LMP_accepted ---------- │ 同意
│ <- Authentication + Link Key Exchange -> │ 鉴权与链路密钥交换
│ <--- Encryption Setup → ACL Link ---> │ 加密设置与链路开启
Inquiry扫描~2.56 s
Page呼叫~128 ms
Auth+Enc ~50 ms
总耗时~3 s
重连加速机制:
配对设备保存彼此地址和链路密钥,重连时跳过Inquiry直接Page,总连接时间缩至约300ms
L2CAP
L2CAP 按 MTU (Maximum Transmission Unit) 切分
| 模式 | MTU 类型 | 典型值 | 备注 |
|---|---|---|---|
| 经典蓝牙 (BR/EDR) | 默认 MTU | 672B | 适用于高带宽音频传输 |
| 低功耗蓝牙 (BLE) | 默认 ATT MTU | 23B | 实际只能传 20 字节有效数据 |
| 低功耗蓝牙 (BLE) | 最大 ATT MTU | 512B | 连接后通过 Exchange MTU 开启 |
PDU (协议数据单元) 结构
| Length | Channel ID | Information Payload |
|---|---|---|
| 2B | 2B | 0~65535 bytes (理论值,实际参考上表) |
多路复用 (Multiplexing)
通过 CID (Channel ID) 来标记数据类型。
0x0001: 信令信道 (L2CAP Signaling)0x0004: A2DP (高级音频分发)0x0005: HFP(免提控制)0x0006: OBEX (文件传输)
BLE 低功耗协议
3个广播 + 37 个数据
BLE 的 3 个广播信道(CH 37, 38, 39)没有乱放,而是精准地插在 Wi-Fi 的缝隙里。
- CH 37 (2402 MHz):在 Wi-Fi 1 号信道的左边。
- CH 38 (2426 MHz):在 Wi-Fi 1 号和 6 号信道的中间。
- CH 39 (2480 MHz):在 Wi-Fi 11 号信道的右边。
当设备想广播自己(比如耳机呼叫手机)时,不会被 Wi-Fi 的信号“淹没”。
一旦设备 A 和 B 连上了,就不再使用 3 个拥挤的广播信道,而是转移到剩下的 37 个数据信道进行AFH调频连接。
广播间隔:
- 高频广播 (20ms):每 20 毫秒一次,但设备非常耗电。
- 低频广播 (3s):每 3 秒一次,设备可以靠纽扣电池活好几年(AirTag )。
Profile
规范的三个维度
A. 角色定义 (Roles) 规范规定:必须由 Collector 发起连接,Sensor 负责提供数据。
B. 服务要求 (Service Requirements):实现的UUID的服务和特征值。
C. 行为规范 (Behaviors):规定了“数据怎么发”。
常用profile速查
| 场景 | 经典蓝牙 Profile (高带宽) | BLE Profile (低功耗) |
|---|---|---|
| 音频 | A2DP (听歌)、HFP (通话) | LE Audio (未来趋势) |
| 外设 | HID (老款蓝牙鼠标) | HOGP (现代省电鼠标) |
| 健康 | 无 | HRP (心率)、GLP (血糖) |
| 行业应用 | 无 | ESL (电子价签)、FMP (防丢器) |
定位、交通与 IoT
| 技术方向 | 核心 Profile/功能 | 应用案例 | 选型提示 |
|---|---|---|---|
| 防丢寻找 | FMP (Find Me) | AirTag 类产品 | 基于 RSSI 信号强度测距。 |
| 室内导航 | AoA / AoD | 机场、展馆导览 | 蓝牙 5.1 引入,支持测向(角度)。 |
| 厘米级定位 | Channel Sounding | 蓝牙 6.0 高精定位 | 挑战 UWB 的地位。 |
| 数字车钥匙 | CCC Digital Key | 手机开车门 | 结合 BLE 安全握手与 UWB/测距。 |
| 电子货架标签 | ESL (BT 5.4) | 商超电子价签 | 解决数万个节点同时通信的效率。 |
GATT
| 功能 | 解释 |
|---|---|
| Service | 一类功能的集合 |
| Characteristic | 真正存数据的地方 |
| Descriptor | 对数据的补充说明,CCCD是最常用的描述符 |
| UUID | 标准 UUID (16-bit),自定义 UUID (128-bit) |
| Properties | Read,Write,Notify,Indicate |
心率服务:0x180D;电量服务:0x180F;设备信息:0x180A
如果要设计一个“智能水壶”,GATT 表大概长这样:
- Service (0x180F):电池服务。
- Service (自定义):水温控制服务。
- Characteristic A (Read/Notify):当前水温。
- Characteristic B (Write):设定目标温度(比如设为 55°C)。
- Service (自定义):喝水提醒服务。
- Characteristic C (Write):开启/关闭提醒。
连接间隔
| 模式 | 间隔时间 | 1 秒内唤醒次数 | 延迟感 | 典型产品 |
|---|---|---|---|---|
| 极速 | 7.5 ms | ~133 次 | 几乎无感 | 游戏控制器 |
| 平衡 | 100 ms | 10 次 | 轻微感知 | 智能手表 |
| 省电 | 1000 ms | 1 次 | 明显延迟 | 温湿度计 |
功耗分析
TX(15 mA):将数据包(GFSK 调制)通过天线射向空中,时长非常短(通常 1~3 ms)。
RX(5 mA):等待对方回一个 ACK(收到确认)。如果没等到确认,芯片会启动重传逻辑。
Sleep(5 µA):仅保留极低功耗的 RTC(实时时钟),负责在下一个“连接间隔”到来时唤醒芯片。
= (15000×3 + 5000×2 + 5×9995) / 10000
= (45000 + 10000 + 49975) / 10000
~10.5 μA (10s内)
平均工作电流
CR2032 容量 = 220 mAh = 220,000 μAh
寿命 = 220,000 μAh ÷ 10.5 μA = 20,952 h ≈ 2.4 年
安全配对机制
| 方式 | 安全级别 | 用户操作 | 典型场景 | 中间人攻击 (MITM) |
|---|---|---|---|---|
| Just Works | 基础级 | 无需操作,自动配对 | 蓝牙耳机、低功耗传感器 | 无法防御 |
| Passkey Entry | 中等级 | 一端显示,另一端输入数字 | 蓝牙键盘、打印机 | 具备防御力 |
| Numeric Comparison | 高安全 | 双方显示数字,用户点“确认” | 手机间互联、车机连接 | 有效防御 |
| OOB (带外传输) | 最高级 | NFC 碰一碰或扫二维码 | 医疗设备、金融支付外设 | 极难攻破 |
核心算法:ECDH (Elliptic Curve Diffie-Hellman) 椭圆曲线交换
- 设备 A 生成私钥 \(a\),并算出公钥 \(A_{pub}\)。
- 设备 B 生成私钥 \(b\),并算出公钥 \(B_{pub}\)。
- 双方交换公钥:A 拿到 \(B_{pub}\),B 拿到 \(A_{pub}\)。
结论: 虽然 \(A_{pub}\) 和 \(B_{pub}\) 在空气中是透明的,但黑客没有私钥 \(a\) 或 \(b\),在数学上几乎不可能算出 \(K\)。这个 \(K\) 随后会生成 LTK (长期密钥) 存储在设备中。
Bluetooth Mesh
Mesh 网络不依赖中央网关,而是采用一种“受控洪水”模式:节点 A 发出的指令,周围所有节点都会收到并帮忙“喊话”(转发)。
TTL (Time To Live):每经过一个节点(跳),TTL 减 1。当 TTL 降为 0 时,消息停止转发。
Mesh 巧妙地解决了“全覆盖”与“低功耗”的矛盾:
| 角色 | 缩写 | 核心职能 | 硬件要求 |
|---|---|---|---|
| Relay (中继) | R | 消息的搬运工。收到消息立刻广播,扩大网络范围。 | 常供电(如智能插座、灯座),必须时刻监听。 |
| Proxy (代理) | P | 网络的翻译官。将 Mesh 协议转为普通 BLE 协议,让手机直接控制 Mesh。 | 需要较高的计算能力。 |
| Friend (友好) | F | 消息的代收处。帮睡觉的低功耗节点存消息。 | 高内存,需要维持较多的缓存空间。 |
| Low Power (低功耗) | LP | 深度睡眠者。只在干活或取信时醒来,平时不参与转发。 | 电池供电。必须依附一个 Friend 节点生存。 |
蓝牙设计与应用
蓝牙产品"设计四问":
Q1 多久通信一次?Q2 需要传输多少数据?Q3 用户感知延迟吗?Q4 换电 / 充电周期要求?
音频必须 BR/EDR;传感器首选 BLE。数据量决定了能否用纽扣电池。
如果要求使用3年以上,产品就必须用 BLE + CR2032,形态受到根本限制。
可穿戴产品蓝牙设计
| 维度 | Apple Watch Series 9 | Oura Ring Gen 3(戒指) | WHOOP 4.0(软性织物腕带) |
|---|---|---|---|
| 蓝牙/无线协议 | BLE 5.3 + UWB + LTE + Wi-Fi | BLE 5.1 | BLE 5.0 |
| 电池与续航 | 308 mAh (约 18 小时) | 15~22 mAh (约 7 天) | 约 170 mAh (4~5 天) |
| 天线设计 | 金属中框开槽 + 表冠下方 | 指环内侧 PCB 走线天线 | 织物内嵌弹性 PCB 天线 |
| 充电策略 | 每日磁吸快充 | 每周小充电盒 | 可穿戴充电盒 |
| 策略 | 性能优先+生态锁定 | 极简形态+睡眠优先 | 数据存粹+订阅模式 |
| 约束 | 人体组织含70%水分,强烈吸收2.4GHz能量。天线必须尽 量远离皮肤 | 长期贴肤须通过ISO 10993生物相容性测试 | 电池容量直接决定续航,而形态约束了电池体积 |
工业约束
| 约束维度 | 核心挑战 (Challenge) | 关键技术对策 (Solutions) | 对设计/外观的影响 |
|---|---|---|---|
| 电磁兼容 EMC | 强宽带干扰(背景噪声高) | 自适应跳频(AFH)、金属屏蔽腔、SMA外置天线 | 需电磁仿真开槽,天线多位于顶部 |
| 机械振动 | 高频振动(500Hz)与强冲击(40g) | M12防脱连接器、元件点胶/灌封、弹性垫圈 | 外壳壁厚≥3mm,避开共振频率 |
| 宽温工作 | -40°C ~ 85°C 极端温差 | 工业级元器件、ER锂亚电池、天线热补偿 | 需热阻计算与散热格栅设计 |
| 防护等级 | IP54(防溅水)/IP67(短时浸水)/IP68(持续浸水)/IP69K(高压热冲) | 密封圈、超声波焊接、全灌封、M12接口 | 无标准USB口,牺牲可维修性 |