BLE协议栈的解析

目录

概述

1 BLE协议栈层次结构

1.1  控制器(Controller)

1.2 主机(Host)

1.3 应用层(Application)

1.3.1 业务层功能

1.3.2 实现方法

2 重要属性介绍

2.1 GATT属性

 2.2  服务(Service)

2.3 特征值(Characteristic)

2.4 描述符(Descriptor)

 2.5 数据交互方式

3 蓝牙设备角色

3.1 BLE 广播者(Broadcaster)

 3.2 BLE 观察者(Observer)

 3.3 BLE 中心设备(Central)

3.4  BLE 外设(Peripheral)

4 应用总结

4.1 组件功能列表

4.2 使用要点


概述

蓝牙低功耗(BLE)协议栈是实现蓝牙无线通信功能的分层架构,本文将从核心组成、各层功能到实际应用进行全面介绍。包括协议的层次结构,主要属性,以及设备角色等内容。

1 BLE协议栈层次结构

BLE协议栈主要分为三个部分:控制器(Controller),主机(Host),应用层(Application)

BLE协议栈的解析_第1张图片

1.1  控制器(Controller)

控制之包括3个部分:

物理层PHY

  • 工作在2.4GHz ISM频段(2402-2480MHz)

  • 采用40个信道,信道间隔2MHz

  • 使用高斯频移键控(GFSK)调制

  • 传输速率: 1Mbps(蓝牙5.0后支持2Mbps)

链路层Link Layer

  • 负责广播、扫描、建立和维护连接

  • 管理5种状态:

    • 待机(Standby)

    • 广播(Advertising)

    • 扫描(Scanning)

    • 发起(Initiating)

    • 连接(Connected)

  • 处理数据包格式、时序和信道跳频

直接测试模式Direct Test Mode:用来测试射频性能,比如发射功率、接收灵敏度。

1.2 主机(Host)

主机(Host)层主要包含4个部分:

主机控制器接口HCI

  • 控制器与主机之间的标准通信接口

  • 可通过UART、USB或三线协议传输

  • 提供命令、事件和数据三种数据包类型

逻辑链路控制与适配协议L2CAP

  • 提供逻辑信道复用功能

  • 负责协议/信道多路复用

  • 处理数据包的分割和重组

  • 提供基本L2CAP模式和LE信用流控制模式

安全管理器Security Manager

  • 负责配对和密钥分发

  • 提供认证和加密功能

  • 支持四种安全模式

  • 实现LE安全连接和传统配对

属性协议ATT

  • 定义客户端-服务器结构的通信协议

  • 服务器存储数据(属性),客户端请求数据

  • 属性由句柄、UUID和值组成

  • 支持查找、读取和写入等操作

通用访问规范(GAP):

  • 定义设备角色:广播者、观察者、外围设备和中央设备

  • 管理设备发现、连接建立和安全

  • 控制广播和连接参数

通用属性规范(GATT):

  • 建立在ATT之上的服务框架

  • 定义服务(Service)、特征(Characteristic)和描述符(Descriptor)

  • 规范了数据如何组织和交换

  • 支持预定义和自定义服务

1.3 应用层(Application)

1.3.1 业务层功能

BLE应用层是蓝牙低能耗协议栈的最上层,直接面向用户和开发者,负责实现具体的业务逻辑和功能。以下是BLE应用层的详细功能解析:

1)业务逻辑实现

  • 定义设备的具体功能和行为

  • 实现用户需求的实际应用场景

  • 处理来自下层协议栈的数据和事件

2) 数据管理

  • 组织和管理应用数据

  • 定义数据格式和解析规则

  • 实现数据缓存和处理机制

1.3.2 实现方法

1) 应用配置文件(Profile)

  • 预定义的标准功能集合(如心率监测、血压监测等)

  • 由多个服务(Service)组成

  • 确保不同厂商设备的互操作性

2.)自定义服务/特征

  • 开发者根据需求定义的服务和特征

  • 通过自定义UUID实现

  • 灵活满足特定应用场景需求

3) 用户接口

  • 提供与用户交互的接口

  • 包括状态显示、参数配置等

  • 可以是物理按钮、LED指示灯或移动应用界面

4)数据处理模块

  • 数据加密/解密

  • 数据压缩/解压缩

  • 数据格式转换

2 重要属性介绍

2.1 GATT属性

1)GATT 的作用

  • 定义 数据如何组织(服务、特征值、描述符)

  • 规定 数据如何交互(读、写、通知、指示)

  • 确保不同厂商设备之间的 互操作性

2)GATT 角色

角色 说明
GATT 服务器(Server) 存储数据(如传感器数据、设备状态),并允许客户端访问。例如:心率监测器、智能灯泡。
GATT 客户端(Client) 向服务器发起请求(读/写数据)。例如:手机APP、中央设备。

注意:一个设备可以同时是 Client 和 Server(例如:智能手表既可以接收手机数据,也可以向耳机发送数据)。

 2.2  服务(Service)

1)服务的定义

  • 服务是 一组相关功能 的集合,例如:

    • 心率服务(Heart Rate Service):包含心率测量、传感器位置等数据。

    • 电池服务(Battery Service):包含电池电量、充电状态等数据。

  • 每个服务由 UUID(通用唯一标识符) 标识:

    • 标准 UUID(16-bit):如 0x180D(心率服务)。

    • 自定义 UUID(128-bit):开发者可自定义,如 0000XXXX-0000-1000-8000-00805F9B34FB

2) 服务的层次结构

GATT Server
│
├── Service 1 (UUID: 0x180D)  // 心率服务
│   ├── Characteristic 1 (心率测量)
│   └── Characteristic 2 (传感器位置)
│
└── Service 2 (UUID: 0x180F)  // 电池服务
    ├── Characteristic 1 (电池电量)
    └── Descriptor (通知使能)

2.3 特征值(Characteristic)

1)特征值的定义

  • 特征值是 服务中的具体数据项,例如:

    • 心率服务中的 当前心率值(如 72 BPM)。

    • 电池服务中的 剩余电量(如 85%)。

  • 每个特征值包含:

    • UUID(标识数据类型,如 0x2A37 表示心率测量)。

    • Value(数据值,如 0x48 表示 72 BPM)。

    • Permissions(读/写/通知权限)。

    • Descriptors(额外配置信息,如通知开关)。

2) 特征值的属性

属性 说明
Read(可读) 客户端可读取数据(如读取电池电量)。
Write(可写) 客户端可写入数据(如调节灯光亮度)。
Notify(通知) 服务器主动推送数据(无需客户端请求),例如持续发送心率数据。
Indicate(指示) 类似 Notify,但要求客户端确认(更可靠)。

2.4 描述符(Descriptor)

1)描述符的作用

其主要作用是提供额外配置信息,例如:

  • Client Characteristic Configuration Descriptor (CCCD):控制 Notify/Indicate 是否启用。

  • Characteristic User Description:人类可读的描述(如 "Heart Rate Measurement")。

2)常见描述符

UUID 名称 功能
0x2902 CCCD 启用/禁用通知(Notify)或指示(Indicate)。
0x2901 User Description 提供特征值的文本描述(如 "Battery Level")。

 2.5 数据交互方式

1)主要操作

操作 说明 示例
Read(读取) 客户端读取特征值 读取电池电量
Write(写入) 客户端写入特征值 调节灯光亮度
Notify(通知) 服务器主动推送数据(无确认) 持续发送心率数据
Indicate(指示) 服务器主动推送数据(需客户端确认) 重要警报消息

2)典型应用场景

  1. 心率监测器(HRM)

    • 服务:0x180D(心率服务)

    • 特征值:0x2A37(心率测量,Notify 模式)

    • 客户端订阅后,服务器持续发送心率数据。

  2. 智能灯泡

    • 服务:自定义 UUID(如 0000AAAA-...

    • 特征值:

      • 0xAAAA(亮度,Write 模式)

      • 0xAAAB(颜色,Write 模式)

3 蓝牙设备角色

3.1 BLE 广播者(Broadcaster)

 广播者的核心特点主要如下:

1)工作模式

  • 仅发送数据,不接收响应(单向通信)。

  • 不建立连接(Connectionless),适用于一对多通信。

  • 使用 广播信道(37/38/39) 发送数据包。

2)典型应用场景

  • 信标(Beacon)(如 iBeacon、Eddystone)

  • 传感器数据广播(温度、湿度等)

  • 设备发现(让扫描设备感知广播者的存在)

  • 低功耗标签(资产跟踪、室内定位)

 3.2 BLE 观察者(Observer)

观察者(Observer)是 BLE(蓝牙低功耗)中的一种设备角色,专门用于 扫描并接收广播数据,但不主动发起连接。它在 BLE 通信中扮演"监听者"的角色,适用于数据采集、设备发现等场景。

1. 观察者的核心特点

1)工作模式

  • 仅接收广播数据,不发送连接请求(被动监听)

  • 不建立双向连接(Connectionless)

  • 在 3个广播信道(37/38/39) 上扫描数据

2) 典型应用场景

  • 信标(Beacon)接收(如商场导航、室内定位)

  • 环境传感器数据收集(温度、湿度等)

  • 设备发现与监控(如资产跟踪)

  • 广播数据抓包与分析

2. 观察者的工作流程

1) 扫描方式

扫描类型 特点 功耗
被动扫描(Passive Scanning) 只接收广播数据,不发送扫描请求 更低功耗
主动扫描(Active Scanning) 发送扫描请求(SCAN_REQ)获取更多数据(Scan Response) 功耗略高

2) 数据接收机制

  1. 监听广播信道(37/38/39)

  2. 解析广播数据(如设备名称、服务UUID、厂商数据等)

  3. 可选:发送扫描请求(SCAN_REQ)获取扩展信息(Scan Response)

3. 观察者的关键特性

1)低功耗优化

  • 可调节扫描间隔(Scan Interval)和 扫描窗口(Scan Window)

    • 例:间隔100ms,窗口10ms → 每100ms扫描10ms

  • 支持后台扫描(如手机APP在后台发现Beacon)

2) 数据过滤能力

  • 基于MAC地址过滤

  • 基于广播数据类型过滤(如只接收iBeacon数据)

  • RSSI阈值过滤(忽略信号过弱的设备)

3)无连接管理

  • 不处理配对、加密等流程

  • 无法直接控制广播设备(仅接收数据)

 3.3 BLE 中心设备(Central)

中心设备(Central)是 BLE(蓝牙低功耗)通信中的核心角色,负责 主动扫描、发起连接 并 管理数据通信。它是构建 BLE 系统的"大脑",在大多数 BLE 应用中起主导作用。

1. 中心设备的核心特点

1) 核心功能

  • 扫描发现外围设备(扫描广播数据)

  • 发起和管理连接

  • 作为GATT客户端(读写服务/特征值)

  • 管理多个连接(部分设备支持)

2)典型设备示例

  • 智能手机/平板电脑

  • 笔记本电脑

  • 智能家居网关

  • 医疗监护仪主控端

 2. 工作流程

1)设备发现阶段

BLE协议栈的解析_第2张图片

2) 连接建立阶段

BLE协议栈的解析_第3张图片

3. 关键技术特性

1)连接管理

参数 说明 典型值
连接间隔 两次数据交互间隔 7.5ms-4s
从机延迟 允许从设备跳过的连接事件 0-499
监控超时 判定连接丢失时间 100ms-32s

 优化建议

  • 低功耗场景:增大间隔(如100ms)

  • 实时性要求高:减小间隔(如15ms)

2) 多设备连接

  • 分时复用机制:在不同连接间隔处理不同设备

  • 连接参数协商:为不同设备设置独立参数

  • 资源限制:受芯片RAM/处理能力限制

3 中心设备 vs 外围设备 

特性 中心设备(Central) 外围设备(Peripheral)
角色 主动方/控制端 被动方/被控端
功耗 相对较高 优化更好
连接能力 可连接多个设备 通常只连1个中心
典型设备 智能手机、网关 传感器、穿戴设备

3.4  BLE 外设(Peripheral)

外设(Peripheral)是 BLE(蓝牙低功耗)通信中的关键角色,作为 数据提供方 和 被控制端,在蓝牙生态系统中承担着终端数据采集和设备控制的重要功能。

1. 外设的核心特点

1)基本特性

  • 广播自身存在(Advertising)

  • 接受中心设备连接请求

  • 作为GATT服务器(存储并提供数据)

  • 低功耗优化设计

2)典型设备示例

  • 智能手环/手表

  • 医疗传感器(心率、血氧)

  • 智能家居设备(灯泡、门锁)

  • 信标(Beacon)设备

 2. 工作流程

1)广播阶段

BLE协议栈的解析_第4张图片

2) 连接建立

BLE协议栈的解析_第5张图片

 3. 关键技术特性

1) 广播配置

参数 说明 典型值
广播间隔 两次广播间隔时间 20ms-10.24s
广播类型 ADV_IND/ADV_NONCONN_IND等 根据需求选择
广播数据 设备名称/服务UUID等 31字节限制

2)  连接管理

参数 外设控制能力 说明
连接参数更新 可请求修改 协商最佳参数
安全请求 可发起配对 提升安全性
断连处理 可重新广播 恢复可发现状态

4. 外设 vs 中心设备

特性 外设(Peripheral) 中心设备(Central)
角色 数据提供者 数据消费者
连接能力 通常单连接 多连接支持
功耗优化 深度睡眠支持 相对较高
典型功耗 μA级待机 mA级工作

4 应用总结

4.1 组件功能列表

组件 作用 示例
GATT 定义数据组织方式 客户端-服务器架构
Service 功能分组 心率服务(0x180D)、电池服务(0x180F)
Characteristic 具体数据项 心率值(0x2A37)、电池电量(0x2A19)
Descriptor 额外配置 CCCD(0x2902,控制通知开关)

4.2 使用要点

  • GATT 是数据组织的框架,服务是功能模块,特征值是具体数据。

  • Notify/Indicate 适用于实时数据推送(如传感器数据)。

  • CCCD(0x2902)是 Notify/Indicate 的关键,客户端必须写入 0x01 启用通知。

你可能感兴趣的:(BLE协议栈的解析)