This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Dual Bank BLE DFU hanging on "uploading firmware..."

I am implementing dual bank DFU on the PCA10001 board using the latest SDK (7.2.0) and S110(7.1.0). I am able to enter bootloader from my app as detailed here:

developer.nordicsemi.com/.../a00066.html

The board is advertising dfuTarg, and I can connect and discover services through MCP. I then use the DFU button in MCP and choose the hex file for the application code I want to load onto the board (I have yet to try updating the SD or bootloader OTA). I small window pops up with a loading bar, it says connecting, then setting up transfer and then gets to uploading firmware. Then it hangs. When I try to upload my current application (82KB), the loading bar never exceeds 0%. However, when I try to upload an old hex version of the app that's about 2 months old and just happened to have it on my drive (42KB) it hangs at 1%. I feel like this probably doesn't mean anything but I figured I'd mention it just in case.

Some more relevant information. Because I am using PCA10001, and not PCA10028, I had to change some of the example bootloader code. I made the changes outlined in this devZone post:

devzone.nordicsemi.com/.../

Does anyone have any idea what might be causing this or a debugging strategy for figuring it out. I have a basic understanding of how the bootloader code works, but I haven't dug too much into how the actual file transfer works (which seems like where the issue is occurring).

Thanks, Seth

EDIT

So I'm now attempting to do this using the NRF Toolbox from my Android phone. I realized that I had not been sending the init *.dat file. I've created this file using the instructions in this document:

devzone.nordicsemi.com/.../5be6a1cb2d806bb3e1c982be6f2a131a

This is the .dat file I am sending:

application.dat

I am not zipping the two together, but I don't think that would make any difference. When I select the hex file, and then the .dat file the app briefly (3-4 seconds) brings up a window showing an upload speed graph (although there is nothing on it) and then goes back to the list of discovered services without uploading the new firmware.

EDIT #2

Some information I forgot to include in the first edit. When the update fails using the NRF toolbox, the device goes back to my original application code successfully. I've also tried using a Nordic example (I used ble_app_hrs) as the code being uploaded, but I experienced the same problem.

Related