BLE(蓝牙低功耗)协议栈的详细介绍 - D

张开发
2026/4/4 18:59:42 15 分钟阅读
BLE(蓝牙低功耗)协议栈的详细介绍 - D
目录概述1 协议框架结构2 各层功能详细解析2.1 物理层2.2 链路层2.3 主机控制器接口2.4 逻辑链路控制与适配协议2.5 属性协议 安全管理协议2.6 通用属性配置文件 通用访问配置文件3 数据流示例手机读取传感器数据概述本文主要关于BLE蓝牙低功耗协议栈的全面详细介绍。笔者将采用自底向上的方式逐层解析其架构、功能和交互并突出其与经典蓝牙的关键区别。理解各层的职责及其协同工作方式对于进行高效的BLE应用开发、调试和问题分析至关重要。对于应用开发者重点在GATT/GAP对于驱动或协议栈开发者则需要深入理解链路层和ATT/L2CAP的交互。1 协议框架结构BLE协议栈的核心设计目标是极致的低功耗而非高数据速率。这通过一系列设计实现简化的协议、缩短的射频开启时间、深度睡眠状态以及高效的广播/连接机制。2 各层功能详细解析2.1物理层1功能负责在2.4GHz ISM频段上进行实际的无线电收发。它处理最基本的调制解调、频率选择和信号功率控制。2关键特性频段 2.400 - 2.4835 GHz。信道 共40个物理信道37个数据信道3个广播信道。调制 使用高斯频移键控比特率为1 MbpsBLE 5.0 引入了2Mbps的物理层选项。抗干扰 使用自适应跳频。在连接状态下设备在37个数据信道上快速切换以避免Wi-Fi等其他设备的干扰。2.2链路层这是BLE协议栈的核心和灵魂直接决定了其低功耗特性。它定义了设备的状态和角色。1五种状态待机 未进行任何射频活动功耗最低。广播 向外周期性发送广播报文宣告自身存在。扫描 监听周围的广播报文。发起 接收到目标广播报文后主动发起连接请求。连接 建立一对一的持久数据链路。在此状态下设备分为主设备和从设备。2关键概念广播信道与数据信道 3个固定的广播信道用于设备发现和连接建立37个数据信道用于连接后的高效数据通信和跳频。连接事件 连接是事件驱动的而非持续保持。主从设备只在预先约定好的、非常短暂的时间窗口如每20ms一次醒来通信交换数据后立即进入睡眠。这是低功耗的关键。空中接口包 定义了链路层数据包的结构前导码、访问地址、报头、有效载荷、CRC。2.3主机控制器接口1)功能HCI是主机和控制器之间的标准化通信接口。在SoC单片方案中它可能只是内部API在分体式方案中它是通过UART或USB传输的命令/事件协议。2)作用解耦硬件控制器实现PHY和LL与软件主机实现上层协议栈和应用提高设计的灵活性。2.4逻辑链路控制与适配协议1)功能作为“交通调度员”L2CAP主要提供协议复用 通过信道标识符区分上层不同协议如ATT的CID0x0004 SM的CID0x0006。数据分片与重组 将上层的大数据包分割成适合链路层MTU的小包并在接收端重组。基础流控 使用简单的信用机制管理数据流。2)注意BLE的L2CAP是经典蓝牙的极大简化版专注于低功耗场景的基本需求。2.5属性协议 安全管理协议1)属性协议功能 定义了BLE数据通信的核心模型——“客户端-服务器”模型。服务器维护一个属性表客户端可以发送请求来发现、读取或写入这些属性。属性 一个属性由三个基本元素构成句柄 属性的唯一地址16位。类型 用UUID标识属性代表什么例如心率测量值 0x2A37。值 属性的实际数据。2)安全管理协议功能 负责BLE连接的安全。包括配对身份认证、加密使用AES-128 CCM、密钥分发和管理。它定义了LE Legacy Pairing和更安全的LE Secure Connections。2.6通用属性配置文件 通用访问配置文件1)通用属性配置文件功能 在ATT定义的“客户端-服务器”和“属性”模型之上GATT建立了有组织的数据结构和操作规范。它定义了服务 一个或多个相关功能的集合例如“心率服务”。特征 服务中的具体数据点例如“心率测量特征”。特征包含一个属性值及其描述符如通知使能位。规范的操作流程 如何发现服务、读写特征、启用通知等。重要性GATT是绝大多数BLE应用开发者直接交互的层面。标准的BLE服务/特征如电池、设备信息都有由蓝牙技术联盟定义的标准化UUID。2)通用访问配置文件功能 定义了设备在更高层次的角色和行为是设备如何被发现的顶层规范。角色 外围设备、中心设备、广播者、观察者。广播模式 可发现模式受限/通用、可连接模式。连接建立过程。作用 GAP确保了不同厂商设备之间的互操作性基础。3数据流示例手机读取传感器数据假设手机中心设备要读取一个心率手环外围设备的心率数据Step-1: 广播与发现手环链路层处于广播状态在广播信道上周期性发送广播报文其中包含其设备名称和可能支持的服务UUID如心率服务。手机链路层处于扫描状态收到广播通过GAP流程发现并识别出手环是一个心率设备Step-2: 建立连接手机作为发起者向手环发送连接请求双方进入连接状态手机为主设备手环为从设备。链路层开始管理连接事件。Step-3: 服务发现连接后手机GATT客户端通过ATT协议在手环GATT服务器的属性表中进行一系列“发现”操作。这些操作被封装成ATT PDU通过L2CAP的信道CID0x0004传输并由链路层通过射频发出。手环回复手机从而得知手环提供了“心率服务”其中包含一个“心率测量特征”。Step-4 启用通知手机向该特征的“客户端特征配置描述符”写入“通知使能”值。这样手环在心率数据更新时会主动向手机发送通知无需手机轮询这是低功耗的关键设计。Step-5: 数据交换每当手环有新的心率数据它就会在下一个连接事件中通过ATT发送一个“通知”PDU包含心率值。此PDU依次经过L2CAP封装、链路层打包最终通过射频发送给手机。手机收到后逐层解包最终将心率值传递给应用程序如健身App显示出来。

更多文章