Device Power Consumption and Peripheral Usage

Hi,

We're currently facing a power consumption issue in the NRF Connect SDK and need your guidance on how to reduce the device's power consumption. Specifically, we've noticed a significant difference between power consumption levels in the NRF 17 SDK and the NCS (Nordic Connect SDK).

  • In NRF 17 SDK, the device's power consumption after optimisation is 32uA in our board.
  • However, in NCS, it has increased to 20mA.

We would greatly appreciate your insights, tips, or any recommendations you may have to help us address this discrepancy and lower the power consumption in the NCS environment. Your expertise and support are invaluable to us.

Points to consider:

  1. Pheripheral Used QSPI, UART and I2C,BLE
  2. BLE setting adevertise in Every 1 Sec
  3. Tx power is set to 0 and DC DC mode Enabled
  • Hi Mayank, 

    20mA is pretty high current consumption. In fact you only get there if you continuously transmitting data on the radio without using DCDC. And I guess it's not the case with your application. 

    Did you use the Power Profiler to measure the current consumption ? 
    The current consumption of 20mA was only the nRF52840 or it's also other components on the board ? 
    My suggestion is to try testing with some simple BLE application for example \nrf\samples\bluetooth\peripheral_lbs (use the prj_minimal.conf to config)  should show the idle current of a few uA and the average current of a dozen uA. 

    You can also try to reduce the current consumption by turn off logging, turn off some of the peripheral. You should see a idle current of a few uA when the CPU is not running and no other peripheral is working. 

  • Hi,

    Thank you for your valuable suggestions. I've been working on reducing the current consumption, and I've made some progress, but I'm still facing high current consumption on the UART side.

    I've already used the following code to suspend QSPI:`

    pm_device_action_run(uart, PM_DEVICE_ACTION_SUSPEND);

    While this has reduced the current consumption from 20mA to 18mA, I'm still looking to further optimize the UART section. Here's how I'm uninitializing the UART:

    void uart_uninit(void)
    {
        pm_device_action_run(uart,PM_DEVICE_ACTION_SUSPEND);
        if (uartInit) {
            // Disable UART reception
            uart_rx_disable(uart);
            // Disable UART transmission (TX side)
            uart_tx_abort(uart);
            // Unregister the UART callback
            uart_callback_set(uart, NULL, NULL);
            // Reset the initialization flag
            uartInit = 0;
           
        }
    }

    However, even after running this code, I'm still experiencing high current consumption of around 50uA on the UART side. I'm also looking for a similar solution to uninitialize the I2C section.

    If you have any further suggestions or insights on how to effectively uninitialize the UART and reduce the current consumption, please let me know. Your assistance is greatly appreciated.

    Thank you.
  • Hi Mayank, 

    Could you please clarify this: 

    mayanktiwari said:
    I'm still experiencing high current consumption of around 50uA on the UART side.

    Are you measuring 50uA current consumption on the NRF52840 after you disable UART ? I am not sure I understand what you meant by "on the UART side" . 

    20mA and 18mA is still way too high power consumption. I think there must be something else going wrong or you are measuring something else not just the nRF52840. 

    Could you please try testing with the system_off sample (\zephyr\samples\boards\nrf\system_off) ? In the sample there are several stages of low power and one will be with and without UART turn off. 

    Please try to compare the current consumption with what you have in your application. Also you should use a nRF52840 Dev Kit as a reference as well. 

  • Hi Hung Bui,

    I have the same device running in the field with NRF 17.1 SDK, and with this setup, I'm getting a current draw of 32 to 36 uA. I performed the same test with NCS idle mode, and the current draw is 56uA to 58 uA.

    After performing UART operations: In NRF 17 SDK, after uninitiating UART, the current draw is 32 to 36 uA.

    In NRF NCS, it's showing 320 to 280 uA, and it's not going down to 56uA to 58 uA.

    When I check the UART, after disabling RX, it is disabled, but TX is still active and not disabled.

    Another 10 uA is consumed by the QSPI Flash, out of the total 56uA.Additionally, after putting the QSPI Flash into deep sleep, the current draw is reduced to 46uA. However, there's an issue where the flash is not waking up from deep sleep.

Related