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

When I get the SD Assertion at address 0x12D7E (SD132 V3.0.0)

Hi,

can you please tell me in what cases I get this assertion?

SOFTDEVICE: ASSERTION FAILED, PCxxx: 0x12D7E

It seems to happen when a connection is active, timeslot is active and trying to erase or write to flash.

Regards

Martijn

Parents
  • Hi Martijn, 

    Could you let me know how did you do the flash operation when in timeslot ? 
    As far as I know, you still need to call the softdevice's flash API instead of accessing NVMC directly. 

    The assert location you provided  pointing to an assert that the RADIO is not ready when needed. I suspect that the flash operation took long time and affecting the radio disabling when the softdevice taking over. 

  • Hi Hung Bui,

    Yes that's what I'm doing. The sd_flash_page_erase() is used to erase the flashpage.

    Is it the responsibility of the SoftDevice to have the RADIO ready when needed even though the application has requested to erase a flash page (via the softdevices's flash API)? Or should the application not start an erase when the end of the timeslot is nearer than the worst case erase time?

  • Hi Martijn, 


    From my understanding, if you call sd_flash_page_erase() the action will only be queued and won't be executed until the timeslot is finished. 
    Could you please verify if you don't call sd_flash_page_erase() inside the timeslot you don't see the assert anymore ? 

    I checked with the developer and it seems that you may need to handle flash operation manually (use NRF_NVMC directly, and make sure it inside a safe margin timing so that the timeslot won't expire before the function finishes). 

    If you can provide a minimal example that reproduce the issue so that we can test and verify here it would be great.

Reply
  • Hi Martijn, 


    From my understanding, if you call sd_flash_page_erase() the action will only be queued and won't be executed until the timeslot is finished. 
    Could you please verify if you don't call sd_flash_page_erase() inside the timeslot you don't see the assert anymore ? 

    I checked with the developer and it seems that you may need to handle flash operation manually (use NRF_NVMC directly, and make sure it inside a safe margin timing so that the timeslot won't expire before the function finishes). 

    If you can provide a minimal example that reproduce the issue so that we can test and verify here it would be great.

Children
No Data
Related