BLE LL PDU头部解码疑问:PDU类型与长度解析逻辑困惑
BLE LL PDU头部解析误区修正
你搞错了PDU类型的提取逻辑
不是把整个字节的二进制从右往左读,而是取第一个字节的低4位(bit0~bit3)作为短PDU类型:
- 拿你说的0x46举例,二进制是
0100 0110,低4位是0110(十六进制0x6),对应LL_CONNECTION_UPDATE_IND类型——这是位域提取,不是字节倒序。
你的解码案例的正确拆解
你给出的LL数据:0f 09 09 fd fd 81 07 00 00 00 00
- 第一个字节
0x0f:低4位是0xf(1111),这是BLE的长PDU类型标记——当短OpCode为0xf时,实际PDU类型是第二个字节的完整8位值。 - 第二个字节
0x09:这才是真正的OpCode,对应LL_VERSION_IND(版本指示)PDU,是合法的标准类型。 - 负载长度:第三个字节
0x09直接转十进制9,对应后面的9字节负载数据,完全匹配。
关键知识点梳理
BLE LL PDU头部分两种格式:
- 短OpCode(常规PDU):1字节头部,低4位是OpCode,高4位是MD/SN/NESN/LLID等控制位。
- 长OpCode(扩展PDU):2字节头部,第一个字节低4位固定为0xf,第二个字节是完整的8位OpCode。
- 负载长度是无符号整数字段,直接按十六进制转十进制即可,不需要位域拆分。
内容的提问来源于stack exchange,提问作者Ludwig
相关产品推荐
相关产品推荐

