Saving coredump to flash

I'm trying to enable saving of coredump to flash. I'm running on nrf52840 with NRF SDK 1.6.1.

I have defined the following:

CONFIG_DEBUG_COREDUMP=y
CONFIG_DEBUG_COREDUMP_BACKEND_FLASH_PARTITION=y
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
I set up a partition using pm_static.yml:
coredump_partition:
  address: 0xff000
  size: 0x1000
  region: flash_primary
and added the entry in the dts file under &flash0:
coredump_partition: partition@ff000 {
  label = "coredump_partition";
  reg = <0x000ff000 DT_SIZE_K(4)>;
};
I then added a crash shell command that invokes a crash using either k_oops(); or __asm__ volatile("udf #0" : : : );. In either case, I verified that a coredump is generated if using LOGGING.
However, when I tried to use the BACKEND_FLASH_PARTITION it first complained about not being able to find an MSPL timeslot. There were no instructions regarding MPSL but I checked and saw that the default settings has 0 timeslots. I set it to 1 timeslot. Then I'm getting the following error when it's trying to erase the flash partition in preparation for coredump. 
<err> flash_sync_mpsl: timeout
<err> coredump: Cannot start coredump!
I did verify that I can successfully erase the coredump using coredump erase
< coredump erase
00> coredump erase
00> Stored coredump erased.
There seems to be some issue with accessing flash during a coredump. There are no examples specific to nrf52 anywhere.
Parents
  • Hi,

    You only see this issue on samples that uses Bluetooth?

    Could you try setting these configs? (taken from this .config file)

    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=y
    CONFIG_DEBUG_COREDUMP=y
    CONFIG_DEBUG_COREDUMP_BACKEND_FLASH_PARTITION=y
    CONFIG_MP_NUM_CPUS=1
    CONFIG_FLASH=y
    CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
    CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_LINKER_RAM=n

  • Our application does use Bluetooth. I don't have a sample application without Bluetooth that I can try on our board or even the DK board.

    We already had most of these set. The only difference was LOG_MODE. I updated LOG_MODE to be minimal but that did not make any difference. Still getting:

    00> =====> Crashing system... (this is expected crash)
    00> E: r0/a1: 0x00000003 r1/a2: 0x20013680 r2/a3: 0x00000040
    00> E: r3/a4: 0x00000000 r12/ip: 0x00000000 r14/lr: 0x0002532b
    00> E: xpsr: 0x41000000
    00> E: Faulting instruction address (r15/pc): 0x00042352
    00> E: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0
    00> E: Current thread: 0x200031b0 (shell_rtt)

    // This is where it's trying to dump the core to flash but is failing
    00> E: timeout
    00> E: Cannot start coredump!

Reply
  • Our application does use Bluetooth. I don't have a sample application without Bluetooth that I can try on our board or even the DK board.

    We already had most of these set. The only difference was LOG_MODE. I updated LOG_MODE to be minimal but that did not make any difference. Still getting:

    00> =====> Crashing system... (this is expected crash)
    00> E: r0/a1: 0x00000003 r1/a2: 0x20013680 r2/a3: 0x00000040
    00> E: r3/a4: 0x00000000 r12/ip: 0x00000000 r14/lr: 0x0002532b
    00> E: xpsr: 0x41000000
    00> E: Faulting instruction address (r15/pc): 0x00042352
    00> E: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0
    00> E: Current thread: 0x200031b0 (shell_rtt)

    // This is where it's trying to dump the core to flash but is failing
    00> E: timeout
    00> E: Cannot start coredump!

Children
Related