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

SOFTDEVICE: ASSERTION FAILED while running mesh.

Hi, I'm getting regular crashes with my app: SOFTDEVICE: ASSERTION FAILED.

Using and NRF52832, SDK 15.3.0, SD 132 6.1.1, and Mesh SDK 3.1.0.

With DEBUG defined, I don't really get more info: id=1, pc=148742, info=0.

The last mesh log usually is something with TX (mostly net_beacon.c,  265, BEACON TX).
One crash, I also had a log of getting event NRF_EVT_RADIO_SESSION_IDLE.

I use the mesh SDK to communicate via mesh between nodes, to advertise iBeacon (100ms interval), and I use the scan callback. Next to that, I also use the SD to advertise service data.

Parameters:

	nrf_clock_lf_cfg_t lfclksrc;
	lfclksrc.source = NRF_SDH_CLOCK_LF_SRC;
	lfclksrc.rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV;
	lfclksrc.rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV;
	lfclksrc.accuracy = NRF_CLOCK_LF_ACCURACY_20_PPM;

	mesh_stack_init_params_t init_params;
	init_params.core.irq_priority       = NRF_MESH_IRQ_PRIORITY_THREAD;
	init_params.core.lfclksrc           = lfclksrc;
	init_params.core.p_uuid             = NULL;
	init_params.core.relay_cb           = NULL;




Any idea of what causes this crash?

Parents
  • Let me see if I can get a hold of a softdevice elf file. Then we could use the addr2line tool to see where the softdevice assert is occuring. I will get back to you soon.

  • What happens if you decrease the iBeacon advertising interval to say every 2 seconds? Do you get the assert then?

  • Which priorities are you running in your example (see link)?

  • All mesh functions are called from thread, from the main loop (I'm using the app scheduler).

    Edit: while checking your link, I do notice that I hadn't set NRF_SDH_DISPATCH_MODEL to 1 yet. I will try and see if that helps. Until now, I manually put events that I actually use on the app scheduler. Does this setting matter for the mesh code?

    Edit2: With NRF_SDH_DISPATCH_MODEL 1, I'm still getting the crash.

    The one that's easiest to reproduce is the one on boot, where i get timeouts from FDS, and then this event 7 (NRF_EVT_RADIO_SESSION_IDLE).

    The back trace I have in that case:

    #0  0x0003b012 in app_error_fault_handler (id=1, pc=86552, info=0) at (...)/SDK-15-3/components/libraries/util/app_error_weak.c:100
    #1  0x00023de8 in ?? ()
    Backtrace stopped: previous frame identical to this frame (corrupt stack?)

    (gdb) info registers
    r0             0x0    0
    r1             0x1    1
    r2             0xe000e100    3758153984
    r3             0x80000000    2147483648
    r4             0x10001    65537
    r5             0x0    0
    r6             0x1    1
    r7             0x15218    86552
    r8             0x0    0
    r9             0x20005eac    536895148
    r10            0x20000000    536870912
    r11            0x0    0
    r12            0x0    0
    sp             0x2000fd98    0x2000fd98
    lr             0x3c0b9    245945
    pc             0x3b012    0x3b012 <app_error_fault_handler+110>
    xpsr           0x810f0003    2165243907
    msp            0x2000fd98    536935832
    psp            0x0    0
    primask        0x1    1
    basepri        0x0    0
    faultmask      0x0    0
    control        0x0    0
    fpscr          0x80000010    2147483664

  • Also tried with PERSISTENT_STORAGE 0, but still getting the same crash.

  • I tried setting TIMESLOT_END_SAFETY_MARGIN_US to 1000. In that case, I still quite often get the FDS timeouts on boot, but it doesn't result in the event NRF_EVT_RADIO_SESSION_IDLE, and a softdevice assert anymore.

    Does that mean the 100 is too tight? How do you determine the correct value?

  • Have you tried using the addr2line tool? How are you doing the iBeacon advertising? Could you upload some code so we can double check how you are doing this? Are you using the softdevice to do the iBeacon advertising?

Reply Children
Related