This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

NRF52840 too high power consumption

Hi,

I know that this issue is well documented in the forum, but I have read everything and tried all of the suggested fixes, but nothing worked.

I am trying to Enter systemOFF mode and wake up from an external signal later.

when I enter systemOFF the chip draws about 60uA of power, which is way to much.

I made a small programm to test everything and found out, that using Interrupt pins will use a lot of power, but I thought, that this would only matter for systemON modes, as everything should get disabled in systemOFF mode... do I have to do anything else but

NRF_POWER->SYSTEMOFF = 1;

in order to get below 1uA?

my first thought was, that the chip may be in debug mode, but I uploaded the program, disconnected everything and then measured, and it was still that high.

my setup:

NRF52840-preview-DK + PowerProfilerKit.

Ps. when I have an empty int main() with only the systemOFF in it, I will get about 1uA power consumption, which is OK, but still strange as it should go lower?

  • Hi,

    How did you configure the wakeup pins? You should make sure that the pins are not configured in a way that will draw current through pull-ups, etc.

    Can you provide a minimal project that can be used to reproduce this issue on the DK?

    Best regards,
    Jørgen

  • I did not configure any wakeup source for testing to eliminate that issue.

    I can give you a minimal project, BUT it uses MBED to configure a Interrupt pin, as I will use mbed for my main project, the functions to power off the chip is pure nordic SDK though.. is this ok for you, or is mbed a no-go?

    also, I just found out that if I just make an instance of the InterruptIn the current will drop to 1.8uA, but if I configure its mode (pullUp/down/none) the current will stay at about 40uA.

    #include "mbed.h"
    #include "PinNames.h"
    #include "nrf_soc.h"
    
    
    InterruptIn irt(P0_13);
    void take_nap(){
        NRF_POWER->SYSTEMOFF=1;
        sd_power_system_off();      //consumes slightly less power
        while(1);
    }
    
    int main(void)
    { 
        NRF_POWER->DCDCEN = 0x00000001;
        NRF_UART0->TASKS_STOPTX = 1;
        NRF_UART0->TASKS_STOPRX = 1;
        NRF_UART0->ENABLE = 0;
        
        irt.mode(PullNone); //when using this, it will consume more power.
    
        while (true) 
        {
           take_nap();
        }
    }

    thank you for your help,

    Jonas

  • In general, we do not provide much support on mbed, as it is being developed by 3rd party. I do not know how InterruptIn is implemented in mbed. Have you tested with other pins? P0.13 is connected to VDD through LED and pull-up by default on the nRF52840 (P)DK.

  • OK. I just verified it, its indeed the pullups and the LED, if I use P012, I get a poweroff current of 1.9uA.

    however, I just noticed another problem, in my main program, I still see a constant current of about 38uA, but only if I used cryptographic functions prior.. Do I have to manually turn off the cryptocell hardware?

    anyways, I will also ask this in the mbed forums, as its related to MBEDTLS.

    one question for you though, Is 1.9uA an acceptable systemOFF current? I feel like it should drop even lower.

    thanks for pointing me in the right direction!

  • I would expect mbed to use software cryptography for MBEDTLS by default, are you sure it is using the cryptocell? There is an errata related to FPU usage, but this should give you considerably higher current draw.

    1.9 uA sounds a bit high for System OFF, but it could be possible with the right configuration. See the sleep current consumption in the electrical specifications. The PPK might also have difficulties measuring lower currents.

Related