1. 蓝牙技术概述:从1.0到5.4,我们到底在连什么?

各位同学好,我是老周。做嵌入式这行十几年了,蓝牙协议栈是我打交道最多的东西之一。今天咱们开篇先聊聊蓝牙的来龙去脉——你想想看,一个技术能活二十多年,从手机耳机连到智能灯泡,背后肯定有不少门道。

我个人习惯把蓝牙技术分成三个维度去理解:发展史(知道它怎么来的)、双模差异(知道怎么选)、应用场景(知道用在哪)。这三个点搞清楚了,后面学协议栈才不会晕。

1.1 蓝牙发展史:从1.0到5.4,踩过的坑比代码还多

蓝牙这名字挺有意思,取自十世纪丹麦国王Harald Bluetooth的名号——寓意是「统一」。当年爱立信、诺基亚、英特尔这帮人搞出这个技术,就是想统一短距离无线通信。结果呢?统一是统一了,但版本迭代的过程,嗯,一言难尽。

版本 发布年份 核心变化 我印象最深的事
1.0/1.0B 1999 首个规范,速率1Mbps 设备间互不兼容,基本没法用
1.1 2002 修复大量互操作问题 终于能连上了,但速度感人
2.0 + EDR 2004 增强数据速率,3Mbps 蓝牙耳机开始普及,我记得当时买了个索爱的
2.1 2007 安全简单配对(SSP) 配对体验大幅提升,不用输PIN码了
3.0 + HS 2009 高速,借用Wi-Fi传数据,24Mbps 想法很好,实际用的人不多
4.0 2010 低功耗蓝牙(BLE)诞生 这是分水岭,物联网的起点
4.1/4.2 2013/2014 IPv6支持,数据长度扩展 我开始用BLE做网关项目
5.0 2016 4倍距离,2倍速度,广播扩展 Mesh网络成为可能
5.1/5.2 2019/2020 方向发现,LE Audio,LC3编码 音频体验质的飞跃
5.3/5.4 2021/2023 加密增强,广告加密,PAwR 更适合大规模设备网络

关键转折点:4.0版本是蓝牙历史上最重要的分水岭。在此之前,蓝牙是「有线替代品」;在此之后,蓝牙成了「物联网连接器」。我在2012年第一次接触BLE开发时,就被它的功耗震惊了——一颗纽扣电池跑一年,这在以前想都不敢想。

1.2 经典蓝牙 vs 低功耗蓝牙:双模芯片背后的两个世界

很多初学者会问:为什么蓝牙要分经典和低功耗?直接做一个通用的不行吗?

答案是:需求完全不同。经典蓝牙(BR/EDR)是为持续流媒体设计的,比如听音乐、打电话;低功耗蓝牙(BLE)是为间歇小数据设计的,比如传个传感器读数、发个开关指令。你非要用BLE听歌,那延迟和音质会让你崩溃;你非要用经典蓝牙做温湿度计,电池三天就得换。

我做过一个网关项目,客户要求同时支持蓝牙耳机和BLE传感器。当时选型的时候,我建议直接用双模芯片(比如Nordic nRF52840或TI CC2652),一颗芯片同时跑BR/EDR和BLE协议栈。省事,也省PCB面积。

对比维度 经典蓝牙 (BR/EDR) 低功耗蓝牙 (BLE)
设计目标 连续数据流,高吞吐 低功耗,间歇传输
信道数 79个,1MHz间隔 40个,2MHz间隔
调制方式 GFSK,π/4-DQPSK,8DPSK GFSK
峰值速率 2-3 Mbps (EDR) 1-2 Mbps (5.0可达2M)
功耗 ~30mA (持续连接) ~5mA (连接),~1μA (待机)
网络拓扑 微微网 (1主7从) 广播、连接、Mesh
典型应用 耳机、音箱、车载 传感器、信标、医疗设备

避坑指南:我曾经在一个项目中,用BLE做音频传输,结果发现延迟高达200ms,根本没法用。后来换成经典蓝牙,延迟降到40ms。所以选型时一定要搞清楚:你的应用是「流」还是「包」?是「持续」还是「间歇」?

1.3 蓝牙应用场景分析:从耳机到工业网关

蓝牙的应用场景,说白了就三大类:音频、数据、定位。但每一类下面,细分起来花样就多了。

1.3.1 音频场景:经典蓝牙的主场

  • 无线耳机/音箱:这是最经典的应用。A2DP传音乐,HFP打电话,AVRCP控制播放。我调试过不少音频卡顿的问题,多半是射频干扰或协议栈优先级没配好。
  • 助听器/听力辅助:5.2引入的LE Audio,用LC3编码,功耗更低、音质更好。我有个朋友在做助听器,他说LE Audio让助听器终于能跟手机直连了。
  • 车载免提:HFP协议,虽然老,但稳定。我见过一些车机用BLE做电话,结果音质一塌糊涂——嗯,经典蓝牙在这块还是不可替代的。

1.3.2 数据场景:BLE的天下

  • 可穿戴设备:手环、手表、心率带。数据量小,频率低,BLE的功耗优势完美匹配。我做过一个心率带项目,用BLE传心率数据,一颗CR2032电池跑了8个月。
  • 智能家居:灯泡、门锁、窗帘。BLE Mesh让这些设备可以组网,一个网关控制几十个设备。我在家里装了20多个BLE Mesh灯泡,用了两年没出过问题。
  • 医疗健康:血糖仪、体温计、血氧仪。BLE的GATT服务定义了标准的健康设备配置文件,比如Blood Pressure Profile。我帮一家医疗公司做过认证,BLE的互操作性测试比经典蓝牙严格得多。
  • 工业传感器:温湿度、振动、压力。5.4的PAwR(Periodic Advertising with Responses)让大规模传感器网络成为可能。我最近在做一个工厂项目,用PAwR轮询200多个传感器,延迟控制在100ms以内。

1.3.3 定位场景:蓝牙的新战场

  • 室内定位:利用RSSI或AoA/AoD做位置估计。5.1引入的方向发现,精度可以达到米级甚至亚米级。我在一个商场项目中,用蓝牙AoA做室内导航,定位精度做到了0.5米。
  • 信标(Beacon):苹果的iBeacon、Google的Eddystone。虽然现在热度不如前几年,但在博物馆、展会等场景仍然有用。
  • 物品查找:苹果的AirTag用的就是BLE+UWB。BLE负责低功耗连接和广播,UWB负责精确定位。

注意:蓝牙定位的精度受环境影响很大。金属、人体、多径反射都会导致RSSI波动。我曾经在仓库里做定位测试,同一个位置,上午和下午的RSSI差了10dB。所以做定位项目时,一定要做现场校准,别指望算法能解决所有问题。

1.4 蓝牙协议栈全景图:一张SVG看懂

下面这张图是我自己画的蓝牙协议栈架构。你仔细看,左边是经典蓝牙的协议栈,右边是低功耗蓝牙的协议栈。中间是共同的部分——L2CAP、HCI、Link Layer。搞懂了这张图,你就知道蓝牙到底是怎么工作的。

蓝牙协议栈全景架构 经典蓝牙 (BR/EDR) 协议栈 应用层 (APP / Profiles) RFCOMM / SDP / GAP L2CAP (逻辑链路控制与适配) HCI (主机控制器接口) Link Manager / Baseband BR/EDR 射频 (79信道, 1MHz) 低功耗蓝牙 (BLE) 协议栈 应用层 (APP / GATT Profiles) GATT / GAP / SM (安全管理) L2CAP (逻辑链路控制与适配) HCI (主机控制器接口) Link Layer (状态机: Standby/Scan/Advertise/Init/Connection) BLE 射频 (40信道, 2MHz) L2CAP 和 HCI 是双模共用的核心层 经典蓝牙侧重流媒体,BLE 侧重小数据低功耗

这张图你看懂了吗?我简单解释一下:

  • 最上层是应用层:你写的业务逻辑就在这。经典蓝牙用Profile(比如HFP、A2DP),BLE用GATT Service(比如心率、电量)。
  • 中间是协议层:L2CAP负责数据分包重组,HCI是主机和控制器之间的通信接口。这两个层双模共用,所以很多双模芯片的协议栈代码是共享的。
  • 最下层是射频层:经典蓝牙79个信道,BLE 40个信道。信道数不同,跳频算法也不同。我在调试射频问题时,经常用频谱仪看跳频图案——嗯,这招很管用。

个人经验:初学者最容易犯的错误是搞混GAP和GATT。GAP管「连接」——谁广播、谁扫描、谁发起连接;GATT管「数据」——连接建立后,怎么读写数据。我见过有人把GATT写在广播里,结果数据根本传不出去。记住:GAP是连接前的事,GATT是连接后的事。

1.5 本章小结:你该带走什么?

这一章我们聊了蓝牙的来龙去脉、双模差异和应用场景。你不需要记住所有版本号,但下面这几点,我建议你刻在脑子里:

  1. 蓝牙4.0是分水岭:BLE的出现让物联网成为可能。如果你做低功耗设备,选BLE;如果你做音频设备,选经典蓝牙。
  2. 双模芯片是趋势:现在的芯片大多同时支持BR/EDR和BLE。选型时优先考虑双模,灵活性更高。
  3. 场景决定协议:音频用A2DP/HFP,传感器用GATT,定位用AoA/Beacon。别拿BLE做音频,也别拿经典蓝牙做传感器——我踩过的坑,你别再踩了。