蓝牙 LE 广告数据包格式与蓝牙规范不匹配
Bluetooth LE Advertisment Packet format doesn't match Bluetooth specifications
我正在尝试用我的 raspberry pi 连接到蓝牙文件 body 体重秤。因为我无法连接到它,无论是使用 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 数据包,但都是(在我看来)non-standard 数据包格式。
这是我从秤 (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 header。长度为 0。有效负载几乎符合规范,但在硬件地址 (1F) 后有一个不应该存在的字节。正如我所说,我所有的设备都使用这种格式(“错误的”前导码、访问地址、PDU header、有效载荷中的附加字节)。而有些设备只有一个字节的 CRC。所以我想知道我是否理解完全错误的东西。谁能解释一下这些是什么类型的包,或者为什么它们不符合规范?
BLE Advertisment Package
你在 hcitool 中看到的是 HCI 编码数据包,而不是原始的 Link 层数据包。
0x04 是 HCI 事件数据包的 hci 数据包指示符。
剩下的是 LE 广告报告活动。
地址前两位0x03表示ADV_NONCONN_IND,表示设备当前不接受连接。也许您的体重秤有一个按钮或您需要先按下的东西才能连接。
我正在尝试用我的 raspberry pi 连接到蓝牙文件 body 体重秤。因为我无法连接到它,无论是使用 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 数据包,但都是(在我看来)non-standard 数据包格式。 这是我从秤 (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 header。长度为 0。有效负载几乎符合规范,但在硬件地址 (1F) 后有一个不应该存在的字节。正如我所说,我所有的设备都使用这种格式(“错误的”前导码、访问地址、PDU header、有效载荷中的附加字节)。而有些设备只有一个字节的 CRC。所以我想知道我是否理解完全错误的东西。谁能解释一下这些是什么类型的包,或者为什么它们不符合规范?
BLE Advertisment Package
你在 hcitool 中看到的是 HCI 编码数据包,而不是原始的 Link 层数据包。
0x04 是 HCI 事件数据包的 hci 数据包指示符。 剩下的是 LE 广告报告活动。
地址前两位0x03表示ADV_NONCONN_IND,表示设备当前不接受连接。也许您的体重秤有一个按钮或您需要先按下的东西才能连接。