Hi,
I am using SDK 2.3.0 and I have two modules, coap server and coap_client.
This happened in the coap_client fw, where I use 'nrfx_nvmc_uicr_erase( )' function to erase the UICR memory. It doesn't happen all the time.
uart:~$ [00:43:30.734,832] <err> mpsl_init: MPSL ASSERT: 112, 2795 [00:43:30.734,832] <err> mpsl_init: MPSL ASSERT: 112, 2795 uart:~$ [00:43:30.734,863] <err> os: ***** HARD FAULT ***** [00:43:30.734,863] <err> os: ***** HARD FAULT ***** uart:~$ [00:43:30.734,893] <err> os: Fault escalation (see below) [00:43:30.734,893] <err> os: Fault escalation (see below) uart:~$ [00:43:30.734,893] <err> os: ARCH_EXCEPT with reason 3 [00:43:30.734,893] <err> os: ARCH_EXCEPT with reason 3 uart:~$ [00:43:30.734,954] <err> os: r0/a1: 0x00000003 r1/a2: 0x00000000 r2/a3: 0x00000004 [00:43:30.734,954] <err> os: r0/a1: 0x00000003 r1/a2: 0x00000000 r2/a3: 0x00000004 uart:~$ [00:43:30.734,985] <err> os: r3/a4: 0x200019f8 r12/ip: 0x4000b000 r14/lr: 0x0000aa9d [00:43:30.734,985] <err> os: r3/a4: 0x200019f8 r12/ip: 0x4000b000 r14/lr: 0x0000aa9d uart:~$ [00:43:30.735,015] <err> os: xpsr: 0x4100001b [00:43:30.735,015] <err> os: xpsr: 0x4100001b uart:~$ [00:43:30.735,046] <err> os: s[ 0]: 0x00000000 s[ 1]: 0x00000000 s[ 2]: 0x00000000 s[ 3]: 0x00000000 [00:43:30.735,046] <err> os: s[ 0]: 0x00000000 s[ 1]: 0x00000000 s[ 2]: 0x00000000 s[ 3]: 0x00000000 uart:~$ [00:43:30.735,107] <err> os: s[ 4]: 0x00000000 s[ 5]: 0x00000000 s[ 6]: 0x00000000 s[ 7]: 0x00000000 [00:43:30.735,107] <err> os: s[ 4]: 0x00000000 s[ 5]: 0x00000000 s[ 6]: 0x00000000 s[ 7]: 0x00000000 uart:~$ [00:43:30.735,137] <err> os: s[ 8]: 0x00000000 s[ 9]: 0x00000002 s[10]: 0x00000000 s[11]: 0x00000000 [00:43:30.735,137] <err> os: s[ 8]: 0x00000000 s[ 9]: 0x00000002 s[10]: 0x00000000 s[11]: 0x00000000 uart:~$ [00:43:30.735,168] <err> os: s[12]: 0x00000000 s[13]: 0x00000000 s[14]: 0x00000000 s[15]: 0x00000002 [00:43:30.735,168] <err> os: s[12]: 0x00000000 s[13]: 0x00000000 s[14]: 0x00000000 s[15]: 0x00000002 uart:~$ [00:43:30.735,198] <err> os: fpscr: 0x00000800 [00:43:30.735,198] <err> os: fpscr: 0x00000800 uart:~$ [00:43:30.735,198] <err> os: Faulting instruction address (r15/pc): 0x00019244 [00:43:30.735,198] <err> os: Faulting instruction address (r15/pc): 0x00019244 uart:~$ [00:43:30.735,290] <err> os: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0 [00:43:30.735,290] <err> os: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0 uart:~$ [00:43:30.735,321] <err> os: Fault during interrupt handling [00:43:30.735,321] <err> os: Fault during interrupt handling uart:~$ [00:43:30.735,382] <err> os: Current thread: 0x200030b8 (openthread) [00:43:30.735,382] <err> os: Current thread: 0x200030b8 (openthread) uart:~$ [00:43:31.152,496] <err> fatal_error: Resetting system [00:43:31.152,496] <err> fatal_error: Resetting system
I can see the fault instruction occurred at 0x00019244. When I checked the map file I can see this
.text.m_assert_handler 0x0000000000019204 0x50 modules/nrf/subsys/mpsl/init/lib..__nrf__subsys__mpsl__init.a(mpsl_init.c.obj) .text.mpsl_low_prio_init 0x0000000000019254 0x4c modules/nrf/subsys/mpsl/init/lib..__nrf__subsys__mpsl__init.a(mpsl_init.c.obj)
So this means the instruction must have belonged to 'modules/nrf/subsys/mpsl/init/lib..__nrf__subsys__mpsl__init.a(mpsl_init.c.obj)'
I couldn't isolate the particular instruction to a function in mpsl_init.c. Is there a way to do it? (I can think of by debugging, but not sure where to put the break points to or whether it is possible to put breakpoints in to the functions in this file)
What functions of mpsl_init.c does nrfx_nvmc_uicr_erase( ) uses?
Cheers,
Kaushalya