ble蓝牙协议栈各层解析

一、BLE协议栈层次结构
BLE协议栈主要分为三个部分:控制器(Controller),主机(Host),应用层(Application)
3539410-20250402171856056-1606470803

二、Controller层
1. 物理层PHY(Physical layer)
这一层主要涉及LE无线发射器和接收器如何发送和接收数据,
它涵盖的一些主要方面包括:

  • 工作频段:2.4 GHz ISM频段(2402 MHz - 2480 MHz)
  • 信道划分:BLE使用40个信道,每个信道 2 MHz 宽,其中3个为广播信道(37、38、39),其余37个为数据信道。
  • 调制方式:高斯频移键控 (GFSK) 调制方案
  • 传输速度、Power、接收灵敏度:一般ble支持1Mbps(蓝牙5.0后支持2Mbps)
    3539410-20250402171856056-1606470803

2. 链路层LL(Link Layer)
LL层是BLE协议栈中负责处理PDU数据的格式、时序控制、信道管理、状态机切换、安全加密、连接流程等核心模块。

  • 广播与扫描:发出广播包、数据包。接入地址(Access Address)为0x8e89bed6时,是广播包;否则是数据包。
    广播包有多种:ADC_IND(通用广播)、ADV_DIRECT_IND(定向广播)、ADV_NONCONN_IND(不可连接广播)、
    ADV_SCAN_IND(可扫描广播)、SCAN_REQ(扫描请求)、SCAN_RSP(扫描响应)、CONNECT_REQ(连接请求)

  • 连接流程如下:
    捕获

  • 状态机切换:在协议5.0中管理 7个 状态
    捕获

  1. 待机(Standby)状态‌:设备处于空闲状态,不发送也不接收任何数据包,但可以随时切换到其他状态‌
  2. 广播(Advertising)状态‌:设备发送广播包,用于发现其他设备。
  3. ‌扫描(Scanning)状态‌:设备监听其他设备的广播包,用于发现其他设备‌‌
  4. 发起(Initiating)状态‌:设备监听广播包并发送连接请求,尝试与其他设备建立连接‌
  5. ‌连接(Connection)状态‌:设备与其他设备建立连接后进入此状态,可以进行数据交换。连接状态中,设备可以扮演主设备(Master)或从设备(Slave)‌‌
  6. 同步(Synchronization)状态‌:设备通过广播通道监听固定间隔的广播数据流,主要用于同步数据流,如音频数据‌‌
  7. 同步广播(Synchronization Broadcasting)状态‌:设备在同步状态下发送同步数据包‌
  • 信道管理
    广播信道:37、38、39 号,用于广播/扫描/发起连接。
    数据信道:余下 0–36 号,共 37 条,用于已建立连接后的数据交换。
    基于连接建立时协商的跳频算法,每个连接事件按固定周期在数据信道间跳转,抗干扰、提高可靠性

  • 处理PDU数据的格式
    PDU数据包有2种:
    发给链路层的控制包(LLID=11b)
    空包,或发给上层L2CAP的数据包(LLID=01b,10b)
    L2CAP的数据包很大时,可以拆分来多次发送,有起始包(LLID=01b)、延续包(LLID=10b)
    捕获
    捕获
    LLID(2bit),逻辑链路标识符,用来判断数据报文属于下列哪种类型
    链路层控制报文(11),用来管理连接,
    高层报文开始(10),也可用于一个完整的报文
    高层报文延续(01),也可以是一个空包

  • 定时与功耗
    睡眠与唤醒
    非连接状态下,广播者/扫描者只在需要时打开收发器;
    已连接时,仅在指定 connInterval 内唤醒,其他时间完全休眠。
    功耗优化
    主流 SoC 会在 LL 层集成时序定时器,实现微秒级精确唤醒,极大降低平均功耗。


3. 主机控制接口HCI(Host Controll Interface)
为Host和Controll层提供一个标准化接口,包括Host层的API,硬件层的USRT、USB口连接
在实际场景中一般是ble单芯片的解决方案,那HCI层会化成以下几种形式
1、芯片协议栈完整,用户直接调用HCI接口(比如手环产品)
2、有的产品只需要 Controller层 不要 Host 和 APP,BLE 芯片作为一个外挂芯片,接到主控芯片上,
主控芯片通过标准的HCI 指令(通常介质为 UART)与 BLE 芯片交互。HCI变成两颗芯片之间的通信协议(比如手机上 AP 和 BLE 就是这样的关系)
UART 和 Controller 双向发送字节流中,数据包的第一个字节对数据做了分类:
HCI Command Packet----------------0x01--------------上层对Controller的指令
HCI ACL Data Packet---------------0x02--------------上层发给Controller具体数据
HCI Synchronous Data Packet-------0x03--------------用来对齐SCO基带数据包
HCI Event Packet------------------0x04--------------Controller对上层的事件报告


三、Host层
1. 逻辑链路控制与适配协议L2CAP (Logic Link Control and Adaption Protocol)
功能:

  • 协议复用:通过CID(通道标识符)区分不同服务,确保了多个高层协议可以共享同一个底层链路,提高了资源利用率‌。BLE固定通道CID 0x0004用于ATT协议,CID 0x0005用于LE信号通道
  • 分段重组(SAR) :将最大64KB的SDU分割为适合空口传输的PDU,重组时通过PDU长度字段校验完整性
  • 信用流控制:LE特有机制,通过初始信用值和动态调整实现无阻塞传输,适用于大数据传输场景‌
  • 错误恢复:仅增强模式支持重传,基础模式依赖LL层ARQ机制

2. 安全管理器SM(Security Manager)

  • 负责配对和密钥分发:
    配对又分为 传统配对LE Legacy paring 和 低功耗安全连接配对LESC(LE secure connections)
    配对过程包含包含如下 3 个阶段:
    阶段 1:配对特征交换
    阶段 2:(LE legacy pairing):生成短期密钥 STK /(LE Secure Connections):生成长期密钥 LTK。
    阶段 3:密钥分发。

  • 提供认证和加密功能

  • 支持四种安全模式:
    ‌ LE Secure Connections ‌:这是BLE推荐的安全模式,使用 长期密钥 (LTK)进行加密。
    ‌ Legacy Pairing ‌:传统配对方式,使用短期密钥(STK)进行加密。
    ‌ No Bonding ‌:在这种模式下,设备之间不进行绑定,每次连接时都需要重新进行配对和加密。
    ‌ Just Works ‌:这是一种自动配对模式,适用于设备之间自动完成配对和加密,无需用户干预。

  • 实现LE安全连接和传统配对:
    具体请看:https://www.cnblogs.com/gxqjx/p/18994561


3. 属性协议层ATT(Attribute Protocol)
属性是蓝牙数据传输的最小单元,所有服务和特征均由属性构成
每个属性 = 句柄(Handle)+ UUID + 权限(读/写/通知/指示) + 实际数据值(温度值、设备名称) 组成

4. 通用属性规范GATT(Generic Attribute Protocol)
在ATT基础上定义服务(Service)、特征(Characteristic)和 描述符(Descriptor)。代码上是结构体:
捕获
捕获
支持预定义和自定义服务
GATT采用Client/Server架构,Client(主机)通过访问Server(从机)的服务(Service),获取特征(Characteristic)来实现数据交互。
发现服务:sd_ble_gattc_primary_services_ discover();
获取特征:sd_ble_gattc_characteristics_discover();

在实际应用中GATT服务和GAP服务是必须存在的,自定义服务可以一个或多个(如心率服务、电池服务)。
每个服务(Service)包含一个或者多个特征(Characteristic),如服务中的具体数据项(如心率值、电量百分比)。
每个特征(Characteristic)包含一个或多个属性(Attribute )
每个特征值包含:
UUID(标识数据类型,如 0x2A37 表示心率测量)。
Value(数据值,如 0x48 表示 72 BPM)。
Permissions(读/写/通知权限)。
Descriptors(额外配置信息,如cccd通知开关)

5. 通用访问规范GAP(Generic Access Profile)
它定义了蓝牙设备之间的基本交互过程,包括设备发现、连接建立和管理、广播与扫描等
GAP的主要功能和特点:
设备发现‌:GAP定义了蓝牙设备如何通过广播和扫描过程来发现其他设备。设备可以发送广播包来宣告自己的存在,而其他设备则通过扫描来接收这些广播包,从而发现附近的蓝牙设备‌
连接建立与管理‌:GAP规定了设备如何通过发送连接请求和接受连接请求来建立连接。
它还允许设备在连接建立后更新连接参数:连接间隔、从机潜伏、监督超时这三个参数,以优化性能或延长电池寿命。

  • 连接间隔:所有的数据传输均发生在连接事件期间,相邻的两个连接事件的间隔称为连接间隔
    捕获
  • 从机潜伏:允许从机跳过当前的连接事件次数,不对主机做出回应
  • 监督超时:当从机长时间不回应,蓝牙连接将断开,超时断开的时间称之为监督超时时间。监督超时时间单位为10ms,时间范围为100ms~32s间。
    此外,GAP还支持连接管理,包括连接的终止和重新连接‌

广播与扫描‌:GAP定义了广播过程,包括如何发送广播包和扫描响应包。广播使得设备能够宣告自己的存在和可用服务信息,扫描则是设备主动或被动地寻找附近广播设备的过程‌
角色定义‌:在BLE(蓝牙低功耗)中,GAP定义了四种主要角色:外围设备(Peripheral)、中央设备(Central)、播报设备(Broadcaster)和观察设备(Observer)。这些角色分别对应了不同的设备功能和通信方式‌
‌安全性‌:GAP还涉及设备之间的安全性问题,如配对和绑定过程。配对过程用于在设备之间建立加密或认证的链接,以确保通信的机密性和完整性。绑定则是将配对过程中产生的安全密钥或证书等安全信息存储在设备中,以便后续快速重新建立安全连接‌


四、应用层(Application)
通过应用配置文件(Profile),负责实现具体的业务逻辑和功能。
Profile由多个服务(Service)组成,开发者根据需求自定义的服务和特征。
提供与用户交互的接口,对数据进行处理。

posted @ 2025-06-30 11:16  感兴趣就学  阅读(853)  评论(0)    收藏  举报