了解低功耗蓝牙协议栈的架构
摘要
本文深入介绍了低功耗蓝牙(BLE)协议栈架构,并探讨了如何运用现有的BLE应用,充分发挥低功耗无线通信的潜力。为了能够高效可靠地开展设计、解决问题和优化应用,这些知识必不可少。
引言
低功耗蓝牙(BLE)是物联网(IoT)生态系统的一项关键技术。BLE最初是作为一种无线协议开发的,用于取代键盘、鼠标和耳机等消费电子产品中的线缆,但时至今日,它的功能已经大大拓展,不再仅仅是线缆的替代方案。目前,它在医疗、零售、汽 车等多个行业及位置标签、仪器控制等工业应用中发挥着重要作用。
根据《2023年蓝牙市场更新报告》(2023 Bluetooth Market Update),从 2023年到2027年,支持蓝牙无线技术的设备出货量的复合年增长率(CAGR)为9%。1在这种增长态势下,预计到2027年,BLE设备出货量将翻一番以上,并且在所有支持蓝牙技术的设备中,97%会采用BLE。1
BLE是一种无线技术,于2010年7月随蓝牙4.0规范推出。BLE前称为Bluetooth Smart(蓝牙智能),专为超低功耗设备而设计。
我们熟悉的传统蓝牙技术主要用于将智能手机与耳机配对、传输音乐和照片等大量数据,而BLE则有着不同的用途。传统蓝牙虽然能够处理大量数据传输,但会因此而消耗更多的电池电量。相比之下,BLE针对不需要大量数据传输的应用进行了 优化,因而成为各种功耗敏感应用的理想选择。传统蓝牙即使在不使用时,仍会保持活动状态并消耗电量,而BLE大部分时间处于休眠模式,仅在建立连接时才会唤醒,并且连接时间通常仅维持几毫秒。这种高效的电源管理,结合最高1 Mbps(BLE 5.0中达到2 Mbps)的数据速率,使得BLE设备能够以极低的功耗运行。
蓝牙规范
如图1和图2所示:
- 经典蓝牙: 代表蓝牙的最早版本,具有较高的数据速率能力,适用于流媒体、高带宽文件传输和耳机。它有79个RF信道,其中32个广播信道,以便其他设备可以发现和连接。
- 低功耗蓝牙:针对数据传输不频繁的低功耗应用,例如传 感器和其他低带宽传输。它有40个RF信道,其中3个信道用于设备发现。
BLE应用概述
典型的BLE应用由两个设备组成:外围设备和中心设备。在建立连接之前,外围设备会通过一个称为BLE广播的过程对外宣告自身的存在。中心设备会扫描可用的外围设备。一旦中心设备找到所需的外围设备,两者之间就会建立连接。然后,每个设备中的应用可以通过BLE协议栈的不同层传输数据,实现相互通信。参见图3。
例如,智能手机可以充当中心设备,而健身追踪器可以充当外围设备。健身追踪器作为服务器,收集心率、血压、ECG、步数甚至睡眠模式等数据。健身追踪器向附近设备广播自身的存在,包括作为客户端的智能手机。智能手机从健身追踪器中检索这些数据,并显示在用户易于理解的应用程序上。这只是BLE支持实现的众多应用中的一个例子,我们将在文章的后半部分讨论更多应用。
BLE协议栈架构
BLE协议栈架构(如图4所示)是实现BLE设备之间通信的结构化软件框架。它定义了必要的层级和协议,用于建立、维持和终止蓝牙连接,方便设备间交换数据。
BLE协议栈架构通常分为三个主要层级:应用层(APP)、主机层(HOST)和控制器层(CONTROLLER)。应用层是协议栈的最顶层。BLE设备上运行的应用程序在这一层利用和处理实际数据。主机层位于协议栈中的应用层和控制器层之间,实现了BLE通信所需的所有较高级别协议和配置文件。此外,它还提供高级应用程序编程接口(API),使得应用程序能够与协议栈的较低层交互。控制器层是BLE协议栈的硬件部分,负责蓝牙信号的发送和接收。控制器层处理信号的跳频、调制和解调等任务。上述层级协同工作,实现BLE设备之间高效可靠的通信。
应用
应用层用于实现BLE设备具体应用需求。应用层通过GATT(通用属性规范)与协议栈下层进行交互,基于GATT定义的服务、特征和相应数据。
设备的特性和行为在应用层设计。其中包括定义服务和特征,指定数据交换方式,实现连接、断开连接、数据更新等事件处理逻辑。应用层的主要作用是根据设备及其预期使用场景的具体需求来定制BLE协议栈。
主机
主机层(Host)包含BLE协议栈的上层协议,具体包括逻辑链路控制与适配协议(L2CAP)、安全管理器协议(SMP)、属性协议(ATT)、通用属性规范(GATT)和通用访问规范(GAP)。L2CAP作为上下层协议之间的通道接口,负责应用数据的分割和封装,并使用ACL链接传输数据包。L2CAP通过通道标识符(CID)和通道复用来正确定位设备上的端点。参见图5。
L2CAP信号
在BLE协议栈中,命令以请求和响应的形式在设备之间交换。以下是有关命令的一些要点:
- 命令以请求和响应的形式发送。
- 每个协议数据单元(PDU)可以发送一个命令。
- 包含L2CAP信令消息的PDU称为C帧(控制帧),而数据帧则分为B帧(基本信息帧)和LE帧(低功耗信息帧)。参见图6。
- Command Reject(命令被拒绝)
- 命令代码无法识别或命令长度不正确时发送的响应
- 可能原因
- 未知命令
- 超出LCAP信令最大传输单元(MTU)
- 请求中的CID无效
- Connection Parameter Update Request(连接参数更新请求)
- 由LE节点向LE主节点发送,请求一组新的连接参数
- 连接参数
- Interval min(最小间隔)
- Interval max(最大间隔)
- Node latency(从设备时延)
- Timeout multiplier(超时时间)
- Connection Parameter Update Response(连接参数更新响应)
- 由LE主节点向LE节点发送,以响应连接参数更新请求
SMP定义了BLE设备之间的配对、认证和加密程序。SMP命令使用L2CAP服务执行这些程序。SMP命令包由代码字段和数据字段组成。代码字段用于标识命令的类型,而数据字段的长度和格式取决于命令类型。所有SMP程序都实现了30秒超时,用于判断程序是否失败。参见表1。
代码 | 说明 | 相位 |
0x00 | Reserved | — |
0x01 | Pairing request | Phase 1 |
0x02 | Pairing response | Phase 1 |
0x03 | Pairing confirm | Phase 2 |
0x04 | Pairing random | Phase 2 |
0x05 | Pairing failed | Phase 2 |
0x06 | Encryption information | Phase 3 |
0x07 | Master identification | Phase 3 |
0x08 | Identify information | Phase 3 |
0x09 | Identity address information | Phase 3 |
0x0A | Signing information | Phase 3 |
0x0B | Security request | Phase 1 |
0x0C to 0x0FF | Reserved | — |
ATT定义了访问设备属性或数据的规则。它支持发现、读取和写入远程设备上的属性。ATT遵循客户端-服务器模型。服务器公开一组属性,而客户端可以发现、读取和写入这些属性。ATT中的属性结构由句柄、类型、值和权限组成。属性句柄是分配给服务器上每个属性的唯一非零标识符。属性类型通过通用唯一标识符(UUID)指定属性的含义。UUID可以是由蓝牙技术联盟(SIG)分配的16位UUID,也可以是自定义的128位UUID。属性值是属性的实际数据值,而属性权限决定了属性允许的访问级别。参见图7。
ATT(属性协议)定义了六种协议数据单元(PDU)类型:请求(Request)、响应(Response)、命令(Command)、确认(Confirmation)、通知(Notification)和指示(Indication)(参见图8)。请求PDU由客户端发送给服务器,请求回复。响应PDU是请求回复时服务器对客户端的回复。命令PDU由客户端发送给服务器,无需回复。指示PDU由服务器发送给客户端,需要回复。确认PDU由客户端发送给服务器,作为对指示的回复。通知PDU由服务器发送给客户端,无需回复。通过这些PDU类型,客户端和服务器可以在BLE协议栈的ATT层交换信息和进行控制。
ATT PDU(协议数据单元)的数据包结构由操作码(Opcode)、属性参数(Attribute Parameters)和身份验证签名(Authentication Signature)组成(参见图9)。操作码字段用于标识PDU的方法/类型,例如请求或响应。它还包括一个命令标志,用于指示PDU类型是否为命令;以及一个身份验证签名标志,用于指示数据包是否包含身
份验证签名。
图10总结了BLE协议栈架构中各层的数据包格式,并概要显示了数据的结构。
沿着主机层往上,下一个更高的层级是GATT。通用属性规范(GATT)负责定义数据或属性的格式化、封装以及设备之间的交互规则。GATT程序包括属性发现、读取、写入、通知和指示。它为管理BLE设备中的数据提供了一个标准框架。
一个BLE设备中可能存在多个GATT配置文件(图11)。蓝牙规范中定义了标准配置文件,以确保不同制造商生产的BLE设备能够互操作。但是,基于特定应用要求,也可以实现自定义配置文件。因此,了解GATT配置文件的结构至关重要。
GATT配置文件(Profile)由多个服务(Service)构成,每个服务通过ATT协议中定义的一组相关属性(Attributes)的集合。特征(Characteristic)通常指一个属性,但一个特征可能包含描述符(Descriptor)(描述符本身也是一个属性)。特征是用户数据的容器,而描述符提供有关用户数据的说明或附加信息。
与ATT类似,GATT中也有两个角色:GATT客户端和GATT服务器。GATT客户端是访问远程GATT服务器上数据的设备。GATT服务器是支持远程GATT客户端访问数据的设备。在GATT中,一个设备的角色由数据访问的方向决定。
在BLE协议栈的主机层中,通用访问规范(GAP - Generic Access Profile)是顶层协议,定义了蓝牙设备如何相互访问和通信。GAP涵盖了设备的工作模式、发现流程、连接建立和安全机制。所有支持蓝牙技术的设备都需要实现GAP,因为它为BLE设备的控制提供了标准框架。
GAP根据BLE设备的活动状态为其提供不同的角色。当不需要连接时,BLE设备可以充当广播者或观察者。广播者是一种在邻近范围内宣告自身存在的设备。它主要利用链路层的广播者角色发送广播。观察者与广播者相反,它利用链路层的扫描者角色扫描相关区域,以接收来自附近设备的广播。在现实生活中,广播者的例子有BLE信标,而观察者的例子有收集数据的BLE集线器。参见图12。
当可以建立连接时,GAP为BLE设备提供两个额外的角色:外围设备和中心设备。外围设备与广播者类似,它会宣告自身的存在,并等待来自远程中心设备的连接请求。中心设备则充当观察者,扫描外围设备,并向所需外围设备发起连接请求。如前
所述,外围设备的例子有智能手表、健身追踪器和家庭自动化传感器,而中心设备的例子有智能手机、平板电脑和笔记本电脑。参见图13。
根据蓝牙规范的要求,在一个配置文件中GAP服务(GAP Service)必须由GATT服务器实现。GAP服务包含多个特征(Characteristics)用于提供设备的基础信息。GAP服务的特征(Characteristics)通常包括:设备名称(Device Name)、设备外观(Appearance)、外设首选连接参数(Peripheral Preferred Connection Parameters)、中心设备地址解析(Central Address Resolution)、仅解析私有地址(Resolvable Private Address Only)。
控制器
控制器包含两层:链路层和物理层。物理层位于BLE协议栈的底层,负责无线信号的实际传输和接收。物理层工作在2.4 GHz ISM频段,采用高斯频移键控(GFSK)调制方案。这种调制方案通过改变载波信号的频率来实现高效的数据传输。
物理层由40个信道组成,每个信道彼此间隔2 MHz:
- 3个广播信道用于广播短数据包,以宣告广播者的存在及其可用的服务或信息。
- 37个数据信道在中心设备与外围设备建立连接后使用。
在蓝牙5核心规范发布前,BLE仅使用3个固定广播信道(37、38、39)。而蓝牙5引入的扩展广播(Extended Advertising)功能,允许将原本用于数据传输的37个数据信道作为辅助广播信道(Auxiliary Advertising Channels)使用。此扩展解锁了蓝牙5中的新特性,扩展了物理层的编码方案选择。参见图14。
蓝牙5引入了三种不同的物理层(PHY)类型,支持三种调制方案和四种数据传输速率(表2)。默认物理层(PHY)为LE 1M,以每秒1兆符号率(1 Msym/s)的调制方案运行,实现和每秒1兆比特率(1 Mbps)的数据传输速率,无线传输距离可达100米。另一类型物理层(PHY)为LE 2M,使用2 Msym/s调制方案,数据传输速率提升至2 Mbps。第三种物理层(PHY)为LE Coded,支持125Kbps和500Kbps两种数据传输速率。类似LE 1M模式,LE Coded采用1 Msym/s符号率调试方案。采用数据速率125Kbps的编码,每1比特数据扩展为8个符号(S=8),而采用数据速率500Kbps的编码,每1比特数据扩展为2个符号(S=2)。这种编码方案使得LE Coded PHY用于长距离模式应用,在空旷空间中传输距离可达1000米。(支持前向纠错,降低误码率。)
PHY | 调制方案 | 编码方案 | 数据速率 | |
访问标头 | 有效载荷 | |||
LE 1M | 1 Msymps modulation | Uncoded | Uncoded | 1 Mbps |
LE 2M | Pairing request | Uncoded | Uncoded | 2 Mbps |
LE Coded | Pairing response | S = 8 | S = 8 S = 2 |
125 kbps 500 kbps |
物理层(PHY)的上一层为链路层(Link Layer),链路层负责管理设备间的扫描、广播、连接建立、连接和链路的维护。链路层还管理这数据传输的信道先择,利用自适应跳频扩频来减少干扰。链路层状态机定义了五种状态:就绪态(Standby)、广 播态(Advertising)、扫描态(Scanning)、发起态(Initiating)、连接(Connection)。(见图15)。
- 空闲时链路层处于准备状态,不传输或接收数据包。
- 在广播状态下,链路层(充当广播者)发送广播数据包,同时监听是否有设备(Scanner)请求额外信息。
- 在扫描状态下,链路层(充当扫描者)监听广播者,并可主动发送扫描请求获取更多额外信息。
- 在发起状态下,链路层(充当发起者)监听来自广播者的数据包,并响应广播包,向广播者发起连接请求。
- 当链路层连接到另一个BLE设备的链路层,就处于已连接状态。
除了不同的状态之外,链路层还定义了如下事件:广播事件和连接事件。广播事件涉及使用广播信道传输数据包,而连接事件涉及通过数据信道在已连接状态下传输数据包。
链路层还定义了由物理层传输的BLE数据包的格式。数据包格式分为编码PHY (Coded PHY)和未编码PHY (Uncoded PHY)。
如图16所示,未编码PHY (Uncoded PHY)数据包格式包含四个字段:前导码(Preamble)、接入地址(Access Address)、协议数据单元(PDU)、循环冗余校验(CRC)。
如图17所示,编码PHY的BLE数据包由前导码、前向纠错(FEC)块1和FEC块2组成。
- 前导码是用于频率同步的1和0交替序列。对于LE 1M,其长度为1个字节;对于LE 2M,其长度为2个字节。
- 接入地址(Access Address)是一个4字节的唯一标识符,用于在物理信道上区分不同设备或连接的数据包。 广播信道接入地址为固定值0x8E89BED6。
- 在BLE协议栈中,协议数据单元(PDU)包含上层(如ATT/GATT)的有效载荷,分为广播PDU (Advertising PDU)和数据PDU (Data PDU)两种类型,其中可能包含通信所需要的来自传感器或其他设备的重要信息。更多信息将在下一节中讨论。
- CRC用于错误校验。
- 恒音扩展(Constant Tone Extension, CTE)由未经白化(Unwhitened)的 连续调制二进制“1”组成,是一项可选功能。CTE对于低功耗蓝牙定向查找(Direction Finding)特性非常重要。
- FEC Block 1包含接入地址(Access Address)、编码指示符(CI)和块终止符1 (TERM1),CI定义FEC Block 2的编码方案,TERM1标记FEC Block 1的结束,长度为3位二进制数。
- FEC Block 2包含协议数据单元(PDU)、循环冗余校验码(CRC)和块终 止符2 (TERM2)。其编码方式由FEC Block 1中的编码指示符(CI)指定。
无论是未编码PHY (Uncoded PHY)还是编码PHY (Coded PHY),其数据包中的协议数据单元(PDU)均分为两类:广播信道PDU和数据信道PDU。参见图18至图21。
如图18所示,广播信道PDU用于广播事件。其结构由2字节头字段(Header)和最大255字节有效载荷字段(Payload)构成。
广播信道PDU的Header字段结构如下:PDU类型、RFU位(保留未来扩展)、ChSel(信道选择)、TxAdd(发送设备地址类型)、RxAdd(接收设备地址类型)、长度(有效载荷的字节数)。ChSel、TxAdd和RxAdd位的值取决于PDU类型,而长度字段用于描述有效载荷的长度(以字节为单位)。
如图20所示,数据信道PDU供连接事件使用。它由2或3字节的标头(Header)、有效载荷(Payload)以及用于加密链路的消息完整性校验码(MIC)组成。数据信道PDU由连接事件使用。它由2或3字节的标头、有效载荷以及用于加密链路的消息完整性校验(MIC)组成。
数据信道PDU标头包含以下字段:LLID、NESN、SN、MD、CP、Length和CTEInfo。
- LLID用于描述链路层数据PDU的类型
- NESN(下一预期序号)用于标识预期对等设备发送的下一个 数据包序列号。
- SN(序列号)用于标识当前数据包序列号。
- CP (CTEInfo Present)用于标记数据包尾部包含额外的恒音扩展(CTEInfo)字段。
- 长度字段用于描述有效载荷的长度(以字节为单位)
- CTEInfo用于描述CTE的类型和长度
主机控制器接口(HCI)
HCI充当主机和控制器之间的中介。它提供了一组标准化的命令和事件,用于支持这两层之间的通信。
HCI支持多种类型的传输层,包括UART、USB、SDIO和三线UART。每种传输层都有自己的规范和要求。本概述着重介绍UART传输层。
根据蓝牙5.2规范,UART传输层支持五类数据包:命令包(Command Packet)、事件包(Event Packet)、ACL数据包(Asynchronous Connection-Less Data Packet)、SCO数据包(Synchronous Connection-Oriented Data Packet)和 ISO数据包(Isochronous Data Packet)。
- HCI命令包(Command Packet)是主机(Host)向控制器(Controller)发送 操作指令。这些命令指示控制器执行特定的操作或配置。
- HCI事件包(Event Packet)是由控制器(Controller)用于向主机(Host)通知已发生的事件。事件类型包括连接状态变更、数据接收完成通知或其他相关事件信息。事件可以包括连接状态变化、数据接收或其他相关信息。
- ACL数据包(Asynchronous Connection-Less Data Packet)用于主机(Host) 和控制器(Controller)之间的数据交换。它支持传输异步数据,例如来自传感器或用户输入的信息。
- SCO数据包(Synchronous Connection-Oriented Data Packet)用于主机 (Host)和控制器(Controller)之间交换同步数据。但需要注意的是,BLE不支持SCO数据包,SCO数据包主要用于经典蓝牙中的语音或音频传输。
- ISO数据包(Isochronous Data Packet)是蓝牙核心规范v5.2发布的新增数据包类型,支持使用BLE在设备之间传输有时限要求的数据。等时数据包专为需要精确时许控制的应用设计,例如音频流传输或实时控制。
为何如此重要?
BLE广泛应用于从消费类产品到工业环境的各种场景中,因此了解BLE及其重要性会大有裨益。BLE是一种不断发展和升级的协议,为应用开发提供了无限的可能性。
用例
BLE广泛应用于众多行业,在不知不觉中影响着我们的日常生活(图22)。熟悉BLE有助于人们在各种应用场景中理解并运用BLE的优势。BLE为很多领域做出了巨大贡献,推动了现有流程的革新。以下是其中的一些领域:
BLE在医学领域的应用
BLE在医学领域发挥着至关重要的作用。BLE技术让血糖仪、血压监测仪等设备得以使用,甚至像起搏器这样要求超低功耗的植入式设备也能够更好地发挥作用。这些设备可以收集数据,并向患者和医疗机构传输实时报告。BLE还能用于患者追踪,定位房间或楼层号码,向医疗响应人员传输信息等。
BLE在定位追踪中的应用
借助BLE技术,先进的追踪器或智能标签可以附着在包、钥匙甚至宠物上,以便追踪所在位置。这些标签设计得非常小巧且节能,因此BLE的低能耗特性至关重要。很多行业也在利用BLE技术,例如仓库货位监控、杂货店管理及室内导航。
BLE在可穿戴设备中的应用
可穿戴设备对轻巧便携和长久续航的要求,使得BLE技术成为理想之选。智能手表、健身手环和智能眼镜等设备普遍采用BLE来实现无线连接并降低能耗。
BLE在音频流传输中的应用
BLE在音频流传输应用中发挥着重要作用。随着LE Audio的推出,BLE现在支持低延迟的音频流传输,带来更佳的音质体验。LE Audio采用低复杂度通信编解码器(LC3),能够在低数据速率下保证音频质量不受影响。这为无线音频消费开辟了新的可能性。
BLE在自动化家居中的应用
在自动化家居领域,BLE是实现智能家居的基础技术。物联网在智能家居中得到广泛应用,而BLE支持各种智能设备之间无缝连接。市面上有各种各样支持BLE的智能设备可用于自动化家居,例如钥匙扣、家庭信标、开关等。BLE让用户能够控制和监控家里的方方面面,例如智能照明、高效节能的家庭能源管理、智能门锁、无线扬声器系统、家用机器人和安保系统。
结论
在BLE协议栈中,应用数据需经过多层协议处理,才能到达另一台设备的远端应用程序(该设备也拥有自身的BLE协议栈)。完整流程如下:
- 应用层:应用程序选择适当的属性来保存要传输的数据。
- ATT层:ATT层:生成ATT层数据包,其中包含与远端设备目标属 性对应的信息。
- L2CAP层:L2CAP层:来自ATT层的数据包将经由L2CAP层处理。若 有需要,L2CAP执行数据分段和重组。该层为每个L2CAP数据包添 加L2CAP标头。
- 链路层:将L2CAP数据包传递至链路层,链路层将数据包传递到物理层进行无线传输。给数据包添加链路层表头,形成协议数据单元(PDU)。
- 物理层:在数据传输之前,物理层添加必要的前导码(Preamble)、访问地址(Access Address)和CRC校验到协议数据单元(PDU)。随后通过无线信道传输完整数据包。
在接收端,远端BLE设备接收数据包后,执行逆向解析来提取数据。
在不同的BLE应用开发中,选择合适的硬件对优化系统效率至关重要。针对不同的要求和应用,亚德诺半导体(Analog Devices)提供了多款集成BLE功能的微控制器。
MAX32665/MAX32666/MAX32667/MAX32668 DARWIN 系列低功耗微控制器针 对广泛的实际应用而设计。这些MCU支持蓝牙5低功耗无线电连接,可以与多个设备进行无线连接以实现物联网应用,同时仍维持尽可能低的活动功耗和保持功耗3。DARWIN MCU还拥有同类产品中最大的嵌入式存储器,支持更大规模的应用和更多的协议栈。这种灵活性和能力为物联网领域的设计和应对各种挑战提供了无限可能性,既夯实了现代物联网解决方案的基石,又为未来发展铺平了道路。
参考文献
1 2023 Bluetooth Market Update. ,Bluetooth,2023年。
2 Bluetooth Technology Overview,Bluetooth。
3 “了解DARWIN:一种全新低功耗物联网MCU”,ADI公司,2022年 10月。
Madhur Bhargava,“IoT Projects with Bluetooth Low Energy”,Packt Publishing Limited,2017年。
“Bluetooth Core Specification Version 5.2 Feature Overview”,Bluetooth。
Core Specification 5.4. ”,Bluetooth。
Naresh Gupta,“Inside Bluetooth Low Energy”,Artech House,2013年。
Stack Architecture”,Zephyr Project。
Bluetooth®文字标记和徽标是Bluetooth SIG, Inc.的注册商标,ADI公司已获得许可使用此类标记。其他商标和商号均属各自所有人所有。