About NCS3.1.X MPSL ASSERT

   Platform : NRF54L15
 NCS(2025.9): 3.0.2
NCS(2025.10): 3.1.1  Commit: e2a97fe2578a
      Zephyr: 4.1.99 Commit: ff8f0c579eeb

Cause of the issue
         Earlier, when I were producing products (around 600 units with 2025.9), about 30% of the chips had difficulty connecting. Later, it was found that the boards that disconnected immediately after connecting were stuck at "MPSL ASSERT: 109, 585."
         At that time, the SDK used was 3.0.2. After consulting AI, He was advised to increase CONFIG_MPSL_HFCLK_LATENCY to 1400-1650. The original SDK default was 845, and after I increased it to 1000, the connection yield of the product improved. However, the actual use was still not very stable.
         Until the 3.1.0 update in October 2025, which mentioned optimizations related to MPSL, I updated the SDK to 3.1.1. The actual use was indeed much more stable than 3.0.2, but "MPSL ASSERT: 109, 585" still occasionally occurred.



I think the assertion scenario may be due to the following two possibilities:
1. My system has long delay blocking, which may currently be reflected in the regular operation of RRAM in my system, such as writing logs to RRAM once per second, or writing to external norFlash.
      I have also evaluated the interface delay for writing to RRAM. The schemes are NVS > ZMS > RRAM single. Since using the system storage management scheme may cause uncontrollable and mysterious delays, I ended up directly operating on RRAM single.
2. The SDK 3.1.1 has not completely fixed the MPSL temperature drift issue.

Parents
  • Hi,

    Do you have a bootloader in the device? If so, can you double check that the LF clock source you have configured is the same in the bootloader and application? We have seen this assert before when the bootloader used LFXO and application used LFRC.

  • Yes, I have mcuboot, and all set the HFXO

    &hfxo {
    	load-capacitors = "internal";
    	load-capacitance-femtofarad = <16250>;
    };

  • Hi,

    I see. But what about the low frequency clock source configuration? Can you share that for both the bootloader and application? (I ask because of a known issue that can be triggered by a mismatch here, and this can then affect the HFXO as that is used to calibrate the LFRC). The workaround for that is to make sure that the same clock source is used in the bootloader and application.

  • During the early stages of the project, external matching capacitors were added in the PCB design. However, during later production, it was discovered that there was a significant frequency deviation, and even setting the calibration parameters to their maximum values could not achieve the target value. At that time, the test results showed a very low connection rate, with the measured frequency deviation exceeding 30K.

    Later, the oscillator circuit design was changed to match the EVB, without using external matching capacitors. The internal capacitor calibration value was used on the DTS, and each motherboard was calibrated during the production process. The target value was less than 15K. The DTS parameter 16250 indicates the default value. During the application initialization, I will use the calibration value set in production before initializing bt_enable.

    // Mcuboot Zephyr.dts
    clocks {
    
    		/* node '/clocks/pclk' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:52 */
    		pclk: pclk {
    			compatible = "fixed-clock";     /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:53 */
    			#clock-cells = < 0x0 >;         /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:54 */
    			clock-frequency = < 0xf42400 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:55 */
    			phandle = < 0xe >;              /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/lfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:58 */
    		lfxo: lfxo {
    			compatible = "nordic,nrf54l-lfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:59 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:60 */
    			clock-frequency = < 0x8000 >;             /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:61 */
    			load-capacitors = "internal";             /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:35 */
    			load-capacitance-femtofarad = < 0x4268 >; /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:36 */
    			phandle = < 0xd >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/hfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:64 */
    		hfxo: hfxo {
    			compatible = "nordic,nrf54l-hfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:65 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:66 */
    			clock-frequency = < 0x1e84800 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:67 */
    			startup-time-us = < 0x356 >;              /* in zephyr/boards/nordic/nrf54l15dk/nrf54l15dk_common.dtsi:112 */
    			load-capacitors = "internal";             /* in ../../shrm2/shrm_2/suunto/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:29 */
    			load-capacitance-femtofarad = < 0x3f7a >; /* in ../../shrm2/shrm_2/suunto/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:30 */
    			phandle = < 0x6 >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:226 */
    		};
    
    		/* node '/clocks/hfpll' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:71 */
    		hfpll: hfpll {
    			compatible = "fixed-clock";      /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:72 */
    			#clock-cells = < 0x0 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:73 */
    			clock-frequency = < 0x7a12000 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:74 */
    			phandle = < 0x1 >;               /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:30 */
    		};
    	};
    
    
    
    // application Zephyr.dts
    	clocks {
    		/* node '/clocks/pclk' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:52 */
    		pclk: pclk {
    			compatible = "fixed-clock";     /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:53 */
    			#clock-cells = < 0x0 >;         /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:54 */
    			clock-frequency = < 0xf42400 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:55 */
    			phandle = < 0xe >;              /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/lfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:58 */
    		lfxo: lfxo {
    			compatible = "nordic,nrf54l-lfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:59 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:60 */
    			clock-frequency = < 0x8000 >;             /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:61 */
    			load-capacitors = "internal";             /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:35 */
    			load-capacitance-femtofarad = < 0x4268 >; /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:36 */
    			phandle = < 0xd >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/hfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:64 */
    		hfxo: hfxo {
    			compatible = "nordic,nrf54l-hfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:65 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:66 */
    			clock-frequency = < 0x1e84800 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:67 */
    			startup-time-us = < 0x356 >;              /* in zephyr/boards/nordic/nrf54l15dk/nrf54l15dk_common.dtsi:112 */
    			load-capacitors = "internal";             /* in ../../shrm2/shrm_2/suunto/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:148 */
    			load-capacitance-femtofarad = < 0x3f7a >; /* in ../../shrm2/shrm_2/suunto/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:149 */
    			phandle = < 0x6 >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:226 */
    		};
    
    		/* node '/clocks/hfpll' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:71 */
    		hfpll: hfpll {
    			compatible = "fixed-clock";      /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:72 */
    			#clock-cells = < 0x0 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:73 */
    			clock-frequency = < 0x7a12000 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:74 */
    			phandle = < 0x1 >;               /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:30 */
    		};
    	};

Reply
  • During the early stages of the project, external matching capacitors were added in the PCB design. However, during later production, it was discovered that there was a significant frequency deviation, and even setting the calibration parameters to their maximum values could not achieve the target value. At that time, the test results showed a very low connection rate, with the measured frequency deviation exceeding 30K.

    Later, the oscillator circuit design was changed to match the EVB, without using external matching capacitors. The internal capacitor calibration value was used on the DTS, and each motherboard was calibrated during the production process. The target value was less than 15K. The DTS parameter 16250 indicates the default value. During the application initialization, I will use the calibration value set in production before initializing bt_enable.

    // Mcuboot Zephyr.dts
    clocks {
    
    		/* node '/clocks/pclk' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:52 */
    		pclk: pclk {
    			compatible = "fixed-clock";     /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:53 */
    			#clock-cells = < 0x0 >;         /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:54 */
    			clock-frequency = < 0xf42400 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:55 */
    			phandle = < 0xe >;              /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/lfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:58 */
    		lfxo: lfxo {
    			compatible = "nordic,nrf54l-lfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:59 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:60 */
    			clock-frequency = < 0x8000 >;             /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:61 */
    			load-capacitors = "internal";             /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:35 */
    			load-capacitance-femtofarad = < 0x4268 >; /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:36 */
    			phandle = < 0xd >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/hfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:64 */
    		hfxo: hfxo {
    			compatible = "nordic,nrf54l-hfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:65 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:66 */
    			clock-frequency = < 0x1e84800 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:67 */
    			startup-time-us = < 0x356 >;              /* in zephyr/boards/nordic/nrf54l15dk/nrf54l15dk_common.dtsi:112 */
    			load-capacitors = "internal";             /* in ../../shrm2/shrm_2/suunto/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:29 */
    			load-capacitance-femtofarad = < 0x3f7a >; /* in ../../shrm2/shrm_2/suunto/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:30 */
    			phandle = < 0x6 >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:226 */
    		};
    
    		/* node '/clocks/hfpll' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:71 */
    		hfpll: hfpll {
    			compatible = "fixed-clock";      /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:72 */
    			#clock-cells = < 0x0 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:73 */
    			clock-frequency = < 0x7a12000 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:74 */
    			phandle = < 0x1 >;               /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:30 */
    		};
    	};
    
    
    
    // application Zephyr.dts
    	clocks {
    		/* node '/clocks/pclk' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:52 */
    		pclk: pclk {
    			compatible = "fixed-clock";     /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:53 */
    			#clock-cells = < 0x0 >;         /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:54 */
    			clock-frequency = < 0xf42400 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:55 */
    			phandle = < 0xe >;              /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/lfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:58 */
    		lfxo: lfxo {
    			compatible = "nordic,nrf54l-lfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:59 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:60 */
    			clock-frequency = < 0x8000 >;             /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:61 */
    			load-capacitors = "internal";             /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:35 */
    			load-capacitance-femtofarad = < 0x4268 >; /* in zephyr/boards/nordic/nrf54l15dk/nrf54l_05_10_15_cpuapp_common.dtsi:36 */
    			phandle = < 0xd >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:579 */
    		};
    
    		/* node '/clocks/hfxo' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:64 */
    		hfxo: hfxo {
    			compatible = "nordic,nrf54l-hfxo";        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:65 */
    			#clock-cells = < 0x0 >;                   /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:66 */
    			clock-frequency = < 0x1e84800 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:67 */
    			startup-time-us = < 0x356 >;              /* in zephyr/boards/nordic/nrf54l15dk/nrf54l15dk_common.dtsi:112 */
    			load-capacitors = "internal";             /* in ../../shrm2/shrm_2/suunto/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:148 */
    			load-capacitance-femtofarad = < 0x3f7a >; /* in ../../shrm2/shrm_2/suunto/boards/nrf54l15dk_nrf54l15_cpuapp.overlay:149 */
    			phandle = < 0x6 >;                        /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:226 */
    		};
    
    		/* node '/clocks/hfpll' defined in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:71 */
    		hfpll: hfpll {
    			compatible = "fixed-clock";      /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:72 */
    			#clock-cells = < 0x0 >;          /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:73 */
    			clock-frequency = < 0x7a12000 >; /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:74 */
    			phandle = < 0x1 >;               /* in zephyr/dts/vendor/nordic/nrf54l_05_10_15.dtsi:30 */
    		};
    	};

Children
Related