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
  • I did some more testing to see if my hardware is working properly.

    I removed the sensors and the LED and tried the system_off sample from Zephyr (compiled for nRF54L15DK) and system_off in my firmware. I also replaced the system_off call in the Zephyr sample with k_sleep and use k_sleep instead of system_off in my firmware.

    With this, I get the following results:

    • Current on my board with system_off sample from Zephyr: avg. 1.6 uA

    • Current on my board with system_off sample from Zephyr and system_off replaced with k_sleep(K_FOREVER): avg. 4 uA

    • Current on my board with system_off in my firmware: avg. 0.61 uA

    • Current on my board with k_sleep in my firmware: avg. 150 uA

    So my board consumes less power with system_off than the Zephyr sample. I guess it comes from the pin conflict between the two boards. But it doesn´t care because the result is really good. But I´m wondering why k_sleep on my hardware is consuming that much current. There is something enabled that shouldn´t be enabled.

    Zigbee isn´t tested any further.

    Edit: Maybe someone can answer one question to me:
    Is it possible to use system_off with Zigbee and BSEC2 from Nordic? If I see it correctly, BSEC2 is using a thread with a sleep to run the periodic update of the state machine inside of the library. Is it possible to leave the system_off state by this thread? I don´t think it´s possible but maybe I´m wrong Slight smile

Reply
  • I did some more testing to see if my hardware is working properly.

    I removed the sensors and the LED and tried the system_off sample from Zephyr (compiled for nRF54L15DK) and system_off in my firmware. I also replaced the system_off call in the Zephyr sample with k_sleep and use k_sleep instead of system_off in my firmware.

    With this, I get the following results:

    • Current on my board with system_off sample from Zephyr: avg. 1.6 uA

    • Current on my board with system_off sample from Zephyr and system_off replaced with k_sleep(K_FOREVER): avg. 4 uA

    • Current on my board with system_off in my firmware: avg. 0.61 uA

    • Current on my board with k_sleep in my firmware: avg. 150 uA

    So my board consumes less power with system_off than the Zephyr sample. I guess it comes from the pin conflict between the two boards. But it doesn´t care because the result is really good. But I´m wondering why k_sleep on my hardware is consuming that much current. There is something enabled that shouldn´t be enabled.

    Zigbee isn´t tested any further.

    Edit: Maybe someone can answer one question to me:
    Is it possible to use system_off with Zigbee and BSEC2 from Nordic? If I see it correctly, BSEC2 is using a thread with a sleep to run the periodic update of the state machine inside of the library. Is it possible to leave the system_off state by this thread? I don´t think it´s possible but maybe I´m wrong Slight smile

Children
No Data
Related