2

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

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


最近两天我一直在努力解决这个问题,我找不到任何线索。我希望这里有人能给我一个提示,我将非常感激。

我有 4 台设备:

  • android 6.0下的无名平板电脑
  • android 5.1下的三星galaxy tab 4
  • android 7.1下的zuk z2 pro
  • 安卓7.0下的小米5s

连接蓝牙设备进行更新后,我发送了一些特定的命令以进入 DFU 模式,然后在几秒钟后断开连接。一切正常到这一步。

然后,我使用 Android-DFU-Library 启动固件更新过程。它适用于 android 5.1 三星设备,但无法将 [status 133] 与其他 3 台设备连接。知道发生了什么吗?

非常感谢您的帮助。


当我在 nRF Connect 中手动执行此操作时,它可以工作。当我使用我的应用程序首先启用 DFU 模式时,它甚至可以正常工作,然后通过 nRF Connect 在稍作扫描后立即连接到设备以找到设备。

我在我的应用程序中执行此操作的方式是:启用 DFU 模式后,我扫描 10 秒以找到新的 mac 地址并确保一次只有一个设备处于 DFU 模式。然后,我使用这个库来进行实际的固件更新。

抛出 status=133 错误大约需要 30s,所以看起来是因为超时。

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
4

1 回答 1

1

多亏了philips77,我终于设法让它工作了。

我正在使用BluetoothLeScanner延迟的批处理报告,通过ScanSettings.

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

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

到目前为止,我还没有完全理解根本原因,但您可以在github issue中找到更多相关信息。

于 2018-10-26T12:38:43.393 回答