Current consumption of external flash in Matter application

I am using the nRF54L15 on a custom board where I have good control and knowledge about what is going on regarding current consumption.

I am using an MX25R64 external flash and have successfully achieved minimal current consumption in applications like eddystone and spi_flash. For Bluetooth applications I measure the minimal current consumption in the idle phase in between advertising events.

When I don't send the external flash into suspend state explicitly by doing "pm_device_action_run(qspi_dev, PM_DEVICE_ACTION_SUSPEND);" then I see an increased current consumption of additional 6µA - usually 9µA in comparison to 3µA as expected on my system.

I am currently trying to achieve the same for Matter applications. I am currently using the "light_switch" example and together with the "prj_release.conf" configuration I achieved 9µA current consumption in the idle phases during advertising.

This leads me to believe that the external flash is not suspended correctly.

I found the "Put the external flash into sleep mode in inactivity periods" chapter here: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/matter/getting_started/low_power_configuration.html#put_the_external_flash_into_sleep_mode_in_inactivity_periods

It says: "For this reason, you might want to suspend the external flash for majority of time and have it resumed to the active state only if needed. The Device Firmware Upgrade case is properly handled in the nRF Connect platform, but for other proprietary use cases, you should handle state changes in your own implementation."

In the off-the-shelf "light switch" example there is no proprietary use case and in my experiments by just starting up the example and not doing anything with it, there is no device firmware upgrade case either.

Because of the sheer size of a Matter project, I am having a hard time finding out if the current implementation of the "light switch" example is actively sending the external flash to suspend mode somewhere after booting or not.

Can anyone please confirm that in the "light switch" example an external flash is correctly sent do suspend mode after the application has started up and please point out how this is done?

If this is not the case: does anyone have any recommendation where the necessary code should be placed?

Parents
  • I now found ~/ncs/v3.0.2/modules/lib/matter/src/platform/nrfconnect/ExternalFlashManager.h which contains a call to pm_device_action_run().

    This code is only enabled when CONFIG_NORDIC_QSPI_NOR is set, which was not the case in my project.

    I now modified the code that it is enabled and that it uses DEVICE_DT_GET(DT_CHOSEN(nordic_pm_ext_flash));

    The project compiles and runs fine, however, there is no change in the current consumption. Of course it could be the case that this code is never called.

    I will investigate further, but any comments regarding this topic are highly appreciated.

Reply
  • I now found ~/ncs/v3.0.2/modules/lib/matter/src/platform/nrfconnect/ExternalFlashManager.h which contains a call to pm_device_action_run().

    This code is only enabled when CONFIG_NORDIC_QSPI_NOR is set, which was not the case in my project.

    I now modified the code that it is enabled and that it uses DEVICE_DT_GET(DT_CHOSEN(nordic_pm_ext_flash));

    The project compiles and runs fine, however, there is no change in the current consumption. Of course it could be the case that this code is never called.

    I will investigate further, but any comments regarding this topic are highly appreciated.

Children
Related