Cannot achieve low-power on nRF52833 custom PCB using simplest main() yields 740uAmps

Chip : nRF52833 QIAA

Environment : Visual Code + nRF Connect for VC Code V2025.8.654 NCS V3.1.0

I am hoping somebody could assist us with a problem we are having achieving the expected low current operation on the nRF52833 soc on a custom PCB in sys_poweroff()  (and also in k_sleep())

In an attempt to narrow this down have depopulated the PCB to contain just the nRF52833 SOC all the other passives and bus peripherals are de-soldered. 

I have created a simple application which does nothing other than to set all GPIO as inputs and enter k_sleep () and the current is measured using PPK2 at ~750uAmps. There is spiking activity 

It feels like I have read every article on this subject from here and the suggested sample such as \ncs\v3.1.0\zephyr\samples\boards\nordic\system_off.   Please can anyone suggest a remedy?

main.c

#include <zephyr/kernel.h>
#include <zephyr/drivers/hwinfo.h>
#include <zephyr/sys/poweroff.h>
#include <hal/nrf_gpio.h>

int main(void)
{
    for (uint8_t idx = 0; idx < NUMBER_OF_PINS; idx++)
    {
        nrf_gpio_cfg_default(idx); // Input, no pull up/down, no sense
    }

    // k_sleep(K_FOREVER);
    hwinfo_clear_reset_cause();
    sys_poweroff();

    return 0;
}

prj.conf

#Debug support
CONFIG_USB_DEVICE_STACK=n
CONFIG_BOOT_BANNER=n
CONFIG_PRINTK=n
CONFIG_SERIAL=n
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_LOG=n
CONFIG_DEBUG_OPTIMIZATIONS=n
CONFIG_DEBUG_THREAD_INFO=n


CONFIG_POWEROFF=y
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
CONFIG_MULTITHREADING=y

CONFIG_GPIO=y
CONFIG_HWINFO=y

I have created a DTS, DTSI, Def Config as attached. (No UARTs enabled, No SPI enabled, No I2C enabled, No Temp controller enabled, No RNG enabled , No external flash etc). No logging, no prink etc. 

/dts-v1/;
#include <nordic/nrf52833_qiaa.dtsi>
#include "X30_bare-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "Bare X30";
	compatible = "Extronics,X30-bare";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};

	
	};

&uicr {
	nfct-pins-as-gpios;
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 DT_SIZE_K(48)>;
		};

		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000c000 DT_SIZE_K(220)>;
		};

		slot1_partition: partition@43000 {
			label = "image-1";
			reg = <0x00043000 DT_SIZE_K(220)>;
		};

		storage_partition: partition@7a000 {
			label = "storage";
			reg = <0x0007a000 DT_SIZE_K(24)>;
		};
	};
};

&uart0 {
	status = "disabled";
};

&uart1 {
	status = "disabled";
};


&spi0 {
	compatible = "nordic,nrf-spi";
	status = "disabled";
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "disabled";
};

&spi2 {
	compatible = "nordic,nrf-spi";
	status = "disabled";
};

&i2c0 {
	compatible = "nordic,nrf-twim";
	status = "disabled";
};

&i2c1 {
	compatible = "nordic,nrf-twim";
	status = "disabled";
};

&i2c1 {
	compatible = "nordic,nrf-twim";
	status = "disabled";
};

&temp {
	status = "disabled";
};

&rng {
	status = "disabled";
};

&rng_hci {
	status = "disabled";
};

&adc {
	status = "disabled";
};

&wdt0 {
	status = "disabled";
};

The build files 

build-folder/zephyr/zephyr.dts
build-folder/zephyr/.config  (.txt to enable attachment)

are attached. 

CONFIG_ARM_MPU=y
CONFIG_HW_STACK_PROTECTION=y

# enable GPIO
CONFIG_GPIO=y

7802.X30_bare.dts1526.X30_bare-pinctrl.dtsi

Parents
  • Hello,

    Did you try the sample with the nRF52833 DK and check if you can get the current in range?

    I can see that you disabled almost all unused peripheral in the overlay. However, to make it sure I would like to suggest you run only a minimal sample without for loop part. for example:

    void main(void)
    {
        // Minimal init only
        k_sleep(K_FOREVER);
        // or: sys_poweroff();
    }

    If the current consumption still not in specified range, then we can say there are other peripheral still enabled or some issue on the board.

    Try this first and let me know the outcome.

    Thanks.

    BR

    Kazi

Reply
  • Hello,

    Did you try the sample with the nRF52833 DK and check if you can get the current in range?

    I can see that you disabled almost all unused peripheral in the overlay. However, to make it sure I would like to suggest you run only a minimal sample without for loop part. for example:

    void main(void)
    {
        // Minimal init only
        k_sleep(K_FOREVER);
        // or: sys_poweroff();
    }

    If the current consumption still not in specified range, then we can say there are other peripheral still enabled or some issue on the board.

    Try this first and let me know the outcome.

    Thanks.

    BR

    Kazi

Children
Related