Buttonless DFU connect timeout issue on custom board

Hi,

I followed the DFU to SDK example post on https://www.u-blox.com/en/docs/UBX-19050198 to add Buttonless DFU to an application (I modified \ble_peripheral\ble_app_hrs). The details of firmware updates and HEX file generation are in section 5. Then All the testing in section 6 is successful when I used nRF52832DK to test uploading new version hrs application though buttonless DFU (using nRFconnect and another DK). The SDK I used is 17.0.2.

Then I repeated everything on my custom nRF52832 board, with the same changes applied to my custom application.

I also updated the secure bootloader under “\examples\dfu\secure_bootloader” for my custom board to generate “secure_bootloader_ble_s132_custom.hex”. The main changes are (1) Replace board.c, board.h (remove all the buttons and unused LEDs related code, since my board has no button and only two LEDs), add custom_board.h. (2) Changed softdevice clock setting macros in sdk_config.h, since I do not use external 32MHz crystal.  The bootloader was tested successfully with my customer board. I can see “DfuTarg” as the advertising name. OTA firmware upload is successful with my custom application .zip file (generated with command “nrfutil pkg generate --application custom.hex --application-version-string "2.0.0" --hw-version 52 --sd-req 0x101 --key-file private.key app_v2.zip”)

However, after I generated the combined .hex following steps in section 5, (merge bl_setting.hex, such successfully tested bootloader, softdevice image, and my updated application), downloaded such combined .hex file to my custom board. Recycle power and connect my custom board and application through nRF connect, click DFU button and start OTA uploading, the DFU always gives a message says “dfu failed with error: connect time out” after about 10 seconds waiting.

The downloaded .hex file (bl_set_s132_app.hex) is generated as below

  • nrfutil settings generate --family NRF52 --application custom.hex --application-version-string "1.2.3" --bootloader-version 0 --bl-settings-version 2 bl_setting.hex
  • mergehex --merge bl_setting.hex secure_bootloader_ble_s132_custom.hex s132_nrf52_7.2.0_softdevice.hex --output bl_set_s132.hex
  • mergehex --merge bl_set_s132.hex custom.hex --output bl_set_s132_app.hex

Then I download to custom board though

  • nrfjprog -f nrf52 –recover
  • nrfjprog --program bl_set_s132_app.hex

The .zip file for uploading though buttonless DFU is generated as below.

nrfutil pkg generate --application custom.hex --application-version-string "2.0.0" --hw-version 52 --sd-req 0x101 --key-file private.key app_v2.zip

Since I did exactly the same changes and everything is working on nRF52832DK, may I know what is the possible cause of such “connect time out” issue on my customer board? For example, does bootloader use a timer and accidently occupied by my customer application? It could explain why modified secure_bootloader can do OTA upload successfully, but DFU button on my application has time out error. If so, how to check that?

I already tried method (add “do while” to  sd_ble_gatts_hvx) following the link https://devzone.nordicsemi.com/f/nordic-q-a/38655/buttonless-dfu-sdk-14-2-dfu-failed-with-error

But it still does not working for me.

Appreciate all the helps and suggestions.

  • I post the log details below for such failure (since "Found unbonded buttonless characteristic").

    2021-11-19T13:10:55.383Z DEBUG GATTC_EVT_DESC_DISC_RSP time:2021-11-19T13:10:55.383Z connHandle:0 gattStatus:257 gattStatusName:atterrInvalidHandle errorHandle:10 count:0 descs:[]
    2021-11-19T13:10:55.383Z DEBUG findCharacteristic: Found characteristic ID 5D:2A:F3:34:9E:C2.0.5.8
    2021-11-19T13:10:55.383Z DEBUG Found unbonded buttonless characteristic: 5D:2A:F3:34:9E:C2.0.5.8
    2021-11-19T13:10:55.384Z DEBUG 204 -> [00 9c 00 00 01 01 00 15 00 00 00 02 00 01 02 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:10 data_integrity:1 header_checksum:20 err_code:0x0
    2021-11-19T13:10:55.385Z DEBUG 201/ 0 <- [N/A] type: ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.386Z DEBUG 202/ 0 <- [01 9c 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:6 data_integrity:1 header_checksum:c0 err_code:0x0
    2021-11-19T13:10:55.386Z DEBUG 205 -> [N/A] type: ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.582Z DEBUG 203/ 0 <- [02 38 00 00 00 00 00 00 00 15 00 01 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:3 ack#:2 payload_length:10 data_integrity:1 header_checksum:1e err_code:0x0
    2021-11-19T13:10:55.583Z DEBUG 206 -> [N/A] type: ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.583Z DEBUG GATTC_EVT_WRITE_RSP time:2021-11-19T13:10:55.583Z connHandle:0 gattStatus:0 gattStatusName:success errorHandle:0 handle:21 writeOp:1 offset:0 len:0
    2021-11-19T13:10:55.583Z INFO Attribute value changed, handle: 0x15, value (0x): 02-00
    2021-11-19T13:10:55.586Z DEBUG 207 -> [00 9c 00 00 01 01 00 14 00 00 00 01 00 01 01 ] type: VENDOR_SPECIFIC reliable:yes seq#:2 ack#:4 payload_length:f data_integrity:1 header_checksum:20 err_code:0x0
    2021-11-19T13:10:55.586Z DEBUG 204/ 0 <- [N/A] type: ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.587Z DEBUG 205/ 0 <- [01 9c 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:4 ack#:3 payload_length:6 data_integrity:1 header_checksum:b6 err_code:0x0
    2021-11-19T13:10:55.587Z DEBUG 208 -> [N/A] type: ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.782Z DEBUG 206/ 0 <- [02 38 00 00 00 00 00 00 00 14 00 01 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:5 ack#:3 payload_length:10 data_integrity:1 header_checksum:14 err_code:0x0
    2021-11-19T13:10:55.783Z DEBUG 209 -> [N/A] type: ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.783Z DEBUG GATTC_EVT_WRITE_RSP time:2021-11-19T13:10:55.783Z connHandle:0 gattStatus:0 gattStatusName:success errorHandle:0 handle:20 writeOp:1 offset:0 len:0
    2021-11-19T13:10:55.783Z INFO Attribute value changed, handle: 0x14, value (0x): 01
    2021-11-19T13:10:55.784Z DEBUG 207/ 0 <- [02 39 00 00 00 00 00 00 00 14 00 02 03 00 20 01 01 ] type: VENDOR_SPECIFIC reliable:yes seq#:6 ack#:3 payload_length:11 data_integrity:1 header_checksum:3 err_code:0x0
    2021-11-19T13:10:55.784Z DEBUG 210 -> [N/A] type: ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.784Z DEBUG GATTC_EVT_HVX time:2021-11-19T13:10:55.784Z connHandle:0 gattStatus:0 gattStatusName:success errorHandle:0 handle:20 type:2 len:3
    2021-11-19T13:10:55.784Z INFO Attribute value changed, handle: 0x14, value (0x): 20-01-01
    2021-11-19T13:10:55.784Z DEBUG 211 -> [00 9d 00 00 14 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:3 ack#:7 payload_length:6 data_integrity:1 header_checksum:97 err_code:0x0
    2021-11-19T13:10:55.785Z DEBUG Waiting for target device to disconnect.
    2021-11-19T13:10:55.785Z DEBUG 208/ 0 <- [N/A] type: ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:55.785Z DEBUG 209/ 0 <- [01 9d 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:7 ack#:4 payload_length:6 data_integrity:1 header_checksum:ab err_code:0x0
    2021-11-19T13:10:55.785Z DEBUG 212 -> [N/A] type: ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:59.983Z DEBUG 210/ 0 <- [02 11 00 00 00 08 ] type: VENDOR_SPECIFIC reliable:yes seq#:0 ack#:4 payload_length:6 data_integrity:1 header_checksum:b2 err_code:0x0
    2021-11-19T13:10:59.983Z DEBUG 213 -> [N/A] type: ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:59.983Z DEBUG GAP_EVT_DISCONNECTED time:2021-11-19T13:10:59.983Z connHandle:0 reason:8 reasonName:connectionTimeout
    2021-11-19T13:10:59.983Z DEBUG Received disconnection event for target device.
    2021-11-19T13:10:59.984Z DEBUG New address for DFU target: 5D:2A:F3:34:9E:C3
    2021-11-19T13:10:59.984Z DEBUG Connecting to address: 5D:2A:F3:34:9E:C3, type: BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE.
    2021-11-19T13:10:59.994Z DEBUG 214 -> [00 8c 01 04 c3 9e 34 f3 2a 5d 01 01 a0 00 50 00 14 00 01 06 00 06 00 00 00 90 01 01 ] type: VENDOR_SPECIFIC reliable:yes seq#:4 ack#:1 payload_length:1c data_integrity:1 header_checksum:65 err_code:0x0
    2021-11-19T13:10:59.995Z DEBUG 211/ 0 <- [N/A] type: ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:10:59.996Z DEBUG 212/ 0 <- [01 8c 00 00 00 00 ] type: VENDOR_SPECIFIC reliable:yes seq#:1 ack#:5 payload_length:6 data_integrity:1 header_checksum:a9 err_code:0x0
    2021-11-19T13:10:59.996Z DEBUG 215 -> [N/A] type: ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:11:19.996Z DEBUG 213/ 0 <- [02 1b 00 ff ff 02 ] type: VENDOR_SPECIFIC reliable:yes seq#:2 ack#:5 payload_length:6 data_integrity:1 header_checksum:a8 err_code:0x0
    2021-11-19T13:11:19.996Z DEBUG 216 -> [N/A] type: ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
    2021-11-19T13:11:19.996Z DEBUG GAP_EVT_TIMEOUT time:2021-11-19T13:11:19.996Z connHandle:65535 src:2 srcName:bleGapTimeoutSrcConn
    2021-11-19T13:11:20.004Z INFO Connection to device timed out
    2021-11-19T13:11:20.005Z DEBUG Destroying DFU transport.
    2021-11-19T13:11:20.005Z ERROR DFU failed with error: Connect timed out..

  • Hi,

    Changed softdevice clock setting macros in sdk_config.h, since I do not use external 32MHz crystal.  

    I guess you mean 32.768 kHz crystal.

    What did you change the clock settings to? something like this?

    // <h> Clock - SoftDevice clock configuration
     
     
     
    //==========================================================
    // <o> NRF_SDH_CLOCK_LF_SRC  - SoftDevice clock source.
    
    // <0=> NRF_CLOCK_LF_SRC_RC 
    // <1=> NRF_CLOCK_LF_SRC_XTAL 
    // <2=> NRF_CLOCK_LF_SRC_SYNTH 
     
     
     
    #ifndef NRF_SDH_CLOCK_LF_SRC
    #define NRF_SDH_CLOCK_LF_SRC 0
    #endif
     
     
     
    // <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. 
    #ifndef NRF_SDH_CLOCK_LF_RC_CTIV
    #define NRF_SDH_CLOCK_LF_RC_CTIV 16
    #endif
     
     
     
    // <o> NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. 
    // <i> How often (in number of calibration intervals) the RC oscillator shall be calibrated
    // <i>  if the temperature has not changed.
     
     
     
    #ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV
    #define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 2
    #endif
     
     
     
    // <o> NRF_SDH_CLOCK_LF_ACCURACY  - External clock accuracy used in the LL to compute timing.
    
    // <0=> NRF_CLOCK_LF_ACCURACY_250_PPM 
    // <1=> NRF_CLOCK_LF_ACCURACY_500_PPM 
    // <2=> NRF_CLOCK_LF_ACCURACY_150_PPM 
    // <3=> NRF_CLOCK_LF_ACCURACY_100_PPM 
    // <4=> NRF_CLOCK_LF_ACCURACY_75_PPM 
    // <5=> NRF_CLOCK_LF_ACCURACY_50_PPM 
    // <6=> NRF_CLOCK_LF_ACCURACY_30_PPM 
    // <7=> NRF_CLOCK_LF_ACCURACY_20_PPM 
    // <8=> NRF_CLOCK_LF_ACCURACY_10_PPM 
    // <9=> NRF_CLOCK_LF_ACCURACY_5_PPM 
    // <10=> NRF_CLOCK_LF_ACCURACY_2_PPM 
    // <11=> NRF_CLOCK_LF_ACCURACY_1_PPM 
     
     
     
    #ifndef NRF_SDH_CLOCK_LF_ACCURACY
    #define NRF_SDH_CLOCK_LF_ACCURACY 1
    #endif

    Did you do the same change in both the bootloader and in the application's sdk_config.h file?

    Do you have the nrf_log output from the nRF52 device? Logging is enabled in the _debug variant of the bootloader project (e.g. pca10040_s132_ble_debug)

  • Hi, Sigurd,

    Thanks for the reply.

    Yes. I have the same change in both bootloader and application sdk_config.h. See below.

    // <h> Clock - SoftDevice clock configuration

    //==========================================================
    // <o> NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source.

    // <0=> NRF_CLOCK_LF_SRC_RC
    // <1=> NRF_CLOCK_LF_SRC_XTAL
    // <2=> NRF_CLOCK_LF_SRC_SYNTH

    #ifndef NRF_SDH_CLOCK_LF_SRC
    #define NRF_SDH_CLOCK_LF_SRC 0
    #endif

    // <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval.
    #ifndef NRF_SDH_CLOCK_LF_RC_CTIV
    #define NRF_SDH_CLOCK_LF_RC_CTIV 22
    #endif

    // <o> NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature.
    // <i> How often (in number of calibration intervals) the RC oscillator shall be calibrated
    // <i> if the temperature has not changed.

    #ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV
    #define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 2
    #endif

    // <o> NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing.

    // <0=> NRF_CLOCK_LF_ACCURACY_250_PPM
    // <1=> NRF_CLOCK_LF_ACCURACY_500_PPM
    // <2=> NRF_CLOCK_LF_ACCURACY_150_PPM
    // <3=> NRF_CLOCK_LF_ACCURACY_100_PPM
    // <4=> NRF_CLOCK_LF_ACCURACY_75_PPM
    // <5=> NRF_CLOCK_LF_ACCURACY_50_PPM
    // <6=> NRF_CLOCK_LF_ACCURACY_30_PPM
    // <7=> NRF_CLOCK_LF_ACCURACY_20_PPM
    // <8=> NRF_CLOCK_LF_ACCURACY_10_PPM
    // <9=> NRF_CLOCK_LF_ACCURACY_5_PPM
    // <10=> NRF_CLOCK_LF_ACCURACY_2_PPM
    // <11=> NRF_CLOCK_LF_ACCURACY_1_PPM

    #ifndef NRF_SDH_CLOCK_LF_ACCURACY
    #define NRF_SDH_CLOCK_LF_ACCURACY 1
    #endif

  • I also replaced bootloader with the debug version. I used RTT viewer for log output, here is the log.

    00> <info> app: Inside main
    00>
    00> <debug> app: In nrf_bootloader_init
    00>
    00> <debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
    00>
    00> <debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
    00>
    00> <debug> nrf_dfu_settings: Using settings page.
    00>
    00> <debug> nrf_dfu_settings: Copying forbidden parts from backup page.
    00>
    00> <debug> nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
    00>
    00> <info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
    00>
    00> <debug> nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
    00>
    00> <debug> app: Enter nrf_bootloader_fw_activate
    00>
    00> <info> app: No firmware to activate.
    00>
    00> <debug> app: App is valid
    00>
    00> <debug> app: DFU mode requested via GPREGRET.
    00>
    00> <info> nrf_bootloader_wdt: WDT is not enabled
    00>
    00> <debug> app: in weak nrf_dfu_init_user
    00>
    00> <debug> app: timer_stop (0x20005984)
    00>
    00> <debug> app: timer_activate (0x20005984)
    00>
    00> <info> app: Entering DFU mode.
    00>
    00> <debug> app: Initializing transports (found: 1)
    00>
    00> <debug> nrf_dfu_ble: Initializing BLE DFU transport
    00>
    00> <debug> nrf_dfu_ble: Setting up vector table: 0x00071000
    00>
    00> <debug> nrf_dfu_ble: Enabling SoftDevice.
    00>
    00> <debug> nrf_dfu_ble: Configuring BLE stack.
    00>
    00> <debug> nrf_dfu_ble: Enabling the BLE stack.
    00>
    00> <debug> nrf_dfu_ble: No advertising name found
    00>
    00> <debug> nrf_dfu_ble: Using default advertising name
    00>
    00> <debug> nrf_dfu_ble: Advertising...
    00>
    00> <debug> nrf_dfu_ble: BLE DFU transport initialized.
    00>
    00> <debug> nrf_dfu_flash: Initializing nrf_fstorage_sd backend.
    00>
    00> <debug> app: Enter main loop
    00>  

  • If I run bootloader (debug version) alone on my custom board, everything is correct. OTA is successful. Log is too long. only partial of them listed below.

    00> <info> app: Inside main
    00>
    00> <debug> app: In nrf_bootloader_init
    00>
    00> <debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
    00>
    00> <debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
    00>
    00> <warning> nrf_dfu_settings: Resetting bootloader settings since neither the settings page nor the backup are valid (CRC error).
    00>
    00> <debug> nrf_dfu_settings: Writing settings...
    00>
    00> <debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 0
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 0
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200096C8, len=896 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 0
    00>
    00> <info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
    00>
    00> <debug> nrf_dfu_settings: Writing settings...
    00>
    00> <debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 1
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x0007E000, pending 0
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20009348, len=896 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x0007E000, pending 0
    00>
    00> <debug> app: Enter nrf_bootloader_fw_activate
    00>
    00> <info> app: No firmware to activate.
    00>
    00> <info> app: Boot validation failed. No valid app to boot.
    00>
    00> <debug> app: DFU mode because app is not valid.
    00>
    00> <info> nrf_bootloader_wdt: WDT is not enabled
    00>
    00> <debug> app: in weak nrf_dfu_init_user
    00>
    00> <debug> app: timer_stop (0x20005984)
    00>
    00> <debug> app: timer_activate (0x20005984)
    00>
    00> <info> app: Entering DFU mode.
    00>
    00> <debug> app: Initializing transports (found: 1)
    00>
    00> <debug> nrf_dfu_ble: Initializing BLE DFU transport
    00>
    00> <debug> nrf_dfu_ble: Setting up vector table: 0x00071000
    00>
    00> <debug> nrf_dfu_ble: Enabling SoftDevice.
    00>
    00> <debug> nrf_dfu_ble: Configuring BLE stack.
    00>
    00> <debug> nrf_dfu_ble: Enabling the BLE stack.
    00>
    00> <debug> nrf_dfu_ble: No advertising name found
    00>
    00> <debug> nrf_dfu_ble: Using default advertising name
    00>
    00> <debug> nrf_dfu_ble: Advertising...
    00>
    00> <debug> nrf_dfu_ble: BLE DFU transport initialized.
    00>
    00> <debug> nrf_dfu_flash: Initializing nrf_fstorage_sd backend.
    00>
    00> <debug> app: Enter main loop
    00>
    00> <debug> nrf_dfu_ble: Connected
    00>
    00> <debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
    00>
    00> <debug> nrf_dfu_ble: max_conn_interval: 12
    00>
    00> <debug> nrf_dfu_ble: min_conn_interval: 12
    00>
    00> <debug> nrf_dfu_ble: slave_latency: 0
    00>
    00> <debug> nrf_dfu_ble: conn_sup_timeout: 600
    00>
    00> <debug> nrf_dfu_ble: Finished handling conn sec update
    00>
    00> <debug> nrf_dfu_ble: Set receipt notif
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 247, reply: 247).
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (command)
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> app: Shutting down transports (found: 1)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (command)
    00>
    00> <debug> app: timer_stop (0x20005984)
    00>
    00> <debug> app: timer_activate (0x20005984)
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 143 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (command)
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (command)
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (command)
    00>
    00> <debug> nrf_dfu_validation: PB: Init packet data len: 66
    00>
    00> <info> nrf_dfu_validation: Signature required. Checking signature.
    00>
    00> <info> nrf_dfu_validation: Calculating hash (len: 66)
    00>
    00> <info> nrf_dfu_validation: Verify signature
    00>
    00> <info> nrf_dfu_validation: Image verified
    00>
    00> <debug> app: Enter nrf_dfu_cache_prepare()
    00>
    00> <debug> app: required_size: 0xCC58.
    00>
    00> <debug> app: single_bank: false.
    00>
    00> <debug> app: keep_app: false.
    00>
    00> <debug> app: keep_softdevice: true.
    00>
    00> <debug> app: SD_PRESENT: true.
    00>
    00> <debug> app: Bank contents:
    00>
    00> <debug> app: Bank 0 code: 0x00: Size: 0x0
    00>
    00> <debug> app: Bank 1 code: 0x00: Size: 0x0
    00>
    00> <debug> app: pass: 0.
    00>
    00> <debug> app: cache_address: 0x26000.
    00>
    00> <debug> app: cache_too_small: false.
    00>
    00> <debug> app: keep_firmware: false.
    00>
    00> <debug> app: delete_more: false.
    00>
    00> <debug> nrf_dfu_validation: Write address set to 0x00026000
    00>
    00> <debug> nrf_dfu_settings: Writing settings...
    00>
    00> <debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x200096C8, len=896 bytes), queue usage: 2
    00>
    00> <info> nrf_dfu_settings: Backing up settings page to address 0x7E000.
    00>
    00> <debug> nrf_dfu_settings: Writing settings...
    00>
    00> <debug> nrf_dfu_settings: Erasing old settings at: 0x0007E000
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007E000, len=1 pages), queue usage: 3
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007E000, src=0x20009348, len=896 bytes), queue usage: 4
    00>
    00> <debug> nrf_dfu_req_handler: Writing valid init command to flash.
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
    00>
    00> <debug> nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
    00>
    00> <debug> nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 4
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 3
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00026000, len=1 pages), queue usage: 3
    00>
    00> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x0007E000, pending 3
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x0007E000, pending 2
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x00026000, pending 1
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026000, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026000, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000260F4, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000260F4, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000261E8, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000261E8, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000262DC, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000262DC, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000263D0, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000263D0, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000264C4, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000264C4, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000265B8, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000265B8, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000266AC, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000266AC, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000267A0, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000267A0, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026894, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026894, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026988, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026988, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026A7C, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026A7C, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026B70, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026B70, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026C64, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026C64, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026D58, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026D58, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026E4C, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026E4C, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 192 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00026F40, src=0x200082AC, len=192 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00026F40, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
    00>
    00> <debug> nrf_dfu_req_handler: Offset:4096, CRC:0x2A156FD7
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> app: timer_stop (0x20005984)
    00>
    00> <debug> app: timer_activate (0x20005984)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00027000, len=1 pages), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00001000, CRC: 0x2A156FD7
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00027000, src=0x200082AC, len=244 bytes), queue usage: 2
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash erase success: addr=0x00027000, pending 2
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x00027000, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000270F4, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000270F4, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000271E8, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000271E8, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000272DC, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000272DC, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)
    00>
    00> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
    00>
    00> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000273D0, src=0x200082AC, len=244 bytes), queue usage: 1
    00>
    00> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
    00>
    00> <debug> nrf_dfu_flash: Flash write success: addr=0x000273D0, pending 1
    00>
    00> <debug> nrf_dfu_ble: Freeing buffer 0x200082AC
    00>
    00> <debug> nrf_dfu_ble: Buffer 0x200082AC acquired, len 244 (244)

    .................................................................................................

Related