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

freertos with wdt reset problem, nrfjprog

Hello

my setup is a nrf52840, the sdk15.3, Softdevice s140.

I'm running an application with freertos and wdt and have the openbootloader and s140 also flashed.

- if in freertos the wdt is disabled and i set the GPREGRET register and make a reset with NVIC_SystemReset, i have to make a reset from outside by nrfjprog -r over jlink and then the dfu device comes up...

- and after update the device over dfu it has to be reset by nrfjprog -r and it resetarts in application as wanted

- If the wdt is enabled and do the same, set the GPREGRET register and make a reset with NVIC_SystemReset, the device restarts in application....

How can i make a reset or restart similar to nrfjprog -r from software so that no jlink is needed ?

Thanks in advance

twittich

Parents Reply
  • twittich said:
    If i start a timer with 30 seconds, in function " nrf_bootloader_init() " after "  if (dfu_enter) ". And the callback includes a bool to stop feed the wdt and nvic system reset....  it works, but if run normal it stays in bootloader ?!

    Could you replace the nvic systemreset with a loop that reloads the WD forever, then use the --readregs command to see if the program enters this callback when you're not in debug mode?

    e.g.,

    timer_callback()

    {

        for (;;) {//TODO:feed WD}

    }

      

      

Children
  • I changed the order of initialisation of the timer. In the timer tutorial it's written that first start internal osci, then init app timer and then create and start ..Now my own inactivity timer works and the NRF_BL_DFU_INACTIVITY_TIMEOUT_MS is set to zero. Maybe in the bootloader this order has to be fixed...

    But if i start an update process and the timer times out the device resets and goes to application. Where do i have to stop or/and restart the timer ?

  • The default implementation of the inactivity timer works for me here, but yes, the RTC won't run if you haven't started the LF clock first. That is why nrf_bootloader_dfu_timers.c->timer_init() triggers the LF clock start task. The LF clock is automatically started when the chip goes into debug interface mode so it may explain why the timer only expired when you were debugging.

    The only issue I see here is that we're not reloading WD channel 7. I will report that as a bug internally. 

  • For now with some tests i can say that if i don't initialize the clock before it's not working. If i use it everything works fine. Maybe its because of the combination with the wdt ...

    Just to know where is the inactivity timer stopped when the image is send ?

Related