nRF7002 startup power consumption

We have a custom board with an nRF7002 controlled by a non-Nordic MCU.  The WiFi drivers were ported from SDK 2.7.0, and WiFi in general is working, this question is about power consumption. As this is not using a standard devkit, I don't have a code sample to post, but hopefully this is enough information for Nordic to reproduce internally.

Device is STA mode, and we initiate WiFi connections on-demand, so we don't initialize the network stack at bootup (CONFIG_NET_CONFIG_AUTO_INIT=n), and we deinitialize it when disconnected. The following code will bringup the network stack at runtime (including calling nRF7002 rpu_init etc):

    struct net_if *iface = net_if_get_first_wifi();
    int err = net_if_up(iface);
    if (err != 0) {
        .. error handling
    }

And this will disable the network stack:

    struct net_if *iface = net_if_get_first_wifi();
    int err = net_if_down(iface);
    if (err != 0) {
        ... error handling
    }

At startup, with no network stack enabled, the power consumption is 75mA. Absolute numbers are irrelevant due to board dependency, just differences.

After we initiate a connection, and then disconnect, power drops to 60mA. This is unexpected if the startup state is already low-power.

During the connection, power is about as expected - it depends on traffic, but averages to ~65mA, so slightly above "off" power.

I have confirmed that BUCKEN is low at startup. The nRF7002 datasheet states that BUCKEN low initiates shutdown state, and should consume only 1.7uA. But clearly there are some operations as part of stack enable/disable that are initiating a lower power mode.

I traced through the code and the operation is rpu_sleep() (we are using CONFIG_NRF_WIFI_LOW_POWER=y), which drops the power by ~15mA. That only gets called when the stack is activated. The surprising part is that deasserting BUCKEN doesn't achieve similar savings. As part of stack deinit, BUCKEN is deasserted, but has negligible additional savings after sleep (I actually saw power go up by 100-200uA, but my setup is not optimized for low current measurements, so that is likely an artifact).

I expect this should be reproducible on an nRF7002-DK with e.g. the wifi shell example, and the above config options, and a delay at main() before runtime initializing the network stack.

My workaround is to do a quick enable and disable of the network stack at init, which restores to sleep power. But the behavior is surprising given that BUCKEN is expected to turn everything off. Are there details of nRF7002 power states that aren't in the datasheet?

Related