- 前言:
- 通过 "GR5x系列BLE知识及应用专题" 系统介绍一些 BLE 涉及的知识概念, 以及如何使用 Goodix GR5xx 系列芯片的SDK进行BLE应用开发。
- 可以从下面网页获得 GR5xx 系列蓝牙芯片的介绍和选型参考.
- 如果博客有内容引用自网络, 会在文末添加参考来源.
1. BLE广播
- 1. 广播是低功耗蓝牙技术中最基本的操作之一,为设备提供了一种告知存在、允许连接建立的方法,广播数据中可以包含设备支持的设备名称、发射功率等
- 下图展示了:一个低功耗蓝牙设备在一个或多个广播信道上进行数据广播,并被远程设备发现
2. 传统广播
2.1 广播间隔
广播事件被定义为在主要广播物理信道上发送的一个或多个广播PDU。每个使用的广播信道最多发送一个PDU,通常在每个广播事件中对所有使用的广播信道发送一个PDU。广播是一个周期性业务,那么就存在一个参数,决定多久发生一次业务,这个参数叫 Advertising Interval(广播间隔)。广播事件时序图:
图中advInterval就是广播间隔参数,广播事件之间的实际间隔为T_advEvent:
T_advEvent = advInterval + advDelay |
蓝牙核心规范对广播间隔的定义是:广播间隔(advInterval)应为0.625 ms的整数倍,取值范围为20 ms到10.24 S。advDelay是一个伪随机值,范围为0ms到10ms,由Link Layer为每个广播事件生成(防止同一时间同一信道上的广播报文造成干扰)。由于这个随机Delay值 的引入, 导致观察者观察广播的周期性被打乱,因此观察者需要 提前更多时间处于 扫描状态, 客观上增加了功耗, 这个特性在 BLE 5.0 引入的扩展广播上进行了优化.
2.2 广播类型 (BLE 5.4)
[BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2351 ]
类型 | 协议值 | 描述 | 说明 |
可连接的非定向广播 | 0x00 | Connectable and scannable undirected advertising (ADV_IND) (default) | 这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当前设备可以接受其他任何设备的连接请求。进行通用广播的设备能够被扫描设备扫描到,或者在接收到连接请求时作为从设备进入一个连接。 |
可连接的定向广播(高占空比) | 0x01 | Connectable high duty cycle directed advertising (ADV_DIRECT_IND, high duty cycle) | 定向广播类型是为了尽可能快的建立连接。这种报文包含两个地址:广播者的地址和发起者的地址。发起者收到发给自己的定向广播报文之后,可以立即发送连接请求作为回应。 定向广播类型有特殊的时序要求。完整的广播事件必须不超过3.75ms重复一次。这一要求使得扫描设备只需扫描最多3.75ms便可以收到定向广播设备的消息(即: 一个广播事件中连续两个ADV_DIRECT_IND PDU的间隔时间需要小于或等于3.75ms)。 当然,如此快的发送会让报文充斥着广播信道,进而导致该区域内的其他设备无法进行广播。因此,定向广播不可以持续1.28s以上的时间。如果主机没有主动要求停止,或者连接没有建立,控制器都会自动停止广播。一旦到了1.28s,主机便只能使用间隔长得多的可连接非定向广播让其他设备来连接。 当使用定向广播时,设备不能被主动扫描。此外,定向广播报文的净荷中也不能带有其他附加数据。该净荷只能包含两个必须的地址 |
可扫描的非定向广播 | 0x02 | Scannable undirected advertising (ADV_SCAN_IND) | 又称可发现广播,这种广播不能用于发起连接,但允许其他设备扫描该广播设备。这意味着该设备可以被发现,既可以发送广播数据,也可以响应扫描发送扫描回应数据,但不能建立连接。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据之中,而静态数据可以包含于扫描响应数据之中 |
不可连接的非定向广播 | 0x03 | Non connectable undirected advertising (ADV_NONCONN_IND) | 仅仅发送广播数据,而不想被扫描或者连接。这也是唯一可用于只有发射机而没有接收机设备的广播类型。不可连接广播设备不会进入连接态,因此,它只能根据主机的要求在广播态和就绪态之间切换。使用场景一般是 Mesh 或者 Beacon |
可连接的定向广播(低占空比) | 0x04 | Connectable low duty cycle directed advertising (ADV_DIRECT_IND, low duty cycle) | 与高占空比 可连接定向广播相比, 一个广播事件中连续两个ADV_DIRECT_IND PDU的间隔时间需要小于或等于10ms. |
- 备注:
- 所谓的定向和非定向针对的是广播的对象,如果是针对特定的对象进行广播(在广播包PDU中会包含目标对象的MAC)就是定向广播,反之就是非定向。可连接和不可连接是指是否接受连接请求,如果是不可连接的广播类型,它将不回应连接请求。可扫描广播类型是指回应扫描请求。
不同的广播类型对扫描请求和连接请求的不同结果如下图:
- 下面表有涉及扩展广播部分可以先忽略
2.3 广播信道
- 先补充介绍下 BLE 通信信道
蓝牙无线技术工作于无需频谱授权的2.4GHz ISM频段,该频段的可用频率范围为2400MHz到2483.5MHz。低功耗蓝牙在2.4GHz ISM频段上定义了40个射频信道,从2402MHz开始每间隔2MHz一个信道,最高信道频率为2480MHz。
这些射频信道进一步被划分为3个主广播信道和37个一般用途信道,其中主广播信道用于连接前的初始广播及所有传统广播活动,一般用途信道则主要用于设备间的数据通信。每一个射频信道被分配了唯一的信道索引,如下图:
其它一些无线协议也工作在2.4GHz ISM频段中,如WIFI。为了让BLE设备广播更不容易受WIFI的干扰,将主广播信道与WIFI频段隔离,起到一定抗干扰作用,如下图为BLE蓝牙信道和WIFI(1、6、11)信道示意图:
- 广播信道
BLE 广播时候用的信道为 37(2402MHz)、38(2426MHz)、39(2480MHz). 用户可以指定 其中任意作为广播信道, 但实际使用时, 一般默认 3个信道都同时开启
2.4 广播的发现模式
模式 | 定义 | 行为 |
Non-discoverable mode | 配置为不可发现模式的设备, 不能被正在执行有限可发现或通用可发现规程的设备发现. | 配置为不可发现模式的设备,可以发送广播事件, 但要求AD Type中的 'LE General Discoverable Mode' 和 'LE Limited Discoverable Mode' 标志都不能被设置. 但一般情况下, 处于观察者模式的设备也能扫描到。 |
Limited discoverable mode | 配置为有限可发现模式的设备, 可以被正在执行有限可发现或通用可发现规程的设备在限制的时间段内发现 | 有限可发现模式的设备, 限制周期一般为 180秒. 时间到达后, 广播就好被停止. 但协议栈一般提供了修改时间长度的函数 |
General discoverable mode | 配置为通用可发现模式的设备, 可以被正在执行通用可发现规程的设备在无限长的时间段内发现 | 一般默认配置的模式 |
Broadcaster mode | 广播模式 | 标注 设备只有 发送机,没有接收机. |
- 备注 (广播模式和发现模式的约束关系):
- 定向广播的可发现模式只能设置为GAP_DISC_MODE_NON_DISCOVERABLE(不可发现)。
- 发现模式如果为GAP_DISC_MODE_BROADCASTER,则广播模式只能设置为ADV_NONCONN_IND(不可连接也不可扫描)
- 设置广播数据: 当广播模式为ADV_HIGH_DIRECT_IND或ADV_LOW_DIRECT_IND时,无需设置广播数据,其他情况则需设置
- 设置扫描响应数据: 当广播模式为ADV_IND或ADV_SCAN_IND时,需设置扫描响应数据,其他情况则无需设置
2.5 MAC地址类型
BLE设备的MAC分为两种类型:Public Device Address 和 Random Device Address。而 Random Device Address 又分为 Static Device Address 和 Private Device Address 两类。其中 Private Device Address 又可以分为 Non-resolvable Private Address 和 Resolvable Private Address。它们的关系如下所示:
- Public device address 的地址,需要向 IEEE(电气与电子工程师协会)申请,IEEE 保证地址的唯一性。
- Static Device Address 是设备随机生成的地址。上电的时候随机生成,并且在一个上电周期内保持不变。下一次上电的时候可以改变,但不是强制的,因此也可以保持不变。如果改变,上次保存的连接等信息,将不再有效。
- Non-resolvable private address和Static Device Address类似,也是设备随机生成的地址,不同之处在于Non-resolvable private address 会定时更新。更新的周期建议值是 15 分钟。
- Resolvable private address 也称 RPA 加密地址,它通过一个随机数和 identity resolving key (IRK)生成,因此只能被拥有相同IRK的设备解析出身份地址,可以防止被未知设备扫描和追踪。
2.6 广播的数据包格式
- 空口包格式
BLE 的数据通过无线传输,在 Spec 中称之为 Air Interface packets,俗称空口包。数据传输必须要遵守一定的数据格式,BLE 空口包也有规定的传输格式。BLE Legacy广播的数据包格式如下:
- Preamble: 用于接收器执行频率同步和自动增益的前导码。广播包中固定为 0xAA 。
- Access Address: 接入地址,广播包中固定为 0x8E89BED6 。
- PDU: protocol data unit 协议数据单元。
- CRC: PDU 的 24 bits CRC 计算值,用于校验数据正确性。
广播数据包PDU部分由头部信息(Header)和数据载荷(Payload)组成。
- 广播PDU Header
BLE 广播 PDU Header 由 16bits 构成:
- PDU Type:定义广播 PDU 的类型。
- RFU:暂时不用,为后续预留。
- ChSel:本机支持的跳频算法。如果广播设备支持LE信道选择算法#2功能,则该位设置为 1。
- TxAdd:广播设备地址类型。如果广播设备的地址类型是Random,则该位设置为 1,如果地址类型是Public,则该位设置为 0。
- RxAdd:目标设备地址类型。如果目标设备的地址类型是Random,则该位设置为 1,如果地址类型是Public,则该位设置为 0。该bit只在定向广播中有效。
- Length:广播数据包有效载荷的长度。
- 广播PDU的数据载荷
BLE传统广播数据载荷部分由6字节的广播设备地址和最大31字节的广播数据组成。
AdvA: BLE广播设备的MAC地址。
AdvData: 广播数据内容,最大31字节。
2.7 广播数据
- BLE广播包数据内容由若干个数据块组成,在核心规范中该数据块称为“AD Structure”。每一个 AD Structure 结构由 Length、AD Type、AD Data 组成。如下图所示。
- Length:表示 AD Type 和 AD Data 部分的长度。
- AD Type:数据类型。
- AD Data:数据内容。
部分AD Type说明如下, 完整的可以查询 Bluetooth SIG文档 "Assigned Numbers" 的 "Common Data Types" 章节
AD Type | 描述 |
0x01 | Flags,蓝牙特征 |
0x08 | 本地设备的简短名称 |
0x09 | 本地设备的完整名称 |
0x19 | 广播设备的外观类型 |
0x0A | 发射功率 |
0xFF | 制造商特定数据 |
- 传统广播包最大长度为31字节,扩展广播为255字节。若想要发送的广播数据过长,可以放一部分数据到扫描响应包中。
- 附录: 后面博客会进一步介绍扩展广播和周期性广播