DFU模式下的蓝牙:某些设备的连接总是失败

时间:2018-08-06 08:58:35

标签: android bluetooth bluetooth-lowenergy dfu

我正在使用Nordic Semiconductor的Android-DFU-Library来更新蓝牙低功耗(BLE)设备的固件。我已经在github上寻求帮助,但我认为更多的人可以在这里看到问题(可以帮助您,最终可以找到并回答)。

所以,这是我对github issue的描述:


最近两天我一直在为此苦苦挣扎,但找不到任何线索。我希望这里有人能给我一个提示,我将非常感谢。

我有4个设备:

  • Android 6.0下的无名平板电脑
  • android 5.1下的三星银河标签4
  • Android 7.1下的Zuk z2 pro
  • android 7.0下的小米mi5s

连接蓝牙设备进行更新后,我发送一些特定的命令进入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

1 个答案:

答案 0 :(得分:0)

多亏了philips77,我终于设法使它开始工作。

我在BluetoothLeScanner中使用ScanSettings和延迟批处理报告。

   ScanSettings scanSettings = new ScanSettings.Builder()
       ...
       .setReportDelay(delay)
       .build();

因此,通过消除延迟的报告,我能够以DFU模式成功连接到设备。

到目前为止,我还不完全了解根本原因,但是您可以在github issue中找到有关此问题的更多信息。