一、蓝牙技术概述:从4.0到6.0的演进之路
大家好,我是你们的蓝牙协议栈讲师。今天咱们聊聊蓝牙技术的基础——标准演进、经典蓝牙与低功耗蓝牙的区别,还有协议栈的整体架构。这部分内容,说白了就是整个课程的"地基"。地基打不牢,后面写驱动、调固件的时候,你可能会踩不少坑。
1.1 蓝牙标准演进:从4.0到6.0,到底变了什么?
蓝牙技术从诞生到现在,经历了多次重大迭代。我个人习惯把蓝牙标准分成两个时代:4.0之前和4.0之后。为什么这么分?因为4.0引入了低功耗蓝牙(BLE),这彻底改变了蓝牙的应用场景。
咱们先看一张演进表,我整理了一下关键版本和核心变化:
| 版本 | 发布时间 | 核心变化 | 我的评价 |
|---|---|---|---|
| 4.0 | 2010年 | 引入BLE,双模架构 | 里程碑式版本,BLE从此诞生 |
| 4.1 | 2013年 | 改进共存机制,支持L2CAP面向连接通道 | 修修补补,但很重要 |
| 4.2 | 2014年 | LE数据长度扩展,隐私保护增强 | BLE终于能传大包了 |
| 5.0 | 2016年 | 2Mbps PHY,LE长距离,广播扩展 | 速度翻倍,距离翻倍 |
| 5.1 | 2019年 | 方向性定位,GATT缓存改进 | 室内定位终于有戏了 |
| 5.2 | 2020年 | LE音频,同步通道,增强ATT | 蓝牙耳机的新时代 |
| 5.3 | 2021年 | 连接子速率,信道分类增强 | 功耗进一步优化 |
| 5.4 | 2023年 | 广播加密,LE音频增强 | 安全性提升 |
| 6.0 | 2024年 | 高精度距离测量,信道探测 | 厘米级定位,这很厉害 |
重点提醒:5.0之后的版本,其实都是在BLE这条线上做优化。经典蓝牙(BR/EDR)从4.0之后基本没怎么大改。所以你现在做新项目,如果选型,我建议优先考虑支持5.2以上的芯片。
我记得2016年刚接触5.0时,看到2Mbps PHY的规格,第一反应是"这玩意儿真能跑这么快?"后来在项目中实测,确实比4.2快了一倍。但要注意,2M PHY的灵敏度会下降,距离会缩短。嗯,这就是典型的"鱼和熊掌不可兼得"。
1.2 经典蓝牙 vs 低功耗蓝牙:到底有什么区别?
很多初学者会问:经典蓝牙和低功耗蓝牙,是不是一个省电一个费电?其实没那么简单。我给大家拆开来讲。
经典蓝牙(BR/EDR),全称是Basic Rate / Enhanced Data Rate。它设计之初是为了传输音频和文件,比如蓝牙耳机、蓝牙音箱。它的特点是:
- 连接方式:建立连接后持续占用信道,类似打电话
- 功耗:相对较高,但传输速率也高(最高3Mbps)
- 应用场景:音频流、文件传输、HID设备
- 网络拓扑:微微网(Piconet),一个主设备最多连7个从设备
低功耗蓝牙(BLE),全称是Bluetooth Low Energy。它设计之初是为了物联网和传感器,比如手环、信标、智能家居。它的特点是:
- 连接方式:广播+连接,平时可以休眠,需要时才唤醒
- 功耗:极低,一颗纽扣电池能用几个月甚至几年
- 应用场景:传感器数据、位置服务、设备控制
- 网络拓扑:广播模式、连接模式、Mesh网络
我的经验:选型时别只看"低功耗"三个字。如果你要传音频,老老实实用经典蓝牙。如果你要传传感器数据,用BLE。但如果你要做蓝牙耳机又想要低功耗...嗯,5.2的LE Audio就是干这个的。
我曾经在一个项目中,客户非要让BLE传音频流,结果延迟大得没法用。后来换成经典蓝牙,问题就解决了。所以,选对协议很重要。
1.3 蓝牙协议栈架构概览:从上到下,一层层拆解
蓝牙协议栈,说白了就是一套软件分层架构。每一层负责不同的功能,层与层之间通过接口通信。我习惯把它分成三大部分:Controller(控制器)、Host(主机)、Application(应用)。
咱们先看一张经典的协议栈分层图(我手绘的,凑合看):
+------------------------------------------+
| Application |
| (GATT Profile, 自定义应用逻辑) |
+------------------------------------------+
| Host (主机) |
| +--------------------------------------+ |
| | GAP (通用访问协议) | GATT (通用属性)| |
| +--------------------------------------+ |
| | ATT (属性协议) | SMP (安全管理) | |
| +--------------------------------------+ |
| | L2CAP (逻辑链路控制与适配协议) | |
| +--------------------------------------+ |
+------------------------------------------+
| HCI (主机控制器接口) |
+------------------------------------------+
| Controller (控制器) |
| +--------------------------------------+ |
| | LL (链路层) | PHY (物理层) | |
| +--------------------------------------+ |
+------------------------------------------+
我来简单解释一下各层的职责:
- PHY(物理层):负责无线信号的收发。说白了就是天线和射频那部分。BLE在2.4GHz频段工作,有40个信道。
- LL(链路层):负责信道管理、数据包收发、连接建立。这是BLE最核心的一层,我后面会花大篇幅讲。
- HCI(主机控制器接口):这是Host和Controller之间的"翻译官"。Host发命令,Controller回事件。HCI可以通过UART、USB、SPI等物理接口实现。
- L2CAP:负责数据的分段和重组。上层数据太大?L2CAP帮你切碎。下层数据太碎?L2CAP帮你拼好。
- ATT/GATT:这是BLE应用层的核心。GATT定义了数据的组织方式(服务、特征值),ATT定义了数据的读写操作。
- GAP:负责设备的角色、广播、连接。说白了就是"你是谁?我能连你吗?"
- SMP:安全管理协议,负责配对、加密、密钥分发。安全这块,我建议你从一开始就重视,别等产品被破解了再后悔。
避坑指南:我曾经在一个项目中,把HCI的UART波特率设错了,结果Host和Controller之间通信全是乱码。排查了整整两天才发现是波特率不匹配。所以,HCI的物理层配置一定要仔细核对。
你想想看,整个协议栈从底层到顶层,每一层都有自己要做的事。作为驱动开发工程师,你不需要把每一层的细节都背下来,但一定要知道:你的代码工作在哪个层?它和上下层怎么通信? 这是后面写固件、调驱动的核心思路。
1.4 小结:这一章你该记住什么?
好了,第一章的内容就到这里。我帮你总结几个关键点:
- 蓝牙标准从4.0到6.0,核心变化在BLE这条线上。5.0之后速度更快、距离更远、功能更强。
- 经典蓝牙和BLE,不是替代关系,而是互补关系。选型时看应用场景。
- 协议栈分三层:Controller、Host、Application。HCI是它们之间的桥梁。
- 驱动开发的核心:搞清楚你的代码在协议栈的哪个位置,以及它和上下层怎么交互。
下一章,我会带你手把手搭建蓝牙固件开发环境。到时候咱们真刀真枪地干,不玩虚的。