1. 蓝牙技术基础:从1.0到5.4,我们到底在用什么?

各位同学好,我是老周。做蓝牙网关这些年,我见过太多人一上来就追着问“网关怎么配”,结果连蓝牙版本都搞不清楚。说实话,蓝牙技术发展了二十多年,版本号从1.0一路跑到5.4,中间的变化可不是简单的数字游戏。今天咱们就把这块地基打牢。

1.1 蓝牙发展史:从1.0到5.4,我踩过的坑

蓝牙1.0是1999年推出的。那时候我还在学校,压根没接触过。真正让我印象深刻的,是蓝牙2.0 + EDR。2004年,EDR(增强数据率)把速率提到了3Mbps。我当时做第一个蓝牙项目,用的就是2.0芯片。嗯,那个项目最后因为干扰问题差点黄了——蓝牙和Wi-Fi在2.4GHz频段打架,老问题了。

后来蓝牙3.0 + HS(高速)在2009年出现,它其实是个“混血儿”:蓝牙负责握手,数据走Wi-Fi。想法很好,但实际用的人不多。为什么?功耗高,而且协议切换太慢。

真正改变行业的是蓝牙4.0。2010年,低功耗蓝牙(BLE)诞生了。我清楚记得第一次用BLE芯片做传感器节点,一颗纽扣电池跑了半年。从那以后,经典蓝牙和低功耗蓝牙就分家了。

蓝牙5.0(2016年)带来了4倍距离、2倍速度、8倍广播容量。5.1(2019年)加入了方向定位,5.2(2020年)引入了LE Audio,5.3(2021年)优化了功耗和连接稳定性,5.4(2023年)则进一步增强了广播安全和周期性广播。

核心要点:蓝牙版本向下兼容,但功能差异巨大。做网关选型时,千万别只看“支持蓝牙”三个字,一定要确认具体版本和特性。

1.2 经典蓝牙 vs 低功耗蓝牙:不是谁替代谁

很多人问我:“老周,BLE是不是比经典蓝牙好?”我的回答是:看场景。

经典蓝牙(BR/EDR)适合持续传输、高吞吐量的场景,比如蓝牙耳机、音箱、文件传输。它的连接是持续的,功耗也高。

低功耗蓝牙(BLE)适合间歇性、小数据量、低功耗的场景,比如传感器、信标、健康设备。它的连接是事件驱动的,大部分时间在睡觉。

对比项 经典蓝牙 (BR/EDR) 低功耗蓝牙 (BLE)
诞生时间 蓝牙1.0 (1999) 蓝牙4.0 (2010)
数据速率 1-3 Mbps (EDR) 125 Kbps - 2 Mbps
功耗 高(mA级持续) 极低(μA级休眠)
连接方式 持续连接 事件驱动/广播
典型应用 耳机、音箱、车载 传感器、信标、穿戴
网络拓扑 微微网(1主7从) 广播、连接、Mesh
延迟 ~100ms ~3ms(连接事件)

我的经验:做蓝牙网关时,大部分场景用BLE就够了。但如果你要传音频或大文件,别犹豫,上经典蓝牙。我曾经在一个项目中硬用BLE传音频,结果延迟大到没法用,最后全盘重来。

1.3 蓝牙协议栈架构概览:分层,是为了不打架

蓝牙协议栈是个分层结构。说白了,每一层只干自己的事,把复杂的东西封装起来。你想想看,如果所有功能都揉在一起,改一个地方全崩,那谁受得了?

我习惯把协议栈分成三块:控制器、主机、应用层。控制器负责射频和底层链路,主机负责逻辑链路和属性协议,应用层就是咱们写代码的地方。

蓝牙协议栈架构概览 蓝牙协议栈分层架构 应用层 (Application) 用户代码、配置文件、业务逻辑 主机 (Host) GATT / ATT SM / L2CAP GAP 属性协议、安全管理、逻辑链路控制 HCI (主机控制器接口) 控制器 (Controller) 链路层 (LL) 物理层 (PHY) 射频 (RF)

这张图我画了很多次。你看,从上到下依次是:应用层、主机、HCI接口、控制器。HCI是主机和控制器之间的“翻译官”。实际开发中,如果你用单芯片方案(比如Nordic、TI的SoC),HCI是内部走的,你基本感觉不到。但如果你用双芯片方案(比如手机+蓝牙芯片),HCI就是串口或USB,你得自己处理。

1.4 协议栈里的关键角色

咱们挑几个重点说说:

  • GAP(通用访问配置文件):负责设备发现、连接建立、广播。说白了,就是让两个设备能“看见”对方并“握手”。
  • GATT(通用属性配置文件):定义了数据怎么组织和交换。BLE世界里,所有数据都是“属性”,通过服务(Service)和特征(Characteristic)来管理。
  • L2CAP(逻辑链路控制与适配协议):负责数据分包和重组。经典蓝牙和BLE的L2CAP不太一样,注意区分。
  • SM(安全管理):负责配对、绑定、加密。我遇到过不少开发者在这里翻车,配对失败、密钥丢失,都是常见坑。

避坑指南:我曾经在一个网关项目中,因为没处理好GATT的MTU(最大传输单元)协商,导致数据分包错误,设备频繁断连。后来花了三天才定位到问题。记住:BLE默认MTU是23字节,实际可用只有20字节。如果你要传大包,一定要在连接后协商MTU。

1.5 经典蓝牙 vs BLE 协议栈差异

经典蓝牙的协议栈比BLE复杂得多。它多了RFCOMM(串口仿真)、SDP(服务发现协议)、AVDTP(音视频分发)等。而BLE的协议栈更精简,去掉了这些“重”协议,换成了轻量的ATT/GATT。

协议栈组件 经典蓝牙 低功耗蓝牙
物理层 79个信道,1MHz间隔 40个信道,2MHz间隔
链路层 SCO/eSCO(同步)/ACL(异步) 仅ACL,支持广播
L2CAP 支持重传、流控 简化版,面向数据报
上层协议 RFCOMM、SDP、AVDTP等 ATT、GATT
安全 SSP(安全简单配对) SM(安全管理器)
配置文件 HSP、HFP、A2DP等 HID over GATT、心率、环境感知等

你看,经典蓝牙的协议栈像个“瑞士军刀”,什么都能干,但重。BLE像个“手术刀”,专精于低功耗、小数据、快速连接。做网关时,我建议你根据终端设备类型来选择。如果终端是传感器,BLE是首选;如果是音频设备,经典蓝牙跑不掉。

1.6 小结:地基打牢,后面不慌

这一章我们聊了蓝牙从1.0到5.4的演进,经典蓝牙和BLE的区别,以及协议栈的分层架构。说实话,这些概念看起来枯燥,但它们是后续所有章节的基石。你想想看,如果连GATT和GAP都分不清,后面怎么理解网关的数据转发和连接管理?

我个人习惯是,每接触一个新蓝牙芯片,第一件事就是看它的协议栈支持列表。支持BLE 5.2吗?支持LE Audio吗?支持Mesh吗?这些信息直接决定了你的网关能做什么、不能做什么。