IOVDD is constantly high

Hello,

I am using the nRF5340-DK board along with the nRF7002-EK companion. I noticed that current consumption was high while running my MQTT application on this setup, particularly at IOVDD. Current is averaging 700-800 uA at IOVDD while powered through the USB and it seems pretty constant, measured from both a PPKII and an ammeter. From reading the docs, it seems like the switch on the nRF7002-DK which is tied to GPIO P1.00 on the nRF5340 should activate/deactivate that switch in order to disconnect IOVDD when not necessary. However, it seems like this GPIO is maintained high all the time.

Do I need to configure the application in any particular way to enable switching? I have tried those configs with no success

CONFIG_PM_DEVICE=y
CONFIG_NRF_WIFI_LOW_POWER=y
CONFIG_NRF700X_QSPI_LOW_POWER=y
I have also tried running sample WiFi Shell and IOVDD is also maintained high all the time.
Thanks in advance
  • Hi,

     

    Are you running the PM_DEVICE API to place the bus interface in suspend mode?

    int ret = pm_device_action_run(flash_dev, PM_DEVICE_ACTION_SUSPEND);
    if (ret) {
        /* Handle error */
    }
    ...
    ret = pm_device_action_run(flash_dev, PM_DEVICE_ACTION_RESUME);
    if (ret) {
        /* Handle error */
    }
     

     

    Or do you want to completely shut down the nRF7002? If yes, then there's a sample here that shows this use-case:

    https://github.com/nrfconnect/sdk-nrf/blob/v2.7.0/samples/wifi/shutdown/src/main.c

     

    Kind regards,

    Håkon

  • Hi,

    to answer yout question, I would like the Wi-Fi chip to consume as little power as possible whenever it goes into extended power saving mode, after connecting to the AP. Ideally, I would remain connected to the AP.

     

    I have tried the Wi-Fi shutdown sample as you suggested, I built it "as is" on my target using the following build command and i flashed it.

    west build -d build_default -b nrf5340dk_nrf5340_cpuapp -p -- -DSHIELD=nrf7002ek

    As for the nRF5340 SoC, when measuring current at VDD_nRF using the PPK2, the average value is 805 uA

    however, this value goes down to 2 uA when we disable serial communication and logging by setting those config values:

     

    CONFIG_SERIAL=n 
    CONFIG_LOG=n

    However when measuring current on the IOVDD pin of the nRF7002-DK using the PPK2, I do not observe any form of shutdown. Current at this pin is still 735 uA. 

     

     Is this normal behavior, for that particular example? It seems like the Wifi chip has a pretty high power consumption for a device that should be in shutdown state.

    And also, I would like to know, because it does not seem clear to me

    - Is the IOVDD switch on nRF7002-EK and tied to GPIO P1.00 (IOVDD_EN) meant to be operated manually by the application code or is it handled by the driver? I thought that this sentence (found in Hardware and layout )

    "The control of the switch is handled by the Wi-Fi driver on nRF5340."

    Meant that I did not have to manually control the power mode of the nRF7002. In response to your comment about the PM API.

    Thanks in advance

  • Hi,

    simon belanger said:
    However when measuring current on the IOVDD pin of the nRF7002-DK using the PPK2, I do not observe any form of shutdown. Current at this pin is still 735 uA. 

    Did you try the shutdown sample to completely shut down the nRF7002 when testing?

     

    It should show this in the terminal:

    *** Booting nRF Connect SDK v2.7.0-5cb85570ca43 ***
    *** Using Zephyr OS v3.6.99-100befc70c74 ***
    [00:00:00.560,211] <inf> shutdown: Starting nrf7002dk with CPU frequency: 64 MHz
    
    [00:00:00.563,690] <inf> shutdown: Scan requested
    
    Num  | SSID                             (len) | Chan | RSSI | Security | BSSID
    long list of APs in my area
    
    
    [00:00:05.339,019] <inf> shutdown: Scan request done
    
    [00:00:05.352,600] <inf> shutdown: Interface down

     

    And will have a current profile similar to this on IOVDD:

     

    simon belanger said:

    - Is the IOVDD switch on nRF7002-EK and tied to GPIO P1.00 (IOVDD_EN) meant to be operated manually by the application code or is it handled by the driver? I thought that this sentence (found in Hardware and layout )

    "The control of the switch is handled by the Wi-Fi driver on nRF5340."

    Meant that I did not have to manually control the power mode of the nRF7002. In response to your comment about the PM API.

    It will be handled if you take down the net interface, which again calls the deinit functions in the driver itself:

    https://github.com/nrfconnect/sdk-nrf/blob/v2.7.0/drivers/wifi/nrf700x/src/qspi/src/rpu_hw_if.c#L204

     

    Since the driver disconnects the GPIO, it is important that you have defined the device in devicetree with a pull-down:

    https://github.com/nrfconnect/sdk-nrf/blob/v2.7-branch/boards/shields/nrf7002ek/nrf7002ek.overlay#L41

      

    Kind regards,

    Håkon

  • Hi,

    Did you try the shutdown sample to completely shut down the nRF7002 when testing?

    Sorry if I was not clear. The current plots I reported in my last message were all taken while running the Wi-Fi shutdown sample. In the terminal, I had this 

    *** Booting nRF Connect SDK v2.7.0-5cb85570ca43 ***
    *** Using Zephyr OS v3.6.99-100befc70c74 ***
    [00:00:00.283,508] <inf> wifi_nrf_bus: SPIM spi@a000: freq = 8 MHz
    [00:00:00.283,538] <inf> wifi_nrf_bus: SPIM spi@a000: latency = 0
    [00:00:00.482,269] <inf> shutdown: Starting nrf5340dk with CPU frequency: 64 MHz
    
    [00:00:00.486,083] <inf> shutdown: Scan requested
    
    Num  | SSID                             (len) | Chan | RSSI | Security | BSSID
    ...
    
    [00:00:05.580,078] <inf> shutdown: Scan request done
    
    [00:00:05.593,627] <inf> shutdown: Interface down

    but as I showed, you, IOVDD never goes down to the sub uA range while running this sample. Even when the interface shuts down, it remains in the 700 uA range. So that means I do not get the same current profile you get. 

    I thinks there is something not behaving correctly on my setup and I do not know what, since we test the same thing and do not get the same outcome.

    Since the driver disconnects the GPIO, it is important that you have defined the device in devicetree with a pull-down:

    I am using the Cmake argument `-DSHIELD=nrf7002ek` when building the code, which adds the following to my devicetree file (zephyr.dts)

    				nrf700x: nrf7002@0 {
    					compatible = "nordic,nrf700x-spi";
    					status = "okay";
    					reg = < 0x0 >;
    					spi-max-frequency = < 0x7a1200 >;
    					iovdd-ctrl-gpios = < &arduino_header 0x6 0x20 >;
    					bucken-gpios = < &arduino_header 0x7 0x20 >;
    					host-irq-gpios = < &arduino_header 0xd 0x0 >;
    				};
    			};

    I believe that my devicetree configuration is correct.

    Am I missing something?

    Best regards,

    Simon

  • Hi,

    You mention that you measure 2 uA with the nRF5340-DK + nRF7002-EK:

    simon belanger said:
    however, this value goes down to 2 uA when we disable serial communication and logging by setting those config values:

    And the problem arises when you use the nRF7002-DK:

    simon belanger said:
    However when measuring current on the IOVDD pin of the nRF7002-DK using the PPK2, I do not observe any form of shutdown. Current at this pin is still 735 uA. 

    But, based on your newest logs, it seems that you are using nRF5340-DK + nRF7002-EK?

    Can you please share a picture of how you setup your test?

     

    If you are measuring the board as a whole, the current consumption of the nRF5340 will be added, and based on your prints; I assume that UART / Logging is still running? You will have to disable/turn off that to enter low power mode (ie. sub 10 uA) sleep.

     

    Kind regards,

    Håkon

Related