1. BLE协议栈概述:蓝牙技术演进、核心架构与手环应用
各位同学,大家好。我是你们这门课的老朋友。今天咱们正式开篇,聊聊BLE协议栈的“前世今生”。
说实话,我最早接触蓝牙那会儿,还是蓝牙2.0时代。那时候给一个手环做数据传输,功耗高得吓人,一颗纽扣电池撑不过三天。后来BLE(低功耗蓝牙)出来,我才真正觉得,可穿戴设备的春天来了。
1.1 蓝牙技术演进:从“经典”到“低功耗”
蓝牙技术从1994年诞生到现在,走了快三十年。我个人习惯把它分成三个阶段:
- 经典蓝牙(BR/EDR):蓝牙1.0到3.0。主打高速率,适合耳机、文件传输。但功耗高,不适合手环这种小电池设备。
- 低功耗蓝牙(BLE):蓝牙4.0开始引入。这是革命性的。它把功耗降到了经典蓝牙的十分之一甚至更低。我当年第一次看到BLE的功耗数据时,第一反应是“这不可能”。
- 蓝牙5.0及以后:在BLE基础上继续优化。增加了广播扩展、2Mbps速率、长距离模式。说白了,就是让BLE跑得更快、传得更远、功耗还更低。
核心观点:对于手环这种设备,我们几乎只用BLE。经典蓝牙?嗯,基本可以忽略。
1.2 BLE核心架构:为什么它这么省电?
BLE省电的秘密,说白了就三个字:“不常干”。
你想想看,经典蓝牙是“一直连、一直传”。而BLE呢?它是“需要时才连,传完就睡”。
具体来说,BLE的核心架构包含两个角色:
- Central(中心设备):比如你的手机。它负责扫描、发起连接、管理多个外设。
- Peripheral(外设):比如手环。它负责广播自己的存在,等待连接,然后按需传输数据。
我在项目中遇到过一个问题:手环作为外设,广播间隔设得太短(比如20ms),结果功耗飙升。后来我改成100ms广播一次,电池续航直接翻倍。嗯,这里要注意,广播间隔不是越短越好。
1.3 协议栈分层模型:从物理层到应用层
BLE协议栈,说白了就是一套“分层干活”的体系。每一层只管自己的事,层与层之间通过标准接口通信。我刚开始学的时候,觉得分层很麻烦。后来发现,分层其实是为了让我们好移植、好调试。
标准的分层模型如下:
| 层级 | 名称 | 主要职责 | 手环场景举例 |
|---|---|---|---|
| 物理层(PHY) | Physical Layer | 负责射频收发、调制解调 | 手环天线设计、发射功率设置 |
| 链路层(LL) | Link Layer | 负责连接管理、数据包封装、重传 | 连接间隔、超时时间配置 |
| 主机控制接口(HCI) | Host Controller Interface | 物理层与主机之间的通信桥梁 | 串口或SPI传输HCI命令 |
| 逻辑链路控制与适配协议(L2CAP) | Logical Link Control and Adaptation Protocol | 数据分段重组、多路复用 | 大包数据的分片传输 |
| 安全管理(SM) | Security Manager | 配对、绑定、加密 | 手环与手机配对时的密钥交换 |
| 属性协议(ATT) | Attribute Protocol | 读写属性数据 | 读取手环心率值 |
| 通用属性协议(GATT) | Generic Attribute Profile | 定义服务、特征值的组织方式 | 心率服务、电池服务 |
| 通用访问协议(GAP) | Generic Access Profile | 定义设备角色、广播、连接流程 | 手环广播自己的名字 |
我的经验:做手环协议栈移植时,最常打交道的是GAP和GATT层。物理层和链路层一般由芯片厂商提供,我们不用动。但如果你要自己写驱动,那链路层的连接参数配置就是重中之重。
1.4 手环应用场景分析:BLE到底在干什么?
手环这个产品,说白了就是“小、省、准”。
- 小:体积小,电池小。所以功耗必须低。
- 省:省电是第一要务。一颗电池用一周甚至一个月。
- 准:数据要准。心率、步数、睡眠,不能差太多。
在手环里,BLE主要干这几件事:
- 广播:手环每隔一段时间(比如100ms)广播一次,告诉手机“我在这儿”。手机扫描到后,发起连接。
- 连接与数据同步:连接后,手环把心率、步数等数据通过GATT服务传给手机。我建议用Notification方式,这样手机不用轮询,手环主动推数据,省电。
- OTA升级:手机通过BLE把固件包传给手环。这个场景对速率有要求,蓝牙5.0的2Mbps模式就派上用场了。
- 查找手机:手环发一个特殊广播,手机收到后响铃。这个功能看似简单,但广播数据的格式设计不好,容易丢包。
避坑指南:我曾经在一个项目中,手环和手机连接后,每隔几秒就断连。查了三天,最后发现是连接间隔设置得太短(7.5ms),手机处理不过来。后来改成15ms,问题解决。所以,连接参数一定要根据实际设备性能来调,别盲目追求低延迟。
1.5 小结:学完这一章,你该知道什么?
好了,这一章的内容就这些。总结一下:
- 蓝牙从经典到低功耗,核心变化是“省电”。
- BLE协议栈分8层,我们重点关注GAP和GATT。
- 手环场景下,BLE主要做广播、连接、数据同步、OTA。
- 参数配置(广播间隔、连接间隔)直接影响功耗和稳定性。
下一章,咱们就动手了。我会带你把一个标准的BLE协议栈移植到某款国产芯片上。到时候,你会看到这些分层模型到底是怎么在代码里跑起来的。
嗯,今天就到这儿。有问题随时在群里问我。