nRF52840 ADC offset calibration on B404X

Hi all,

I'm using a B404X for a precision analog measurement application and have been digging into ADC accuracy. I noticed that Nordic's nRF52840 product spec explicitly recommends running CALIBRATEOFFSET at startup and whenever ambient temperature changes by more than 10°C, since the SAADC has a temperature-dependent offset.

I took a look at the Device OS source (hal/src/nRF52840/adc_hal.cpp) and found that hal_adc_calibrate() currently just returns SYSTEM_ERROR_NOT_SUPPORTED — so it seems like no calibration is being performed at any point by the OS.

Two questions for the community:

  1. Can anyone confirm whether Device OS performs SAADC offset calibration anywhere else in the stack that I may have missed?

  2. For those doing precision analog work on B404X or similar nRF52840-based Particle devices — what's your approach to working around this? I'm considering implementing a software digital offset calibration (reading a known voltage periodically and correcting for drift), but curious if there are established patterns people use within the Particle ecosystem.

Thanks!

It does not appear that calibration is done. However, you can easily call it yourself from user firmware. Include this:

#include <nrfx_saadc.h>

Call this:

nrfx_saadc_calibrate_offset();