NCS v3.3.0: mpsl_init: MPSL ASSERT: 109, 615

Hey Team!
We are developing a radio-heavy BLE application on the nRF SDK version v.3.3.0. In normal operation, it is working fine, but after some time, we are encountering a MPSL fault always on the BLE central.

00> [ 1948.118408] <err> mpsl_init: MPSL ASSERT: 109, 615

00> [ 1948.118408] <err> os:   Fault escalation (see below)
00> [ 1948.118408] <err> os: ARCH_EXCEPT with reason 3
00> 
00> [ 1948.118469] <err> os: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0
00> [ 1948.118469] <err> os: Fault during interrupt handling
00> 
00> [ 1948.118499] <err> os: Current thread: 0x2000ce30 (unknown)


We don't have any custom MPSL slots active (CONFIG_MPSL_TIMESLOT_SESSION_COUNT=0) and as it is only happening on the BLE central.

The application is running on a custom board with a nRF52840 which only has a RC oscillator as our LF clock source. CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y and CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC_CALIBRATION=y are set.


For now, as the assert only happens after an undefined time (which can be hours), we only managed to reproduce it using a production build. We are currently trying to get more information by also trying to reproduce it with a debug build. Also, afterwards, we will then disable the channel survey feature to see if the assert also happens without it. For now, it would really help us to understand what the reason of the MPSL assert could be.

I will add more information as soon as we have it.

Parents
  • Hello,

    I have asked internally now, will let you know as soon as I learn more about the assert in question.

    Update: Please update to v3.3.0, where channel survey is no longer experimental. 

    Kenneth

  • Something else we just discovered, is that we get the error always after the same time.
    Reducing the clock calibration period (CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD) triggers this error faster.

    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD = 4000 (default) -> Assertion after approx. 25mins
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD = 1000 -> Assertion after approx. 7mins
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD = 500 -> Assertion after approx. 3.5mins
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD=500 and CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_MAX_SKIP=0 -> Assertion after approx. 2mins
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD=250 and CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_MAX_SKIP=0 -> Assertion after approx. 1min

    Edit: I added some logs to `
    mpsl_calibration_work_handler` and it seems like the assertion always triggers shortly after the 254th calibration is done.
  • Hello,

    Is it possible you have MCUBOOT enabled? If yes: Can you check what is the clock source (LFXO or LFRC) that is used for MCUBOOT?

    We suspect you may have configured LFXO for MCUBOOT and LRFC for application.

    Kenneth

  • Hi,

    Yes, we use MCUboot. The clock source is defined in our board files, therefore it should be used for both images.

    A look into .config of the mcuboot image also shows:

    CONFIG_NRFX_CLOCK=y
    # CONFIG_NRFX_CLOCK_USE_LFRC_CALIBRATION is not set
    # CONFIG_NRFX_CLOCK_LFXO_TWO_STAGE_ENABLED is not set
    CONFIG_NRFX_CLOCK_LF_CAL_ENABLED=y
    CONFIG_NRFX_CLOCK_LF_SRC_RC=y
    # CONFIG_NRFX_CLOCK_LF_SRC_XTAL is not set
    # CONFIG_NRFX_CLOCK_LF_SRC_SYNTH is not set
    # CONFIG_NRFX_CLOCK_LF_SRC_LOW_SWING is not set
    # CONFIG_NRFX_CLOCK_LF_SRC_FULL_SWING is not set
    
    ...
    
    CONFIG_CLOCK_CONTROL_NRF=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_FREQUENCY=32768
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING is not set
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC_CALIBRATION=y
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_LF_ALWAYS_ON=y
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_PERIOD=4000
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_MAX_SKIP=1
    CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_TEMP_DIFF=2
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_150PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_100PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_75PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_50PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_20PPM is not set
    CONFIG_CLOCK_CONTROL_NRF_ACCURACY=500


    Thanks.

  • Thanks for confirming, I will check with the team again.

Reply Children
Related