【入门】BLE蓝牙广播:第一步
一、概述
BLE广播是低功耗蓝牙协议最重要的组成部分之一。深入理解如何使用广播可以有效降低蓝牙模块的功率、提高连接速度以及改善连接的可靠性。
BLE蓝牙协议一共有三层,分别是应用层,主机层和控制器层。

应用层:涵盖与应用程序实现的实际用例相关的所有内容的逻辑、用户界面和数据处理。 应用层协议的架构高度依赖于每个特定用例(use case)。它包括各种各样的配置文件(profile)。配置文件定义了层与层之间(App <-> Host)的垂直交互以及设备之间特定层的对等交互。每个特定用例,例如心率配置文件(HRP),由一项或多项服务(service)组成。
主机层:包括逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol,即L2CAP),属性协议(Attribute Protocol,即ATT),安全管理(Security Manager,即SM),通用属性配置文件(Generic Attribute Profile,即GATT)和通用访问配置文件(Generic Access Profile,即GAP)。
控制器层:包括物理层(Physical Layer),链路层(Link Layer)。主机与控制器之间通过HCI(Host Controller Interface)接口连接。
二、BLE物理层
BLE频道
BLE物理层的基本特征参数如下:
| 调制方式 | GFSK | 速率 | 1Mbps |
| 通道数量 | 40 | 频带间隙 | 2MHz |
BLE的频谱范围时2.402GHz ~ 2.480GHz,一共分为40个频道,每个频道带宽为1MHz,从通道0到通道39,其中通道37,38和39是广播频道,其他是数据通道。最新的BLE规范(5.x),对广播通道进行的扩展,使蓝牙设备也可以在其他通道上发送广播报文。本文主要介绍基本广播通道37,38和39。它们在2.4GHz的频谱范围内的位置如下图所示。

BLE广播间隔
当一个BLE设备处于广播模式时,它周期性地在每个广播通道上发送广播报文。每两组广播报文之间的时间间隔由一个固定的间隔和一个随机的延时组成,其中固定间隔取值范围是20毫秒到10.24秒,步长为0.625毫秒,随机延时是一个取值范围是0到10毫秒的伪随机值,由系统自动产生并加入到广播间隔中。这主要是用来减少设备之间的信号冲突的几率,提高BLE连接的可靠性。另外需要提醒一下的是,广播间隔和连接间隔不是同一个概念。
虽然广播间隔的取值范围很广,但大部分的设备遵循以下广播间隔取值指引。
三、BLE广播报文
广播报文结构
一个完整的BLE广播报文由四部分组成,分别是前导码、接入地址、协议数据单元和CRC校验码。

广播报文之PDU报头

PDU类型
| PDU类型值 | PDU类型 | 说明 |
| 0b0000 | ADV_IND:通用广播指示 | 可连接到任何主设备 |
| 0b0001 | ADV_DIRECT_IND:定向连接指示 | 与ADV_IND类似,表示可连接到特定主设备 |
| 0b0010 | ADV_NONCONN_IND:不可连接指示 | 不可连接,对周边设备广播 |
| 0b0110 | ADV_SCAN_IND:可扫描指示 | 类似ADV_NONCONN_IND,但可通过扫描响应获得额外的信息 |
| 0b0011 | SCAN_REQ:主动扫描请求 | 由扫描设备主动发送 |
| 0b0100 | SCAN_RSP:主动扫描响应 | 由广播设备发送的扫描响应 |
| 0b0101 | CONNECT_REQ:连接请求 | 由发起设备(主设备)发起连接请求 |
| 其他值 | 保留 | 保留 |
广播报文之PDU净荷

- 公有地址:类似MAC地址,由OUI和一个唯一的数字组成
- 随机地址:为了防止设备被跟踪,广播地址可以是随机的。随机地址又分为静态设备地址(Static Device Address)、私有设备地址(Private Device Address)和不可解释私有地址(Non-resolvable Private Address)。
| Length (长度) | AD Type和AD Data的长度 |
| AD Type (类型) | 指示AD Data数据的含义 |
| AD Data (数据) | 广播数据 |
广播报文之CRC检验码
报文的最后是3个字节的循环冗余校验。CRC对报头、长度域以及净荷域进行计算。该CRC的计算公式如下:
(未完待续)