低功耗蓝牙——广播与信道

一、射频技术

蓝牙(Bluetooth)作为一种无线通信技术,它通过电磁波(电磁场中的射频波,RF)来实现设备间的数据传输的。具体来说:

  1. 射频频段

    • 蓝牙工作在全球通用的 2.4 GHz ISM(Industrial, Scientific, and Medical)频段,中心频率约为 2.400 GHz 到 2.4835 GHz。
    • 该频段无需许可,任何设备只要遵守功率限制和跳频规则,都可以使用。而其它频段就不一样了,比如有些频段是供5G通信使用的、有些是收音机广播使用的,还有些是军用频段,这些频段都是受管控的。
  2. 调制方式

    • 经典蓝牙(BR/EDR)使用的是 Gaussian Frequency Shift Keying(GFSK)调制,也就是将数字信号映射为两种不同的频率偏移来表示 “0” 和 “1”;在某些模式下还会结合 Phase Shift Keying(π/4-DQPSK、8-DPSK)以提高速率。
    • 低功耗蓝牙(BLE)同样采用 GFSK 调制,但在协议、信道访问和功耗优化上与经典蓝牙不同。
  3. 跳频扩频(FHSS)

    • 为了抗干扰并提升链路鲁棒性,蓝牙将整个 2.4 GHz 频段划分为若干个 1 MHz 宽度的子信道(BLE 为 40 个子信道,BR/EDR 为 79 个子信道),通信时按特定伪随机序列在这些子信道间快速跳频。
    • 跳频速率通常为每秒 1600 次(BLE)或 800 次(BR/EDR),这能有效避免持续干扰并满足多设备共存需求。
  4. 发射与接收

    • 发射端将数字基带信号经过调制器转换为射频信号,通过天线以电磁波形式辐射到空间。

    • 接收端的天线捕获空间中的电磁波信号,经低噪放大(LNA)和下变频等射频前端处理后,恢复为基带数字信号,再由解调器和协议栈还原出原始数据。

二、信道

蓝牙工作在2.4GHz ISM 频段,划分为 40 个信道(其中3 个广播信道,信道号为37、38和39,频点为:2402/2426/2480MHz,避开了2.4GHz WiFi的常用信道)。

三、BLE广播

  • 为什么需要广播?因为没有广播的话,从机就无法被主机发现,也就无法进一步建立稳定的连接。总之,从机需要建立\重新建立与主机之间的连接,必须发射广播。

  • BLE工作频率:BLE工作在2.4GHz ISM 频段,划分为 40 个信道(其中3 个广播信道,信道号为37、38和39,频点为:2402/2426/2480MHz,避开了2.4GHz WiFi的常用信道)。

  • 其次,BLE设备硬件设计时要注意频偏,如果设备本来想发射数据到2402Mhz的广播频率,但是可能由于天线设计存在问题,导致设备频点偏移到了2402.5MHz,那么主机就很可能扫描不到这个设备的广播数据。

  • 从机的每个广播数据包会分别向3个广播信道进行发射,当处于扫描状态的主机扫描到了广播包,可以选择性的发起连接请求,进而建立连接,如果连接成功,从机进入Connection state(连接状态)

3.1 AD Data(广播数据)

AD Data 数据包遵守TLV 结构,即:Type、Length和Value(下面称之为Data)。由若干个 AD Structure拼接而成,每个 AD Structure 格式:

┌───────────┬────────────┬──────────────┐
│ Length(1B)│ AD Type(1B)│   Data(NB)   │
└───────────┴────────────┴──────────────┘
  • Length (1B)
    后续(Type + Data)的总长度:Length = 1 (AD Type) + N (Data 长度)
  • AD Type (1B)
    指示 Data 的含义,(AD Type)汇总表见下方
  • Data (N B)
    实际内容,根据 AD Type 定义来解析。
AD Type(十六进制) 名称 描述 示例(数据内容举例)
0x01 Flags 标志位,指示设备支持的蓝牙模式(如是否支持 BLE 安全连接、是否支持 BR/EDR) 0x02LE_GENERAL_DISCOVERABLE_MODE(通用可发现模式) 0x06:同时支持 LE 安全连接和非安全连接
0x02 16-bit Service UUID(部分) 部分 16 位服务 UUID 列表(用于快速匹配) 0x03 + 0x00 0x01:表示服务 UUID 为 0x0100(小端序)
0x03 16-bit Service UUID(完整) 完整 16 位服务 UUID 列表 同上,通常用于明确声明设备支持的服务
0x04 32-bit Service UUID(部分) 部分 32 位服务 UUID 列表 0x05 + 0x00 0x01 0x02 0x03:部分 32 位 UUID(小端序)
0x05 32-bit Service UUID(完整) 完整 32 位服务 UUID 列表 同上
0x06 128-bit Service UUID(部分) 部分 128 位服务 UUID 列表 0x09 + 128 位 UUID 的部分字节(小端序)
0x07 128-bit Service UUID(完整) 完整 128 位服务 UUID 列表 完整 128 位 UUID(如蓝牙标准服务 UUID:0000FFE0-0000-1000-8000-00805F9B34FB,小端序存储)
0x08 Short Local Name 设备短名称(可解析,截断显示) 0x05 + MyDev:名称为 "MyDev"(长度 5 字节)
0x09 Complete Local Name 设备完整名称 0x0A + MyCompleteDeviceName:完整名称(长度 10 字节)
0x0A TX Power Level 设备发射功率(单位:dBm,补码表示) 0x01:+1dBm 0xFF:-1dBm
0x10 Class of Device 设备类别(描述设备类型,如耳机、键盘等) 0x05 + 0x020404:耳机(小端序,类别码 0x040402)
0x16 Service Data(16-bit UUID) 16 位 UUID 对应的服务数据(自定义数据) 0x07 + 0x0001 + 0x1234:服务 UUID 0x0100(小端序),数据 0x1234
0x20 Service Data(32-bit UUID) 32 位 UUID 对应的服务数据 同上,UUID 为 32 位
0x21 Service Data(128-bit UUID) 128 位 UUID 对应的服务数据 完整 128 位 UUID + 自定义数据
0x22 Public Target Address 目标设备的公共地址(用于定向广告) 6 字节公共地址(如AA:BB:CC:DD:EE:FF的字节数组)
0x23 Random Target Address 目标设备的随机地址(用于定向广告) 6 字节随机地址
0x24 Appearance 设备外观(图标或物理形态,如手表、温度计等) 0x02:手表 0x100:温度计(16 位值,小端序)
0x25 Advertising Interval 广告间隔(仅在扫描响应中出现,单位:0.625ms) 0x04 + 0x0800:间隔为 200ms(0x0800 对应十进制 2048,乘以 0.625ms)
0x2A LE Secure Connections Confirmation Value LE 安全连接确认值(用于安全配对) 16 字节确认值
0x2B LE Secure Connections Random Value LE 安全连接随机值(用于安全配对) 16 字节随机值
0xFF Manufacturer Specific Data 制造商自定义数据(最常用的自定义字段,前 2 字节为公司 ID(小端序)) 0x05 + 0x1234 + 0x56:公司 ID 0x3412(小端序),数据 0x56

3.2 一帧广播包解析示例

  • 采用nRF Connect APP(安卓)扫描到一台小米手机的广播包如下,iOS手机的暂时未做展示:

  • BLE 16bit UUID 速查表,涵盖常用的标准服务(Service)和特性(Characteristic)UUID:
UUID (16bit) 类型 名称 描述
0x0000 保留 - 保留(未定义)
0x0001 保留 - 保留(用于测试)
0x1800 服务 通用访问服务 (Generic Access Service, GAS) 定义设备基本访问属性,如设备名称、连接参数等。
0x1801 服务 通用属性服务 (Generic Attribute Service, GATT) 定义 GATT 服务器的基本功能,如服务发现、特性读写等。
0x1802 服务 即时通知服务 (Immediate Alert Service) 允许设备发送即时通知(如紧急警报、提示音)。
0x1803 服务 链接损失服务 (Link Loss Service) 监控设备间的连接信号强度,检测链接是否丢失。
0x1804 服务 环境感知服务 (Environmental Sensing Service) 用于温度、湿度、气压等环境传感器数据的通用服务。
0x1805 服务 心率服务 (Heart Rate Service) 传输心率传感器数据,包括心率值、心率区间等。
0x1806 服务 健身机器服务 (Fitness Machine Service) 连接健身设备(如跑步机、自行车),传输控制指令和状态数据。
0x1807 服务 跑步动态服务 (Running Speed and Cadence Service) 提供跑步速度、步频等运动数据。
0x1808 服务 自行车动态服务 (Cycling Speed and Cadence Service) 提供自行车速度、踏频等数据。
0x1809 服务 自行车功率服务 (Cycling Power Service) 提供自行车功率计数据。
0x180A 服务 设备信息服务 (Device Information Service) 包含设备制造商、型号、序列号、固件版本等信息。
0x180F 服务 电池服务 (Battery Service) 提供电池电量信息(如电池级别百分比)。
0x1810 服务 人机接口设备服务 (Human Interface Device Service, HID) 模拟人机接口设备(如键盘、鼠标、游戏手柄)。
0x1811 服务 扫描参数服务 (Scan Parameters Service) 允许设备广播扫描参数,用于优化蓝牙扫描效率。
0x2A00 特性 设备名称 (Device Name) 设备的可读名称(属于通用访问服务 0x1800)。
0x2A01 特性 外观 (Appearance) 设备外观类型(如手机、手表、耳机等,数值为枚举值)。
0x2A02 特性 外设连接参数范围 (Peripheral Preferred Connection Parameters) 外设支持的连接参数范围(最小 / 最大间隔、超时时间等)。
0x2A03 特性 服务变更 (Service Changed) 通知客户端服务列表发生变更(属于通用属性服务 0x1801)。
0x2A04 特性 电池电量 (Battery Level) 电池电量百分比(属于电池服务 0x180F)。
0x2A05 特性 即时通知状态 (Immediate Alert Level) 即时通知的优先级(如无通知、低优先级、高优先级,属于即时通知服务)。
0x2A06 特性 链接损失阈值 (Link Loss Threshold) 链接信号强度的阈值,用于检测连接是否丢失(属于链接损失服务)。
0x2A08 特性 温度测量 (Temperature Measurement) 温度传感器数据(属于环境感知服务)。
0x2A37 特性 心率测量 (Heart Rate Measurement) 心率传感器的原始数据(属于心率服务)。
0x2A38 特性 身体传感器位置 (Body Sensor Location) 传感器在身体上的位置(如胸部、手腕,属于心率服务等)。
0x2A4C 特性 速度和步频 (Speed and Cadence) 跑步或骑行的速度、步频 / 踏频数据(属于对应运动服务)。
0x2A50 特性 固件版本号 (Firmware Revision String) 设备固件版本(属于设备信息服务)。
0x2A51 特性 硬件版本号 (Hardware Revision String) 设备硬件版本(属于设备信息服务)。
0x2A52 特性 软件版本号 (Software Revision String) 设备软件版本(属于设备信息服务)。
0x2A53 特性 制造商名称 (Manufacturer Name String) 设备制造商名称(属于设备信息服务)。
0xFFFF 保留 厂商自定义 UUID 基址 16bit UUID 中 0x0100-0xFFFF 可用于厂商自定义(需基于 128bit UUID 映射)

作者水平有限,如有错误,不吝赐教。

posted @ 2025-05-10 22:10  ___彼岸、  阅读(379)  评论(0)    收藏  举报