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.
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)...
To narrow down the problem, please comment out both uart_init();, log_init();, and the nrf_gpio_* calls.
i check after comment these function uart_init();, log_init(); and all nrf_gpio_pin_set/clear();, but after that the current consumption is increase to 3mA.
Are you using the default regulator settings, and did you make sure to exit debug mode before measuring?