nRF54L15 Zigbee - High current consumption

Hi,

I´m working on a Zigbee-based environment sensor. You can find all related files here: https://github.com/Kampi/BeeLight

Now I have the following scenario: the whole sensor consumes around 5 mA in idle mode (when going to sleep to wait for a new transmission interval). I´ve started to investigate the issue by using a PPK 2, and I got the following results:

Setup:

- Zigbee2MQTT
- Tx power set to 0
- Device connected to the Zigbee network

Test case 1:

Change main in main.c to:

int main(void)
{
    //dk_buttons_init(button_changed);
    //dk_leds_init();

    //register_factory_reset_button(FACTORY_RESET_BUTTON);

    /* Register callback for handling ZCL commands. */
    //ZB_ZCL_REGISTER_DEVICE_CB(zcl_device_cb);

    /* Register device context (endpoints). */
    //ZB_AF_REGISTER_DEVICE_CTX(&env_sensor_ctx);

    //clusters_attr_init();

    /* Register handler to identify notifications. */
    //ZB_AF_SET_IDENTIFY_NOTIFICATION_HANDLER(SENSOR_ENDPOINT, identify_cb);

    /* Start Zigbee default thread. */
    //zigbee_enable();

    //zbus_chan_add_obs(&light_data_chan, &light_data_lis, K_MSEC(100));
    //zbus_chan_add_obs(&battery_data_chan, &battery_data_lis, K_MSEC(100));
    //zbus_chan_add_obs(&env_data_chan, &env_data_lis, K_MSEC(100));

    //LOG_INF("BeeLight application started");

    return 0;
}

Goals:

- No I2C transmissions
- No Zigbee enabled
- Periodic wakeup of the processor to read the sensors
- Since no I2C, the sensors can´t be read
- No reports to Zigbee network

I got an average of 780 uA. I can´t say if this is good or bad because I don´t know any reference values.

Test case 2:

Change main in main.c to:

int main(void)
{
    //dk_buttons_init(button_changed);
    //dk_leds_init();

    //register_factory_reset_button(FACTORY_RESET_BUTTON);

    /* Register callback for handling ZCL commands. */
    //ZB_ZCL_REGISTER_DEVICE_CB(zcl_device_cb);

    /* Register device context (endpoints). */
    ZB_AF_REGISTER_DEVICE_CTX(&env_sensor_ctx);

    clusters_attr_init();

    /* Register handler to identify notifications. */
    ZB_AF_SET_IDENTIFY_NOTIFICATION_HANDLER(SENSOR_ENDPOINT, identify_cb);

    /* Start Zigbee default thread. */
    zigbee_enable();

    //zbus_chan_add_obs(&light_data_chan, &light_data_lis, K_MSEC(100));
    //zbus_chan_add_obs(&battery_data_chan, &battery_data_lis, K_MSEC(100));
    //zbus_chan_add_obs(&env_data_chan, &env_data_lis, K_MSEC(100));

    //LOG_INF("BeeLight application started");

    return 0;
}

Goals:

- No I2C transmissions
- Zigbee enabled
- Periodic wakeup of the processor to read the sensors
- Since no I2C, the sensors can´t be read
- No reports to the Zigbee network

I got an average of 4.2 to 4.8 mA, so enabling Zigbee increases the current consumption by a factor of 6?!

Questions:

- Do you have some values as a reference to compare with?
- Do I have any additional power-saving options?
- How can I cut down the current consumption?

Edit:

I´ve tried to run the light switch example on my board (I built the example for the nRF54L15DK), but the firmware stops booting after printing this

00> [00:00:00.000,356] <inf> ieee802154_nrf5: nRF5 802154 radio initialized

Flashing my firmware results in a correct boot:

00> [00:00:21.228,014] <inf> ieee802154_nrf5: nRF5 802154 radio initialized
00> *** Booting My Application v1.0.0-2cd7fb859a2a ***
00> *** Using nRF Connect SDK v2.9.2-4ab7b98fc76f ***
00> *** Using Zephyr OS v3.7.99-aa34a5632971 ***

I´m not sure about the issue, so I can´t test a sample as a reference. Do you have an idea why Zephyr isn´t booted with the light switch example?

Parents Reply Children
  • Hi Amanda,

    Thanks for the tips. I´ve optimized the firmware and I was able to reduce the power consumption significantly. The device consumes around 70 uA when Zigbee is disabled in KConfig and ~220 uA with Zigbee after the pairing.

    I´ve also added the code from the light switch example but I can´t see any difference.

    int main(void)
    {
        dk_leds_init();
        dk_buttons_init(on_button_changed);
    
        //register_factory_reset_button(FACTORY_RESET_BUTTON);
    
        zb_set_ed_timeout(ED_AGING_TIMEOUT_64MIN);
        zb_set_keepalive_timeout(ZB_MILLISECONDS_TO_BEACON_INTERVAL(60000));
    
        zigbee_configure_sleepy_behavior(true);
    
        /* Power off unused sections of RAM to lower device power consumption. */
        if (IS_ENABLED(CONFIG_RAM_POWER_DOWN_LIBRARY)) {
            power_down_unused_ram();
        }
    
    #ifdef CONFIG_ZIGBEE_FOTA
        #error "Not supported yet!
        /* Initialize Zigbee FOTA download service. */
        zigbee_fota_init(ota_evt_handler);
    
        /* Mark the current firmware as valid. */
        confirm_image();
    
        /* Register callback for handling ZCL commands. */
        ZB_ZCL_REGISTER_DEVICE_CB(zcl_device_cb);
    #endif
    
        /* Register device context (endpoints). */
        ZB_AF_REGISTER_DEVICE_CTX(&env_sensor_ctx);
     
        app_clusters_attr_init();
    
        /* Register handler to identify notifications. */
        ZB_AF_SET_IDENTIFY_NOTIFICATION_HANDLER(SENSOR_ENDPOINT, identify_cb);
    
        /* Start Zigbee default thread. */
        zigbee_enable();
    
        zbus_chan_add_obs(&battery_data_chan, &battery_data_lis, K_MSEC(100));
        zbus_chan_add_obs(&light_data_chan, &light_data_lis, K_MSEC(100));
        zbus_chan_add_obs(&env_data_chan, &env_data_lis, K_MSEC(100));
    
        LOG_INF("BeeLight application started");
    
        while (1) {
            k_sleep(K_FOREVER);
        }
    
        return 0;
    }

    IMO 220 uA is high for a battery-based Zigbee device. Is there a solution to optimize the current consumption any further? I´m also wondering where this 3 s peak comes from

    It´s not from the sensor reading events (I guess) because these events were triggered all 5 min, 30 min and 24 h

    Thanks!

  • I think I´ve fixed the issues. The latest measurements show a current consumption of ~40 uA

  • Good to hear that. Would you like to share your solution to benefit more users?

  • Hi,

    sure. The complete source code (incl. the Zigbee implementation) can be found in the repository

    github.com/.../BeeLight

Related