We have been tracking down the source of excessive power consumption that we have been seeing with the nRF52840. Our application is spending the vast majority of it's time in system on sleep mode. The electrical specification states that the nRF52840 should be consuming 2.35 uA with full ram retention. We have some external peripherals that are also consuming some power but we should be around 25 uA total in this state. What we are seeing is around 1.2 mA.
Our application is (infrequently) sampling 5 sensors using the SAADC. We are taking 6 samples of the 5 sensors, a total of 30 samples, when a GPIOTE event occurs. We need to start sampling within 4 ms of the event, timing is critical. The event we are looking for is over within 6-8 ms. This is being done currently using the PPI channels and is working very well with the exception of the power usage. We are also running the S140 soft device for bluetooth connectivity.
I have seen multiple threads discussing the SAADC and EasyDMA as the sources of excessive power consumption. The solution seems to be to disable SAADC and only enable it when it is needed. We tried this approach and the power consumption does indeed drop to the 25 uA we were expecting.
The obvious solution would be to enable the SAADC it in our interrupt handler for the GPIO pin that triggers the ADC collection. My concern is the softdevice. I have heard anecdotal stories that the softdevice can delay other processing by far longer than the 4 ms we have to begin sampling.
Is there a way to leave the ADC disabled and to guarantee that it is re-enabled within this 4 ms window?
Thanks,
Ted.