flpr-host
M33-side companion to examples/hello-vpr.
Embeds the FLPR firmware blob in the M33 image’s
.rodataviaflpr-blob.h(generated bytools/flpr-blob-gen.py).Performs the SPU + VPR boot dance to release the FLPR from reset (memcpy to
0x20028000, SPU PERIPH[12].PERM SECATTR=Secure, INITPC, CPURUN).Polls the shared counter at
0x2003F000every second and logs over UART.Blinks LED1 (gpio1.10) at 2 Hz, distinct from the FLPR’s 1 Hz LED0.
Build / Flash
cd examples/flpr-host
gmake TARGET=nrf BOARD=nrf54l15/dk WERROR=0 flpr-host.flash
The Makefile rebuilds ../hello-vpr and regenerates flpr-blob.h
automatically when needed.
Console
gmake TARGET=nrf BOARD=nrf54l15/dk WERROR=0 PORT=/dev/cu.usbmodem* login
Expected:
[INFO: flpr-host ] M33 boot complete, blob=N bytes
[INFO: flpr-host ] Blob memcpy'd to 0x20028000
[INFO: flpr-host ] SPU PERIPH[12] before=0x8001000a after=0x8001001a
[INFO: flpr-host ] M33 is in SECURE mode (SPU S access succeeded)
[INFO: flpr-host ] VPR_S after launch: INITPC=0x20028000 CPURUN=0x1
[INFO: flpr-host ] [FLPR] tick 2
[INFO: flpr-host ] [FLPR] tick 4
...
If you see [FLPR] counter 0xFA1100XX mepc=0xYYYYYYYY, the FLPR took a CPU
exception. XX is mcause (5 = load access fault, 7 = store access fault,
2 = illegal instruction, …), and mepc is the faulting PC. The M33 keeps
reading and printing both registers so faults aren’t silent.
See doc/platforms/nrf-vpr.md for the full port documentation.