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

SOFTDEVICE: ASSERTION FAILED after using fds_gc

I have an issue when i am doing  writing of a structure where autoprog is a struct like this :

typedef struct
{
    uint8_t tag_tab[TAG_ID_LENGTH];
}tag;

typedef struct {
    uint8_t reader_cfg;
    //uint8_t reader_sn[SIZE_OF_SN];
    uint8_t reader_mac[PARAM_MAC_SIZE];
    uint32_t number_of_tag;    
    tag tab_tag_autorized[AUTOPROG_NB_OF_TAGS_MAX];   
    
} PARAM_AUTOPROG_t;

When AUTOPROG_NB_OF_TAGS_MAX = 10 i have no problem during the garbage collection but when it is 100 after 3 flash_write when the fonction fds_gc() is called there is a SOFTDEVICE: ASSERTION FAILED, i don't see the link between writing to flash and the sofdevice that has a problem.

is there a way to know why the softdevice stops ?

I am using nrf52_6.1.0 with SDK 15.2.0

Thank you for your help

Parents Reply Children
  • Hi thank you for you answer,

    i am using the function fds_update to write to the record, my record is around 700 bytes for the 100 tab and around 70 for the tab of 10.

    Is there a limit for the size of a record ?

    Do you see any link between using fds and have a softdevice issue ?

  • There shouldn't be a limit, but we have seen that there are some issues with some softdevices when the record size is too large. The issue is that fds_gc(), which will move the valid record's physical location uses some operations that takes too long, and the softdevice asserts, because it missed a critical time operation.I thought the limit was over 700 bytes, but I guess it also depends on what you are doing with the softdevice. E.g. if you have a connection with a small connection interval

    Can you try to debug, and let me know what it looks like when you get the assert? Does the assert point to some addresses, e.g. in the callstack?

     

    I am using nrf52_6.1.0 with SDK 15.2.0

    "You mean S140v6.1.0 with SDK15.2.0", right?

    BR,

    Edvin

  • Thank you,

    Yes i am using nrf52_6.1.0 with SDK 15.2.0 ,

    We are doing advert every 800ms and we have seen that the fds_gc() takes 170ms to be done so maybe it leads to a sofdevice assert because it takes too much time.

    "Can you try to debug, and let me know what it looks like when you get the assert? Does the assert point to some addresses, e.g. in the callstack?"

    Do you mean to debug the softdevice or the application ?

    If the record is to big what is the solution to take less time doing fds_gc ? should i cut my record in many pieces and write it with several steps ?

  • MarcAntoineProtiere said:
    Yes i am using nrf52_6.1.0 with SDK 15.2.0 ,

     So the S140 v6.1.0, right? Slight smile

     

    MarcAntoineProtiere said:
    Do you mean to debug the softdevice or the application ?

     I mean the application. The reason you say it is a softdevice assert is probably because you see it in the log? If you do a debug session, you should see that it runs to the case NRF_FAULT_ID_SD_ASSERT. If you put a breakpoint here. what does the call stack look like?

    BR,

    Edvin

  • yes  S140 v6.1.0

    Yes i was using the log with NRF_LOG_INFO and i get the sofdevice assert.

    I will try do it in debug and i let you know.

Related