'ARCH_EXCEPT with reason 3'

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

Parents Reply Children
No Data
Related