nRF52840DK+nRF7002EK, cannot enter low power unless build without nRF7002

I am trying to get a WiFi project working using the nRF52840DK and nRF7002EK. I use a 3.3V power source that is supplying power to both nRF's in parallel. For the nRF7002EK, I added pin header to P6 and supplied power there. I've confirmed the system works this way, as I was able to get the WiFi station project working (NCSv2.9.1, nrf/samples/wifi/sta).

I'm evaluating if it can sleep with a total current draw of <10uA. I am using the PPK2 as an ammeter to measure the current draw coming from the power source directly.

I have determined with a very simple project (NCS v2.9.1, zephyr/samples/boards/nordic/system_off) that the current draw can go as low as about 8.5uA after the sys_poweroff() call. I ensured that:

  • nRF52840DK SW6 was moved to "nRF ONLY" after flashing firmware
  • Shortly after sys_poweroff() is called, I unplugged power from nRF7002EK's P6.
    • This is fine, as we anticipate hardware later on that will similarly cut power to the nRF7002, to save power.
    • In other words, the total current draw is mostly, if not completely, coming from the nRF52.

I revisited my WiFi station project to try to replicate this, but with some small changes and typical power reductions like CONFIG_PM=y and CONFIG_SERIAL=n, I could only get it to draw around 12mA after sleeping. But then I tried removing the following and was able to get it to 8.5uA:

  • Remove CMake argument -DSHIELD="nrf7002ek"
  • Set CONFIG_WIFI_NRF70=n

Obviously the WiFi code won't work without the CMake argument and Kconfig flag, but it seems to point that the nRF52 is doing or waiting for something related to nRF7002. So my main question is - how I can save power like the system_off project shows, while still being able to use the nRF7002EK? Some other related questions include:

  • Is there an equivalent to the CMake argument and Kconfig flag, but that can be done dynamically in firmware? Something like "enabling nRF7002" with some function call, and a corresponding "disable" function I can call just before sys_poweroff()?

More info: I am using a Windows 11 machine, VS Code, & nRF Connect Extension. It was already mentioned earlier but we're also using nRF52840DK, nRF7002EK, and the PPK2.

Parents
  • Hi

    I think this could be due to erratum 9 of the nRF7002. With higher IOVDD voltages, pins that are not in use and configured to floating (like they are generally on the nRF7002 EK), there will be leakage currents. This unfortunately means that the nRF7002 EK isn't very well suited for current consumption measurements since the pin configuration doesn't match the workaround for this errata. The DK or a custom board should be better suited for current consumption. Lowering the supply voltage should lower the current consumption considerably as well.

    Best regards,

    Simon

  • Thank you for your reply Simon. This does seems to be the root cause; we verified this by trying to remove the nRF7002EK after sleeping and noticed a current draw lowered back to the uA range.

    We've started to work on getting the DK and will continue testing again once we have it. Thank you again for the detailed answer and suggestion.

Reply Children
  • Hello again. We got a hold of the nRF7002DK and tried testing it, but still was not able to see the current consumption go down i.e., it still stays around 12mA being drawn from external power supply and there still seems to be leakage from IOVDD net.

    I did the following:

    • Grabbed NCS v3.0.2 (the version that the erratum states should have fixed this)
    • Made a project based off WiFi station (nrf/samples/wifi/sta) using that SDK version
    • Set up the build config to build it for 'nrf7002dk/nrf5340/cpuapp' and use 'prj.conf'
    • Added the sys_poweroff() call, like I did with the nRF52DK (zephyr/samples/boards/nordic/system_off)
    • Added code to shut down the nRF7002 (nrf/samples/wifi/shutdown)
    • Used external power supply with 3.5V at P21
      • SW10 is also switched to the 'Li-Poly' side, and I'm sure the voltage was not applied in reverse
      • Note that I'm not using AA batteries at this time

    Summary of the code:

    /**** main.c ****/
    
    // ...
    
    static int wifi_shutdown(void)
    {
    	int ret;
    	struct net_if *iface = net_if_get_default();
    
    	if (!net_if_is_admin_up(iface)) {
    		return 0;
    	}
    
    	ret = net_if_down(iface);
    	if (ret) {
    		LOG_ERR("Cannot bring down iface (%d)", ret);
    		return ret;
    	}
    
    	LOG_INF("Interface down");
    
    	return 0;
    }
    
    // ...
    
    int main(void)
    {
    	int ret = 0;
    
    	net_mgmt_callback_init();
    
    	wifi_shutdown();
    	k_sleep(K_SECONDS(3));
    
    	sys_poweroff();
    }

    Hardware setup:

    (picture will be uploaded soon; DevZone is having errors uploading files)

    • Power supply from red/blue clips at the top
    • PPK2 acting as ammeter and in series with power supply
    • nRF7002DK's P21 (+) connecting to PPK2's VOUT
    • nRF7002DK's SW10 at 'Li-Poly' side
  • Hi

    Please check out the nRF7002 DK HW user guide here, that explains how you should do current consumption measurements on the nRF7002 DK: https://docs.nordicsemi.com/bundle/ug_nrf7002_dk/page/UG/nrf7002_DK/nRF5340_nRF7002_measure_current.html 

    I'm suspecting that you're seeing the current consumption of the entire nRF7002 DK, interface MCU and all.

    Best regards,

    Simon

  • Yes, looks like the interface MCU was drawing that extra current. I adjusted SW6 and was able to lower it to around 400uA. Thank you.

Related