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

Sleep Power Consumption and Wakeup from RTC

I'm using nrf52810, which have very high power consumption at sleep mode(~600uA),i need to reduce it.
i need RTC wake up at every 15 minutes interval.

  • Hi,

    The IDLE current with RTC running should be around 2 uA. Are you testing this with one of the SDK examples, and do you have logging over UART turned off? 

  • I'm using this routine

    void nrf_pwr_mgmt_run(void)
    {
    PWR_MGMT_FPU_SLEEP_PREPARE();
    PWR_MGMT_SLEEP_LOCK_ACQUIRE();
    PWR_MGMT_CPU_USAGE_MONITOR_SECTION_ENTER();
    PWR_MGMT_DEBUG_PIN_CLEAR();
    PWR_MGMT_DEBUG_PIN_SET();

    // Wait for an event.
    //#ifdef SOFTDEVICE_PRESENT
    //if (nrf_sdh_is_enabled())
    {
    ret_code_t ret_code = sd_app_evt_wait();
    ASSERT((ret_code == NRF_SUCCESS) || (ret_code == NRF_ERROR_SOFTDEVICE_NOT_ENABLED));
    UNUSED_VARIABLE(ret_code);
    }
    // else
    //#endif // SOFTDEVICE_PRESENT
    {
    // Wait for an event.
    // __WFE();
    // Clear the internal event register.
    // __SEV();
    // __WFE();
    }

    PWR_MGMT_DEBUG_PIN_CLEAR();
    PWR_MGMT_CPU_USAGE_MONITOR_SECTION_EXIT();
    PWR_MGMT_SLEEP_LOCK_RELEASE();
    }

    My first point to decrease current consumption at sleep mode

    i use same code as in example of SDK

  • int main(void)
    {
    bool erase_bonds;
    // Initialize.
    uart_init();
    log_init();
    timers_init();
    // buttons_leds_init(&erase_bonds);
    power_management_init();
    ble_stack_init();
    gap_params_init();
    gatt_init();
    services_init();
    advertising_init();
    conn_params_init();
    app_timer_start(timer_id,INTERVAL, NULL);
    // Start execution.
    printf("\r\nUART started.\r\n");
    NRF_LOG_INFO("Debug logging for UART over RTT started.");
    // Enter main loop.
    //advertising_start();
    for (;;)
    {
    /************change******************/
    nrf_gpio_pin_dir_set(4,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(6,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(9,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(10,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(12,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(14,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(15,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(16,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(18,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(20,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(25,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(28,NRF_GPIO_PIN_DIR_OUTPUT);
    nrf_gpio_pin_dir_set(30,NRF_GPIO_PIN_DIR_OUTPUT);
    //output high
    nrf_gpio_pin_set(4);
    nrf_gpio_pin_set(6);
    nrf_gpio_pin_set(9);
    nrf_gpio_pin_set(10);
    //output low

    nrf_gpio_pin_clear(12);
    nrf_gpio_pin_clear(14);
    nrf_gpio_pin_clear(15);
    nrf_gpio_pin_clear(16);
    nrf_gpio_pin_clear(18);
    nrf_gpio_pin_clear(20);
    nrf_gpio_pin_clear(25);
    nrf_gpio_pin_clear(28);
    nrf_gpio_pin_clear(30);

    // nrfx_uarte_uninit();
    //********end*********************/
    idle_state_handle();

    }

    }

  • Hi,

    The UART will draw around 600uA when enabled. Have you tried to not initialize it? Also, do you see any difference if you don't initialize the pins? I see you have some outputs that are set high.

  • Yes i tried after don't int UART...so no difference, but when i use this function(// nrfx_uarte_uninit();) just before sleep so the current consumption is increase(upto 2.5mA)...

Related