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

Bootloader not entering APP

Hello, I have nrf52832 and sdk14.1. Everything works fine but after starting the device i get this information and there is no further progress from there on:

<info> app: Inside main
<debug> app: In nrf_bootloader_init
<debug> app: in weak nrf_dfu_init_user
<debug> app: In real nrf_dfu_init
<debug> nrf_dfu_settings: Running nrf_dfu_settings_init(sd_irq_initialized=false).
<debug> nrf_dfu_flash: Calling nrf_dfu_flash_init(sd_irq_initialized=false)...
<debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
<debug> app: Initializing the clock.
<debug> app: Enter nrf_dfu_continue
<debug> app: Valid App
<debug> app: Enter nrf_dfu_app_is_valid
<debug> app: Return true. App was valid
<debug> app: Enter nrf_dfu_app_is_valid
<debug> app: Return true. App was valid
<debug> app: Jumping to: 0x00023000
<debug> app: Running nrf_bootloader_app_start with address: 0x00023000
<debug> app: Disabling interrupts
<debug> app: Setting SD vector table base: 0x00023000

If i reset the device then it starts the APP. Is there any reason for this? Is it connected with RTT? Thanks.

Parents
  • Is it connected with RTT?

    Highly likely.

    Segger RTT has a problem when the bootloader switches to the app, because the memory location of the RTT buffers will highly likely change at this point.

    If the application does not completely clean its RAM, the "old" bootloader buffer may still exist - and RTT will never use the "real" location. Restarting the RTT client (or JLinkExe in your case) could remedy the situation.

    If you are fluent in ARM assembly, you could try to argument the application starup code in order to erase all non-reserved RAM addresses. This should trigger RTT on the PC to scan for the new memory location.

  • One could also try to zero out the _SEGGER_RTT.acID[] array in the bootloader before the application starts.

Reply Children
No Data
Related