BLE 广播报文的收发(一)

要点1:BLE的蓝牙在链路层上定义了五种状态:

就绪态,广播态,扫描态,发起态,连接态。

五种状态也很好记忆。可以根据一个蓝牙设备的行为记忆。

蓝牙开机(就绪态)->开始扫描周围的设备(扫描态)->广播自己的存在(广播态)->试图连接某个目标设备(发起态)->连接成功(连接态)

要点2:主从设备

一个设备不能同时扮演主从设备。

(主设备是被连接的设备,从设备是发起连接的设备)

HCI中是有命令支持主从切换的。

一个设备不能同时是两个主设备的从设备(BLE)

补充的是,经典蓝牙是支持的。

参考文献《低功耗蓝牙开发权威指南》

要点2:信道

低功耗蓝牙使用40个信道

信道宽度

BLE  2MHz  (避免邻道干扰)

经典蓝牙 1MHz

这40个信道中有三个信道是广播信道,有37个信道是数据信道。

BLE频段:2402-2480

三个广播信道被编码为37,38,39

信道的位置在wifi干扰较小的三个位置。

要点3: 链路层报文结构



链路层前导码

根据BLE标准,前导序列是一个01010101或者10101010的8bit交替序列。

链路层access address

根据BLE标准,该位有两种值可选,分别是广播地址和随机地址。

链路层的Header

Type

因为主要是想讨论广播的报文的收发,所以这里假设access address使用的是广播地址,所以该报文是一个广播报文,在蓝牙4.0 BLE中,定义了以下几种广播报文的type。

上图可以看到有7中type,他们的区别可以参考

低功耗蓝牙BLE之广播

即:不同的广播类型对扫描请求和连接请求的不同

RFU

链路层所有的RFU字段为保留字段

TxAdd字段

该字段为的说明在规范中有如下描述:

TheTxAdd in the advertising channel PDU header indicates whether the advertiser’saddress in the AdvA field is public (TxAdd = 0) or random (TxAdd = 1).

我们知道,BLE是支持地址的两种地址,这个字段用于指示这个地址信息。

蓝牙协议分析(6)_BLE地址类型

Length字段

根据BLE标准,表示该数据包的长度。具体的来说,该长度指的是下图中payload的长度。(不包含BLE的数据链路层的HEAD和CRC校验)。


链路层body

AdvA字段

根据BLE的标准,该位置应该是发送方的蓝牙地址。

在链路层的head中提到,地址的类型是分两种的,我理解的TxAdd字段就是指示的这个地址是什么类型的。

AdvData字段

在蓝牙标准中给出该字段的一个格式定义:


这种定义格式就是 TLV定义。

以上即链路层报文的介绍。

下面要介绍代码中是如何解析广播报文,发送广播报文的。

要点4: Bluedroid发送广播报文

下文介绍

你可能感兴趣的:(BLE 广播报文的收发(一))