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

High power consumption on SYSTEM OFF -nrf52820

Hi,

GOAL : I try to measure the current consumption in system off only.

PROBLEM : I measure a current of 8uA in system off while in the datasheet of the PAN1781 et nrf52820 it is sub uA with no ram retention.

HARDWARE: I am using a PAN1781 (nrf52820) with the dev board from panasonic ENW89857AXKF.

SOFTWARE: I started using the bluetooth/peripheral_lbs exemple that i modified with the following code. 

void main(void)
{
  NRF_POWER->SYSTEMOFF = 1;
  for(;;){}
}

I tried to desactivate the peripherals in zephyr:

# Drivers and peripherals
CONFIG_I2C=n
CONFIG_WATCHDOG=n
CONFIG_GPIO=n
CONFIG_PINMUX=n
CONFIG_SPI=n
CONFIG_SERIAL=n

How to reduce the consumption to sub uA ? 

Thanks for your help.

Parents
  • I have no experience with the board in question or the nRF52820 (I use a nRF52832)
    But since you don't seem to have used any peripherals I assume a low risk of it being one of the anomalies described in one of the Product Anomaly Notifications.
    I also assume this is after a cold boot with no debugger active and all peripherals reset to there normal power on state

    I would:
    1) Look at the schematic of you dev board, are you only measuring the nrf current draw?
    (especially looking for voltage regulators and also considering parasitic draw of other components)

    2) Read though the PAN document for the nRF52820 (once again just to make sure

    3) As a last measure I might consider creating a firmware that doesn't use the SDK and SoftDevice that immediately powers the chip down
    (To get a reference measurement of how low it is possible to get the board to go)

  • 1) I tried disconnecting the jumper that power the RF module (PAN1781/nrf52820), I measured 6.5uA ! Which means the devboard consume 6.5uA.

    To sum Up:

    Measure no load = 10nA

    Measure with DK only = 6.5uA

    Measure with DK + RFmodule = 8.3 uA

    Deducing RFmodule=1.8uA .

    2) This is better but not quite what's written on the datasheet.

    3) How would you do that ? I couldn't find any exemples without zephyr ? 

  • 3) You basically just write the Interrupt table to jump directly to some startup code that power down the chip (either in assembly or C).

    But I would stay with 1) for a while

    https://b2b-api.panasonic.eu/file_stream/pids/fileversion/247007  mentions:
    VDDH (HV mode) Supply Voltage VDDH (optional) min 2.5V max 5.5V

    And I believe that the stated typical currents are only for:
    "Assume VDD = 3 V, Tamb = 25 °C, if nothing else stated, DC/DC enabled"

    According to https://infocenter.nordicsemi.com/pdf/nRF52820_PS_v1.3.pdf page 69
    You can determine the power source from:
    MAINREGSTATUS Address offset: 0x640

    Maybe the high voltage regulator has an Iq of ~1.5uA ?

  • VDDH is shorted to VDD 3.3V. According to the datasheet:

    "The system enters Normal Voltage mode when the supply voltage is connected to both the VDD and VDDH pins (pin VDD shorted to pin VDDH)."

    After reading the register with :

    void main(void)
    {
      printk("Voltage mode : %s ", NRF_POWER->MAINREGSTATUS ? "High" :"Normal");
      NRF_POWER->SYSTEMOFF = 1;
      for(;;){}
    }

    It return "Normal".

    Maybe the two external oscillators are responsible for this uA. RTC peripheral is not listed in the prj.conf.

    I am going to try to disable them.

  • After disabling both RTC I did not measure any change in consumption:

    void main(void)
    {
      printk("Voltage mode : %s ", NRF_POWER->MAINREGSTATUS ? "High" :"Normal");
      NRF_RTC0->TASKS_STOP=1;
      NRF_RTC0->INTENCLR=0xFFFFFFFF;
      NRF_RTC0->EVTENCLR=0xFFFFFFFF;
      NRF_RTC1->TASKS_STOP=1;
      NRF_RTC1->INTENCLR=0xFFFFFFFF;
      NRF_RTC1->EVTENCLR=0xFFFFFFFF;
    
      NRF_POWER->SYSTEMOFF = 1;
      for(;;){}
    }

    I don't know if they were started before tho.

Reply
  • After disabling both RTC I did not measure any change in consumption:

    void main(void)
    {
      printk("Voltage mode : %s ", NRF_POWER->MAINREGSTATUS ? "High" :"Normal");
      NRF_RTC0->TASKS_STOP=1;
      NRF_RTC0->INTENCLR=0xFFFFFFFF;
      NRF_RTC0->EVTENCLR=0xFFFFFFFF;
      NRF_RTC1->TASKS_STOP=1;
      NRF_RTC1->INTENCLR=0xFFFFFFFF;
      NRF_RTC1->EVTENCLR=0xFFFFFFFF;
    
      NRF_POWER->SYSTEMOFF = 1;
      for(;;){}
    }

    I don't know if they were started before tho.

Children
Related