Power off Application Core but keep FLPR Core running on nRF54L15 DK

Hello, I am using the nRF54L15 DK board, and trying to connect to the FLPR RISC-V coprocessor in the SoC.

I have been able to do so, and can have both processors running concurrently. However, the issue is that it seems to run both at the same time uses a far greater quantity of power than just the Arm Cortex-M33 processor. (~100μA alone, and ~500μA with both coprocessors running).

I want to reduce the power as much as possible, and so I figured that by putting the Arm Cortex Application core in deep sleep mode while running the FLPR RISC-V core would be able to minimize power consumption, as I could wake up the Arm core whenever it may be needed.

The issue is that, whenever I try to shut down the Arm processor, the RISC-V processor also shuts down. The entire application halts. My question is whether or not there is a way to keep the application core in deep sleep mode while the FLPR core runs in its more lightweight fashion.

This is the main code I am using, it simply toggles the LEDs on the development kit, but should stop only the main application core after 5 iterations:

main.c (Application Core):

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/sys/poweroff.h>

static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);

int main(void)
{
	int count = 0;
	gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
	while(1){
		gpio_pin_toggle_dt(&led);
		k_msleep(2000);
		
		if(count == 5){
			sys_poweroff();
		}
		count++;
	}

	return 0;
}
 

prj.conf (Application Core):

CONFIG_POWEROFF=y
CONFIG_GPIO=y

main.c (FLPR Core):

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led1), gpios);

#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(remote, LOG_LEVEL_INF);

int main(void)
{
	gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
	k_msleep(1000);
	while(1){
		gpio_pin_toggle_dt(&led);
		k_msleep(2000);
	}

	return 0;
}

prj.conf (FLPR Core):

CONFIG_GPIO=y

The full project is attached. Currently right now, the LEDs 0 and 1 do toggle 5 times, but then the entire project stops. I currently use the nordic-flpr snippet. I have tried using the nordic-flpr-xip snippet as well, but to no avail. I am using ncs v3.0.2.

flpr_usage.zip

Parents Reply Children
No Data
Related