1.1 蓝牙技术概述
蓝牙(Bluetooth)是一种短距离无线通信技术标准,工作在 2.4 GHz ISM 频段(2.400–2.4835 GHz),旨在实现设备之间的低成本、低功耗、近距离数据交换。自 1994 年由爱立信公司提出以来,蓝牙技术已从最初的电缆替代方案演变为覆盖音频传输、数据同步、设备组网、定位服务等众多领域的全球性标准。本章作为《Linux内核蓝牙驱动项目实战》的开篇,将系统梳理蓝牙的发展脉络、两大核心架构的差异以及典型应用场景,为后续深入内核驱动开发奠定基础。
学习提示: 蓝牙协议栈在 Linux 内核中主要由
net/bluetooth/ 目录下的代码实现,包括 HCI 层、L2CAP、SCO、RFCOMM 等核心模块。理解蓝牙技术的演进和架构差异,是读懂内核驱动源码的前提。
1.1.1 蓝牙发展历史(1.0 到 5.4)
蓝牙标准由 Bluetooth Special Interest Group(SIG)维护和发布,经历了从 1.0 到 5.4 的多次重大迭代。下表总结了各版本的关键特性与里程碑:
| 版本 | 发布时间 | 核心特性 | 速率/改进 |
|---|---|---|---|
| 1.0 / 1.0B | 1999 | 首个公开版本,存在设备互操作性问题 | 1 Mbps(基本速率) |
| 1.1 | 2001 | IEEE 802.15.1 标准化,修复互操作性问题 | 1 Mbps |
| 1.2 | 2003 | AFH(自适应跳频)、eSCO(增强型面向连接) | 1 Mbps,抗干扰增强 |
| 2.0 + EDR | 2004 | EDR(增强数据速率),支持 DQPSK/8DPSK 调制 | 3 Mbps |
| 2.1 + EDR | 2007 | SSP(安全简单配对)、NFC 辅助配对 | 3 Mbps,安全增强 |
| 3.0 + HS | 2009 | AMP(交替 MAC/PHY),可借用 Wi-Fi 802.11 高速链路 | 24 Mbps(通过 802.11) |
| 4.0 | 2010 | BLE(低功耗蓝牙) 首次引入,双模架构 | 1 Mbps(BLE)/ 3 Mbps(BR/EDR) |
| 4.1 | 2013 | L2CAP 面向连接通道增强,支持多角色并发 | — |
| 4.2 | 2014 | LE 安全连接(ECC 加密)、LE 数据长度扩展 | BLE 速率提升至 1.5 Mbps(实际) |
| 5.0 | 2016 | LE 2M PHY、LE 长距离(Coded PHY)、广播扩展 | 2 Mbps(LE 2M)/ 约 1 km(长距离) |
| 5.1 | 2019 | AoA/AoD 测向、GATT 缓存、广播信道索引 | 定位精度厘米级 |
| 5.2 | 2020 | LE 音频(LC3 编码)、LE 功率控制、增强版 ATT | 低功耗音频流 |
| 5.3 | 2021 | 连接子速率更新、信道分类增强、加密密钥大小控制 | — |
| 5.4 | 2023 | LE 音频广播(Auracast)、LE 安全连接增强、PAwR | 广播音频、大规模设备组网 |
内核视角: Linux 内核从 2.6.x 系列开始集成 BlueZ 协议栈,目前主线内核已完整支持 Bluetooth 5.4 核心规范。驱动开发者需关注
include/net/bluetooth/ 头文件中与版本相关的特性宏,例如 HCI_LE_2M_PHY、HCI_LE_CODED_PHY 等。
蓝牙版本的演进呈现出两条清晰的脉络:
- 经典蓝牙(BR/EDR):从 1.0 到 3.0,持续提升速率和安全性,主要用于音频流(HSP/HFP/A2DP)和串口仿真(SPP)。
- 低功耗蓝牙(BLE):从 4.0 开始引入,5.x 系列重点增强速率、距离、广播容量和定位能力,成为 IoT 和音频新场景的核心。
1.1.2 经典蓝牙(BR/EDR)与低功耗蓝牙(BLE)的区别
蓝牙 4.0 规范将蓝牙技术划分为两大架构:经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)。两者在物理层、协议栈、功耗模型和应用场景上存在本质差异。下表从多个维度进行对比:
| 对比维度 | 经典蓝牙(BR/EDR) | 低功耗蓝牙(BLE) |
|---|---|---|
| 物理层速率 | BR: 1 Mbps; EDR: 2/3 Mbps | LE 1M: 1 Mbps; LE 2M: 2 Mbps; LE Coded: 125/500 kbps |
| 调制方式 | GFSK (BR) / DQPSK, 8DPSK (EDR) | GFSK (LE 1M/2M) / 带编码的 GFSK (Coded) |
| 信道数量 | 79 个信道(1 MHz 间隔) | 40 个信道(2 MHz 间隔),含 3 个广播信道 |
| 跳频方式 | 1600 hops/s,79 信道伪随机跳频 | 自适应跳频,可跳过干扰信道 |
| 连接建立时间 | 约 100 ms(典型) | 约 3–6 ms(快速连接) |
| 功耗模型 | 连续传输,峰值功耗约 30–100 mA | 短时突发传输,峰值约 5–15 mA,平均极低 |
| 拓扑结构 | 微微网(Piconet,1 主 7 从) | 广播、连接、Mesh 网络 |
| 音频支持 | 原生 SCO/eSCO 语音通道 | LE 音频(LC3 编码,5.2+) |
| 典型应用 | 蓝牙耳机、车载免提、文件传输、鼠标/键盘 | 可穿戴设备、传感器、信标、医疗设备、音频广播 |
| Linux 内核支持 | BlueZ: L2CAP, RFCOMM, SCO, HIDP | BlueZ: L2CAP, ATT/GATT, SMP, Mesh |
驱动开发注意: 双模蓝牙控制器(同时支持 BR/EDR 和 BLE)在 Linux 内核中通过
HCI_PRIMARY 和 HCI_LE 标志区分。驱动初始化时需正确设置 hdev->dev_type 和 hdev->le_features,否则可能导致 L2CAP 通道注册失败。
从协议栈架构来看,经典蓝牙和 BLE 共享 HCI(Host Controller Interface)层,但上层协议差异显著:
- 经典蓝牙协议栈:HCI → L2CAP → RFCOMM / SDP / HIDP / AVDTP / AVCTP → 应用层(如 PulseAudio、Bluez 的 obexd)。
- BLE 协议栈:HCI → L2CAP(固定通道)→ ATT / GATT / SMP → 应用层(如 BlueZ 的 bluetoothd、gatttool)。
1.1.3 蓝牙应用场景
蓝牙技术凭借其低功耗、低成本、易用性和广泛生态,覆盖了从个人消费电子到工业物联网的众多领域。以下按场景分类列举:
| 场景类别 | 典型应用 | 使用技术 | 关键需求 |
|---|---|---|---|
| 音频流 | 无线耳机、音箱、车载免提 | BR/EDR (A2DP, HFP), LE Audio (5.2+) | 低延迟、高音质、双耳同步 |
| 人机交互设备 | 鼠标、键盘、游戏手柄 | BR/EDR (HIDP), BLE (HID over GATT) | 低功耗、快速响应、多设备切换 |
| 数据传输 | 文件传输、串口仿真、打印机 | BR/EDR (SPP, FTP, OPP) | 可靠连接、中等速率 |
| 可穿戴设备 | 智能手表、手环、心率带 | BLE (GATT 服务) | 超低功耗、小数据包、长时间待机 |
| 信标与定位 | 室内导航、物品追踪、广告推送 | BLE (广播, AoA/AoD 5.1+) | 广播覆盖、厘米级定位、低功耗 |
| 物联网传感器 | 温湿度计、门锁、灯控、环境监测 | BLE (Mesh, 广播) | 大规模组网、低功耗、安全加密 |
| 医疗健康 | 血糖仪、血压计、体温贴 | BLE (GATT 医疗健康服务) | 数据可靠性、隐私保护、认证 |
| 汽车电子 | 无钥匙进入、胎压监测、车载诊断 | BLE (AoA/AoD, 广播) | 高安全性、抗干扰、快速连接 |
| 音频广播 | Auracast(公共场所音频共享) | BLE (LE Audio Broadcast, 5.4) | 一对多广播、低延迟、多语言支持 |
内核驱动关注点: 不同应用场景对蓝牙驱动的需求差异很大。例如,音频场景需要稳定的 SCO/eSCO 或 LE Audio ISO 通道;定位场景需要支持 CTE(Constant Tone Extension)的 AoA/AoD 硬件;Mesh 场景则依赖内核的 BLE Mesh 协议栈(
net/bluetooth/mesh/)。在编写驱动时,务必根据目标场景配置 HCI 命令和事件过滤器。