BLE数据报文格式解析

时间:2024-03-27 10:03:15

1、数据链路层报文结构

报文的基础是数据链路层的报文,其它报文都是从此展开的,BLE数据链路层数据格式如下:
BLE数据报文格式解析

2、 广播通道与数据通道 PDU 区别:

(1) 广播通道的 PDU 格式:

BLE数据报文格式解析
字段解析:

  • 报文类型(低 4 个 bit):
    ADV_IND(0000) ——通用广播
    ADV_DIRECT_IND(0001) ——定向连接广播
    ADV_NONCONN_IND(0010) ——不可连接广播
    ADV_SCAN_IND(0110) ——可扫描广播
    SCAN_REQ( 0011) ——主动扫描请求
    SCAN_RSP( 0100) ——主动扫描应答
    CONNECT_REQ( 0101) ——连接请求

  • 发送地址( TXADD)和接收地址( RXADD): 当此位为“1”时表示 Random Add
    (随机地址),当此位为“0”时表示 Public Add(公共地址)。 这个地址指的是数
    据净荷中最初的几个地址字节。

  • 净荷长度: 这个长度是指在 PDU 中的数据除去报头和长度之外的有效净荷数
    据长度

( 2) 数据通道的 PDU 格式:

BLE数据报文格式解析
字段释义:

  • LLID:表示此包数据是 LL Date PDU 还是 LL Control PDU
    00b: Reserved
    01b: LL Date PDU: Continuation fragment of L2CAP message, or an Empty PDU.
    10b: LL Date PDU: Start of an L2CAP message or a complete L2CAP message with
    no fragmentation.
    11b: LL Control PDU

  • MIC( Message Integrity Check):信息完整性检测。涉及到加密操作,上图中是用虚线表示的,并不是一定要有此项。

  • MD:这个标志位是用来通知对方设备自己还有其他数据准备发送。 0 表示没有更多数据发送, 1 表示有更多数据准备发送。这样,只要还有数据需要发送,连接事件会自动扩展。一旦不再有数据发送,连接事件立即关闭。

Note: 如何区分是确定包、新包还是重发包?

SN:只有一个 bit 位,所以值是在 0 和 1 之间进行切换。如果***与之前的一
样,则为重传报文,如果***和之间的不同,则为新报文。

NESN:预期***,它是接收方希望接到的下一包的***,也就是数据包的
确认标志。 当设备接收到序列(SN)为 0 的报文后,在发送给对方的数据包中,
应将 NESN 设为 1,这样对方接收到这个包后,会发送一个新的数据包过来,否
则就会重发上一次***为 0 的包。这个标志可以用来判断数据包是否被正确接
收还是需要重传。

3、 BLE 报文格式

BLE数据报文格式解析

4、 AD Structure 解析

(1) AD type

BLE数据报文格式解析

(2) AD data 简述

Flags:
BLE数据报文格式解析
SERVICE:
BLE数据报文格式解析
Local Name:
BLE数据报文格式解析
TX Power Level:
BLE数据报文格式解析