我正在使用Nordic Semiconductor的Android-DFU-Library来更新蓝牙低功耗(BLE)设备的固件。我已经在github上寻求帮助,但我认为更多的人可以在这里看到问题(可以帮助您,最终可以找到并回答)。
所以,这是我对github issue的描述:
最近两天我一直在为此苦苦挣扎,但找不到任何线索。我希望这里有人能给我一个提示,我将非常感谢。
我有4个设备:
连接蓝牙设备进行更新后,我发送一些特定的命令进入DFU模式,然后在几秒钟后断开连接。一切顺利,直到这一步。
然后,我使用Android-DFU-Library启动固件更新过程。它可以与android 5.1三星设备一起使用,但无法将[status 133]与其他3个设备连接。知道发生了什么吗?
非常感谢您的帮助。
当我在nRF Connect中手动进行操作时,它可以工作。甚至当我先使用我的应用启用DFU模式,然后在稍作扫描以查找设备后立即使用nRF Connect连接到该设备时,它就可以工作。
我在应用程序中执行此操作的方式是:启用DFU模式后,我扫描10秒钟以查找新的mac地址,并确保一次只有一台设备处于DFU模式。然后,我使用该库进行实际的固件更新。
抛出status = 133错误大约需要30秒钟,因此看起来是因为超时。
07-26 10:49:47.525 ... D/BluetoothGatt: connect() - device: ... , auto: false
07-26 10:50:17.543 ... D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=5...
更多日志:
07-26 10:49:46.590 ... I/DfuBaseService: DFU service created. Version: 1.6.1
07-26 10:49:47.524 ... I/DfuBaseService: Connecting to the device...
07-26 10:50:17.543 ... E/DfuBaseService: Connection state change error: 133 newState: 0
07-26 10:50:17.544 ... E/DfuBaseService: Device not reachable. Check if the device with address [MAC] is in range, is advertising and is connectable
07-26 10:50:17.549 ... I/DfuBaseService: Refreshing result: true
07-26 10:50:17.549 ... I/DfuBaseService: Cleaning up...
07-26 10:50:18.186 ... I/DfuBaseService: DFU service destroyed
答案 0 :(得分:0)
多亏了philips77,我终于设法使它开始工作。
我在BluetoothLeScanner
中使用ScanSettings
和延迟批处理报告。
ScanSettings scanSettings = new ScanSettings.Builder()
...
.setReportDelay(delay)
.build();
因此,通过消除延迟的报告,我能够以DFU模式成功连接到设备。
到目前为止,我还不完全了解根本原因,但是您可以在github issue中找到有关此问题的更多信息。