[nRF54L15 DK][Zephyr] System off demo not waking up from button press

Hello,

I am testing the system off demo on the nRF54L15 DK using nRF Connect SDK v2.8.0 (Zephyr v3.7.99).
I ran the sample exactly as provided in the SDK.


Observed log output:

*** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
*** Using Zephyr OS v3.7.99-0bc3393fb112 ***

nrf54l15dk system off demo
Retained data not supported
Entering system off; press sw0 to restart



At this point, the device enters system off.
However, pressing Button0 (sw0) does not wake up or restart the system.

Expected behaviour:
Pressing Button0 should trigger wakeup from system off.

What I already tried:

  • Added wakeup-source; property to button0 in an overlay:

    / { button0 { wakeup-source; }; };
  • Rebuilt and flashed, but still no wakeup on button press.

Environment:

  • Board: nRF54L15 DK

  • nRF Connect SDK: v2.8.0

  • Toolchain: west build (VS Code)

  • Example: system_off demo (unmodified)

QuestionS:

  • Is GPIO (Button0) wakeup from system off supported on the nRF54L15 DK?

  • s there another configuration needed (special GPIOTE setup, power domain setting, etc.)?

  • Has anyone confirmed this demo working on nRF54l15?

    /*
     * Copyright (c) 2019 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    
    #include "retained.h"
    
    #include <inttypes.h>
    #include <stdio.h>
    
    #include <zephyr/device.h>
    #include <zephyr/drivers/gpio.h>
    #include <zephyr/kernel.h>
    #include <zephyr/pm/device.h>
    #include <zephyr/sys/poweroff.h>
    #include <zephyr/sys/util.h>
    
    #if IS_ENABLED(CONFIG_GRTC_WAKEUP_ENABLE)
    #include <zephyr/drivers/timer/nrf_grtc_timer.h>
    #define DEEP_SLEEP_TIME_S 2
    #else
    static const struct gpio_dt_spec sw0 = GPIO_DT_SPEC_GET(DT_ALIAS(sw0), gpios);
    #endif
    
    int main(void)
    {
    	int rc;
    	const struct device *const cons = DEVICE_DT_GET(DT_CHOSEN(zephyr_console));
    
    	if (!device_is_ready(cons)) {
    		printf("%s: device not ready.\n", cons->name);
    		return 0;
    	}
    
    	printf("\n%s system off demo\n", CONFIG_BOARD);
    
    	if (IS_ENABLED(CONFIG_APP_USE_NRF_RETENTION) || IS_ENABLED(CONFIG_APP_USE_RETAINED_MEM)) {
    		bool retained_ok = retained_validate();
    
    		/* Increment for this boot attempt and update. */
    		retained.boots += 1;
    		retained_update();
    
    		printf("Retained data: %s\n", retained_ok ? "valid" : "INVALID");
    		printf("Boot count: %u\n", retained.boots);
    		printf("Off count: %u\n", retained.off_count);
    		printf("Active Ticks: %" PRIu64 "\n", retained.uptime_sum);
    	} else {
    		printf("Retained data not supported\n");
    	}
    
    #if IS_ENABLED(CONFIG_GRTC_WAKEUP_ENABLE)
    	int err = z_nrf_grtc_wakeup_prepare(DEEP_SLEEP_TIME_S * USEC_PER_SEC);
    
    	if (err < 0) {
    		printk("Unable to prepare GRTC as a wake up source (err = %d).\n", err);
    	} else {
    		printk("Entering system off; wait %u seconds to restart\n", DEEP_SLEEP_TIME_S);
    	}
    #else
    	/* configure sw0 as input, interrupt as level active to allow wake-up */
    	rc = gpio_pin_configure_dt(&sw0, GPIO_INPUT);
    	if (rc < 0) {
    		printf("Could not configure sw0 GPIO (%d)\n", rc);
    		return 0;
    	}
    
    	rc = gpio_pin_interrupt_configure_dt(&sw0, GPIO_INT_LEVEL_ACTIVE);
    	if (rc < 0) {
    		printf("Could not configure sw0 GPIO interrupt (%d)\n", rc);
    		return 0;
    	}
    
    	printf("Entering system off; press sw0 to restart\n");
    #endif
    
    	rc = pm_device_action_run(cons, PM_DEVICE_ACTION_SUSPEND);
    	if (rc < 0) {
    		printf("Could not suspend console (%d)\n", rc);
    		return 0;
    	}
    
    	if (IS_ENABLED(CONFIG_APP_USE_NRF_RETENTION) || IS_ENABLED(CONFIG_APP_USE_RETAINED_MEM)) {
    		/* Update the retained state */
    		retained.off_count += 1;
    		retained_update();
    	}
    
    	sys_poweroff();
    
    	return 0;
    }
    

Parents
  • Hello.

    I tried the same sample on nRF SDK v2.8.0, and the logs from my side are below. Could you add the following to prj.conf and see if there’s any change?

    CONFIG_APP_USE_RETAINED_MEM=y
    CONFIG_RETENTION=y

    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    

    Kind Regards,

    Abhijith

Reply
  • Hello.

    I tried the same sample on nRF SDK v2.8.0, and the logs from my side are below. Could you add the following to prj.conf and see if there’s any change?

    CONFIG_APP_USE_RETAINED_MEM=y
    CONFIG_RETENTION=y

    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    *** Booting nRF Connect SDK v2.8.0-a2386bfc8401 ***
    *** Using Zephyr OS v3.7.99-0bc3393fb112 ***
    
    nrf54l15dk system off demo
    Retained data not supported
    Entering system off; press sw0 to restart
    

    Kind Regards,

    Abhijith

Children
No Data
Related