Hello, I am developing a low-power nRF52840 product using the ncs Zephyr environment. Currently, I have suspended peripherals such as UART and I2C, allowing the system to automatically enter idle low power, but the measured real-time power consumption is 450 μA, and I cannot figure out what is causing such high power consumption. The following are my proj.conf, appoverlay files, and main function.
CONFIG_NCS_SAMPLES_DEFAULTS=y # Enable the UART driver CONFIG_UART_ASYNC_API=y CONFIG_NRFX_UARTE0=n CONFIG_NRFX_UARTE1=n CONFIG_SERIAL=n CONFIG_GPIO=y # Make sure printk is printing to the UART console CONFIG_CONSOLE=n CONFIG_UART_CONSOLE=n CONFIG_RTT_CONSOLE=n CONFIG_HEAP_MEM_POOL_SIZE=76800 CONFIG_BT=y CONFIG_BT_PERIPHERAL=y CONFIG_BT_DEVICE_NAME="GH_DEV" CONFIG_BT_MAX_CONN=1 CONFIG_BT_MAX_PAIRED=1 # Enable the NUS service CONFIG_BT_NUS=y # Enable bonding CONFIG_BT_SETTINGS=y CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 # Config logger CONFIG_LOG=n #CONFIG_BT_CTLR_ADVANCED_FEATURES=y CONFIG_BT_CTLR_CONN_RSSI=y CONFIG_LOG_FUNC_NAME_PREFIX_DBG=n CONFIG_LOG_BACKEND_SHOW_COLOR=n CONFIG_LOG_BACKEND_UART=n CONFIG_LOG_BACKEND_RTT=n CONFIG_USE_SEGGER_RTT=n CONFIG_LOG_PRINTK=n CONFIG_LOG_OUTPUT=n CONFIG_ASSERT=n #flash CONFIG_FLASH=y #CONFIG_NVS=y CONFIG_NRFX_NVMC=y CONFIG_FILE_SYSTEM=y CONFIG_FLASH_MAP=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_I2C=y #adc CONFIG_ADC=y # CONFIG_BT_CTLR=y CONFIG_BT_HCI_VS=y CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y # CONFIG_BT_EXT_ADV=y #SPI CONFIG_SPI=y CONFIG_SPI_NRFX=y CONFIG_PINCTRL=y CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=n #watch dog CONFIG_WATCHDOG=y CONFIG_NRFX_TIMER3=n CONFIG_NRFX_GPIOTE0=n CONFIG_NRFX_PPI=n CONFIG_BT_GATT_CLIENT=n #DSP CONFIG_CMSIS_DSP=n CONFIG_CMSIS_DSP_FILTERING=n #FPU CONFIG_FPU=n CONFIG_FPU_SHARING=n CONFIG_NEWLIB_LIBC=n CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=n # #NFC # CONFIG_NFC_T4T_NRFXLIB=y # CONFIG_NFC_NDEF=y # CONFIG_NFC_NDEF_MSG=y # CONFIG_NFC_NDEF_RECORD=y # CONFIG_NFC_NDEF_TEXT_RECORD=y # CONFIG_NFC_NDEF_TNEP_RECORD=y # CONFIG_NFC_TNEP_TAG=y # CONFIG_NFC_NDEF_PARSER=y CONFIG_NFCT_PINS_AS_GPIOS=y CONFIG_PM=y CONFIG_PM_DEVICE=y CONFIG_PM_DEVICE_RUNTIME=y
static void suspend_all_peripherals(void)
{
const struct device *dev;
int ret;
/* ------------------ UART0 ------------------ */
dev = DEVICE_DT_GET(DT_NODELABEL(uart0));
if (dev) {
ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND);
if (ret == 0 || ret == -EALREADY) {
LOG_INFO("UART0 suspended (ret=%d)", ret);
} else {
LOG_INFO("UART0 suspend failed (ret=%d)", ret);
}
}
/* ------------------ I2C0 ------------------ */
#ifdef CONFIG_I2C
dev = DEVICE_DT_GET(DT_NODELABEL(i2c0));
if (dev) {
ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND);
if (ret == 0 || ret == -EALREADY) {
LOG_INFO("I2C0 suspended (ret=%d)", ret);
} else if (ret != -ENOTSUP) {
LOG_INFO("I2C0 suspend failed (ret=%d)", ret);
}
}
#endif
/* ------------------ SPI1 ------------------ */
#ifdef CONFIG_SPI
dev = DEVICE_DT_GET(DT_NODELABEL(spi1));
if (dev) {
ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND);
if (ret == 0 || ret == -EALREADY) {
LOG_INFO("SPI1 suspended (ret=%d)", ret);
} else if (ret != -ENOTSUP) {
LOG_INFO("SPI1 suspend failed (ret=%d)", ret);
}
}
/* ------------------ SPI3 ------------------ */
dev = DEVICE_DT_GET(DT_NODELABEL(spi3));
if (dev) {
ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND);
if (ret == 0 || ret == -EALREADY) {
LOG_INFO("SPI3 suspended (ret=%d)", ret);
} else if (ret != -ENOTSUP) {
LOG_INFO("SPI3 suspend failed (ret=%d)", ret);
}
}
#endif
/* ------------------ ADC ------------------ */
#ifdef CONFIG_ADC
dev = DEVICE_DT_GET(DT_NODELABEL(adc));
if (dev) {
ret = pm_device_action_run(dev, PM_DEVICE_ACTION_SUSPEND);
if (ret == 0 || ret == -EALREADY) {
LOG_INFO("ADC suspended (ret=%d)", ret);
} else if (ret != -ENOTSUP) {
LOG_INFO("ADC suspend failed (ret=%d)", ret);
}
}
#endif
}
int main(void)
{
gpio_int();
unused_pin_init();
suspend_all_peripherals();
for (;;)
{
k_sleep(K_MSEC(1000));
}
}/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/ {
chosen {
nordic,nus-uart = &uart0;
};
zephyr,user {
io-channels = <&adc 6>;
};
power_ctr_gpio {
compatible = "gpio-leds";
power_ctr_pin: power_ctr_pin_0 {
gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
label = "POWER_CTR_GPIO_PIN";
};
};
power_check {
compatible = "gpio-leds";
power_check_pin: power_check_pin {
gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
label = "POWER_CHECK_PIN";
};
};
nst1001_power{
compatible = "gpio-leds";
nst1001_power_pin: nst1001_power_pin_4 {
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
label = "nst1001_POWER_PIN";
};
};
nst1001_dq_data{
compatible = "gpio-leds";
nst1001_dq_data_pin: nst1001_dq_data_pin_3 {
gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
label = "nst1001_DQ_PIN";
};
};
iic_pull_gpio {
compatible = "gpio-leds";
iic_pull_gpio: iic_pull_gpio {
gpios = <&gpio0 26 GPIO_ACTIVE_LOW>;
label = "IIC_PULL_GPIO_PINW";
};
};
nsa_pd_gpio {
compatible = "gpio-leds";
nsa_pd_gpio: nsa_pd_gpio {
gpios = <&gpio0 27 GPIO_ACTIVE_LOW>;
label = "NSA_PD_GPIO_PIN";
};
};
unused_gpio1 {
compatible = "gpio-leds";
unused_gpio1: unused_gpio1 {
gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio2 {
compatible = "gpio-leds";
unused_gpio2: unused_gpio2 {
gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio3 {
compatible = "gpio-leds";
unused_gpio3: unused_gpio3 {
gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio4 {
compatible = "gpio-leds";
unused_gpio4: unused_gpio4 {
gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio5 {
compatible = "gpio-leds";
unused_gpio5: unused_gpio5 {
gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio6 {
compatible = "gpio-leds";
unused_gpio6: unused_gpio6 {
gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio7 {
compatible = "gpio-leds";
unused_gpio7: unused_gpio7 {
gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio8 {
compatible = "gpio-leds";
unused_gpio8: unused_gpio8 {
gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio9 {
compatible = "gpio-leds";
unused_gpio9: unused_gpio9 {
gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio10 {
compatible = "gpio-leds";
unused_gpio10: unused_gpio10 {
gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio11 {
compatible = "gpio-leds";
unused_gpio11: unused_gpio11 {
gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio12 {
compatible = "gpio-leds";
unused_gpio12: unused_gpio12 {
gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio13 {
compatible = "gpio-leds";
unused_gpio13: unused_gpio13 {
gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio14 {
compatible = "gpio-leds";
unused_gpio14: unused_gpio14 {
gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio15 {
compatible = "gpio-leds";
unused_gpio15: unused_gpio15 {
gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio16 {
compatible = "gpio-leds";
unused_gpio16: unused_gpio16 {
gpios = <&gpio1 05 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio17 {
compatible = "gpio-leds";
unused_gpio17: unused_gpio17 {
gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio18 {
compatible = "gpio-leds";
unused_gpio18: unused_gpio18 {
gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio19 {
compatible = "gpio-leds";
unused_gpio19: unused_gpio19 {
gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio20 {
compatible = "gpio-leds";
unused_gpio20: unused_gpio20 {
gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio21 {
compatible = "gpio-leds";
unused_gpio21: unused_gpio21 {
gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio22 {
compatible = "gpio-leds";
unused_gpio22: unused_gpio22 {
gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio23 {
compatible = "gpio-leds";
unused_gpio23: unused_gpio23 {
gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio24 {
compatible = "gpio-leds";
unused_gpio24: unused_gpio24 {
gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio25 {
compatible = "gpio-leds";
unused_gpio25: unused_gpio25 {
gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio26 {
compatible = "gpio-leds";
unused_gpio26: unused_gpio26 {
gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio27 {
compatible = "gpio-leds";
unused_gpio27: unused_gpio27 {
gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio28 {
compatible = "gpio-leds";
unused_gpio28: unused_gpio28 {
gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio29 {
compatible = "gpio-leds";
unused_gpio29: unused_gpio29{
gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio30 {
compatible = "gpio-leds";
unused_gpio30: unused_gpio30{
gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio31 {
compatible = "gpio-leds";
unused_gpio31: unused_gpio31{
gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio32 {
compatible = "gpio-leds";
unused_gpio32: unused_gpio32{
gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio33 {
compatible = "gpio-leds";
unused_gpio33: unused_gpio33{
gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio34 {
compatible = "gpio-leds";
unused_gpio34: unused_gpio34{
gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio35 {
compatible = "gpio-leds";
unused_gpio35: unused_gpio35{
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio36 {
compatible = "gpio-leds";
unused_gpio36: unused_gpio36{
gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio37 {
compatible = "gpio-leds";
unused_gpio37: unused_gpio37{
gpios = <&gpio0 24 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio38 {
compatible = "gpio-leds";
unused_gpio38: unused_gpio38{
gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio39 {
compatible = "gpio-leds";
unused_gpio39: unused_gpio39{
gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio40 {
compatible = "gpio-leds";
unused_gpio40: unused_gpio40{
gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
unused_gpio41 {
compatible = "gpio-leds";
unused_gpio41: unused_gpio41{
gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
label = "UNUSED_GPIO_PIN";
};
};
};
&adc {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
channel@6 {
reg = <6>;
zephyr,gain = "ADC_GAIN_1_6";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN6>;
zephyr,vref-mv = <600>;
zephyr,resolution = <12>;
};
};
&led0 {
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;//R
};
&led1 {
gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;//G
};
&led2 {
gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;//B
};
&i2c0 {
nsa2860: nsa2860@6d {
compatible = "i2c-device";
reg = <0x6d>;
label = "NSA2860";
zephyr,pm-device-runtime-auto;
};
};
&i2c0_default {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 26)>,
<NRF_PSEL(TWIM_SCL, 0, 27)>;
};
};
&uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 26)>;
};
group2 {
psels = <NRF_PSEL(UART_RX, 0, 27)>;
bias-pull-up;
};
};
&uart1_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 13)>;
};
group2 {
psels = <NRF_PSEL(UART_RX, 0, 14)>;
bias-pull-up;
};
};
&uart0 {
current-speed = <9600>;
};
&uart1 {
status = "okay";
};
&pinctrl {
spi1_default_alt: spi1_default_alt {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 24)>,
<NRF_PSEL(SPIM_MISO, 0, 23)>,
<NRF_PSEL(SPIM_MOSI, 0, 22)>;
};
};
spi1_sleep_alt: spi1_sleep_alt {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 24)>,
<NRF_PSEL(SPIM_MISO, 0, 23)>,
<NRF_PSEL(SPIM_MOSI, 0, 22)>;
low-power-enable;
};
};
};
&spi1 {
compatible = "nordic,nrf-spim";
status = "okay";
pinctrl-0 = <&spi1_default_alt>;
pinctrl-1 = <&spi1_sleep_alt>;
pinctrl-names = "default", "sleep";
cs-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
iis3dwb: iis3dwb@0 {
compatible = "vnd,spi-device";
reg = <0>;
spi-max-frequency = <2000000>;
// zephyr,pm-device-runtime-auto;
// spi-cpol;
// spi-cpha;
};
};
&uicr {
nfct-pins-as-gpios;
};