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主要干这几件事:

  1. 广播:手环每隔一段时间(比如100ms)广播一次,告诉手机“我在这儿”。手机扫描到后,发起连接。
  2. 连接与数据同步:连接后,手环把心率、步数等数据通过GATT服务传给手机。我建议用Notification方式,这样手机不用轮询,手环主动推数据,省电。
  3. OTA升级:手机通过BLE把固件包传给手环。这个场景对速率有要求,蓝牙5.0的2Mbps模式就派上用场了。
  4. 查找手机:手环发一个特殊广播,手机收到后响铃。这个功能看似简单,但广播数据的格式设计不好,容易丢包。

避坑指南:我曾经在一个项目中,手环和手机连接后,每隔几秒就断连。查了三天,最后发现是连接间隔设置得太短(7.5ms),手机处理不过来。后来改成15ms,问题解决。所以,连接参数一定要根据实际设备性能来调,别盲目追求低延迟。

1.5 小结:学完这一章,你该知道什么?

好了,这一章的内容就这些。总结一下:

  • 蓝牙从经典到低功耗,核心变化是“省电”。
  • BLE协议栈分8层,我们重点关注GAP和GATT。
  • 手环场景下,BLE主要做广播、连接、数据同步、OTA。
  • 参数配置(广播间隔、连接间隔)直接影响功耗和稳定性。

下一章,咱们就动手了。我会带你把一个标准的BLE协议栈移植到某款国产芯片上。到时候,你会看到这些分层模型到底是怎么在代码里跑起来的。

嗯,今天就到这儿。有问题随时在群里问我。