名词解释:
BT SIG英文全称为Bluetooth Special Interest Group(蓝牙特别兴趣组),网址为 www.Bluetooth.com。
Bluetooth® Technology Website
SIG成立于1998年,是一个全球技术交流组织,拥有超过36000家公司参与,是一家私有的非盈利性联盟,联盟致力于针对身边广泛设备链接的统一、协调和技术推动创新,通过集体创建和共享技术标准,蓝牙® 技术简化、保护和丰富了全球用户的技术体验。联盟拥有Bluetooth®商标和标准的开发权,所有蓝牙核心规范、应用规范、测试规范均由SIG联盟制定,且拥有完全的知识产权。其主要工作内容包括:发布蓝牙标准、管理认证程序、保护蓝牙商标、推广蓝牙技术等。
1.BLE协议栈
BLE协议栈一般是指芯片厂家,依据 Bluetooth SIG 发布的 Bluetooth Core Specification 核心协议的实现的代码固件,并提供函数接口,由芯片内部程序调用,可实现上节BLE工作流程等相关功能。常见的协议栈有德州仪器 TI 的 ble-stack 和 Nordic 的 SoftDevice。
1.1 功能框图
通过列举两家典型的蓝牙芯片厂家:TI和Noridc,来深入了解低功耗蓝牙协议栈。
下图是TI的CC26系列芯片协议栈结构图,
下图是Nordic的nRF52系列芯片的协议栈结构图。
1.2 协议栈结构
从上节的两张协议栈功能框图中可以看出,无论是哪个芯片厂商实现的BLE协议栈,其结构都非常的相似,均三个部分:
- 底层:Controller
- 中层:Host
- 顶层:Application
【注】提示:我们将位于顶层的应用层Application也归到协议栈中描述,其实,应用层Application不属于协议栈,它是用来调用协议栈提供的接口,然后实现蓝牙的功能。
1.2.1 控制器Controller
- Physical Layer,简称:PHY,物理层。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
- Link Layer,简称:LL,链路层。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同时支持20个link(连接),就是LL层的功劳。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT
- Host Controller Interface,简称:HCI。协议栈应用开发中,我们会经常看到HCI的身影,它对上Host提供Controller的功能接口, 主要用于 2 颗芯片实现 BLE 协议栈 的场合,用来规范两者之间的通信协议和通信命令等, 所以称作Host Controller Interface。
1.2.2 主控Host
- Logical Link Control Adaptation Protocol,简称:L2CAP。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。
- Attribute Protocol,简称:ATT。ATT层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE协议栈中,开发者接触最多的就是ATT。BLE引入了attribute概念,用来描述一条一条的数据。Attribute除了定义数据,同时定义该数据可以使用的ATT命令,因此这一层被称为ATT层。
- Security Manager,简称:SM。SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。
- Generic Access Profile,简称:GAP。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。
- Generic Attribute Profile,简称:GATT。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了ZigBee等无线协议的兼容性困境,成了出货量最大的2.4G无线通信产品。
1.2.3 应用Application
应用层是用户开发实际蓝牙应用的地方,包含必要的协议栈参数设置,以及各种功能函数的调用。我们分别从蓝牙从机和蓝牙主机两种设备来分析。
1)蓝牙从机
- 相关硬件和基础服务初始化
- 设置广播参数:广播数据,广播间隔,扫描回应等参数或者数据。
- 设置Profile:添加从机服务、特征,还有设置回调函数用于接收主机数据等。
- 设置绑定管理参数(可选)
- 启动广播,开始运行。
- 等待相关事件,及事件处理,例如收到主机发来的数据,被链接等等。
2)蓝牙主机
- 相关硬件和基础服务初始化
- 设置扫描参数。
- 设置连接参数。
- 设置绑定管理参数(可选)
- 启动协议栈,开始运行。
- 等待相关事件,及事件处理,例如扫描事件,从机的Notify事件等等。