This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

nrf52 saadc current

Hi

I have noticed that the moment I start SAADC task ("nrf_saadc_task_trigger(NRF_SAADC_TASK_START);"), my CPU current consumption rises by 2 mA! (tested with chip version QFAABA / 1542AB, on PCA 10036 board).

according to Product Specification 0.6.3, "ADC current during ACQuisition and CONVersion35 700 µA".

How can that be explained?

Thanks Yaron

  • Hi

    I believe the extra current you see is the current drawn by the EasyDMA used by the SAADC. EasyDMA draws about 1.2 mA, and added to the 700 uA SAADC current it sums to ~2 mA. Unfortunately the EasyDMA current is not documented anywhere. Nor is the SAADC driver taking it into account and disabling the EasyDMA feature when not needed. The issue is reported internally and a workaround will be available in the final release of SDK V11.0.0.

  • Any updates on this issue? I'm using Rev 1 silicon, release SDK 11.0.0 and release SoftDevice 132 2.0.0 and I'm seeing a constant 2 mA draw as soon as I do nrf_drv_saadc_sample_convert(). I'm only calling it once every minute or so, but it never drops down after that first call.

    EDIT: Never mind, saw the answer on another question.

  • The answer is devzone.nordicsemi.com/.../ if anyone finds this question first, as I did.

  • I met same problem by SDK 11.0. I want to decrease the power by deinit SADDC after get the battery level, however the power consumption is increased after I call the function of nrf_drv_saadc_uninit. How can I fix it??

  • @Jorgewu I ended up editing the nrf_drv_saadc.c file in the SDK directly. I added TASK_STOP to nrf_drv_saadc_sample_convert() and it works fine without having to use uninit. So here's the code snippet with the added STOP:

    uint32_t timeout = HW_TIMEOUT;
    while (0 == nrf_saadc_event_check(NRF_SAADC_EVENT_END) && timeout > 0)
    {
        timeout--;
    }
    nrf_saadc_task_trigger(NRF_SAADC_TASK_STOP);
    nrf_saadc_event_clear(NRF_SAADC_EVENT_END);
    
Related