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

Buttonless DFU not flashing new firmware SDK 15.2.0

Hello,

We are trying to get DFU to work on our custom board running nrf52832. It has previously worked on the devkit. Our board does not have a crystal so we are using NRF_CLOCK_LF_SRC_RC both in the bootloader and application. Our bootloader is based on the example secure_bootloader_ble_s132_pca10040, the only changes we made are led/button behavior, public key and enabled rtt logging for debugging.

We are testing the DFU functionality using nrf connect for android.

The bootloader receives the signed zip but does not flash it. Below are some errors from the log (Flash write/erase failed (0x3))

<debug> nrf_dfu_flash: Flash write success: addr=0x0003DA7C, pending 1
<debug> nrf_dfu_ble: Freeing buffer 0x200068F8
<debug> nrf_dfu_req_handler: Whole firmware image received. Postvalidating.
<debug> nrf_dfu_validation: Hash verification. Firmware start address: 0x32000, size: 0xBB54
<debug> nrf_dfu_validation: Invalidating old application in bank 0.
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007F000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200074D0, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007F000, len=0x1B8 bytes, pending 0
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 1
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007E000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20007688, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007E000, len=0x1B8 bytes, pending 0
<debug> nrf_dfu_req_handler: All flash operations have completed. DFU completed.

What could be causing those errors? I've also attached a more full log.

Thanks

<info> app: Inside main
<debug> app: In nrf_bootloader_init
<debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
<debug> nrf_dfu_flash: Initializing nrf_fstorage<info> app: Inside main
<debug> app: In nrf_bootloader_init
<debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
<debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
<debug> nrf_dfu_settings: Settings OK
<debug> app: Enter nrf_bootloader_fw_activate
<info> app: No firmware to activate.
<debug> app: Enter nrf_dfu_app_is_valid
<debug> app: Return true. App was valid
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
<debug> app: Running nrf_bootloader_app_start with address: 0x00001000
<debug> app: Disabling interrupts. NVIC->ICER[0]: 0x0
<debug> app: running irq table set
<debug> app: After running irq table set
<info> app: Inside main
<debug> app: In nrf_bootloader_init
<debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
<debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
<debug> nrf_dfu_settings: Settings OK
<debug> app: Enter nrf_bootloader_fw_activate
<info> app: No firmware to activate.
<debug> app: Enter nrf_dfu_app_is_valid
<debug> app: Return true. App was valid
<debug> app: DFU mode requested via GPREGRET.
<info> nrf_bootloader_wdt: WDT is not enabled
<debug> app: in weak nrf_dfu_init_user
<debug> app: timer_stop (0x200057D4)
<debug> app: timer_activate (0x200057D4)
<info> app: Entering DFU mode.
<debug> app: Initializing transports (found: 1)
<debug> nrf_dfu_ble: Initializing BLE DFU transport
<debug> nrf_dfu_ble: Setting up vector table: 0x00072000
<debug> nrf_dfu_ble: Enabling SoftDevice.
<debug> nrf_dfu_ble: Configuring BLE stack.
<debug> nrf_dfu_ble: Enabling the BLE stack.
<debug> nrf_dfu_ble: No advertising name found
<debug> nrf_dfu_ble: Using default advertising name
<debug> nrf_dfu_ble: Advertising...
<debug> nrf_dfu_ble: BLE DFU transport initialized.
<debug> nrf_dfu_flash: Initializing nrf_fstorage_sd backend.
<debug> app: Enter main loop
<debug> nrf_dfu_ble: Connected
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 12
<debug> nrf_dfu_ble: min_conn_interval: 12
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 600
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (100, max_rx_time 912).
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 6
<debug> nrf_dfu_ble: min_conn_interval: 6
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 500
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (100, max_rx_time 912).
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
<debug> nrf_dfu_ble: max_conn_interval: 12
<debug> nrf_dfu_ble: min_conn_interval: 12
<debug> nrf_dfu_ble: slave_latency: 0
<debug> nrf_dfu_ble: conn_sup_timeout: 600
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (100, max_rx_time 912).
<debug> nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 517, reply: 247).
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.
<debug> nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (100, max_rx_time 1096).
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (command)
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Set receipt notif
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> app: Shutting down transports (found: 1)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (command)
<debug> app: timer_stop (0x200057D4)
<debug> app: timer_activate (0x200057D4)
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006434 acquired, len 141 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (command)
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (command)
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (command)
<debug> nrf_dfu_validation: PB: Init packet data len: 64
<info> nrf_dfu_validation: Signature required. Checking signature.
<info> nrf_dfu_validation: Calculating init packet hash (init packet len: 64)
<info> nrf_dfu_validation: Verify signature
<info> nrf_dfu_validation: Image verified
<debug> app: Enter nrf_dfu_cache_prepare()
<debug> app: required_size: 0xBB54.
<debug> app: single_bank: false.
<debug> app: keep_app: false.
<debug> app: keep_softdevice: true.
<debug> app: SD_PRESENT: true.
<debug> app: Bank contents:
<debug> app: Bank 0 code: 0x01: Size: 0xBB54
<debug> app: Bank 1 code: 0x00: Size: 0x0
<debug> app: pass: 0.
<debug> app: cache_address: 0x32000.
<debug> app: cache_too_small: false.
<debug> app: keep_firmware: false.
<debug> app: delete_more: false.
<debug> nrf_dfu_validation: Write address set to 0x00032000
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 0
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007F000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200074D0, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007F000, len=0x1B8 bytes, pending 0
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 1
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007E000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20007688, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007E000, len=0x1B8 bytes, pending 0
<debug> nrf_dfu_req_handler: Writing valid init command to flash.
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
<debug> nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> app: Shutting down transports (found: 1)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00032000, len=1 pages), queue usage: 1
<debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash erase success: addr=0x00032000, pending 1
<debug> nrf_dfu_ble: Buffer 0x20006434 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032000, src=0x20006434, len=244 bytes), queue usage: 1
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006528 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000320F4, src=0x20006528, len=244 bytes), queue usage: 2
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x00032000, pending 2
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_ble: Buffer 0x20006434 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000321E8, src=0x20006434, len=244 bytes), queue usage: 2
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x2000661C acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000322DC, src=0x2000661C, len=244 bytes), queue usage: 3
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000320F4, pending 3
<debug> nrf_dfu_ble: Freeing buffer 0x20006528
<debug> nrf_dfu_ble: Buffer 0x20006528 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000323D0, src=0x20006528, len=244 bytes), queue usage: 3
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006710 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000324C4, src=0x20006710, len=244 bytes), queue usage: 4
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000325B8, src=0x20006804, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000321E8, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_ble: Buffer 0x20006434 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000326AC, src=0x20006434, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000322DC, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x2000661C
<debug> nrf_dfu_ble: Buffer 0x2000661C acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000327A0, src=0x2000661C, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x200068F8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032894, src=0x200068F8, len=244 bytes), queue usage: 6
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x200069EC acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032988, src=0x200069EC, len=244 bytes), queue usage: 7
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000323D0, pending 7
<debug> nrf_dfu_ble: Freeing buffer 0x20006528
<debug> nrf_dfu_ble: Buffer 0x20006528 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032A7C, src=0x20006528, len=244 bytes), queue usage: 7
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006AE0 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032B70, src=0x20006AE0, len=244 bytes), queue usage: 8
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000324C4, pending 8
<debug> nrf_dfu_ble: Freeing buffer 0x20006710
<debug> nrf_dfu_ble: Buffer 0x20006710 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032C64, src=0x20006710, len=244 bytes), queue usage: 8
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006BD4 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032D58, src=0x20006BD4, len=244 bytes), queue usage: 9
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006CC8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032E4C, src=0x20006CC8, len=244 bytes), queue usage: 10
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000325B8, pending 10
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 192 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00032F40, src=0x20006804, len=192 bytes), queue usage: 10
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
<debug> nrf_dfu_req_handler: Offset:4096, CRC:0x1D65A037
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000326AC, pending 10
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
<debug> app: timer_stop (0x200057D4)
<debug> app: timer_activate (0x200057D4)
<debug> nrf_dfu_flash: Flash write success: addr=0x000327A0, pending 9
<debug> nrf_dfu_ble: Freeing buffer 0x2000661C
<debug> nrf_dfu_flash: Flash write success: addr=0x00032894, pending 8
<debug> nrf_dfu_ble: Freeing buffer 0x200068F8
<debug> nrf_dfu_flash: Flash write success: addr=0x00032988, pending 7
<debug> nrf_dfu_ble: Freeing buffer 0x200069EC
<debug> nrf_dfu_flash: Flash write success: addr=0x00032A7C, pending 6
<debug> nrf_dfu_ble: Freeing buffer 0x20006528
<debug> nrf_dfu_flash: Flash write success: addr=0x00032B70, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006AE0
<debug> nrf_dfu_flash: Flash write success: addr=0x00032C64, pending 4
<debug> nrf_dfu_ble: Freeing buffer 0x20006710
<debug> nrf_dfu_flash: Flash write success: addr=0x00032D58, pending 3
<debug> nrf_dfu_ble: Freeing buffer 0x20006BD4
<debug> nrf_dfu_flash: Flash write success: addr=0x00032E4C, pending 2
<debug> nrf_dfu_ble: Freeing buffer 0x20006CC8
<debug> nrf_dfu_flash: Flash write success: addr=0x00032F40, pending 1
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> app: Shutting down transports (found: 1)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00033000, len=1 pages), queue usage: 1
<debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00001000, CRC: 0x1D65A037
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033000, src=0x20006804, len=244 bytes), queue usage: 2
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash erase success: addr=0x00033000, pending 2
<debug> nrf_dfu_flash: Flash write success: addr=0x00033000, pending 1
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000330F4, src=0x20006804, len=244 bytes), queue usage: 1
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006CC8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000331E8, src=0x20006CC8, len=244 bytes), queue usage: 2
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000330F4, pending 2
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000332DC, src=0x20006804, len=244 bytes), queue usage: 2
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006BD4 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000333D0, src=0x20006BD4, len=244 bytes), queue usage: 3
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000331E8, pending 3
<debug> nrf_dfu_ble: Freeing buffer 0x20006CC8
<debug> nrf_dfu_ble: Buffer 0x20006CC8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000334C4, src=0x20006CC8, len=244 bytes), queue usage: 3
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006710 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000335B8, src=0x20006710, len=244 bytes), queue usage: 4
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006AE0 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000336AC, src=0x20006AE0, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000332DC, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_ble: Buffer 0x20006804 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000337A0, src=0x20006804, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000333D0, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006BD4
<debug> nrf_dfu_ble: Buffer 0x20006BD4 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033894, src=0x20006BD4, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006528 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033988, src=0x20006528, len=244 bytes), queue usage: 6
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x200069EC acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033A7C, src=0x200069EC, len=244 bytes), queue usage: 7
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000334C4, pending 7
<debug> nrf_dfu_ble: Freeing buffer 0x20006CC8
<debug> nrf_dfu_ble: Buffer 0x20006CC8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033B70, src=0x20006CC8, len=244 bytes), queue usage: 7
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x200068F8 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033C64, src=0x200068F8, len=244 bytes), queue usage: 8
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000335B8, pending 8
<debug> nrf_dfu_ble: Freeing buffer 0x20006710
<debug> nrf_dfu_ble: Buffer 0x20006710 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033D58, src=0x20006710, len=244 bytes), queue usage: 8
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x2000661C acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033E4C, src=0x2000661C, len=244 bytes), queue usage: 9
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x20006434 acquired, len 192 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00033F40, src=0x20006434, len=192 bytes), queue usage: 10
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
<debug> nrf_dfu_req_handler: Offset:8192, CRC:0xAC0E61A0
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x000336AC, pending 10
<debug> nrf_dfu_ble: Freeing buffer 0x20006AE0
<debug> nrf_dfu_flash: Flash write success: addr=0x000337A0, pending 9
<debug> nrf_dfu_ble: Freeing buffer 0x20006804
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
<debug> app: timer_stop (0x200057D4)
<debug> app: timer_activate (0x200057D4)
<debug> nrf_dfu_flash: Flash write success: addr=0x00033894, pending 8
<debug> nrf_dfu_ble: Freeing buffer 0x20006BD4
<debug> nrf_dfu_flash: Flash write success: addr=0x00033988, pending 7
<debug> nrf_dfu_ble: Freeing buffer 0x20006528
<debug> nrf_dfu_flash: Flash write success: addr=0x00033A7C, pending 6
<debug> nrf_dfu_ble: Freeing buffer 0x200069EC
<debug> nrf_dfu_flash: Flash write success: addr=0x00033B70, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006CC8
<debug> nrf_dfu_flash: Flash write success: addr=0x00033C64, pending 4
<debug> nrf_dfu_ble: Freeing buffer 0x200068F8
<debug> nrf_dfu_flash: Flash write success: addr=0x00033D58, pending 3
<debug> nrf_dfu_ble: Freeing buffer 0x20006710
<debug> nrf_dfu_flash: Flash write success: addr=0x00033E4C, pending 2
<debug> nrf_dfu_ble: Freeing buffer 0x2000661C
<debug> nrf_dfu_flash: Flash write success: addr=0x00033F40, pending 1
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> app: Shutting down transports (found: 1)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00034000, len=1 pages), queue usage: 1
<debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00002000, CRC: 0xAC0E61A0
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
...
...
more logs here
...
...
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x200069EC acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0003D7A0, src=0x200069EC, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D3D0, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006BD4
<debug> nrf_dfu_ble: Buffer 0x20006BD4 acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0003D894, src=0x20006BD4, len=244 bytes), queue usage: 5
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_ble: Buffer 0x2000661C acquired, len 244 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0003D988, src=0x2000661C, len=244 bytes), queue usage: 6
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D4C4, pending 6
<debug> nrf_dfu_ble: Freeing buffer 0x200068F8
<debug> nrf_dfu_ble: Buffer 0x200068F8 acquired, len 216 (244)
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0003DA7C, src=0x200068F8, len=216 bytes), queue usage: 6
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
<debug> nrf_dfu_req_handler: Offset:47956, CRC:0xD1B4219C
<debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D5B8, pending 6
<debug> nrf_dfu_ble: Freeing buffer 0x20006434
<debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
<debug> app: timer_stop (0x200057D4)
<debug> app: timer_activate (0x200057D4)
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D6AC, pending 5
<debug> nrf_dfu_ble: Freeing buffer 0x20006710
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D7A0, pending 4
<debug> nrf_dfu_ble: Freeing buffer 0x200069EC
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D894, pending 3
<debug> nrf_dfu_ble: Freeing buffer 0x20006BD4
<debug> nrf_dfu_flash: Flash write success: addr=0x0003D988, pending 2
<debug> nrf_dfu_ble: Freeing buffer 0x2000661C
<debug> nrf_dfu_flash: Flash write success: addr=0x0003DA7C, pending 1
<debug> nrf_dfu_ble: Freeing buffer 0x200068F8
<debug> nrf_dfu_req_handler: Whole firmware image received. Postvalidating.
<debug> nrf_dfu_validation: Hash verification. Firmware start address: 0x32000, size: 0xBB54
<debug> nrf_dfu_validation: Invalidating old application in bank 0.
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007F000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200074D0, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007F000, len=0x1B8 bytes, pending 0
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Writing settings...
<debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
<debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 1
<debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007E000, len=0x1 bytes, pending 0
<debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20007688, len=440 bytes), queue usage: 1
<debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007E000, len=0x1B8 bytes, pending 0
<debug> nrf_dfu_req_handler: All flash operations have completed. DFU completed.
<debug> app: Shutting down transports (found: 1)
<debug> nrf_dfu_ble: Shutting down BLE transport.
<debug> nrf_dfu_ble: Disconnecting.
<debug> nrf_dfu_ble: BLE transport shut down.
<debug> app: Resetting bootloader.
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
<info> app: Inside main
<debug> app: In nrf_bootloader_init
<debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
<debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
<debug> nrf_dfu_settings: Settings OK
<debug> app: Enter nrf_bootloader_fw_activate
<info> app: No firmware to activate.
<debug> app: Enter nrf_dfu_app_is_valid
<debug> app: Return true. App was valid
<info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
<debug> nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
<debug> app: Running nrf_bootloader_app_start with address: 0x00001000
<debug> app: Disabling interrupts. NVIC->ICER[0]: 0x0
<debug> app: running irq table set
<debug> app: After running irq table set

Parents
  • Hi Nem22, 

    are you able to reproduce this on a nRF52 DK? If so then I would be great if you could share the project  + dfu images so that I could debug it. 

    I am not seeing any "Could not erase the settings page!" or "Could not write the DFU settings page!" statements in the log output, which I would expect when nrf_fstorage_write() and nrf_fstorage_erase() are returning NRF_ERROR_INTERNAL. Could you setup breakpoints in settings_write() in nrf_dfu_settings.c and see why this is not caught? 

    static ret_code_t settings_write(void                   * p_dst,
                                     void const             * p_src,
                                     nrf_dfu_flash_callback_t callback,
                                     nrf_dfu_settings_t     * p_dfu_settings_buffer)
    {
        ret_code_t err_code;
    
        if (memcmp(p_dst, p_src, sizeof(nrf_dfu_settings_t)) == 0)
        {
            NRF_LOG_DEBUG("Destination settings are identical to source, write not needed. Skipping.");
            if (callback != NULL)
            {
                callback(NULL);
            }
            return NRF_SUCCESS;
        }
    
        if (NRF_DFU_SETTINGS_IN_APP && !settings_forbidden_parts_equal_to_backup((uint8_t *)&s_dfu_settings))
        {
            NRF_LOG_WARNING("Settings write aborted since it tries writing to forbidden settings.");
            // Assuming NRF_DFU_SETTINGS_ALLOW_UPDATE_FROM_APP is configured the same as in bootloader.
            return NRF_ERROR_FORBIDDEN;
        }
    
        NRF_LOG_DEBUG("Writing settings...");
        NRF_LOG_DEBUG("Erasing old settings at: 0x%08x", p_dst);
    
        // Not setting the callback function because ERASE is required before STORE
        // Only report completion on successful STORE.
        err_code = nrf_dfu_flash_erase((uint32_t)p_dst, 1, NULL);
    
        if (err_code != NRF_SUCCESS)
        {
            NRF_LOG_ERROR("Could not erase the settings page!");
            return NRF_ERROR_INTERNAL;
        }
    
        ASSERT(p_dfu_settings_buffer != NULL);
        memcpy(p_dfu_settings_buffer, p_src, sizeof(nrf_dfu_settings_t));
    
        err_code = nrf_dfu_flash_store((uint32_t)p_dst,
                                       p_dfu_settings_buffer,
                                       sizeof(nrf_dfu_settings_t),
                                       callback);
    
        if (err_code != NRF_SUCCESS)
        {
            NRF_LOG_ERROR("Could not write the DFU settings page!");
            return NRF_ERROR_INTERNAL;
        }
    
        return NRF_SUCCESS;
    }

    Best regards

    Bjørn

  • Hello Bjorn,

    I have not been able to reproduce the issue on nRF52 DK, dfu works perfectly, no errors when flashing settings page.

    I added log_infos after nrf_dfu_flash_erase and nrf_dfu_flash_store and they are both returning 0 - NRF_SUCCESS

    <debug> nrf_dfu_settings: Writing settings...
    <debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
    <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
    <debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007F000, len=0x1 bytes, pending 0
    <info> nrf_dfu_settings: flash erase err code: 0
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200074D0, len=440 bytes), queue usage: 1
    <debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007F000, len=0x1B8 bytes, pending 0
    <info> nrf_dfu_settings: flash store err code: 0
    <info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
    <debug> nrf_dfu_settings: Writing settings...
    <debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
    <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 1
    <debug> nrf_dfu_flash: Flash erase failed (0x3): addr=0x0007E000, len=0x1 bytes, pending 0
    <info> nrf_dfu_settings: flash erase err code: 0
    <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20007688, len=440 bytes), queue usage: 1
    <debug> nrf_dfu_flash: Flash write failed (0x3): addr=0x0007E000, len=0x1B8 bytes, pending 0
    <debug> nrf_dfu_req_handler: All flash operations have completed. DFU completed.
    <debug> app: Shutting down transports (found: 1)

    Is there a SB or jumper on the DK I can use to confirm it's not using the crystal?

    Thanks

  • Ok, and you're not able to perform a application DFU? Or did you want the device to boot to the application and not stay in the bootloader?

    Indeed, when I flash app+settings, sd and bootloader the app is supposed to load. I am also not able to perform a dfu through dfutarg.

    I have tried the debug bootloader(with logs) and normal bootloader and the behavior is different.

    Debug bootloader returns this:

    <warning> app: Aborting. Cannot fit new firmware on device
    <error> nrf_dfu_validation: Can't find room for update
    <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x4
    <warning> nrf_dfu_ble: DFU request 4 failed with error: 0x4

    Non-debug bootloader accepts the zip (so it's not error 0x4 because the data is transfered), disconnects and then the board is not advertising anything

    I can even reproduce all this on the devkit, presumably something is wrong in my linker section placement macros.

  • The debug bootloader takes up 0xC000 bytes( 49152 bytes, 48kB) in addition to the two last flash pages for the bootloader settings and the MBR params page which is 8kB in total  , the SoftDevie needs 0x26000 bytes, so the total flash usage will be 0x34000, i.e. 208kB, i.e. there is 48 kB left. The bootloader also reserves 3 flash pages(4kB each), i.e. 12kB for the Peer Manager and FDS below the bootloader, this is set by NRF_DFU_APP_DATA_AREA_SIZE in the sdk_config.h file of the bootloader. 

    From the linker settings and screenshot you posted it seems like the application needs 0xB860 bytes( 46kB). So if you set the NRF_DFU_APP_DATA_AREA_SIZE  to 0 then I think the update should go through with the debug bootloader. 

  • Hi, thanks for explaining the size requirements,

    After setting NRF_DFU_APP_DATA_AREA_SIZE to 0 I get this from the debug bootloader while sending zip to dfutarg:

    <debug> nrf_dfu_validation: Write address set to 0x00026000
    <debug> nrf_dfu_settings: Writing settings...
    <debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
    <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 0
    <error> app: Received a fault! id: 0x00004002, pc: 0x00000000, info: 0x2000FF10

    I don't understand why it's trying to erase settings at that address when I set BOOTLOADER_SETTINGS_ADDRESS to 0x0003F000

  • nrf_dfu_settings_write uses the m_dfu_settings_buffer location of the as the address, m_dfu_settings_buffer is defined as

    uint8_t m_dfu_settings_buffer[BOOTLOADER_SETTINGS_PAGE_SIZE]
        __attribute__((section(".bootloader_settings_page")))
        __attribute__((used));

    in nrf_dfu_settings.c. The .bootloader_settings_page section (and the . mbr_params_page section)  is defined in the flash_placement.xml file as 

     <MemorySegment name="bootloader_settings_page" start="0x0007F000" size="0x1000">
        <ProgramSection alignment="4" keep="Yes" load="No" name=".bootloader_settings_page" address_symbol="__start_bootloader_settings_page" end_symbol="__stop_bootloader_settings_page" start = "0x0007F000" size="0x1000" />
      </MemorySegment>
      <MemorySegment name="mbr_params_page" start="0x0007E000" size="0x1000">
        <ProgramSection alignment="4" keep="Yes" load="No" name=".mbr_params_page" address_symbol="__start_mbr_params_page" end_symbol="__stop_mbr_params_page" start = "0x0007E000" size="0x1000" />
      </MemorySegment>

    Change these to 

     <MemorySegment name="bootloader_settings_page" start="0x0003F000" size="0x1000">
        <ProgramSection alignment="4" keep="Yes" load="No" name=".bootloader_settings_page" address_symbol="__start_bootloader_settings_page" end_symbol="__stop_bootloader_settings_page" start = "0x0003F000" size="0x1000" />
      </MemorySegment>
      <MemorySegment name="mbr_params_page" start="0x0003E000" size="0x1000">
        <ProgramSection alignment="4" keep="Yes" load="No" name=".mbr_params_page" address_symbol="__start_mbr_params_page" end_symbol="__stop_mbr_params_page" start = "0x0003E000" size="0x1000" />
      </MemorySegment>

    That should solve the issue I think. 

    Best regards

    Bjørn

  • Thank you, DFU is working on our custom boards now.

Reply Children
No Data
Related