System on and keep RTC running in ultra-low power

Hi Sir/Miss,

I'm using nrf52832, softdevice s132 and SDK 17.0.2.

In specification, I saw nrf52832 has a ultra low power mode. 

It's in system on with full retention RAM or without retention RAM. 

I enable a RTC2 to tick and count the calendar, I want to let nrf52832 in ultra low power mode and running RTC.

Then, it can be wake up by using GPIOs.

Is it possible to run RTC in ultra low power mode?

Another question, I remove peripheral circuit in our board. It's just keeping components which nrf52832 needs.

I try it with sd_power_system_off(); The sleep current nears specification value (1uA).

But, when I use sd_app_evt_wait() or __WFE. That current is 2.X mA.

And, it can't be waked up in sd_app_evt_wait() and __WFE.

Here is my entering sleep mode code.

void shutdown_configuration(void)
{
  uint32_t err_code;
    
  nrf_gpio_cfg_input(BTN_START_PIN, NRF_GPIO_PIN_NOPULL);
  
  while(1)
  {
    if(nrf_gpio_pin_read(BTN_START_PIN) == 1)
    {
      nrf_gpio_pin_sense_t sense =  NRF_GPIO_PIN_SENSE_LOW;
      nrf_gpio_cfg_sense_set(BTN_START_PIN, sense);
      
      break;
    }
  }
  
  
  //err_code = sd_power_system_off();   // 1uA
  //err_code = sd_app_evt_wait();       // mA
  //APP_ERROR_CHECK(err_code);
  
  // mA
  __SEV();
  __WFE();
  __WFE();
}

Please help.

Thank you.

Parents
  • Hi,

    It is possible to run the RTC in System ON mode, but not in System OFF. The expected current consumption is given by ION_RAMOFF_RTC in Current consumption: Ultra-low power, but note that any additional running peripheral will increase the current consumption, as entering System ON mode will not automatically power down peripherals.

    If you are measuring 2.x mA current, some additional peripherals must be running. The usual suspects at this current-level is for instance UARTE in receive mode, or the SAADC peripheral.

    Best regards,
    Jørgen

  • Hi Jørgen,

    I try to disable peripheral function. Power saving is under 1mA. But, it's still too high. I try to separate some code to check sleep current. Therefore, I still have few questions.

    1. I comment BLE initial function code as below:

    Before this, I don't run timer2_init() function (means comment timer2_init()), sleep current can be near 1uA. When I remove comment on timer2_init() (means run timer2_init()), and I disable and run un-initial timer2 before sleep. It's measured about 45uA. How do I close it?

    //uart_init();
      log_init();
    
      timers_init();
    
      drv_gpio_configuration();
      
      pwm_init();
      
      saadc_sampling_event_init();
      saadc_init();
      timer2_init();      // Question 1
      
      /* Question 3
      sync_rtc(22, 6, 8, 20, 02, 55);
      lfclk_config();
      rtc_config();*/
      
      power_management_init();
      /* Question 4 comment for checking peripheral sleep current
      ble_stack_init();
      gap_params_init();
      gatt_init();
      services_init();
      advertising_init();
      conn_params_init();*/

    2. Base on above code, I can't wake up SoC after entering system on mode. In previous wake up code, it works in system off. Instead of sd_power_system_off() to using WFE and WFI, it is ARM low-power standby mode.  It should be triggered by events for waking up. But, it looks like not working in my GPIO wake up pin.

    3. Enable comments at Question 3 block (RTC) and comment timer2_init() in above code.  The current measured 11uA. It is not near 1.9 uA. 

    4. Reserve RTC function (Question 3) and enable Question 4, and I don't enable advertising in this part. It has 820uA. Which function should be disabled?

    Please assistance me to solve it.

    Thank you.

Reply
  • Hi Jørgen,

    I try to disable peripheral function. Power saving is under 1mA. But, it's still too high. I try to separate some code to check sleep current. Therefore, I still have few questions.

    1. I comment BLE initial function code as below:

    Before this, I don't run timer2_init() function (means comment timer2_init()), sleep current can be near 1uA. When I remove comment on timer2_init() (means run timer2_init()), and I disable and run un-initial timer2 before sleep. It's measured about 45uA. How do I close it?

    //uart_init();
      log_init();
    
      timers_init();
    
      drv_gpio_configuration();
      
      pwm_init();
      
      saadc_sampling_event_init();
      saadc_init();
      timer2_init();      // Question 1
      
      /* Question 3
      sync_rtc(22, 6, 8, 20, 02, 55);
      lfclk_config();
      rtc_config();*/
      
      power_management_init();
      /* Question 4 comment for checking peripheral sleep current
      ble_stack_init();
      gap_params_init();
      gatt_init();
      services_init();
      advertising_init();
      conn_params_init();*/

    2. Base on above code, I can't wake up SoC after entering system on mode. In previous wake up code, it works in system off. Instead of sd_power_system_off() to using WFE and WFI, it is ARM low-power standby mode.  It should be triggered by events for waking up. But, it looks like not working in my GPIO wake up pin.

    3. Enable comments at Question 3 block (RTC) and comment timer2_init() in above code.  The current measured 11uA. It is not near 1.9 uA. 

    4. Reserve RTC function (Question 3) and enable Question 4, and I don't enable advertising in this part. It has 820uA. Which function should be disabled?

    Please assistance me to solve it.

    Thank you.

Children
No Data
Related