Hi,
Could you please have a look at the dfu-util output and give me a hint on why what I'm doing is not working. Here is a description of the problem:
I am using an NRF52840DK.
1. I erase the chip to start clean:
nrfjprog --eraseall
2. I flash the MCUboot bootloader:
~/mcuboot/boot/zephyr$ west flash
The output from the console is OK as there is no image:
*** Booting MCUboot v2.1.0-43-g50f35144e4e4 *** *** Using Zephyr OS build v3.6.0-596-g9fa4cd8226ce *** I: Starting bootloader I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 I: Boot source: none W: Failed reading image headers; Image=0 E: Unable to find bootable image
3. I flash my first USB DFU enabled image:
~/zephyr/usb_dfu/build/zephyr$ nrfjprog --program build/zephyr/zephyr.signed.hex
After resetting, the console output is OK and the image is executed:
*** Booting MCUboot v2.1.0-43-g50f35144e4e4 *** *** Using Zephyr OS build v3.6.0-596-g9fa4cd8226ce *** I: Starting bootloader I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 I: Secondary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 I: Boot source: none I: Image index: 0, Swap type: none I: Bootloader chainload address offset: 0xc000 I: Jumping to the first image slot [00:00:00.000,213] <err> qspi_nor: JEDEC id [00 00 00] expect [c2 28 17] *** Booting Zephyr OS build v3.6.0-596-g9fa4cd8226ce *** [00:00:00.000,549] <inf> main: This device supports USB DFU class.
4. I check dfu-util:
~/zephyr/counter/build/zephyr# dfu-util -l dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2021 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to sourceforge.net/.../
Found Runtime: [2fe3:0005] ver=0306, devnum=117, cfg=1, intf=0, path="3-3.4.3", alt=0, name="UNKNOWN", serial="4327BC869F6C049C"
Notice there is only alt=0
5. I try to download the new image:
~/zephyr/counter/build/zephyr# dfu-util --download zephyr.signed.hex
The download fails but alt=1 appears:
dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2021 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to sourceforge.net/.../
dfu-util: Warning: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release Opening DFU capable USB device... Device ID 2fe3:0005 Device DFU version 0110 Claiming USB DFU (Run-Time) Interface... Setting Alternate Interface zero... Determining device status... DFU state(0) = appIDLE, status(0) = No error condition is present Device really in Run-Time Mode, send DFU detach request... Device will detach and reattach... dfu-util: More than one DFU capable USB device found! Try `--list' and specify the serial number or disconnect all but one device
6. I try to download the new image in the newly appeared slot:
~/zephyr/counter/build/zephyr# dfu-util --download zephyr.signed.hex --alt 1
This time dfu-util succeeds:
dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2021 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to sourceforge.net/.../
dfu-util: Warning: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release Opening DFU capable USB device... Device ID 2fe3:ffff Device DFU version 0110 Claiming USB DFU Interface... Setting Alternate Interface #1 ... Determining device status... DFU state(2) = dfuIDLE, status(0) = No error condition is present DFU mode device DFU version 0110 Device returned transfer size 128 Copying data from PC to DFU device Download [=========================] 100% 177796 bytes Download done. DFU state(2) = dfuIDLE, status(0) = No error condition is present Done!
But after I press reset, the board swaps but still boots the old image:
*** Booting MCUboot v2.1.0-43-g50f35144e4e4 *** *** Using Zephyr OS build v3.6.0-596-g9fa4cd8226ce *** I: Starting bootloader I: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3 I: Secondary image: magic=good, swap_type=0x2, copy_done=0x3, image_ok=0x3 I: Boot source: none I: Image index: 0, Swap type: test I: Bootloader chainload address offset: 0xc000 I: Jumping to the first image slot [00:00:00.000,213] <err> qspi_nor: JEDEC id [00 00 00] expect [c2 28 17] *** Booting Zephyr OS build v3.6.0-596-g9fa4cd8226ce *** [00:00:00.000,549] <inf> main: This device supports USB DFU class.
Best regards,
-- Alex