I'm building a custom system based on the NRF52832 and S132 SoftDevice with SDK 14.2.0.
Our secure bootloader (bonded) is based on examples/dfu/bootloader_secure_dfu. It's button handling is removed (no buttons) and more debug is added.
During a DFU of an application only package the data is successfully transferred to bank 1. The DFU controller requests a CRC at some point and I can see it's value on RTT output of response_crc_cmd_send().
Then after reset, the valid image is copied to bank 0 in nrf_dfu_app_continue().
After the copy is complete the CRC is calculated and compared with a stored value in dfu_settings. The calculated CRC matches the one send to the controller before boot.
The comparison fails and this leaves bank 0 invalid.
We don't have any input, thus no way to force the bootloader into DFU again. Our device is bricked.
I've been trying to debug this but lack understanding. For instance: what is the source of the CRC value in the dfu_settings?
I'm generating the DFU image using nrfutil version 3.5.0 with the following make target:
(OUTPUT_DIRECTORY)/$(PROJECT_NAME)-$(GIT_VERSION).zip: $(OUTPUT_DIRECTORY)/$(PROJECT_NAME).hex
nrfutil pkg generate --debug-mode \
--application $(OUTPUT_DIRECTORY)/$(PROJECT_NAME).hex \
--application-version-string $(GIT_VERSION_CLEAN) \
--hw-version 30000 \
--sd-req 0x9D \
--key-file "$(KEYFILE)" \