author :cbk
前言
在2016年12月更新的蓝牙Core_v5.0中,更新了LE Advertising Extensions,如下图所示,扩展广播作为新添加的特性增加了广播的消息量传输,下面就简单介绍一下扩展广播的结构以及和4.0中广播包的区别。
广播包基本介绍
蓝牙5.0把广播信道抽象为两类,一种叫主广播信道(primary advertisement channels),工作在37,38,39三个信道中,蓝牙4.0的广播使用的都是主广播信道,另一种叫第二广播信道(Secondary Advertising Packets),工作在0–36信道中,这是蓝牙5.0新增的。
如下图所示,对比4.0广播包新增了许多类型的广播包,其中ADV_EXT_IND以及所有channel处于Secondary Advertising的均为新增的广播包类型。
蓝牙5.0中在主广播的数据类型增加了一个ADV_EXT_IND指令,当扫描设备收到ADV_EXT_IND指令且能识别其携带的数据时(需要扫描设备也是蓝牙5.0才能正确识别),根据包中携带的信息可以去第二广播信道监听其辅助包(auxiliary packet),典型的使用如下图所示。
图中的ADV_EXT_IND广播在主广播信道上,AUX_ADV_IND为其辅助包且广播在第二信道上,扫描设备可以在主广播上监听ADV_EXT_IND广播包,然后根据其携带的内容到第二广播包中监听到AUX_ADV_IND。
扩展广播包结构
广播包的PDU包如下图所示,由两个字节的Header以及若干字节Payload组成。
蓝牙5.0中新增的ADV_EXT_IND以及所有channel处于Secondary Advertising的广播包中的Payload采用相同的结构,称为Common Extended Advertising Payload Format,其Payload内容如下图所示,
-
Extended Header Length
由6个bits组成,指示了Payload中的Extended Header的长度,长度范围是0–63。 -
AdvMode
由2个bits组成,用来指示该广播包的模式,如下图所示,我们知道4.0的广播包是通过PDU中的PDU type来标识,扩展广播类型则使用Playload的AdvMode来指示其模式。 -
Extended Header
其长度范围是0–63个字节,由Extended Header Length的大小指定其长度,是扩展广播包的核心组成部分,其结构如下图所示。
3.1 Extended Header Flags
我们讲到Extended Header是长度可变的,那么我们如何得知上表中的哪一个部分被使用到呢?Extended Header中通过首字节的8个bit来标识。当Extended Header Length不为0时,首先通过Extended Header Flags去判断哪个部分被用到。Extended Header Flags对应bit代表的部分如下图所示
3.2 AdvA和TargeA
AdvA和TargeA拥有相同的结构,分别代表广播地址及目标地址,均由6个字节地址组成。其地址类型包含在PDU中的TxADD及RxADD中。3.3 AdvDataInfo(ADI)
ADI由两个部分组成,如下图所示:
DID用来标识广播数据的ID,每次数据更新时DID也会随之更新为与上次不同的随机值。
SID用来表示标识不同的广播事件,因为在扩展广播中,会有若干个广播事件,所以用SID来进行标识。3.4 AuxPtr
前面我们讲到扫描设备通过广播包数据中携带的信息监听辅助包,扫描设备就是通过Auxptr所携带的内容来确定辅助包的位置及其所处的信道。如下图所示:
3.4.1 channel index
辅助包所处的信道3.4.2 CA
广播设备的时钟精度,具体含义如下图所示:
3.4.3 Offset Unit
Offset Unit是AUX Offset的单位,单位如下图所示
3.4.4 AUX Offset
偏移大小。3.4.5 Aux PHY
用于标识辅助包所使用的PHY是1M,2M还是LE coded,如下图所示。
通过对AuxPtr的分析,我们知道可以通过channel index确定辅助包的信道,PHY确定所处的PHY,最后通过偏移时间的计算(偏移时间 = AUX Offset * Offset Unit),近似确定辅助包的开始(辅助包的开始不能早于偏移时间的位置),如下图所示:
3.5 SyncInfo
用于指示AUX_SYNC_IND的内容,具体含义如下图所示:
其中SYnc Packet Offeset与Offset Units与3.4中的意义一样,后续字段与4.0的connect request包含义相同。3.6 TxPower
代表发射功率。3.7 ACAD
额外广播数据,Playload的Extended Header Length减去Extended Header对应bit数据剩余的长度就是ACDC的长度。 -
AdvData
广播数据,扩展广播包要广播的数据,大小为0-254字节,如果还想更长可以通过AuxPtr指向新的辅助包,另其不断拓展长度。
总结
本文通过简单分析扩展广播包的行为以及扩展广播包的数据组成,让我们对蓝牙5.0的广播模式有了大概的认识,如果需要深入了解更多内容可以参考Core_v5.0了解扩展广播的更多行为以及其他类型广播类型的具体使用。