SAADC returns persistent erroneous values after short deep sleep on nRF54L (Differential + Oversampling)

Hi all,

I'm working with the nRF54L and encountering persistent SAADC issues after short deep sleep cycles.

Setup:

  • SAADC is configured in differential mode with oversampling enabled. It is configured for very high sampling rate (in the kHz range).
  • Before entering deep sleep, I call nrfx_saadc_abort() followed by nrfx_saadc_uninit() to halt conversions and cleanly shut down the peripheral.
  • After wake-up, I reinitialize the SAADC and begin sampling.
  • If the deep sleep duration is short (e.g., <2s), the SAADC returns consistently erroneous values after wake—these do not self-correct over time.
  • If the deep sleep is long (e.g., several seconds or more), the SAADC readings return to normal immediately after wake.

Notes:

  • GPIOs and reference voltages are stable.
  • No custom calibration routines are in place yet.
  • Using internal reference, differential mode, and oversampling via NRFX_SAADC_CONFIG_OVERSAMPLE.
  • The issue persists across multiple short sleep cycles and appears duration-dependent.

Questions:

  • Is there a known issue with SAADC state retention or reference settling when using differential mode + oversampling on nRF54L?
  • Could this be tied to power domain ramp-up, reference voltage stabilization, or peripheral clock synchronization?
  • Has anyone implemented a reliable workaround—e.g., dummy reads, forced calibration, or delay injection—after short sleep wake?

Any insights or shared experiences would be greatly appreciated. I can share code snippets or timing diagrams if helpful.

Thanks!

Parents Reply Children
Related