nRF5340-DK Current Measurement Problems

Hello Nordic Team,

I am using nRF5340-DK and I have a PPK-2 for current measurements. My development environment is NRF Connect SDK v2.5.2. I used https://infocenter.nordicsemi.com/pdf/PPK_2_User_Guide_20201201.pdf this guide to configure my board and ppk2. Firstly, I used section 6.3 Measuring current in Ampere Meter mode.

On board side, switches status are like below: 

VEXT->NRF SWITCH = OFF
NRF ONLY | DEFAULT SWITCH = NRF ONLY
 

Firstly, I erased both application and network cores. After that, I used very simple app to measure current consumption. 

main.cpp

#include <zephyr/kernel.h>
#include <zephyr/device.h>

#include "Leds.h"

LOG_MODULE_REGISTER(main, ATM_LOG_LEVEL_INF);

int main(void)
{   
	LOG_INF("SLEEP TEST PROJECT!");	

	LEDS::Init();
	LEDS::GreenOn();
	LEDS::RedOn();
    
	k_sleep(K_MSEC(1000));

	LEDS::GreenOff();
	LEDS::RedOff();

	// Start operations...
	LOG_INF("Started operations...");	

	while(1)
	{
		k_sleep(K_FOREVER);
	}

	return 0;
}

# Config Peripherals
CONFIG_GPIO=y
CONFIG_PM_DEVICE=y
CONFIG_BOARD_ENABLE_DCDC_APP=y
CONFIG_BOARD_ENABLE_DCDC_NET=y
####

# CPP
CONFIG_CPP=y
CONFIG_GLIBCXX_LIBCPP=y
CONFIG_NEWLIB_LIBC=y
CONFIG_STD_CPP17=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_NEWLIB_LIBC_FLOAT_SCANF=y
####

# General Settings
CONFIG_FPU=y
CONFIG_RESET_ON_FATAL_ERROR=n
CONFIG_ASSERT=y
CONFIG_RING_BUFFER=y
CONFIG_REBOOT=y
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
CONFIG_MAIN_STACK_SIZE=16384
####

# # Config LOGGER (Close while sleep test)
# CONFIG_LOG=y
# CONFIG_USE_SEGGER_RTT=y
# CONFIG_LOG_BACKEND_RTT=y
# CONFIG_LOG_BACKEND_UART=n
# CONFIG_LOG_PRINTK=y
# CONFIG_LOG_MODE_IMMEDIATE=n
# # to see DBG messages
# #CONFIG_LOG_DEFAULT_LEVEL=4
# ####

# Necessary options for low power consumption (Enabled while sleep test)
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=n
CONFIG_USB_DEVICE_STACK=n
CONFIG_DEBUG_OPTIMIZATIONS=n
CONFIG_SERIAL=n
CONFIG_LOG=n
CONFIG_BT_DEBUG_LOG=n
####

According to following settings I am seeing 3.7 - 3.8uA as idle current and there are no peaks. I am seeing this idle current constantly. However, according to online power profiler web page, I must see 3.1uA. (There is no big difference between the results. So, I feel that my settings are correct. Is there way to decrease idle current or my settings are correct?)

After that, I want to add network core to my project. Again, I prepared a simple ble scanner example. (Because, I will use nRF5340 as a scanner on my project.)

#include <zephyr/kernel.h>
#include <zephyr/device.h>

#include "Leds.h"
#include "BLECentralScan.h"

LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);


int main(void)
{   
	LOG_INF("SLEEP TEST PROJECT!");	

	LEDS::Init();
	LEDS::GreenOn();
	LEDS::RedOn();
    
	k_sleep(K_MSEC(1000));

	int err = BLECentralScan::Init();
	if(err != 0)
		ATM_LOG_ERR("Scanner initilazation failed: %d!", err);

	LEDS::GreenOff();
	LEDS::RedOff();

	// Start operations...
	// BLECentralScan::StartScan();
	ATM_LOG_INF("Started operations...");	

	while(1)
	{
		k_sleep(K_FOREVER);
	}

	return 0;
}

nrf5340dk_nrf5340_cpuapp.conf

CONFIG_SPI=n
CONFIG_NCS_SAMPLES_DEFAULTS=n

CONFIG_BOARD_ENABLE_DCDC_NET=y
CONFIG_BOARD_ENABLE_DCDC_APP=y
# IF RUNNING DIRECTLY ON A LIPO, CONNECTED TO VDDH
# CONFIG_BOARD_ENABLE_DCDC_HV=y

// child_image/hci_rpmsg.conf

CONFIG_BOARD_ENABLE_DCDC_NET=y

# Necessary options for low power consumption
CONFIG_SERIAL=n
CONFIG_LOG=n
CONFIG_BT_DEBUG_LOG=n
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=n
CONFIG_USB_DEVICE_STACK=n
CONFIG_DEBUG_OPTIMIZATIONS=n
####

CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000

CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_BUF_ACL_TX_SIZE=502

CONFIG_BT_MAX_CONN=1

CONFIG_BT_CTLR_PHY_2M=y
# CONFIG_BT_CTLR_PHY_CODED=y
# CONFIG_BT_CTLR_RX_BUFFERS=2

By using these project settings, I am getting 5.81uA average current and I am starting to see peak currents at every seconds. Is this expected behavior? Also, even DCDC converter is enabled for both mcu cores, I am seeing 4.45uA idle current. (Again, according to online power profiler, it is 3.1uA. There is a huge difference. Is this normal or I must apply some other configuration or I must use different app instead of hci_rpmsg?)

There, I have one more question. If I configure board and ppk2 according to section 6.3, I am not able to measure any external sensor currents. I even connect board's VDD and GND pins a power led but average current stays same. Because of that, I configured my board and ppk2 according to section 6.2. Now, I am able to sense external components current like a LED. However,my average current jumps from 5.81uA to 12uA and idle current jump form 4.45uA to 10.4uA. Is this expected behavior? (Which components I must removed from DK to decrease sleep current?)

Thanks.

Related