基于 BLE 5.1 协议 Core Spec。
BLE 在空中进行数据传送,在 Spec 中称之为 Air Interface packets,俗称空口包。既然是数据包,就一定要遵循一定的数据格式,本章来分析空口数据包的最基本的组成格式。
早在 BLE 4.2 的时代,仅仅支持 1M 的 symbol rate,随着蓝牙标准的发展,BLE 5.0 不仅仅支持了 1M PHY,同时引入了 2M PHY 和 Coded PHY(500kbps 和 125kbps)。这里分两组:
Uncoded PHY:1M、2MCoded PHY: 500kbps、125kbpsSIG 宣称的 BLE 5.0 的 Rate X 2,指的就是引入了 2M PHY
Coded PHY 的数据传送,又称 Long Range,能够支持更远的数据传送(稍后分析原因)
什么叫 Uncoded PHY 呢?指的就是传送数据的时候,数据实打实的,未经过额外的编码的。数据的格式如下所示:
• Preamble ----------------------------空口包的前导,PHY 层含义
• Access Address -------------------接入地址,用来标示接收者ID或者空中包身份
• PDU -----------------------------------protocol data unit 协议数据单元
• CRC ----------------------------------- PDU 的 24 bits CRC 计算值,用于校验数据正确性
• Constant Tone Extension --------- CTE 可选项,BLE 5.1 引入,后面会解释
Preamble 指的是前导的意思,他是 BLE 数据传送中,最先传输的部分。
Preamble 是 1010 的序列,到底是以 1010....开始呢,还是以 0101... 开始呢?这里主要是根据 Access Address (AA)的 LSB 来决定,AA 的 LSB 是1,则前导是 1010...,否则是 0101...
前导根据不同的 PHY 分为两类:
1M 的 Preamble
1M 的 Preamble 是 8 bits 的,当 AA 的 LSB 是 1 的时候 Preamble 是:
当 AA 的 LSB 是 0 的时候 Preamble 是:
2M 的 Preamble
2M 的 Preamble 是 16 bits 的
当 AA 的 LSB 是 1 的时候 Preamble 是:
当 AA 的 LSB 是 0 的时候 Preamble 是:
Access Address 成为接入地址(与设备的 48 bits 地址不一样)。用来标示接收者ID或者空中包身份
根据 Access Address 的不同,又区分两种 Packet 类型:广播包和数据包:
广播包Access Address 固定为0x8E89BED6,广播包只能在广播信道(channel)上传输,即只能在37/38/39信道上传输(注:从蓝牙5.0开始广播包可以在其它信道上传输)。广播包发送给附近所有的observer(扫描者)。数据包Access Address为一个32bit的随机值,由Initiator生成。数据包,其实是数据信道上的空中包的简称,数据包只在数据信道上传输,即除37/38/39之外的其余37信道(BLE总共占用40个信道)。每建立一次连接,重新生成一次Access address。数据包是给连接通信使用的,即用于master和slave之间通信的。AA 又称同步字段,在 Connection 建立的时候,双方进行数据传送,如果未发现 AA 或者错误,则称为 Sync Error。
AA 对于 Connection ,是随机生成的 32 bits 数,但是要满足一些关系:
• It shall not be the Access Address for any existing Link Layer connection on this device. • It shall not be the Access Address for any enabled periodic advertising train. • It shall have no more than six consecutive zeros or ones. • It shall not be the advertising channel packets’ Access Address. • It shall not be a sequence that differs from the advertising physical channel packets’ Access Address by only one bit. • It shall not have all four octets equal. • It shall have no more than 24 transitions. • It shall have a minimum of two transitions in the most significant six bits.
PDU(protocol data unit,协议数据单元)是 BLE 数据传送的基本单元,在不同的状态下 PDU 的组成也不尽相同,后面会描述不同状态下的 PDU 的组成,这里暂时先有一个概念即可:PDU 是数据组成的单元。
所有的数据传送,都有数据正确性的校验,BLE 也一样,BLE 使用了 24bits 的CRC 来进行数据完整的说明。CRC 跟在 PDU 后, 计算包含 PDU 域的 CRC 24 的数据。
这个域是 BLE 5.1 新增的,最主要的功能是 AoA/AoD (蓝牙定位)的应用,是一个可选的数据项,后面再分析 AoA/AoD (蓝牙定位)的时候,在详细分析。
BLE 5.0 以后,便支持了 Long Range,支持 Long Range 的方式呢,主要是引入了 Coded PHY。Coded PHY 分为两种:
500kbps
125kbps
所谓 Coded PHY呢,就是将数据传送的时候,不光是 raw data,而是加上了一个 FEC 向前纠错编码,使得在降低传送速率的前提下,对数据进行编码(FEC),达到数据低错的目的。
它的包格式为:
分为了两种:
S=2 -------- 500kbps
S=8 -------- 125kbps
每个域的长度和时间:
说白了,就是以牺牲速度(低速)来换数据准确传送(通过 FEC 数据编码)。有兴趣的同学可以自行参考 Core Spec 5.1 中的 FEC 章节,看看这几部分是如何计算的。