广播 (Advertising) 与扫描 (Scanning) 是低功耗蓝牙设备在进入连接前在设备发现 (Device Discovery) 阶段的工作状态。下面,我们先了解与广播有关的基本概念。

广播的基本概念

 

广播是设备通过蓝牙天线,向外发送广播数据包的过程。由于广播者在广播时并不知道环境中是否存在接收方,也不知道接收方会在什么时候启动天线,所以需要周期性地发送广播数据包,直到有设备响应。在上述过程中,对于广播者来说存在以下几个问题,让我们一起来思考一下

  1. 向哪里发送广播数据包? (Where?)

  2. 发送广播数据包的周期取多久? (When?)

  3. 广播数据包里包含哪些信息? (What?)

向哪里发送广播数据包?

蓝牙的无线电频段

第一个问题指向的是,广播数据包应发送到哪一无线电频段。这个回答由蓝牙核心规范给出,答案是 2.4 GHz ISM 频段。2.4 GHz ISM 频段是一个全球可用的免费无线电频段,不被任何国家以军事用途等理由管控,也无需向任何组织支付许可费用,因此该频段的可用性极高,且没有任何使用成本。不过,这也意味着 2.4 GHz ISM 频段非常拥挤,可能会与其他无线通信协议发生数据冲突,如 2.4 GHz WiFi。

 

蓝牙信道

与经典蓝牙相同,蓝牙技术联盟为了解决数据冲突的问题,在低功耗蓝牙上也应用了自适应跳频技术 (Adaptive Frequency Hopping, AFH) ,该技术可以判断 RF 信道的拥挤程度,通过跳频避开拥挤的 RF 信道,以提高通信质量。不过低功耗蓝牙与经典蓝牙的不同之处在于,所使用的 2.4 GHz ISM 频段被划分为 40 个 2 MHz 带宽的射频 (Radio Frequency, RF) 信道,中心频率范围为 2402 MHz - 2480 MHz ,而经典蓝牙则是将这一频段划分为 79 个 1MHz 带宽的 RF 信道。

在蓝牙核心规范 4.2 (Bluetooth Core Specification 4.2) 中, RF 信道分为两种类型,如下

 

类型

数量

编号

作用

广播信道 (Advertising Channel)

3

37-39

用于发送广播数据包和扫描响应数据包

数据信道 (Data Channel)

37

0-36

用于发送数据通道数据包

 

广播者在广播时,会在 37-39 这三个广播信道中进行广播数据包的发送。在三个广播信道的广播数据包均发送完毕后,可以认为一次广播结束,广播者会在下一次广播时刻到来时重复上述过程。

 

扩展广播特性

蓝牙核心规范 4.2 中,广播数据包允许搭载最多 31 字节广播数据,这无疑限制了广播的功能。为了提高广播的可用性,蓝牙 5.0 标准引入了 扩展广播 (Extended Advertising) 特性,这一特性将广播数据包分为

类型

简称

单包最大广播数据字节数

最大广播数据字节数

主广播数据包 (Primary Advertising Packet)

Legacy ADV

31

31

扩展广播数据包 (Extended Advertising Packet)

Extended ADV

254

1650

扩展广播数据包由 ADV_EXT_IND 和 AUX_ADV_IND 组成,分别在主广播信道 (Primary Advertising Channel) 和次广播信道 (Secondary Advertising Channel) 上传输。其中,主广播信道对应于信道 37-39 ,次广播信道对应于信道 0-36 。由于接收方总是在主广播信道中接收广播数据,因此发送方在发送扩展广播数据包时,应在主广播信道中发送 ADV_EXT_IND ,在次广播信道中发送 AUX_ADV_IND ,并在 ADV_EXT_IND 中指示 AUX_ADV_IND 所在的次广播信道;通过这种机制,接收方能够在接收到主广播信道的 ADV_EXT_IND 以后,根据指示到指定的次广播信道去接收 AUX_ADV_IND ,从而得到完整的扩展广播数据包。

类型

信道

作用

主广播信道 (Primary Advertising Channel)

37-39

用于传输扩展广播数据包的 ADV_EXT_IND

次广播信道 (Secondary Advertising Channel)

0-36

用于传输扩展广播数据包的 AUX_ADV_IND

发送广播数据包的周期取多久?

广播间隔

对于第二个问题,即发送广播数据包的周期怎么取,蓝牙标准中也给出了一个明确的参数定义,即广播间隔 (Advertising Interval)。广播间隔可取的范围为 20 ms 到 10.24 s ,取值步长为 0.625 ms。

广播间隔的取值决定了广播者的可发现性 (Discoverability) 以及设备功耗。当广播间隔取得太长时,广播数据包被接收方接收到的概率就会变得很低,此时广播者的可发现性就会变差。同时,广播间隔也不宜取得太短,因此频繁发送广播数据需要消耗更多的电量。所以,广播者需要在可发现性和能耗之间进行取舍,根据应用场景的需求选择最合适的广播间隔。

值得一提的是,如果在同一空间中存在两个广播间隔相同的广播者,那么有概率出现重复性的撞包 (Packet Collision) 现象,即两个广播者总是在同一时刻向同一信道发送广播数据。由于广播是一个只发不收的过程,广播者无法得知是否发生了广播撞包。为了降低上述问题的发生概率,广播者应在每一次广播事件后添加 0-10 ms 的随机时延。

广播数据包里包含哪些信息?

广播数据包结构

对于第三个问题,即广播数据包内含有什么信息,在蓝牙核心规范 4.2 中给出了广播数据包的格式定义,如下图所示

 

看起来非常复杂,让我们来逐层分解。广播数据包的最外层包含四个部分,分别是

 

序号

名称

字节数

功能

1

预置码 (Preamble)

1

特殊的比特序列,用于设备时钟同步

2

访问地址 (Access Address)

4

标记广播数据包的地址

3

协议数据单元 (Protocol Data Unit, PDU)

2-39

有效数据的存放区域

4

循环冗余校验和 (Cyclic Redundancy Check, CRC)

3

用于循环冗余校验

广播数据包是蓝牙数据包的一种类型,由 PDU 类型决定。下面我们将对 PDU 展开详细的介绍

PDU

PDU 段为有效数据存放的区域,其结构如下

序号

名称

字节数

1

头 (Header)

2

2

有效负载 (Payload)

0-37

PDU 头

PDU 头中含有较多信息,可以分为以下六个部分

序号

名称

比特位数

备注

1

PDU 类型 (PDU Type)

4

 

2

保留位 (Reserved for Future Use, RFU)

1

 

3

通道选择位 (Channel Selection Bit, ChSel)

1

标记广播者是否支持 LE Channel Selection Algorithm #2 通道选择算法

4

发送地址类型 (Tx Address, TxAdd)

1

0/1 分别表示公共地址/随机地址

5

接收地址类型 (Rx Address, RxAdd)

1

0/1 分别表示公共地址/随机地址

6

有效负载长度 (Payload Length)

8

 

PDU 类型位反映了设备的广播行为。在蓝牙标准中,共有以下三对广播行为

  • 可连接 (Connectable) 与 不可连接 (Non-connectable)

    • 是否接受其他设备的连接请求

  • 可扫描 (Scannable) 与 不可扫描 (Non-scannable)

    • 是否接受其他设备的扫描请求

  • 不定向 (Undirected) 与 定向 (Directed)

    • 是否发送广播数据至指定设备

上述广播行为可以组合成以下四种常见的广播类型,对应四种不同的 PDU 类型

可连接?

可扫描?

不定向?

PDU 类型

作用

ADV_IND

最常见的广播类型

ADV_DIRECT_IND

常用于已知设备重连

ADV_NONCONN_IND

作为信标设备,仅向外发送广播数据

ADV_SCAN_IND

作为信标设备,一般用于广播数据包长度不足的情况,此时可以通过扫描响应向外发送额外的数据

PDU 有效负载

PDU 有效负载也分为两部分

序号

名称

字节数

备注

1

广播地址 (Advertisement Address, AdvA)

6

广播设备的 48 位蓝牙地址

2

广播数据 (Advertisement Data, AdvData)

0-31

由若干广播数据结构 (Advertisement Data Structure) 组成

先看广播地址,即蓝牙地址,可以分为

类型

说明

公共地址 (Public Address)

全球范围内独一无二的固定设备地址,厂商必须为此到 IEEE 组织注册并缴纳一定费用

随机地址 (Random Address)

随机生成的地址

随机地址又根据用途分为两类

类型

说明

随机静态地址 (Random Static Address)

可以随固件固化于设备,也可以在设备启动时随机生成,但在设备运行过程中不得变更;常作为公共地址的平替

随机私有地址 (Random Private Address)

可在设备运行过程中周期性变更,避免被其他设备追踪

若使用随机私有地址的设备要与其他受信任的设备通信,则应使用身份解析秘钥 (Identity Resolving Key, IRK) 生成随机地址,此时其他持有相同 IRK 的设备可以解析并得到设备的真实地址。此时,随机私有地址又可以分为两类

类型

说明

可解析随机私有地址 (Resolvable Random Private Address)

可通过 IRK 解析得到设备真实地址

不可解析随机私有地址 (Non-resolvable Random Private Address)

完全随机的地址,仅用于防止设备被追踪,非常少用

然后看广播数据。一个广播数据结构的格式定义如下

序号

名称

字节数

备注

1

数据长度 (AD Length)

1

 

2

数据类型 (AD Type)

n

大部分数据类型占用 1 字节

3

数据 (AD Data)

(AD Length - n)

 

 

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐