Hi there,
We currently have ~500 nRF52832 devices running nRF5 SDK (bootloader, S132, application). These devices are updated using the nRF5 SDK Secure Bootloader UART DFU.
I have rewritten the application firmware using NCS (nRF Connect SDK) and I would like to update these devices to NCS using the nRF5 SDK Secure Bootloader UART DFU.
I followed some instructions included in a similar question, however I have had issues:
------------------------------------------------------------------
I am testing with Nordic example projects as much as possible to help customer support replicate any issues.
I am flashing the PCA10040 (nRF52 DK) with the 'examples/dfu/secure_bootloader/pca10040_uart_debug' application included in the latest nRF_SDK_17.0.2. This application allows me to enter UART DFU bootloader. I can test writing the included test application 'examples/dfu/secure_dfu_test_images/uart/nrf52832/blinky_mbr.zip'. This process works fine as expected (nRF5 SDK -> nRF5 SDK).
To begin testing from nRF5 SDK -> NCS:
1. I again flash the same secure_bootloader DFU example application to enter DFU mode.
2. I then follow the instructions linked here to flash the Zephyr blinky.zip application (I also add the --key-file parameter to sign it).
west build -b nrf52dk_nrf52832 zephyr/samples/basic/blinky
nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application build/zephyr/zephyr.hex --application-version 1 blinky.zip --key-file private.key
nrfutil dfu serial -pkg blinky.zip -p /dev/ttyACM0
However, after the DFU seems to complete, the application does not boot (LEDs are not blinking). You can find the device DFU logs here.
I can step through the nRF5 bootloader and see that a hardfault is triggered when the bootloader eventually attempts to jump to the new application.
These are the local variable values in nrf_bootloader_app_start_final.c: jump_to_addr()
Name | Value | Location |
current_isr_num | 0000 0000 | 2000 FF84 |
new_msp | 1136 1B36 | 2000 FF80 |
reset_handler | DB00 42B5 | 2000 FF7C |
vector_table_address | 0000 1000 | 2000 FF64 |
I suspect it is caused by the reset_handler value? This does not seem to be a valid address.
Some questions/points:
- Flashing the Zephyr blinky example directly works fine as you would expect.
- I also added the small change to the nRF5 bootloader that checks the SD magic number, as suggested by mtsunstrum.
- As there is no private.key provided with the secure_bootloader DFU example applications I use my own dfu_public_key.c and private.key files to sign the bootloader and NCS Blinky application.
- The instructions in the link provided are only included in the nRF52840 Dongle board page, they are not included in the nRF52 DK board page. Are these instructions not compatible with nRF52 DK? I see the nRF52840 comes with the open bootloader installed, when I am using secure bootloader?