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

sd_flash_write() cause NRF_FAULT_ID_SD_ASSERT

Hi,

I have run into an issue with nrf52840 on pca10056 v1.0.0 board. The softdevice is SD v6.1.0. It seems to be a hardfault which cause a reset when I tried to call sd_flash_write(), sd_flash_page_erase() is OK though. The address and buffer is 4 byte aligned, the number of word is 1024.

Following the parameter of the callback error that Softdevice invoked

  • id = 1 (NRF_FAULT_ID_SD_ASSERT)
  • pc= 0x00014A3A
  • info = 0x00

if SD is not enable, there will be no problems at all. Strange things is the very same code run without issue on nrf52832 S132 v6.1.0.

I am appreciated if anyone could provide a hint why SD assert at that pc location.

Thanks in advance

Parents Reply Children
  • Hi, Einar.

    I'm suffering from this issue too though my buffer size is 512(bytes).

    1. Does "DRGN-12539" affect only "LARGE buffers"?

    I'm suspecting that the time scheduled for "sd_flash_write(p_dst, p_src, size)" is calculated according to the "size" in its arguments. Isn't it?

    If so, the real time spent can be larger than expected(calculated) irrespective of size(i.e. buffer is LARGE or not).

    2. Please let me know the detailed mechanism which softdevice is using to estimate the required time.

    3. If this issue is not reliable fixed even in 7.0.1 and will be fixed in next MAJOR version, would it be 8.x?

  • Hi,

    1. This is not the exact same issue as DRGN-12539. The fix there in 7.0.1 is for erase operations only, not for write operations.

    2. This is a fixed number that is calculated beforehand and hardcoded in the SoftDevice, and the timeout is supposed to be set to after the maximum write duration. But the bug discussed in this thread is because this timeout is set too low.

    3. It is not fixed in 7.0.1. It will most likely be fixed in the next major SoftDevice release, but I cannot promise anything.

  • Thank you for the prompt reply, Einar.

    Please confirm if my understanding is right.

    1. SD before 7.0.1 (such as SD 6.1.1) may raise "NRF_FAULT_ID_SD_ASSERT" on "sd_flash_page_erase()"

    2. "sd_flash_write()" is safe on all SD versions(e.g. 6.1.1, 7.0.1) as long as the buffer size is less than 1024 words.

  • 1. Yes.

    2. No. sd_flash_write() with large words are not safe. The safe buffer length depends on the location of the source buffer (flash or RAM). Based on the tests we have done, 512 words are always safe. In practice, the limit seems to be about ~800 words if the source buffer is in RAM, but I cannot guarantee an exact number.

  • Ok, I got it.

    Then, my issue must come from "sd_flash_page_erase()" because my buffer size is only 128 words (512 bytes).

    In my case, to change LF clock source to LFRC from LFXO alleviates the problem but I don't know how it affects. Of cource, LF clock has relation with the scheduler of softdevice.

    but I don't like to change the clock source to LFRC.

    Do you know any other workaround for the problem?

Related