Problem with fstorage and ble active in Release mode

I'm using nRF52832 SoC with nRF5_SDK17.1.0 and SoftDevice v7.3.0. I'm using following code to write data into flash.

 err_code = nrf_fstorage_write(&g_fs, write_addr, buffer32, 128, NULL);

  wait_while_fs_busy(&g_fs);

/* Wait helper: sleep while fstorage is busy (write/erase are async). */
static void wait_while_fs_busy(nrf_fstorage_t const * p_fs)
{
    uint32_t waited_ms = 0;

    while (nrf_fstorage_is_busy(p_fs))
    {

      if ((p_fs->p_api == &nrf_fstorage_sd) && nrf_sdh_is_enabled())
      {
           __enable_irq();
           __set_BASEPRI(0);
           (void)sd_app_evt_wait();
      }
      else
      {
            __WFE();
      }

      (void)NRF_LOG_PROCESS();
      waited_ms++;
      if (waited_ms > 5000)
      {
         NRF_LOG_ERROR("fstorage wait timeout");
         break;
      }
      NRF_LOG_PROCESS();
   }
}

It works fine when compiled in debug mode.

Whenever it's compiled in release mode and fstorage is used while ble is connected, the code enters 2 to 3 times sd_app_evt_wait(); an then hangs in this function.

Whenever it's compiled in release mode and fstorage is used after ble is disconnected, the code enters sd_app_evt_wait(); and hangs in this function immediately.

--> I guess no event is generated any more or masked.

Why this is happening?

  • Hi Simon - thanks for this.

    I assume this test has been done with the code compiled as Release and downloaded to the device with 'Build and Run'.
    Did you have to modify or exclude anything on my code to make it run? 

    Can you please confirm?

    This behavior is how I expect it should run. But on my device I have the issue described. Could it be that I have some conflicts with interrupts or modules which are active and lead to a 'hanging' in run-time? With my tests I can proof that not one byte is being written to the flash - if it is a 'hanging' then it happens right at the beginning.

    Thanks for your support  - I really need it.

    Stephan

  • Correct, this was done with the "Build and Run" call. I did not change anything, but did test on a development kit. If you are seeing this issue when flashing on a custom board, I'd recommend trying on the nRF52832 DK to make sure whether this is only occurring on the custom board or if you see the same behavior on a DK as well.

    Best regards,

    Simon

Related