一、蓝牙技术概述:从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 小结:这一章你该记住什么?

好了,第一章的内容就到这里。我帮你总结几个关键点:

  1. 蓝牙标准从4.0到6.0,核心变化在BLE这条线上。5.0之后速度更快、距离更远、功能更强。
  2. 经典蓝牙和BLE,不是替代关系,而是互补关系。选型时看应用场景。
  3. 协议栈分三层:Controller、Host、Application。HCI是它们之间的桥梁。
  4. 驱动开发的核心:搞清楚你的代码在协议栈的哪个位置,以及它和上下层怎么交互。

下一章,我会带你手把手搭建蓝牙固件开发环境。到时候咱们真刀真枪地干,不玩虚的。