跳转至

基础概念

协议栈

在系统学习 BLE 之前,我们应该先认识一下协议栈的整体架构。

20240519223707

从上图可以知道,BLE 将各子协议分为三大层:

  1. 应用开发的 Profile 层
  2. 主机 Host 层
  3. Controller 层

而蓝牙协议栈的范围包括了整个 Host 层的子协议和 Controller 层中的 HCI 协议和 LL 协议。可以这么说,蓝牙协议栈是将我们的应用和芯片底层连接起来的一座桥梁。

蓝牙协议栈实质上是将应用层要传输的数据,经过层层子协议的封装,生成一个符合蓝牙协议的空中数据包。

下面将以一个蓝牙键盘应用为例,简单介绍一下各层协议的作用。

Phy

Physical Layer,物理层。用来指定 BLE 所用的无线频段,调制解调方式和方法等。PHY 层做得好不好,直接决定整个 BLE 芯片的功耗,灵敏度以及 selectivity 等射频指标。

一个蓝牙键盘,不管硬件如何设计,一定是需要一个将冰冷的二进制数据转换为同样肉眼不可见但物理上存在数据的过程。

LL

Link Layer, LL 层是整个 BLE 协议栈的核心,也是 BLE 协议栈的难点和重点。

有些蓝牙芯片说能同时支持多少个 link,就是 LL 层的功劳。

LL 层只负责把数据发出去或者收回来,这么一说好像 LL 层干的事很简单,但实际做的事情是非常多的。

比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK 如何接收,如何进行重传,以及如何对链路进行管理和控制等等。

HCI

Host controller interface。HCI 主要用于是 Host 和 Controller 之间沟通的协议。

有些厂商将 Host 和 Controller 分为两颗芯片设计,这时候有个规范两者通信格式的协议是必要的。

目前笔者接触到的只有单芯片的设计方案,但 Host 和 Controller 在一个芯片上时,就完全可以直接通过接口来沟通了。有的蓝牙芯片厂商会在协议栈代码里保留这部分指令。

L2CAP

Logic link control and adaptation protocol, 逻辑链路层。L2CAP 对 LL 进行了一次简单封装,LL 只关心传输的数据本身,L2CAP 要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

SMP

Secure manager protocol。SMP 用来管理 BLE 连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是 SMP 要考虑的工作。

当我们使用一个新键盘时,需要执行一步配对的过程,这个过程就是 SMP 的工作范围。

GAP

Generic access profile。GAP 是解析 LL 层 payload(有效数据包)两种方式中的之一,而且是最简单的那一种。GAP 简单的对 LL payload 进行一些规范和定义,因此 GAP 能实现的功能极其有限。

GAP 目前主要用来进行广播,扫描和发起连接等。

ATT

Attribute protocol。ATT 层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。

BLE 引入了 attribute 概念,用来描述一条一条的数据。attribute 除了定义数据,同时定义该数据可以使用的 ATT 命令,因此这一层被称为 ATT 层。

GATT

全称 Generic attribute profile,GATT 用来规范 attribute 中的数据内容,并运用 group(分组)的概念对 attribute 进行分类管理。

蓝牙键盘用到的 HID,在 GATT 层被分到了 0x1812 这一类里。

GATT 是两个素不相识的设备应用之前约定俗称的标准,没有 GATT,BLE 协议栈也能跑,但互联互通就存在问题。

各种 Profile

这是蓝牙 SIG 联盟针对一些应用场景定义的,如果这些 Profile 符合你产品的应用设计,那你完全可以拷贝过来不做修改地使用。

标准的蓝牙键盘使用的是 Profile 里的 HID 协议,我们可能会在其他地方听过这个 HID 协议,它是另一个组织 USB 委员会提出的标准协议,等于是 Profile 里的一个子协议。

除了 HID,主机可能还会有需要获取键盘电量的需求,Battery Profile 也是蓝牙官方定义的一个标准 Profile。

总结

以上仅是对蓝牙协议栈基础概念的一个简单介绍。BLE 协议栈对于很多开发者包括本人在内来说,是比较枯燥无味的。

但倘若对蓝牙协议栈架构有一定了解了,遇到问题后就可以有所方向地去针对性学习并解决问题,逐步将这些知识点串联起来,完善整个 BLE 知识体系。