低功耗蓝牙通讯模式下的数据包,与经典蓝牙通讯的数据包不同,分为四个部分

⭐ 前导码为1个字节(或者2个字节,取决于PHY),用于接收端的同步和增益控制
⭐ 接入地址为4个字节,在物理层识别通信对象用。广播包场合为固定数据;数据包场合用随机数。
⭐ 协议数据单元,长度不定,由数据定,是传输的核心数据。
⭐ 循环冗余校验,3个字节,用于检验协议数据单元(PDU)的完整性。
协议数据单元(PDU)
1、广播包

⭐ 头部(Head),2字节
·PDU Type ,4Bits,定义广播的类型
ADV_IND (0000):可连接的非定向广播,请求与任何中心设备建立连接。
ADV_DIRECT_IND (0001):可连接的定向广播,请求与特定设备建立连接。
ADV_NONCONN_IND (0010):不可连接的广播,仅用于广播数据(如Beacon)。
ADV_SCAN_IND (0110):可扫描的非定向广播,允许设备请求更多信息(Scan Response)
·Length,6 bits,指示Payload部分的长度,范围为6到37字节。
·其他,包含TxAdd/RxAdd(地址类型)、RFU(保留未来使用)等。
⭐ 有效载荷 (Payload),0 ~ 37字节
内容取决于PDU Type。对于最常用的ADV_IND,其Payload通常包含两部分:
· AdvA (6字节):广播设备的蓝牙MAC地址。
· AdvData (0-31字节):广播数据本身。这部分数据由多个 AD Structure 组成,每个AD Structure的结构为:
· Length (1字节):该AD Structure的总长度。
· AD Type (1字节):数据类型,如设备名称、厂商自定义数据、UUID等。
· AD Data (0-29字节):实际的数据内容。
2、数据包

⭐ 头部(Head),2字节,用于管理连接和数据流控制
·LLID ,2Bits,逻辑链路标识符,用于区分载荷类型。
01 - 表示数据PDU的延续片段或空PDU
10 - 表示L2CAP消息的起始或完整消息
11 - 表示LL控制PDU
·NESN,1Bit, 下一个期望序列号,用于对来自对端设备的最后一个数据包进行确认(ACK)或请求重传(NACK)。
·SN,1Bit, 序列号,由发送方使用,用于标识自己发出的数据包,与NESN配合实现可靠传输。
·MD,1Bit, 更多数据标志,置1表示发送方还有更多数据待发,用于控制连接事件内的数据流。
·CP,1Bit, CTEInfo Present,指示头部之后是否存在CTEInfo字段(用于测向的恒定音调扩展)。这是蓝牙5.1引入测向功能后新增的位。
·RFU,2Bits(有CP场合)或3Bits(无CP场合,与CP合并),保留供未来使用,在4.0/4.1规范中,这些位必须置0。
·Length,6 bits(无CP场合,与CP合并)或8Bits(有CP场合),指示Payload部分的长度,字节单位。
⭐ 有效载荷 (Payload)
· L2CAP Header (4字节):L2CAP层的头部。
· Data (0-247字节):实际的应用数据。
· MIC (4字节, 可选):消息完整性检查码。仅在连接被加密时存在,用于验证数据来源的真实性和完整性。
广播包的PDU专注于设备发现和连接建立,载荷长度和格式相对固定;而数据包的PDU则专注于连接后的可靠数据传输
我要赚赏金
