System on high current when wifi is disconnected

Hi,

We are evaluating NRF5340+NRF7002 setup for our customer. We are currently using https client example(sdk v3.0.2) and we would like to benchmark current consumption of the individual chips.I have set up the PPK2s as explained in your technical documentation.

We would like the application to run in a loop where it wakes up and posts some data over https and goes back to sleep. It is not possible at the moment to wakeup periodically from system off state as there is no wakeup option to achieve this without external component. Hence we would like to remain in system on state and try to achieve as low power consumption as possible when device is in sleep. We noticed that bringing up the net interface takes a long time due to a known bug as posted here ->NRF7002DK boot up time - Nordic Q&A - Nordic DevZone - Nordic DevZone. Hence we are avoiding calls to conn_mgr_all_if_up and conn_mgr_all_if_down within the loop. The loop now just establishes connection before http request and then disconnects. This puts the nrf7002 in relatively low power state (average ~16uA). But we noticed that nrf5340 still consumes around ~200uA constant current. On digging deeper it looks like the BUCKEN and IOVDD pins are the reason for this. These are needed to keep nrf7002 powered on and are only disabled when conn_mgr_all_if_down is called. If powered down I believe nrf7002 loses all context and need to be reinitialized. Without powering down nrf7002(using these pins) it looks like it is not possible at the moment to reduce current consumption on host MCU below ~200uA. 

Could you please let me know if there is a way to achieve low power consumption (~1-10uA) in system ON keeping nrf7002 chip on and how this can be done? Else are there any other alternative approaches?

Best Regards,

Arjun

Parents Reply
  • Hi,

    Thank you for the quick response.

    It's not a custom design. We are using nrf7002dk.

    I believe IOVDD is 1.8V as nrf5340 is also powered with 1.8V.

    Yes, the console has been fully disabled in the example. I notice that one would have to call conn_mgr_all_if_down inorder to achieve low current consumption host MCU(~5uA). In disconnected state the MCU otherwise consumers ~200uA.

    Best Regards,

    Arjun

Children
  • Hi Arjun,

     

    Thank you for sharing and explaining your test setup.

    I assume you are measuring on P22?

    If yes, this net, "VDD_MEAS", requires you to connect a couple of solder bridges, depending on which parts you want to measure on:

    https://docs.nordicsemi.com/bundle/ug_nrf7002_dk/page/UG/nrf7002_DK/solder_bridge.html

     

    More specifically, SB10 and SB17.

    Have you disabled the external flash in device tree? If yes, have you ensured that the CSN pin is idle high?

     

    Kind regards,

    Håkon

  • Hi Hakon,

    Thanks for getting back quickly. Appreciate that :) 

    My measurement setup is as explained here with 2 PPK2 -> https://docs.nordicsemi.com/bundle/ug_nrf7002_dk/page/UG/nrf7002_DK/nRF5340_nRF7002_measure_current.html

    Yes, the external flash has been disabled in the device tree. For reference I am using the https client example from NCS sdk. Below is the modification I did so that connect/disconnect is run within a loop and measuring current draw when the nrf5340 is sleeping(k_sleep(K_SECONDS(20)))

    	while(1)
    	{
    		/* Power up  console module */
    		power_up_console();
    
    		err = conn_mgr_all_if_connect(true);
    		if (err) {
    			printk("conn_mgr_all_if_connect, error: %d\n", err);
    			return 0;
    		}
    
    		k_sem_take(&network_connected_sem, K_FOREVER);
    
    		send_http_request();
    
    		/* A small delay for the TCP connection teardown */
    		k_sleep(K_SECONDS(1));
    
    		/* The HTTP transaction is done, take the network connection down */
    		err = conn_mgr_all_if_disconnect(true);
    		if (err) {
    			printk("conn_mgr_all_if_disconnect, error: %d\n", err);
    		}
    
    		/* Power down console module */
    		power_down_console();
    
    		k_sleep(K_SECONDS(20));
    	}
    

  • Hi,

     

    If you have disabled the ext flash, you must ensure that the /CSN pin is set high, ie. to an idle state.

    If not, I also see approx. 180 uA being drawn through the VDD_MEAS net.

     

    Try to set this for testing purposes:

    #include <hal/nrf_gpio.h>
    
    ...
    nrf_gpio_cfg_input(18, NRF_GPIO_PIN_PULLUP);
    ...

     

    Could you see if you reach the sub 20 uA target now?

     

    Kind regards,

    Håkon

  • Hi,

    Thank you. I tried but it didn't improve for me. It seems still not possible for me to go below the 200uA. The only way to go below seems like is to bring network interface down (setting bucken and iovdd to 0) and hence powering down nrf5340. Could you share your code snippet here and I could give it a go?

    BR,

    Arjun

  • Hi Arjun,

     

    Sorry to hear that the current is still high!

    here's the changes I've done to STA on ncs v3.0.2:

    diff --git a/samples/wifi/sta/prj.conf b/samples/wifi/sta/prj.conf
    index 1be8a75a11..04f897e110 100644
    --- a/samples/wifi/sta/prj.conf
    +++ b/samples/wifi/sta/prj.conf
    @@ -13,8 +13,8 @@ CONFIG_NRF_WIFI_RPU_RECOVERY=y
     
     CONFIG_WIFI_CREDENTIALS=y
     CONFIG_WIFI_CREDENTIALS_STATIC=y
    -CONFIG_WIFI_CREDENTIALS_STATIC_SSID="Myssid"
    -CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="Mypassword"
    +CONFIG_WIFI_CREDENTIALS_STATIC_SSID="OpenWrt"
    +CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="redacted"
     
     # Networking
     CONFIG_NETWORKING=y
    @@ -82,3 +82,5 @@ CONFIG_NET_CONFIG_MY_IPV4_GW="192.168.1.1"
     # design in net_mgmt. So, use a higher timeout for a crowded
     # environment.
     CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT=5000
    +CONFIG_SERIAL=n
    +CONFIG_PINCTRL=y
    diff --git a/samples/wifi/sta/src/main.c b/samples/wifi/sta/src/main.c
    index 0402216e27..445b07d6bd 100644
    --- a/samples/wifi/sta/src/main.c
    +++ b/samples/wifi/sta/src/main.c
    @@ -401,11 +401,11 @@ static int register_wifi_ready(void)
            return ret;
     }
     #endif /* CONFIG_WIFI_READY_LIB */
    -
    +#include <hal/nrf_gpio.h>
     int main(void)
     {
            int ret = 0;
    -
    +       nrf_gpio_cfg_input(18, NRF_GPIO_PIN_PULLUP);
            net_mgmt_callback_init();
     
     #ifdef CONFIG_WIFI_READY_LIB
    
     

    And here's the current consumption of the nRF5340:

     

    Let me know if this helps.

     

    Kind regards,

    Håkon

Related