NRF54L10 takes too much current

Hi everyone,

I'm working on a project using the nRF54 and Zephyr RTOS. Previously, I implemented almost identical functionality on an nRF52, where the device consumed around 3.5 µA while waiting for an input change (GPIO_INT_LEVEL_ACTIVE). I changed to nrf54, and I hopped current will be less. 

Now, with mostly the same code base and doing nothing more, the current consumption sits at magical 150 µA

CONFIG_PM_DEVICE=y
CONFIG_PM_POLICY_DEFAULT=y
CONFIG_PM=y
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y

Here is what I've tried so far to debug this:

  • I've experimented with various configuration options (prj.conf).

  • I even tried blocking the execution right at the beginning of main() using a semaphore to ensure no application logic is running.

Despite this, the power consumption is always ....150 µA.

Has anyone encountered similar power management issues on the nRF54 with Zephyr, or are there specific Kconfig options/peripherals I should look into to debug this leak?

Thanks in advance!

  • Could you share some more information?
    - Are you using a devboard and which ones
    - What is your code doing
    - Can you share your full config and code?

  • Main() is simplified to: 

    int main(void)
    {
    uint32_t events;
         while (1)
        {
            k_sem_take(&main_sem, K_FOREVER);
        }
    }

    Currently, after many changes I am working with this config. where base board is nrf54L15DK/nrf54L10 cpuapp with some overlay changes

    CONFIG_PICOLIBC=y
    CONFIG_TICKLESS_KERNEL=y
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
    CONFIG_PRINTK=y

    CONFIG_CONSOLE=n
    CONFIG_DEBUG=n
    CONFIG_USE_SEGGER_RTT=n
    CONFIG_RTT_CONSOLE=n

    CONFIG_SERIAL=n
    CONFIG_UART_CONSOLE=n
    CONFIG_LOG=n
    CONFIG_SHELL=n

    CONFIG_DK_LIBRARY=n
    CONFIG_GPIO=y
    CONFIG_ADC=y
    CONFIG_NRFX_GRTC=y
    CONFIG_PWM=y
    CONFIG_PM_DEVICE=y
    CONFIG_PM=y
    CONFIG_PM_DEVICE_RUNTIME=y

    CONFIG_HEAP_MEM_POOL_SIZE=0

    CONFIG_CRC=y

    CONFIG_WATCHDOG=y

    CONFIG_FLASH=y
    CONFIG_ZMS=y
    CONFIG_FLASH_MAP=y
    CONFIG_SOC_FLASH_NRF_RRAM=y
    CONFIG_FLASH_PAGE_LAYOUT=y

    CONFIG_BT=y
    CONFIG_BT_HCI=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_GATT_CLIENT=y
    CONFIG_BT_NUS=y
    CONFIG_BT_OBSERVER=y

    CONFIG_BT_MAX_CONN=1

    CONFIG_BT_DEVICE_NAME_DYNAMIC=y
    CONFIG_BT_DEVICE_NAME_MAX=32
    CONFIG_BT_RX_STACK_SIZE=2048

    CONFIG_REGULATOR=y
    CONFIG_BT_CTLR_TX_PWR_ANTENNA=-4
    CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y

    CONFIG_BT_EXT_ADV=y
    CONFIG_BT_EXT_ADV_MAX_ADV_SET=1
    CONFIG_BT_CTLR_ADV_EXT=y

    CONFIG_BT_USER_DATA_LEN_UPDATE=y
    CONFIG_BT_CTLR_DATA_LENGTH_MAX=251

    CONFIG_BT_L2CAP_TX_MTU=513
    CONFIG_BT_BUF_ACL_RX_SIZE=517
    CONFIG_BT_BUF_ACL_TX_SIZE=517
    CONFIG_BT_BUF_ACL_TX_COUNT=6
    CONFIG_BT_USER_DATA_LEN_UPDATE=y

    CONFIG_HWINFO=y

    The only suspicion is that a floating pin somewhere is drawing current. But 150us? 

    And the same current results I saw when dk nrf 54L15 board was used.

  • Hi

    Please check out our Low power DevAcademy course here which explains how to optimize for current consumption on your nRF54L device: https://academy.nordicsemi.com/courses/designing-low-power-bluetooth-le-products/.

    150µA excess current is suggesting that a peripheral is left on, so make sure that everything you don't need is disabled and not in use. 

    Best regards,

    Simon

  • I've created own board, removing DK unused pins - current drop down to 90uA, but it is still too much,

  • Can you share the current consumption plot where you see this. Seeing how this current consumption looks exactly might be helpful to decide what's going on here. Also, how do you measure the current consumption exactly?

    90µA is indeed too high for a sleep mode. Maybe you can share your HW files for a review as well so we can narrow this issue down to SW or HW?

    Best regards,

    Simon

Related