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

How optimize high current consumption in sleep mode using nRF52840?

Hello to all,

We have developed our application & the following platform we are using:

  • SDK 15.0, Segger IDE on windows PC
  • Softdevice version is 6.0.0
  • Hardware version nRF52840 SoC.
  • Our product is battery operated, so high power consumption is serious an issue for us.

In our application we have used ble_app_uart example with SAADC because our sensor is analog. We also made custom PCB using nRF52840 and it working well not an issue. But our problem is very too much high current consumption is sleep mode means system OFF mode.

Here is below measured analysis with the help of Nordic Power Profile kit:

  1. The average current consumption while advertising is 962uA - 1.62mA I think this is OK.
  2. The average current consumption when sensor device enter into sleep mode is 562uA (Which is very high)

We have disabled all used peripheral before enter device into sleep mode as like below:

void sleep_mode_enter() {
  uint32_t err_code;
  NRF_LOG_INFO("Sleep mode Enter");
  flash_data_sending = false;
  start_measurement = false;
  nrf_gpio_pin_clear(SENSOR_PIN);  // OFF Sensor
  nrf_gpio_pin_set(GREEN_LED_PIN); // OFF Green LED
  nrf_gpio_pin_set(BLUE_LED_PIN);  // OFF BLUE LED
  stop_adc();
  err_code = app_uart_close();
  APP_ERROR_CHECK(err_code);
  NRF_LOG_INFO("UART close: %d", err_code);
}

void stop_adc() {
  nrf_drv_timer_disable(&m_timer);
  nrf_drv_timer_uninit(&m_timer);
  nrf_drv_ppi_channel_disable(m_ppi_channel);
  nrf_drv_ppi_uninit();
  NRF_SAADC->TASKS_STOP = 1;
  nrf_drv_saadc_uninit();
}

We have tested our hardware and sure this not hardware problem because when our device enter into deep sleep mode system OFF that time the current consumption near about 0.7uA to 1uA. Even when our designed firmware upload into nRF52840 DK and measured consumption using PPK that time got same results.

Questions:

  1. Why this too much very high power consumption getting in sleep mode?
  2. Is any wrong in our sleep mode enter function and disabled module functions?

Will you please suggest any solution, We should need to optimize this consumption to increase battery life because our sensor devices is battery operated.

Looking forward your response..!!

Thanks in advanced..!! 

Parents
  • Hi Vishal

    The main difference between UART and UARTE is that UARTE implements EasyDMA. EasyDMA is an AHB bus master similar to CPU that's connected to the AHB multilayer interconnect for direct access to Data RAM. You can read more on EasyDMA here. Also, this post by my colleague explains the UART(E) drivers very well and provides quite a few helpful links that you should read if you're not certain on which peripheral to use (don't mind the PPI implementation part, as the rest is what you'll find useful).

    How exactly does the UART "hang" if you disable EasyDMA?

    From what I know about your application, it seems as if UART should do the job, but I can't be sure as I haven't seen your project. If you find out that you need any of the EasyDMA features, you will have to use the UARTE driver. If you can manage without it, the UART driver should be somewhat more energy efficient and will probably increase the battery lifetime somewhat.

    Best regards,

    Simon

  • Hi,

    Currently I want to use UARTE because to access direct RAM buffer. 

    In our application I have interfaced external WiFi module to nRF52840 using UART One device goes into sleep mode then I have completely shut down Wi-FI module.

    But not able to ON UART module. Still getting same problem and it looks like somewhere strange for understanding.

    When i disabled UART module using my above snippet with workaround that time UART OFF But not ON when sensor device wake up.

    Here is below screen shot of current consumption in sleep mode with UART disabled:

    Will you please provide suggestion for How I can enable UARTE when sensor wake up. 

    Normally what is the proper way to enable and disabled UART or UARTE in application using nRF52840 sdk v15.0.

    Thanks.......

Reply
  • Hi,

    Currently I want to use UARTE because to access direct RAM buffer. 

    In our application I have interfaced external WiFi module to nRF52840 using UART One device goes into sleep mode then I have completely shut down Wi-FI module.

    But not able to ON UART module. Still getting same problem and it looks like somewhere strange for understanding.

    When i disabled UART module using my above snippet with workaround that time UART OFF But not ON when sensor device wake up.

    Here is below screen shot of current consumption in sleep mode with UART disabled:

    Will you please provide suggestion for How I can enable UARTE when sensor wake up. 

    Normally what is the proper way to enable and disabled UART or UARTE in application using nRF52840 sdk v15.0.

    Thanks.......

Children
No Data
Related