Device never returns from MetaBoot after firmware update

This evening I attempted to update one of my devices (a Metawear C) from an old firmware version (I'm not sure, but I think maybe 1.0.4?) using the Android app. I hit 'Update Firmware', it seems to upload ok, and it comes back as MetaBoot, but it never recovers from there.

The message if you connect to a MetaBoot device suggests waiting a minute (I've tried waited more than an hour, repeatedly) and hitting 'Update Firmware' again to "manually return the board to normal" (which just seems to reupload the firmware, and then end up in the same state).

How can I get my device working again?

Comments

  • Can you try the firmware update with an iOS device?  Also which version of the Android app are you using?
  • Hi @Eric thanks for your help.

    I'm using the latest release from the play store - I think that means 3.5.1. Is there a way to check inside the app?

    I don't have an iOS device available, so I can't try an update with that.
  • You can check from the app settings menu.  I think the exact menu location differs among Android releases so you'll have to look it up for your specific android OS.

    Hrm, the issue you have could be related to the DFU library the MetaWear app is using.  The app currently on the Google Play store uses an older version of that library.  The app source code has been updated to use the latest version of said DFU library which may resolve your issue.  You can get the app source code from our GitHub repo:

  • @Eric I've now tried this, but the current app code doesn't work for me. It can't connect to this device.

    I've got two Metawear C.

    The one I haven't upgraded is on firmware 1.0.4, and the app can see this (as 'MetaWear') and can connect and read data from this device no problem.

    The one I have upgraded the firmware on appears as 'MetaBoot' when I scan, but I can't connect to it. The app spins and spins saying 'Connecting', but never succeeds. `Adb logcat` gives me:

    04-13 17:11:21.260 32700 24628 D BluetoothGatt: connect() - device: EB:BE:DD:A0:F7:03, auto: false
    04-13 17:11:21.260 32700 24628 D BluetoothGatt: registerApp()
    04-13 17:11:21.261 32700 24628 D BluetoothGatt: registerApp() - UUID=bd524be6-c405-4752-84b3-a7e44020e32b
    04-13 17:11:21.263  5842 10422 D BtGatt.GattService: registerClient() - UUID=bd524be6-c405-4752-84b3-a7e44020e32b
    04-13 17:11:21.265  5842  5905 D BtGatt.GattService: onClientRegistered() - UUID=bd524be6-c405-4752-84b3-a7e44020e32b, clientIf=7
    04-13 17:11:21.266 32700 32714 D BluetoothGatt: onClientRegistered() - status=0 clientIf=7
    04-13 17:11:21.266  5842  5869 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@3230717
    04-13 17:11:21.267  5842  5869 I A2dpService: audio isMusicActive is false
    04-13 17:11:21.270  5842  5869 D BtGatt.GattService: clientConnect() - address=EB:BE:DD:A0:F7:03, isDirect=true
    04-13 17:11:21.271  5842  5905 D bt_btif_config: btif_get_address_type: Device [eb:be:dd:a0:f7:03] address type 1
    04-13 17:11:21.271  5842  5905 D bt_btif_config: btif_get_device_type: Device [eb:be:dd:a0:f7:03] type 2
    04-13 17:11:21.272  5842  6017 E bt_btif : bta_gattc_cache_load: can't open GATT cache file /data/misc/bluetooth/gatt_cache_ebbedda0f703 for reading, error: No such file or directory
    04-13 17:11:21.273  5842  5905 D BtGatt.GattService: onConnected() - clientIf=7, connId=7, address=EB:BE:DD:A0:F7:03
    04-13 17:11:21.274 32700  1507 D BluetoothGatt: onClientConnectionState() - status=0 clientIf=7 device=EB:BE:DD:A0:F7:03
    04-13 17:11:21.274 32700  1507 D BluetoothGatt: discoverServices() - device: EB:BE:DD:A0:F7:03
    04-13 17:11:21.277  5842 10450 D BtGatt.GattService: discoverServices() - address=EB:BE:DD:A0:F7:03, connId=7
    04-13 17:11:21.439  5842  6017 E bt_att  : gatt_process_read_by_type_rsp INCL_SRVC failed with invalid data value_len=5
    04-13 17:11:21.440  5842  5905 D BtGatt.GattService: onSearchCompleted() - connId=7, status=0
    04-13 17:11:21.442  5842  5905 D bt_bta_gattc: bta_gattc_get_gatt_db
    04-13 17:11:21.443  5842  5905 D BtGatt.GattService: onGetGattDb() - address=EB:BE:DD:A0:F7:03
    04-13 17:11:21.444  5842  5905 D BtGatt.GattService: got service with UUID=00001800-0000-1000-8000-00805f9b34fb
    04-13 17:11:21.447 32700  1513 D BluetoothGatt: onSearchComplete() = Device=EB:BE:DD:A0:F7:03 Status=0
    04-13 17:11:21.447 32700  1513 D BluetoothGatt: refresh() - device: EB:BE:DD:A0:F7:03
    04-13 17:11:21.452  5842 10451 D BtGatt.GattService: refreshDevice() - address=EB:BE:DD:A0:F7:03
    04-13 17:11:21.453 32700  1513 D BluetoothGatt: close()
    04-13 17:11:21.454 32700  1513 D BluetoothGatt: unregisterApp() - mClientIf=7
    04-13 17:11:21.460  5842  5868 D BtGatt.GattService: unregisterClient() - clientIf=7
    04-13 17:11:21.462  5842  5905 D BtGatt.GattService: onDisconnected() - clientIf=7, connId=7, address=EB:BE:DD:A0:F7:03
    04-13 17:11:21.462  5842  5905 E BtGatt.ContextMap: Context not found for ID 7

    It does this over and over again on a loop, and the app never connects. Any ideas?
  • I'd really like to get this fixed if possible. I'm doing a talk and a workshop at a major conference in a couple of weeks (https://www.codeeurope.pl/en/speakers/tim-perry) which I'll be opening with some Metawear demos, and I'm running a workshop where I'd like to let people play with a few of these. Right now though only one of them is working, and I'm worried if I accidentally upgrade the firmware on the other it'll break and I'll have to drop metawear from the talk entirely :-(.
  • Update the dependencies to use API v3.0.17 instead of v3.0.0.
  • @Eric Done, thanks. With that the app now connects correctly, and the first time I pressed 'Update firmware' it seemed to deploy it successfully. The device disappeared for a minute, but then still came back as MetaBoot again.

    From this point it still never comes out of MetaBoot though, despite waiting for quite a while. Now if I press 'Update firmware' the Firmware Update modal appears, disappears 2 seconds later, and gets replaced with 'Reconnecting...', and a notification appears with 'Upload failed' / 'DFU process failed'.

    What next?
  • edited April 2017
    Please contact MbientLab directly and link this thread.  We would likely need to get the board in our lab to look into the bootloader loop.

    This can take a while to be fully resolved so in the meantime, try using an iOS device to update the firmware as initially suggested.
This discussion has been closed.