1、数据链路层报文结构
报文的基础是数据链路层的报文,其它报文都是从此展开的,BLE数据链路层数据格式如下:
2、 广播通道与数据通道 PDU 区别:
(1) 广播通道的 PDU 格式:
字段解析:
-
报文类型(低 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 格式:
字段释义:
-
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 报文格式
4、 AD Structure 解析
(1) AD type
(2) AD data 简述
Flags:
SERVICE:
Local Name:
TX Power Level: