蓝牙LE广告包格式与蓝牙规范不符

时间:2020-06-29 08:00:35

标签: bluetooth bluetooth-lowenergy

我正在尝试用我的覆盆子pi连接到蓝牙le体重秤。因为我无法连接到它,所以无论我使用python-bluepy还是gatttool,我都试图获取更多信息并使用sudo hcitool lescan --duplicates&和sudo hcidump --raw阅读广告包。我从bluetooth.com下载了4.0至5.1版本的蓝牙核心规范。但是我从hcidump获得的数据与蓝牙规范不完全匹配。我尝试了其他设备,例如iPhone 7,Sony WH-1000MX3和Oculus Quest。它们都发送LE数据包,但全部以(我认为)非标准数据包格式发送。 这是我从秤上收到的数据包(mac a0:91:53:e2:58:db): 04 3E 2B 02 01 03 00 DB 58 E2 53 91 A0 1F 02 01 04 03 03 B0 FF 0F FF AC A0 DB 58 E2 53 91 A0 A2 AD A0 A3 06 B8 07 09 41

我不了解的第一件事是序言04。我所有的设备都使用此序号。但是规范说广告包的前导应该是0xAA。甚至数据包也应具有0xAA或0x55。但是永远不会是0x04。接下来是访问地址。广告应为0x8E89BED6,但我的设备中没有一个使用此广告。我也不理解PDU标头。长度为0。有效负载几乎符合规范,但是硬件地址(1F)之后有一个字节,该字节不应存在。如我所说,我所有的设备都使用这种格式(“错误”的前同步码,访问地址,PDU标头,有效载荷中的附加字节)。某些设备只有一个字节的CRC。所以我想知道我是否完全理解错误。谁能解释这些是哪种包装,或者为什么它们不符合规格?

BLE Advertisment Package

1 个答案:

答案 0 :(得分:1)

在hcitool中看到的是HCI编码的数据包,而不是原始的链路层数据包。

0x04是HCI事件数据包的hci数据包指示符。 剩下的就是LE Advertising Report活动。

地址前面两个位置的0x03表示ADV_NONCONN_IND,这表示设备当前不接受连接。也许您的体重秤上有一个按钮,或者您需要先按一下才能使其可连接。