BLE空口包结构

  • 4.0 - 5.1 Uncoded PHY 空口包格式
  • Preamble (前导)
  • Access Address (AA)
  • 广播包
  • 数据包
  • PDU
  • CRC
  • 5.1 Coded PHY 空口包格式
  • Constant Tone Extension
  • 参考地址


BLE空口包(packet,又称air interface packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次

是BLE的统一数据传输格式

4.0 - 5.1 Uncoded PHY 空口包格式

转 :BLE(3)—— 空口数据包组成 :

Android 蓝牙数据传输格式_Access

BLE 4.0 BLE4.1 中PDU 最大到39B;BLE 4.2 以上可以达到257B。但是默认了兼容BLE4.0/4.1还是采用了上面的39设计。

注意:PHY 的数据包最大长度直接由硬件决定,也是限制我们BLE 数据包大小的根本原因。换句话说,PHY的硬件寄存器/存储器/FIFO 等直接决定了我们蓝牙数据包最大长度。

BLE一次能传多少数据:https://leconiot.com/download/cc2640r2f/ble_stack_app/app_examples/exchange_mtu/exchange_mtu.html

扩展:为什么说有效长度是20(39B时)?
蓝牙中数据包传输的大小的定义 BLE PACKET FORMAT:

Preamble (前导)

前导码,主要用于接收机的频偏同步和定时同步,还能用于自动增益控制。

Android 蓝牙数据传输格式_空口包学习_02

分类:前导根据不同的 PHY 分为两类

1M Preamble

BLE 4.2

1M 的 Preamble 是 8 bits 的,

当 AA 的 LSB 是 1 的时候 Preamble 是:10101010 ,16进制0xAA
当 AA 的 LSB 是 0 的时候 Preamble 是:01010101 ,16进制0x55

对于广播通道的数据,前导码为:0xAA,对于数据通道,前导码为0xAA 或者0x55,当接入地址的最低位是1时,前导码是0x55,否则为0xAA.

2M Preamble

BLE 5.0

2M 的 Preamble 是 16 bits 的

当 AA 的 LSB 是 1 的时候 Preamble 是:10101010 10101010
当 AA 的 LSB 是 0 的时候 Preamble 是:01010101 01010101

Access Address (AA)

Android 蓝牙数据传输格式_数据通道_03

Access Address 成为接入地址(与设备的 48 bits 地址不一样)。用来标示接收者ID或者空中包身份

根据 Access Address 的不同,又区分两种 Packet 类型:广播包和数据包:

广播包

广播包 AA 固定为0x8E89BED6,广播包只能在广播信道(channel)上传输,即只能在37/38/39信道上传输。广播包发送给附近所有的observer(扫描者)。

Android 蓝牙数据传输格式_数据_04

注:从蓝牙5.0开始广播包可以在其它信道上传输

数据包

数据包 AA 为一个32bit的随机值,由Initiator生成。

数据包,其实是数据信道上的空中包的简称,数据包只在数据信道上传输,即除37/38/39之外的其余37信道。

每建立一次连接,重新生成一次Access address。数据包是给连接通信使用的,即用于master和slave之间通信的。

Android 蓝牙数据传输格式_数据_05

AA 又称同步字段,在 Connection 建立的时候,双方进行数据传送,如果未发现 AA 或者错误,则称为 Sync Error。

PDU

PDU(protocol data unit,协议数据单元,BLE 数据传送的基本单元)前两个字节固定为LL header(1个字节长)和 payload length(1个字节长,又称data length),即可以展开为:

Android 蓝牙数据传输格式_数据通道_06

协议数据单元,又分为广播通道PDU和数据通道PDU

CRC

检验数据完整性,一般情况下,协议栈会自动处理这个字段

5.1 Coded PHY 空口包格式

Android 蓝牙数据传输格式_数据_07

BLE 5.0 以后,便支持了 Long Range,支持 Long Range 的方式呢,主要是引入了 Coded PHY。Coded PHY 分为两种:

500kbps

125kbps

所谓 Coded PHY呢,就是将数据传送的时候,不光是 raw data,而是加上了一个 FEC 向前纠错编码,使得在降低传送速率的前提下,对数据进行编码(FEC),达到数据低错的目的。

说白了,就是以牺牲速度(低速)来换数据准确传送(通过 FEC 数据编码)。

Constant Tone Extension

CTE,BLE 5.1 新增

参考地址

抄的大佬,做的学习笔记。

BLE(3)—— 空口数据包组成 :

详解BLE空口包格式—兼BLE Link layer协议解析

蜗窝科技:http://www.wowotech.net/sort/bluetooth