• Hi,
    today I wanted to update my firmware to the v2.25 using the App Loader, since this was stated to be the recommended way. Prior to this (my last update was v2.20) I updated using the nrf connect app, which worked fine.

    1. I was updating it from my iPhone using the WebBLE app.
    2. I wasn't wearing the watch, it was next to my phone on the table
    3. I updated the zip file before, then selected it in the app loader and started upload. The frmware was uploading and I was watching progress.

    Then (and I know this sounds ridiculous) my wife yelled that there was an emergency with the cat. I got to her and the cat (which is now fine), but I got back about 10 minutes later. My screen was locked and when I unlocked, progress 'hang' on about 80%. I watched it for minutes going by but there was no progress anymore. Also the watch hang at this percentage and didn't see any progress.

    Since nothing was happening I had rebooted the watch by holding the button, but then I received a BANKO invalid. I am afraid that when the iPhone locked, it shut down the update process..

    I also did try update new firmware, also the v2.24 using the DFU Update app also, and NRF Connect app, but the watch keeps showing a CRC Mismatch, Not Flashing message.. And the apps fail.

    The watch keeps rebooting itself. I also cannot get into the recovery menu. The tips I got from the https://forum.espruino.com/conversations/401636/ thread, but my issue seems to be different.

    Rebooting it manually also doesnt seem to work. I can get into the DfuTarg mode, but updating always fail :-(

    Is there anything else I can try, or am I bricked now?


    1 Attachment

    • IMG_2518.JPG
  • Hi,
    I don't think your watch is broken. Here's a link to another post concerning Bangle.js 1.

    If I where you I'd try uploading the current latest stable firmware version. (Which is this one at the moment.)


    Edit: Sorry, I should probably have read your entire post before posting something that's of no help.

  • no problem @franz_banglejs, thanks for taking the time to checkout the question anyway :-)

  • In the mean time I have also tried to use https://thegecko.github.io/web-bluetooth-dfu/ to upload the new firmware, as well as a few older versions. After a few seconds the Bangle's screen states

    CONNECT
    STARTED
    ERROR

    and then it stops transmitting, while it hasn't even uploaded 10% of the firmware.

    Also I noticed now that when I used NRF Connect app, when I click Start (to transmit), the Bangle reboots.. and it is showing the screen from my orginal post again. The app nRF Connect errors with "3072 bytes were sent while 0 bytes were reported as received".

  • The CRC mismatch should be harmless and should be unrelated to BLE DFU issues. It finds bad/incomplete update file in storage and skips it because CRC does not match (as it is incomplete). The message would go away if you would remove the bad file but you can't now and it doesn't matter.

    If you can get the watch to DFU mode and see DFUTarg device in nrfConnect then I hope nothing is lost and you should just retry possibly with different phones and also make sure you have the right zip file for the device. Can you possibly try Android phone too?

    BANK0 invalid is strange to get when updating from file which actually never happened due to bad CRC. Most probably you got that one later when BLE DFU via nrfConnect failed in the middle.

    BANK0 invalid means there is no main Espruino firware there so you can't run recovery which is written in javascript and implemented in main firmware. You only have bootloader now that can only do update over BLE in this state.

  • Hi @fanoush thank you for answering me on such short notice. I am glad to have your explanation so I have a bit of a better understanding. I don't have an Android phone available right now, but I do however have a Linux device so I could maybe connect the WebIDE. I don't know how to do this, since Bluetooth isn't available now. Would this work with the charger/USB-cable? I could not really find this in detail.

    Also, if you might know any procedures that get me to lose things but still could reset it to upload new firmwire, no worries. I have a list of my installed software and there isn't much data on it that I would like to preserve, maybe a GPS route or so. I do not care if I lose data compared to restoring the watch :-D

    Thank you so much for taking the taking to view my thread and answering me!

  • Also good to know, I also tried updating with the WebIDE (with settings -> Flasher). I did not know this was possible, @Gordon keeps amazing me with this active development!

    Anyway, this also results in the ERROR on screen and a reboot.
    In the console I saw this error: maybe this will help

    [success] Initialising...
    index.js:96721 >>> Initialising...
    index.js:96721 >>> Initialising...
    index.js:96721 connected to gatt server
    index.js:96721 found DFU service
    index.js:96721 found 2 characteristic(s)
    index.js:96721 [success] Updating application: espruino_2v10.219_banglejs2_app.bin...
    index.js:96721 >>> Updating application: espruino_2v10.219_banglejs2_app.bin...
    index.js:96721 >>> Updating application: espruino_2v10.219_banglejs2_app.bin...
    index.js:96721 connected to gatt server
    index.js:96721 found DFU service
    index.js:96721 found 2 characteristic(s)
    index.js:96721 found packet characteristic
    index.js:96721 found control characteristic
    index.js:96721 enabled control notifications
    index.js:96721 transferring init
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 init packet already available, skipping transfer
    index.js:96721 transferring firmware
    index.js:96721 >>> Uploading...
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 1320 bytes
    index.js:96721 notify: Error: The state of the DFU process does not allow this operation
    index.js:96721 DFU update failed, but delay=0. Trying again with delay=10...
    index.js:96721 connected to gatt server
    index.js:96721 found DFU service
    index.js:96721 found 2 characteristic(s)
    index.js:96721 found packet characteristic
    index.js:96721 found control characteristic
    index.js:96721 enabled control notifications
    index.js:96721 transferring init
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 init packet already available, skipping transfer
    index.js:96721 transferring firmware
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 4096 bytes
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 8192 bytes
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 12288 bytes
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 16384 bytes
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 20480 bytes
    index.js:96721 crc32 not found, skipping CRC check
    index.js:96721 written 24576 bytes
    index.js:103890  Uncaught (in promise) TypeError: Cannot read properties of null (reading 'writeValue')
        at v.transferData (index.js:103890:8163)
        at index.js:103890:8285
    

    The line that interest me is "index.js:96721 notify: Error: The state of the DFU process does not allow this operation", somehow it's clear for the IDE that there is something wrong. Maybe this will help.

  • Sorry, can't help with that but I think if you got someone with Android phone and install nrfConnect then it could work better from there. Not sure what settings you have on iPhone in nrfConnect but if it fails in the middle of DFU upload then it may help to fiddle with DFU options -> Packet receipt notification procedure - either turn it off if it is on or on if it was off and increase or decrease number of packets. Here I found similar issue describing it for iPhone https://github.com/adafruit/Adafruit_nRF52_Bootloader/pull/293#issuecomment-1555965208

  • Hi @fanoush I will def try to get someone to lend the Android phone and also if I can tweak the nrfConnect setting.
    I quite new develop from last night (which I didnt post yet, sorry!), when I:

    1. Hold the BTN1 for quite long, so I see Watchdog
    2. Then release it for DFU
    3. It seems to 'reset' something so my new transfer attempts with the IDE don't fail immediatly
    4. I tried uploading several firmware versions which SEEM to upload, but at the end it still whips out ERROR on the screen, it reboots and I'm stuck at what I did post before :-(

    So I think the incorrect file you pointed out may still be there and that could be the problem.. I don't know for sure. When I get someone with Android I'll let you know. I will now have to recharge the watch as it can only reboot itself untill the battery is drained

  • I tried uploading several firmware versions which SEEM to upload, but at the end it still whips out ERROR on the screen, it reboots and I'm stuck at what I did post before :-(

    A photo or short video of how it ends and reboots would be interesting to see, it is not clear what exactly fails and what is the result. Do you still see the BANK0 INVALID message?

  • Hi - sorry you're having troubles. It does look like the firmware update went wrong (we've updated the bootloader now but I guess you might be using the old one).

    The CRC MISMATCH ... NOT FLASHING thing seems promising - it found the firmware that the App Loader half-wrote and then decided it wasn't complete so wouldn't have written it and should have continued as normal.

    Please can you try the instructions for recovery at: https://www.espruino.com/Firmware+Update#android-ios-app

    You should be able to install this app on your iPhone and flash direct using that: https://apps.apple.com/gb/app/nrf-device-firmware-update/id1624454660

    Just make sure that you're flashing the Bangle.js 2 firmware and not the Bangle.js 1 firmware!

    It's possible that going through Web Bluetooth for the IDE, https://thegecko.github.io/web-bluetooth-dfu, etc was making the upload unreliable somehow, so having a native app may really help

  • Thank you both for answering.

    @fanoush Yes I will record a video with some examples and try to get pictures of the screens.

    @Gordon Yes, it's using the v2.12 bootloader (DFV 2V12). The docs said it might be okay to have an old one.

    Do you mean the recovery from https://www.espruino.com/Bangle.js2#recovery-menu btw? I tried this, but that does not work (on my watch atm).

    Using the DFU Firmware Updater app you linked doesn't work either. When I press Upload, the watch shows CONNECT, then a new line with STARTED and then reboots.. I am very sure I got the Bangle.js 2 downloads

    I will create a video, but I have to wait until I can get a second phone to film the process, you can see what happens on my phone and the watch at the same time.

  • I had to trim it a bit but I hope it's clear to see what the watch does when i try to upgrade it


    1 Attachment

  • It is clear that you are doing it in the right way and watch reboots when it should not. Maybe this is 'normal' behaviour when the dfu app disconnects (??), maybe @Gordon knows? So I am not sure if watch reboots first while the phone is still trying to update it or the phone gets that red error and disconnects and then the watch reboots because DFU is finished.

    Random ideas

    • not sure what was default regarding the packet receipt notifications settings in the DFU app but if it was on can you try to turn it off?
    • still try with Android if possible
    • maybe if nothing helps draining battery so the watch gets powered off completely could help



  • @fanoush the watch reboots when I hit update. If I wait, the watch waits (until the DFU timeout).
    For the packet receipt notifications, the default was 23, I put it to 6 because of the github thread you mentioned earlier. It doesn't seem to make a big difference unfortunately.
    The battery has drained a few times since this error occures (and me trying different things over the days). It can only reboot now until the battery is drained.
    I will try to test it with android still, but I have to check with a few people as our own phones are iPhone and I don't have a workphone (only a very old Nokia Windows one haha).

  • the watch reboots when I hit update. If I wait, the watch waits (until the DFU timeout)

    yes but when you hit update the watch prints CONNECTED and iphone gets error about sending some number of bytes and getting 0 and watch reboots. It is not clear to me if the iphone disconnects due to that error and then watch reboots or if watch reboots first and then iphone gets the error with 0 bytes because of the reboot. first means iphone gets confused and disconnects from the watch and then watch has nothing to do and reboots to possibly try new update (which makes sense), second means that the watch reboots in the middle of update when it should not

    For the packet receipt notifications, the default was 23

    so can/did you try turning it off completely by the toggle above the number?

    the battery has drained a few times since this

    oh, OK, too bad

  • Thanks for the video! And good to know it's the DFU 2v12 bootloader

    I'd actually forgotten about this, but what happened was after we released Bangle.js, Apple updated iOS in such a way that it then refuses to give the Bangle.js DFU the Bluetooth connection speed it requests, and then the DFU thinks something is wrong and disconnects almost immediately, and I think that's what you're seeing here. I updated DFU so that it doesn't do this, but I'm pretty sure DFU 2v12 has the problem.

    Normally it wouldn't be an issue because you'd upload with the app loader and you wouldn't need to use the low level bootloader but we've been unlucky here.

    So I'm afraid that was bad advice from me to use the iOS app - really I think the best way forward is:

    • Find someone with an Android device that you can do the DFU update on
    • Try to do a firmware update from the Web IDE (or https://thegecko.github.io/web-bluetooth-dfu/) on a PC (but not via your iPhone) - maybe give it a few attempts just in case. The Web IDE actually uses that library you linked internally anyway so there will likely be no difference between the two

    edit: I do remember people said they had success just trying DFU over and over again using the iPhone, but it only manages to update a small amount at a time before the disconnects, so doing that will take a very long time

  • Thanks @Gordon, I also tried it using the flasher mode on the WebIDE. Sometimes the bar loads all the way until the end, but it still results in an error. I have a neighbour with an Android Phone. I think that might be my best option. I will ask him if I can come by this week to check this. When I have tried this I will let you know in this topic.

  • I do remember people said they had success just trying DFU over and over again using the iPhone, but it only manages to update a small amount at a time before the disconnects, so doing that will take a very long time

    Yeah, I remember I had this problem as well, and with 11 Bangles it was a pain in the... but it worked out in the end in my case.

  • Wow, thanks all for your time and suggestions! It turns out patience is a virtue. I tried many many times by uploading the 2v25 over and over again using https://thegecko.github.io/web-bluetooth-dfu/ and after another automatic reboot it suddenly works! It's even got my installed apps..

    It's after midnight here, so I will sort out how to update my DFU 2v12 bootloader to newer version tomorrow. I am very glad it isn't bricked :-) Thanks again @fanoush @Gordon and @ThomasVikström!

  • Phew, glad it's sorted! Sorry this ended up being such a pain!

    Hopefully the new bootloader will ensure this kind of thing doesn't happen again.

  • I hope the cat appreciates how much trouble they have been.

  • I just updated the bootloader too :-)
    Not your fault @Gordon
    I am glad for all the people who are willing to give me solutions

    And for the cat.. she is missing a few hairs but is her purry self again @Ivor haha :-D

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

BANKO Invalid and cannot upload any (new) firmwares due to CRC mismatch

Posted by Avatar for jeroenpeters1986 @jeroenpeters1986

Actions