ble 空口包格式


一、ble 空口包简介

BLE 工作在非授权的 2.4 GHz ISM 频段,采用跳频的方式来对抗干扰和衰落,定义了两种调制方式:

  • 强制调制方式:使用整形的二进制频率调制来最小化收发器的复杂性,符号率为 1 Msym/s,是设备必须支持的,支持两种 PHY:
    • LE 1M:Uncoded PHY,数据传输率为 1 Mb/s
    • LE Coded:Coded PHY,Access Address、Coding Indicator、TERM1 数据传输率为 125 kb/s(S=8 coding),Payload 数据传输率为 125 kb/s(S=8 coding) 或 500 kb/s(S=2 coding),由于引入了 FEC 编解码以及 Pattern Mapper 和 Demapper,虽然增加了接收机复杂度降低了传输速率,但使得蓝牙设备能更远距离的传输数据,从而更好地适应物联网应用
  • 可选调制方式:与强制调制方式类似,符号率为 2 Msym/s,是设备可选支持的,只支持一种 PHY:
    • LE 2M,Uncoded PHY,数据传输率为 2 Mb/s

二、Uncoded PHY 包格式(LE 1M 或 LE 2M PHY)

在这里插入图片描述

1. Preamble

前导部分,是最先传输的部分,用于接收方进行频率同步,符号时序评估和自动增益控制训练,如果在 LE 1M PHY 上传输数据包长度为 1B,在LE 2M PHY 上传输数据长度为 2B
Preamble 是 1010 或者 0101 的序列,根据 Access Address 的 LSB 来决定,LSB 是1,则前导是 1010,否则是 0101
在这里插入图片描述

2. Access Address

接入地址,空口包中标识设备身份,根据 Access Address 的不同,空口包分为两种类型:

  • advertising channels PDU:固定为 0x8E89BED6,ADV_IND, SCAN_REQ, SCAN_RESP, CONNECT_IND 只能在 37/38/39 信道上传输
  • date channels PDU:一个 32bit 的随机值,只在其余37个数据信道上传输,是连接成功后两设备用于数据收发的

3. PDU

空口包数据部分,长度 2 - 258 字节,包括 advertising channels PDU 和 date channels PDU

4. CRC

包含 PDU 域的 CRC 24 的数据

5. Constant Tone Extension

这个域是 BLE 5.1 新增的,最主要的功能是 AoA/AoD (蓝牙定位)的应用,是一个可选的数据项

三、Coded PHY 包格式(LE 1M PHY)

在这里插入图片描述
在这里插入图片描述

  1. preamble
    不编码,共 80 bits,(重复 10 次 00111100 )

  2. CI(Coding Indicator)
    在这里插入图片描述

  3. PDU
    同 Uncoded PHY,因 CI/TERM1/TERM2 占用了 1 个字节,其长度 2 - 257 字节

四、Advertising Channels PDU

使用广播信道的包有多种,如 ADV_IND, SCAN_REQ, SCAN_RESP, CONNECT_IND, 其 AA 为特定值 0x8E89BED6,PDU 包括 Header 和 Payload
在这里插入图片描述

1. Header

a. PDU Type

在这里插入图片描述

b. ChSel

  • 0 - 设备不支持信道选择算法2
  • 1 - 设备支持信道选择算法2

c. TxAdd

  • 0 - 设备地址是 public 类型
  • 1 - 设备地址是 random 类型

d. RxAdd

  • 0 - 对端设备地址是 public 类型
  • 1 - 对端设备地址是 random 类型

e. Length

后面 Payload 的长度,1 - 255 字节

2. Payload

a. Advertising PDU

i. ADV_IND

可连接的,可扫描的,不定向的广播包,是经典和常用的广播包
可连接:其它设备可以发送 CONNECT_IND
可扫描:其它设备可以发送 SCAN_REQ,本设备也会回复 SCAN_RSP
在这里插入图片描述

  • AdvA:本机即广播者设备地址,由 header 中的 TxAdd 指示类型
  • AdvData:广播数据,0 - 31 字节,可由本机即广播者 Host 设置

在这里插入图片描述

ii. ADV_DIRECT_IND

可连接的,不可扫描的,定向的广播包
定向的:广播包是专门给某个指定设备用的,所以携带了对端的设备地址,因此也不再需要携带广播数据
在这里插入图片描述

  • AdvA:本机即广播者设备地址,由 header 中的 TxAdd 指示类型
  • TargetA:对端设备地址,由 header 中的 RxAdd 指示类型
iii. ADV_NONCONN_IND

不可连接,不可扫描,不定向的广播包,没有实际作用,只是在向空口发广播包
在这里插入图片描述

  • AdvA:本机即广播者设备地址,由 header 中的 TxAdd 指示类型
  • AdvData:广播数据,0 - 31 字节,可由本机即广播者 Host 设置
iv. ADV_SCAN_IND

不可连接,只可扫描,不定向的广播包
在这里插入图片描述

  • AdvA:本机即广播者设备地址,由 header 中的 TxAdd 指示类型
  • AdvData:广播数据,0 - 31 字节,可由本机即广播者 Host 设置

b. Scanning PDU

i. SCAN_REQ

当扫描设备收到可扫描的广播包后,扫描设备可发送 SCAN_REQ(active scanning 会发起扫描请求,passive scan 只接收广播包不会发送扫描请求)
在这里插入图片描述

  • ScanA:本机即扫描者设备地址,由 header 中的 TxAdd 指示类型
  • AdvA:对端设备即广播者设备地址,由 header 中的 RxAdd 指示类型

在这里插入图片描述

ii. SCAN_RSP

广播设备收到 SCAN_REQ,则发送扫描响应 SCAN_RSP
在这里插入图片描述

  • AdvA:本机即广播者设备地址,由 header 中的 TxAdd 指示类型
  • ScanRspData:扫描响应数据,0 - 31 字节,可由本机即广播者 Host 设置

在这里插入图片描述

c. Initiating PDU

i. CONNECT_IND

Initiating state 设备可以向 Advertising state 设备即广播者发送 CONNECT_IND,然后进入连接态,成为 Central,广播设备成为 Perpheral
在这里插入图片描述

  • InitA:本机即发起连接的设备地址,由 header 中的 TxAdd 指示类型

  • AdvA:对端设备即广播者设备地址,由 header 中的 RxAdd 指示类型

  • LLData:建立连接的链路信息
    在这里插入图片描述

    • AA:ACL 连接的 Access Address,由 Master 生成,是一个随机数
    • CRCInit:ACL 连接的 CRC 计算初始值,由 Master 生成,是一个随机数
    • WinSize:用于计算 transmitWindowSize(WinSize * 1.25 ms)
    • WinOffset:用于计算 transmitWindowOffset(WinOffset * 1.25 ms)
    • Interval:用于计算 connInterval(Interval * 1.25 ms)
    • Latency:用于计算 connPeripheralLatency(Latency)
    • Timeout:用于计算 connSupervisionTimeout(Timeout * 10 ms)
    • ChM:Channel Map,表示哪些 date channels(0 - 36)可用,bit 置 1 - 可用,bit 置 0 - 不可用
    • Hop:hopIncrement,取值 5 - 16,为了连接的稳定性,双方需要不断的切换信道进行跳频,下一次交互选择哪个信道是由算法决定的,hopIncrement 即是算法的参数
    • SCA:centralSCA,表示 Central 的时钟精度

在这里插入图片描述

五、Date Channels PDU

在这里插入图片描述

1. Header

  • LLID : 指示后面 payload 是数据面的还是控制面的,0b01 - 数据面,L2CAP后续分包,0b10 - 数据面,L2CAP 起始分包,0b11 - 控制面
  • NESN:下一个期望的对端包的 Sequence Number
  • SN:当前包的 Sequence Number,与 NESN 一起决定了数据包是否传输 OK,进行重传和流控处理
  • MD:More Data,表示后面是否跟有更多的数据,有了这个 MD 对端才会打开接收窗口继续接收数据
  • CP:CTEInfo Present,1 - 表示 PDU header 有 CTEInfo,packet 有 Constant Tone Extension,0 - 表示没有
  • Length:Playload + MIC 数据长度,0 - 255(payload:0 - 251,MIC:4)
  • CTEInfo:packet 中 Constant Tone Extension 的类型和长度

2. Payload

a. LL Data PDU

数据面数据包,Header LLID 是 0b01 或 0b10,整个 Payload 都是上层 L2CAP 数据
由于空口包中 Payload 最大长度为 251,由此计算 ATT_MTU 最大值为 247(251 - L2CAP Header(4))
由 LE_Read_Buffer_Size 返回的 Link Layer acl buffer 大小为 251,由此计算 ATT_MTU 最大值为 247(251 - L2CAP Header(4))
因此,最终 ATT_MTU 值应该为 min(Payload - 4, acl_buffer_size - 4),即两者的较小值

b. LL Control PDU

控制面数据包,Header LLID 是 0b11。当 Connection 建立完成后,很多参数都固定下来了,如 transmitWindowSize,transmitWindowOffset,connInterval,connPeripheralLatency,connSupervisionTimeout 等,如何更改这些连接的参数呢,或者如何获取对端设备的一些信息呢?
控制面包就是用于连接建立后进行数据交互的,此时 Payload 由 Opcode 和 CtrData 构成
在这里插入图片描述

i. 0x00 - LL_CONNECTION_UPDATE_IND

在这里插入图片描述

更新已建立的连接的参数,各字段值与 CONNECT_IND 中 LLDate 意义相同

在这里插入图片描述

ii. 0x01 - LL_CHANNEL_MAP_IND

在这里插入图片描述

更新已建立的连接的 Channel Map,即可用于数据传输的信道(0 - 36)

  • ChM: 1- 信道可用,0 - 信道不可用
  • Instant:代表在多少个 Event 的时候,双方一起更新 Channel Map
iii. 0x02 - LL_TERMINATE_IND

在这里插入图片描述
向对端设备发出断开连接请求

iv. 0x03 - LL_ENC_REQ

在这里插入图片描述

  • Rand: 随机数,由 Host 生成
  • EDIV: encrypted diversifier
  • SKD_C: Central’s session key diversifier
  • IV_C: Central’s initialization vector
0x04 - LL_ENC_RSP

在这里插入图片描述

  • SKD_P: Peripheral’s session key diversifier
  • IV_P: Peripheral’s initialization vector
0x05 - LL_START_ENC_REQ
0x06 - LL_START_ENC_RSP
0x0A - LL_PAUSE_ENC_REQ
0x0B - LL_PAUSE_ENC_RSP

没有CtrData数据

v. 0x07 - LL_UNKNOWN_RSP

在这里插入图片描述

  • UnknownType:收到的不能识别的 Opcode
vi. 0x08 - LL_FEATURE_REQ

在这里插入图片描述

  • FeatureSet:Central Link Layer 支持的 features 集合

在这里插入图片描述

0x09 - LL_FEATURE_RSP

在这里插入图片描述

  • FeatureSet:Peripheral Link Layer 支持的 features 集合
    在这里插入图片描述
0x0E - LL_PERIPHERAL_FEATURE_REQ

在这里插入图片描述

  • FeatureSet: Peripheral’s Link layer 支持的 features 集合
vii. 0x0C - LL_VERSION_IND

在这里插入图片描述
在这里插入图片描述

viii. 0x0D - LL_REJECT_IND

在这里插入图片描述

0x11 - LL_REJECT_EXT_IND

在这里插入图片描述
扩展的 reject 命令,如果对端设备 link layer不支持该命令(feature set bit is 0), 则需要使用 LL_REJECT_IND

ix. 0x0F - LL_CONNECTION_PARAM_REQ
0x10 - LL_CONNECTION_PARAM_RSP

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

x. 0x14 - LL_LENGTH_REQ
0x15 - LL_LENGTH_RSP

在这里插入图片描述

  • MaxRxOctets: 发送设备的 connMaxRxOctets,不小于 27B
  • MaxRxTime: 发送设备的 connMaxRxTime,不小于 328us
  • MaxTxOctets: 发送设备的 connMaxTxOctets,不小于 27B
  • MaxTxTime: 发送设备的 connMaxTxTime,不小于 328us

在这里插入图片描述在这里插入图片描述

xi. 0x16 - LL_PHY_REQ
0x17 - LL_PHY_RSP

在这里插入图片描述

  • TX_PHYS:发送设备首选的发送 PHY
  • RX_PHYS:发送设备首选的接收 PHY
    在这里插入图片描述
0x18 - LL_PHY_UPDATE_IND

在这里插入图片描述

  • PHY_C_TO_P:Central 向 Peripheral 发送数据包使用的 PHY
  • PHY_P_TO_C:Peripheral 向 Central 发送数据包使用的 PHY
  • Instant:代表在多少个 Event 的时候,双方一起更新 PHY
xii. 0x19 - LL_MIN_USED_CHANNELS_IND

在这里插入图片描述

  • PHYS: Peripheral 使用的 PHYs
  • MinUsedChannels:Peripheral 使用的 PHYs 最小信道个数,取值 2 - 37

3. MIC

非加密的ACL连接,或者加密的ACL连接但payload长度为0的时候,不包含该字段

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BLE(Bluetooth Low Energy)是一种低功耗蓝牙通信技术,它常用于智能设备之间的通信。而BLE 4.0广播协议指的是在BLE 4.0版本中,设备通过广播来进行信息传输的协议。 广播BLE设备用于与其他设备进行通信的载体。它是通过无线电信号的形式在广播信道上进行传输的,可以广播设备的标识、状态、数据等信息。广播协议规定了广播格式和内容,使得接收设备能够正确解析和处理广播。 在BLE 4.0广播协议中,广播由多个字段组成。其中,含了设备的标识符、服务UUID、信号强度、数据等信息。设备的标识符可以用来区分不同的设备,服务UUID则标识了设备所提供的服务。信号强度用于表明设备与接收设备之间的距离远近,而数据字段中可以含设备的状态信息、传感器数据等。 通过广播BLE设备可以实现多种功能,比如设备的发现和连接。接收设备可以通过扫描广播来检测周围的BLE设备,并获取设备的标识符和服务UUID。在获得设备的标识信息后,接收设备可以发送连接请求,建立与设备的通信连接。 总之,BLE 4.0广播协议是指在BLE 4.0版本中,设备使用广播进行信息传输的一种协议。通过广播,设备可以进行发现、连接和传输数据等功能。它为智能设备之间的通信提供了一种高效、低功耗和可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值