Onboard LED
Every Core has one onboard LED on a dedicated pin — the simplest way to see firmware is alive. It’s really just a GPIO, so you can drive it at whichever level suits you: the core_* helpers, or the raw ll_gpio writes underneath. Use the Core / HAL / LL toggle at the top of the sidebar to switch.
Overview
The onboard LED is wired to a dedicated GPIO on every Core, known from the Core definition, so there’s no pad to assign. core_init() doesn’t set it up: call core_led_init() once after it. How you drive it depends on the layer:
Core — header-only helpers (core_led_*): on / off / toggle plus blink and heartbeat patterns. The everyday path, and what Studio emits.
It’s also the SDK’s failure indicator: the fault handler blinks SOS on it.
On, off, toggle
The direct controls. toggle is non-blocking — good from an event handler that already fires at the rate you want:
#include "core.h"
core_init();
core_led_init(); // once: LED pin as a push-pull output, off
core_led_on(); // light it
core_led_off(); // and off
core_led_toggle(); // flip — no delayPatterns
Two timed helpers. core_led_blink blinks a fixed number of times and blocks. core_led_heartbeat(period_ms, on_ms) is set up once and then runs by itself from the 1 ms SysTick, so the loop stays free. Calling it again restarts the cycle, so don’t call it on every pass:
core_led_blink(3, 100, 100); // 3 quick blinks, then return
core_led_heartbeat(1000, 2); // a 2 ms blip every second, from SysTick
while (1) {
core_watchdog_feed(); // core_watchdog.h; the templates arm a 5 s watchdog
do_work();
}A short on_ms keeps the same brightness across the supply: on the L0, L4 and W5 it is lengthened as VDD drops (a 2 ms blip at 3.3 V is about 32 ms at 1.8 V). period_ms = 0 stops it.
core_led_sos() blinks SOS forever and never returns. The fault handler doesn’t need it: it blinks SOS with its own raw-GPIO copy, so that works even if core_led_init() never ran.Cross-architecture support
The onboard LED is part of every Core’s baseline (and its GPIO underpinning is verified everywhere):
See the implementation status for the full matrix.
Known gaps
What the SDK itself lists as missing here, straight from the header:
core_led_sos is `__attribute__((noreturn))` so it can't be exposed safely — DSL programs that "call SOS" would deadlock the worker. Reserved for fault-handler escape-to-C use.
The onboard LED is hard-wired as a digital push-pull output. No PWM dimming wrapper, no RGB/RGBW support (tiles with addressable LEDs use Disp.RGBW or similar, not core_led).
From the @studio unsupported notes in core_led.h — tiles@217a38f.
API reference
void core_led_on(void);void core_led_off(void);void core_led_toggle(void);void core_led_blink(int n, int on_ms, int off_ms);void core_led_heartbeat(int period_ms, int on_ms);void core_led_init(void);void core_led_sos(void);Generated from core_led.h — tiles@f356b04.

