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.
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)...