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

  • Hello

    Yes, the issue happens on every custom board we have.

    We use fstorage in the application and it is working on custom boards. DFU also does not work if we only flash bootloader+SD on the device and update through the bootloader only (no buttonless).

  • Hmm, I cant really see any reason for the flash operations on the bootloader settings page to fail on custom boards with nRF52832, but not on nRF52 DKs. Its the same compile bootloader binary that is flashed to both boards right?

    When you're using fstorage, you're not writing to the two last flash pages right, i.e. pages with start address 0x7E000 or 0x7F000?

    Does all the nRF52832s on the custom boards have the same build code? Its unlikely that this is a HW issue, but I'll just run the build code by QA to check if there are any issues with that particular batch.

  • Hello, sorry for not pointing this out earlier but I just realized we use the QFAB version of nrf52832 with only 256kb flash. I was using an older version of nrfjprog and it would let me flash the full 512kb. After updating to latest command line tools it printed errors about data outside valid areas.

    I updated linker macros in segger to fit everything below 0x40000 address. Below is an image of everything bootloader, app and SD.

    Here's a list of things I've done, have I missed something?

    bootloader section placement macros:

    FLASH_PH_START=0x0
    FLASH_PH_SIZE=0x40000
    RAM_PH_START=0x20000000
    RAM_PH_SIZE=0x10000
    FLASH_START=0x32000
    FLASH_SIZE=0xc000
    RAM_START=0x200057b8
    RAM_SIZE=0xa848

    bootloader memory segments:

    FLASH RX 0x0 0x40000;RAM RWX 0x20000000 0x8000;mbr_params_page RX 0x0003E000 0x1000;bootloader_settings_page RX 0x0003F000 0x1000;uicr_mbr_params_page RX 0x10001018 0x4;uicr_bootloader_start_address RX 0x10001014 0x4

    app section placement macros:

    FLASH_PH_START=0x0 
    FLASH_PH_SIZE=0x40000
    RAM_PH_START=0x20000000
    RAM_PH_SIZE=0x10000
    FLASH_START=0x26000
    FLASH_SIZE=0x1a000
    RAM_START=0x20003398
    RAM_SIZE=0x4c68

    changes in nrf_dfu_types.h

    #define BOOTLOADER_SETTINGS_ADDRESS     (0x0003F000UL)
    #define NRF_MBR_PARAMS_PAGE_ADDRESS         (0x0003E000UL)

    I generated settings with --family NRF52QFAB

    Unfortunately now the device is stuck in bootloader advertising as dfutarg.

  • Aha, that explains everything! If you are using the 

    then you need to modify some defines in the bootloader source code as the QFAB variant is not "officially" supported in the SDK. Here is the diff for the necessary changes:

    diff -Nurb nRF5_SDK_15.3.0_59ac345/components/libraries/bootloader/dfu/nrf_dfu_types.h nRF5_SDK_15.3.0_59ac345-mod/components/libraries/bootloader/dfu/nrf_dfu_types.h
    --- nRF5_SDK_15.3.0_59ac345/components/libraries/bootloader/dfu/nrf_dfu_types.h	2019-02-14 17:24:58.000000000 +0000
    +++ nRF5_SDK_15.3.0_59ac345-mod/components/libraries/bootloader/dfu/nrf_dfu_types.h	2019-04-23 15:54:10.523901768 +0100
    @@ -65,7 +65,6 @@
     extern "C" {
     #endif
     
    -
     #define INIT_COMMAND_MAX_SIZE      512 /**< Maximum size of the init command stored in dfu_settings. */
     #define INIT_COMMAND_MAX_SIZE_v1   256 /**< Maximum size of the init command in settings version 1. */
     
    @@ -99,6 +98,8 @@
         #define BOOTLOADER_SETTINGS_ADDRESS     (0x0002F000UL)
     #elif defined( NRF52832_XXAA )
         #define BOOTLOADER_SETTINGS_ADDRESS     (0x0007F000UL)
    +#elif defined( NRF52832_XXAB )
    +    #define BOOTLOADER_SETTINGS_ADDRESS     (0x0003F000UL)
     #elif defined(NRF52840_XXAA)
         #define BOOTLOADER_SETTINGS_ADDRESS     (0x000FF000UL)
     #else
    @@ -121,6 +122,8 @@
         #define NRF_MBR_PARAMS_PAGE_ADDRESS         (0x000FE000UL)
     #elif defined(NRF52832_XXAA)
         #define NRF_MBR_PARAMS_PAGE_ADDRESS         (0x0007E000UL)
    +#elif defined(NRF52832_XXAB)
    +    #define NRF_MBR_PARAMS_PAGE_ADDRESS         (0x0003E000UL)
     #elif defined(NRF52810_XXAA)
         #define NRF_MBR_PARAMS_PAGE_ADDRESS         (0x0002E000UL)
     #elif defined(NRF52811_XXAA)

    But it seems that you have done these changes already so that seems good. 

    nem22 said:
    Unfortunately now the device is stuck in bootloader advertising as dfutarg.

    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? 

  • 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.

Related