nRF54L Arduino Core Bare-metal Cortex-M33 + RISC-V development with the Arduino API. No Zephyr runtime or external nRF Connect SDK installation. A register-level Arduino core for Nordic's nRF54L family, with a mature peripheral surface, a practical Bluetooth LE stack, low-power board support, and direct access to the VPR RISC-V coprocessor. Native PlatformIO Support Build, upload, monitor and debug all six board…
Bare-metal Cortex-M33 + RISC-V development with the Arduino API. No Zephyr
runtime or external nRF Connect SDK installation.
A register-level Arduino core for Nordic’s nRF54L family, with a mature
peripheral surface, a practical Bluetooth LE stack, low-power board support,
and direct access to the VPR RISC-V coprocessor.
Native PlatformIO Support
Build, upload, monitor and debug all six board targets directly from PlatformIO.
Use the same Arduino API, bundled BLE libraries and board options in VS Code or
from the command line. Native support includes GDB debugging, Unity tests and
ELF/HEX/BIN/UF2 output, without requiring Arduino IDE or Arduino CLI.
PlatformIO support is included in 1.0.21 and later, with separate Arduino and
PlatformIO release packages. The tutorial below pins the Git installation to
v1.0.23; use #main when following ongoing development.
Project Scope
The 1.0.x line focuses on a dependable Arduino, peripheral, power-management,
and Bluetooth LE experience on supported nRF54L boards. The core is suitable
for real BLE prototyping and embedded applications within the documented
single-link security/privacy scope. Release-critical feature probes are compiled
from the exact packaged archive, the source checkout receives broader example
coverage, and the release gate compiles representative targets for both a
XIAO nRF54L15 and a XIAO nRF54LM20A.
The following protocol work is included for evaluation, but is not finished
or production-ready:
Area
Current boundary
Zigbee
Experimental partial stack and device demonstrations; incomplete Zigbee PRO coverage, routing, clusters, OTA, and ecosystem interoperability
Thread
Staged OpenThread FTD/MeshCoP/SRP/UDP with settings recovery, commissioner/joiner, sleepy-child, and mixed-board test paths; certification and broader interoperability remain
Matter
Staged system, crypto, packet-buffer, IPv6/UDP, ACL, onboarding, and custom PASE/CASE demo work; not an upstream wire-compatible or certifiable Matter device stack
Channel Sounding
Experimental two-board controller-backed LE CS Test; not connected-ACL Channel Sounding, calibrated ranging, cross-vendor interoperability, or a qualification claim
The Thread and Matter entries describe the experimental platform work included
in 1.0.8; those menu targets remain explicitly outside the stable feature
claim.
These boundaries keep the stable claims precise: unfinished protocol examples
are useful engineering work, but they are not presented as complete standards
implementations.
Why Use This Core?
Capability
Practical benefit
Arduino workflow
Install from Boards Manager, select a board, compile normal .ino sketches, and upload over a connected CMSIS-DAP probe
Native PlatformIO
Build all six board targets, use bundled and registry libraries, upload, monitor serial, run Unity tests, and debug with GDB without Arduino IDE or CLI; see the quick start
No Zephyr runtime
Shorter build cycles, smaller applications, and fewer framework layers between a sketch and the hardware
Direct peripheral access
GPIO, ADC, PWM, serial buses, audio, NFC, DPPI, GRTC, watchdog, comparators, and power controls are implemented against nRF54L hardware
Useful BLE depth
Peripheral, central, dual-role, GATT server/client, HID, BLE UART, PHY/DLE/MTU control, LE Secure Connections, bonding, OOB, Numeric Comparison, privacy/RPA, and CSRK signed writes
Low-power board integration
System ON idle, timed System OFF, reset-cause APIs, XIAO RF-switch control, LM20A external-flash power-down, and nPM1300 hibernate support
Dual-core access
Use the 128 MHz Cortex-M33 application CPU and the VPR RISC-V coprocessor without adopting a vendor RTOS
Observable validation
Public diagnostics, regression scripts, release-archive compilation, and a repeatable two-board hardware gate document what was actually tested
Cross-board build isolation
L15 and LM20A objects carry linker-checked SoC identities, and Arduino automatically clears stale objects when the selected board or installed platform changes
This core is a good fit when Arduino productivity and close control over timing,
memory, radio behavior, or power matter more than adopting the full nRF Connect
SDK application model. For a product that requires a Bluetooth, Matter, Thread,
or Zigbee qualification program, treat this core as engineering source and
validate the complete product against the relevant conformance suite.
For a XIAO nRF54LM20A / Sense, change just the board line:
board = xiao_nrf54lm20b
The historical lm20b board ID selects the LM20A hardware and memory layout.
The full board list and options cover HOLYIOT,
generic modules and the Nordic DK too.
Connect one board over USB and run these commands from your project folder:
pio run
pio run -t upload
pio device monitor
The first build downloads the core and its compiler automatically. The pyOCD
upload helper installs its pinned Python dependencies when needed. The serial
monitor should print an increasing uptime about once per second; press
Ctrl+C to exit it. In VS Code, the PlatformIO Build, Upload and
Serial Monitor actions run the same workflow.
For multiple connected boards, select the upload probe with board_upload.uid
and the serial device with monitor_port; see
upload and serial configuration.
The repository includes ready-to-run Blink and
BLE UART projects. The BLE example advertises as
X54-PIO; attach the LM20A antenna before radio testing. See the
complete guide for third-party libraries, 128 MHz operation,
debugging, Unity tests and validation limits. Pin the Git URL to a specific
commit or release tag when you need a reproducible project.
Add this URL in Arduino IDE → Preferences → Additional Boards Manager URLs, then install nRF54L15 Boards from the Boards Manager.
Normal uploads use the bundled native nRF OCD tool on Linux and Windows, so Windows does not need a separate Python install just to upload. If native upload fails, switch Tools -> Upload Method to pyOCD Recovery; its first setup installs pinned dependencies into the packaged tool-local runtime and requires access to the configured Python package index. J-Link via pyOCD (Experimental) is also available after installing SEGGER’s official J-Link driver package; this path has software-only coverage and still needs user hardware validation.
Arduino CLI Install And Updates
Arduino IDE users can update through Tools -> Board -> Boards Manager by searching for nRF54L15 Boards and clicking Update when a newer release is available.
Linux/macOS:
BOARD_URL="https://raw.githubusercontent.com/lolren/nrf54-arduino-core/main/package_nrf54l15clean_index.json"
arduino-cli config add board_manager.additional_urls "$BOARD_URL"
arduino-cli core update-index
arduino-cli core install nrf54l15clean:nrf54l15clean
# Check whether this core has an available update.
arduino-cli core list --updatable
# Update this core to the latest Board Manager release.
arduino-cli core upgrade nrf54l15clean:nrf54l15clean
Windows PowerShell:
$BoardUrl = "https://raw.githubusercontent.com/lolren/nrf54-arduino-core/main/package_nrf54l15clean_index.json"
arduino-cli config add board_manager.additional_urls $BoardUrl
arduino-cli core update-index
arduino-cli core install nrf54l15clean:nrf54l15clean
# Check whether this core has an available update.
arduino-cli core list --updatable
# Update this core to the latest Board Manager release.
arduino-cli core upgrade nrf54l15clean:nrf54l15clean
arduino-cli outdated is also useful when you want to see all updatable cores and libraries. If core list --updatable prints nothing for nrf54l15clean:nrf54l15clean, the installed core is already current.
Getting Started
Arduino IDE
Install the package with the Boards Manager URL above.
Connect the board and select Tools -> Board -> nRF54L15 Boards, then
choose XIAO nRF54L15 / Sense or XIAO nRF54LM20A / Sense.
Keep CPU Frequency -> 64 MHz for normal sketches. Use 128 MHz only when
an example explicitly requires it, including the Channel Sounding pair.
Start with one of the examples below and click Upload. The default native
nRF OCD uploader selects the connected CMSIS-DAP probe; the recovery uploader
is available from Tools -> Upload Method. Select J-Link via pyOCD
(Experimental) only when using an onboard or standalone SEGGER J-Link.
Open the Serial Monitor at the baud rate selected by the sketch. If serial
output is missing, verify Tools -> Serial Routing and close other programs
that own the port.
On the XIAO nRF54L15, the default USB bridge when powered route keeps the
SAMD11 bridge pins high-impedance until the host opens the serial bridge. This
allows BLE sketches to boot safely from battery; choose Header UART when a
physical D6/D7 UART is required.
Hardware-specific sketches are grouped under File > Examples > nRF54 Board Examples.
The XIAO-nRF54L15-Sense and XIAO-nRF54LM20A-Sense submenus
contain the matching onboard IMU and microphone sketches; base-board flash,
RGB, and control examples remain in their XIAO submenu, while HOLYIOT-25008
and the Nordic nRF54L15 DK have separate submenus.
Arduino CLI
The board identifiers deliberately retain the original internal LM20B name for
package compatibility:
# XIAO nRF54L15 / Sense
arduino-cli compile \
--fqbn "nrf54l15clean:nrf54l15clean:xiao_nrf54l15" \
"$HOME/Arduino/MySketch"
# XIAO nRF54LM20A / Sense
arduino-cli compile \
--fqbn "nrf54l15clean:nrf54l15clean:xiao_nrf54lm20b" \
"$HOME/Arduino/MySketch"
# The core can identify a single attached probe automatically.
arduino-cli upload \
--fqbn "nrf54l15clean:nrf54l15clean:xiao_nrf54l15" \
"$HOME/Arduino/MySketch"
When two boards are attached, select the target explicitly with the port or UID
reported by arduino-cli board list or pyocd list. Disable experimental
Thread, Matter, or Zigbee build options unless the sketch actually uses them;
this reduces compile/link surface and makes the intended runtime clear.
Experimental J-Link upload
Install the official SEGGER J-Link Software and Documentation
Pack first, reconnect the debugger,
and confirm that pyocd list --probes reports a J-Link. Then select Tools ->
Upload Method -> J-Link via pyOCD (Experimental). The Nordic nRF54L15 DK’s
onboard J-Link and a standalone J-Link are both intended to work.
If a standalone J-Link does not expose a serial/VCOM port, select Tools ->
Programmer -> J-Link via pyOCD (Experimental) and use Sketch -> Upload Using
Programmer. This programmer route does not require a fabricated serial port.
The equivalent CLI invocation is:
When multiple J-Links are connected, set NRF54L15_JLINK_UID to the intended
SEGGER serial number. The uploader refuses interactive or cross-transport
auto-selection in that situation.
This mode restricts pyOCD discovery to the J-Link plug-in, leaves target-power
control disabled, and does not fall back to another attached debug probe. It
uses pyOCD’s nRF54 target support rather than adding the proprietary J-Link
transport to open-nrf-ocd. It has not yet been flashed on maintainer J-Link
hardware, so please report the J-Link model, operating system, and complete
upload output if it fails.
Sketch Compatibility
Normal Arduino APIs such as pinMode, digitalWrite, analogRead,
analogWrite, Wire, SPI, and Serial are available. BLE sketches should
use the bundled Bluefruit52Lib compatibility API or the lower-level clean-core
BLE interfaces shown in the packaged examples. ArduinoBLE is not the native
BLE library for this core.
Board-specific hardware still matters. The Sense IMU is on Wire1; the LM20A
external header SPI and onboard QSPI flash use different controllers; and the
L15 antenna selection controls an external RF switch. Consult the
board reference before using fixed-function pins or
direct register access.
Current BLE Highlights
LE Secure Connections security now includes asynchronous Numeric Comparison
accept/reject handling, request-scoped keyboard/passkey input, explicit
bonding/MITM/SC/key-size policy, and OOB records supplied mutually or in
either one-way direction.
SMP security now reduces encryption keys to the negotiated 7-16 octet size,
enforces the 30-second transaction timeout with single-peer repeated-attempt
throttling, and aborts without deterministic fallback if CRACEN entropy is
unavailable.
BLE privacy now keeps the stable local identity separate from the active RPA,
derives the local IRK from the identity root, distributes identity keys during
bonding, resolves bonded peers through hardware AAR, and reuses the retained
bond after an RPA change.
SMP can exchange and retain CSRKs for both roles. ATT Signed Write Commands
use AES-CMAC signatures, monotonically persisted counters, replay rejection,
and a Bluefruit client writeSigned() entry point.
Bond storage now retains up to eight peers with power-loss-safe replicated
records, per-peer CCCDs and Service Changed state, role-correct legacy key
tuples, LRU replacement, indexed inspection/deletion, and RPA resolution.
GATT Robust Caching includes a spec-generated 128-bit Database Hash,
persistent per-bond Client Supported Features, Database Out Of Sync handling,
change-aware transitions, and notification/indication suppression while a
client cache is stale.
Bluefruit central support now includes safe service/characteristic object
lifetimes, handle-range discovery, bulk characteristic discovery,
readCharByUuid(), central indications, and bonded reconnect encryption.
Custom GATT characteristics now enforce fixed and maximum lengths for local
updates, remote writes, and prepare/execute writes. Service permissions are
inherited by their characteristics. Dynamic read/write authorization runs
callbacks outside the radio ISR, supports approve, reject, and replacement
values, and fails closed on timeout or disconnect. Battery Service database
writes and explicit notifications now have distinct behavior.
BLEUart::bufferTXD(true) now coalesces small writes into the current ATT
notification payload, sends a full packet automatically, and lets sketches
explicitly flush a partial packet without discarding it on backpressure.
Bluefruit central reads continue with Read Blob requests across ATT fragments,
characteristic discovery determines complete handle ranges, and the HID
client selects generic reports through their Report Reference descriptors.
ATT responses and callbacks now act only on fresh link-layer packets, and
service, characteristic, descriptor, and Read Blob pagination rejects
malformed lengths, out-of-range handles, and non-advancing peer responses.
Connection setup now rejects malformed access addresses, timing, channel-map,
window, and hop fields before changing live state. Accepted central-side LL
and L2CAP connection-parameter requests proceed to a scheduled connection
update, and reserved SMP fields are rejected.
Locally initiated connections now derive their access address and CRC seed
from fail-closed hardware entropy before radio ownership changes, including
the additional transition constraints required by LE Coded PHY.
The ANCS client now sends complete notification/app attribute commands,
reassembles fragmented Data Source responses, and implements title, subtitle,
message, app-name, message-size, date, action-label, and action APIs. Fragmented
response parsing is covered by host-side regression tests; live iOS behavior
still depends on the phone’s ANCS permissions and interoperability.
The full two-board release gate exercises
positive and rejected Numeric Comparison, all three OOB directions, RPA
rotation, identity-key distribution, privacy-aware bonded reconnects, and
signed-write counter persistence/replay rejection on XIAO nRF54L15 and XIAO
nRF54LM20A.
Timed System OFF now verifies reset-reason clearing before entry and exposes
an abort-stage diagnostic; the gate requires two consecutive GRTC wake-reset
cycles after the deliberate reset boundary on each connected board.
XIAO nRF54LM20A Sense PDM uses the product-specific EDGE/RATIO encodings and
a 1.28 MHz clock for 16 kHz PCM. The driver uses byte-addressed EasyDMA,
re-arms LM20 clock/filter configuration after STOP, fences DMA ownership at
STOPPED, and invalidates stale cache lines before samples are read. A final
simultaneous 70-second hardware soak completed 115/115 captures on each
Sense board with no timeout, underfill, guard, or DMA error: L15 captures took
503-505 ms and LM20A captures 504-505 ms. Live peak-to-peak response reached
4,626 counts on L15 and 3,994 counts on LM20A.
Arduino IDE examples are grouped by board and Sense hardware. LM20A flash and
RGB sketches, both XIAO Sense IMU/microphone sets, HOLYIOT-25008, and the
Nordic DK now have distinct menus, with duplicate platform sketches removed.
Install the stable release from the normal Boards Manager feed shown above, or
request the exact version with Arduino CLI:
Controller-backed Bluetooth LE Channel Sounding Test is now available through
the two public Arduino examples: BleChannelSoundingInitiator and
BleChannelSoundingReflector.
Nordic SDC/MPSL runs the timing-critical LE CS Test. The examples establish a
per-cycle session token before the test and verify that same token when the
reflector returns its controller result, so delayed results are not paired
with a new sounding cycle.
The public pair is hardware-validated with XIAO nRF54L15 and XIAO nRF54LM20A
in both initiator and reflector roles. It requires the 128 MHz CPU profile.
This is an experimental two-board LE CS Test path, not a connected-ACL Channel
Sounding implementation or a Bluetooth qualification claim. See the
Channel Sounding status for the
protocol boundary, measurements, and validation evidence.
Reference module target; verify the power, clock, antenna, and pin design of the carrier board
Nordic nRF54L15 DK
Nordic PCA10156 nRF54L15 DK (nrf54l15dk_pca10156)
Development-kit target for bring-up and peripheral testing
See board reference for detailed pin assignments and schematics.
Why Bare Metal?
This Core
nRF Connect SDK
RTOS
None (opt-in Thread/Matter)
Zephyr RTOS mandatory
Binary size
~12 KB blink
~100 KB+ blink
Compiler
GCC
GCC + Zephyr build system
Peripheral access
Direct register writes
Vendor HAL + DTS
BLE stack
Custom register-level; bundled Nordic SDC/MPSL for Channel Sounding
SoftDevice / Zephyr BLE
RISC‑V coprocessor
Direct boot/control and offload access; general runtime remains partial
Limited Arduino access
Learning curve
Datasheet + Arduino API
Zephyr + DTS + Kconfig
This core is for developers who want full hardware control with Arduino convenience.
Feature Matrix
This matrix describes the current main branch. The Boards Manager release can
lag behind it. A feature is not marked complete merely because a header,
constant, codec, or demonstration exists. The tables enumerate public protocol
families and major user-facing capabilities; related optional specification
procedures are grouped instead of pretending that every standards clause is a
separate feature.
Status
Meaning
Implemented
Available through a supported API and exercised within the boundary stated in the row. This does not imply standards certification.
Partial
A useful subset works, but important behavior, roles, or interoperability are missing.
Experimental
Evaluation code and examples exist; APIs or behavior may change and production use is not claimed.
Missing
No supported standards-compatible implementation is provided. A stub or private test protocol may still exist.
Hardware boundary
The nRF54L device or supported board does not expose the required hardware.
Protocol Inventory
Protocol or interface
Status
What users get
Bluetooth Low Energy
Implemented
Practical single-active-link central/peripheral operation, GAP, ATT/GATT, common services, security, bonding, privacy, HID, NUS, PHY/DLE/MTU control, and Bluefruit-compatible APIs. It is not a qualified complete Bluetooth controller.
Bluetooth LE extended advertising/scanning
Partial
Local extended payload transmission and scanner reassembly through 995 bytes; broad cross-vendor and connectable-extended interoperability remain open.
Bluetooth LE Channel Sounding
Experimental
Standalone two-board, single-antenna controller-backed LE CS Test. No connected-ACL ranging or cross-vendor claim.
Bluetooth Mesh
Missing
No Bluetooth Mesh provisioning, bearer, transport, model or relay stack is shipped.
IEEE 802.15.4
Partial
2.4 GHz PHY, TX/RX, CCA/ED, filtering, ACK and frame-pending primitives. A complete reusable MAC transaction engine is missing.
Proprietary raw 2.4 GHz radio
Implemented
Raw packet TX/RX and acknowledgement examples for direct radio experimentation.
Zigbee
Experimental
Direct-device examples, secure join/rejoin pieces, selected ZDO/ZCL paths, sleepy examples, and Zigbee2MQTT integration. It is not a complete Zigbee PRO stack.
Thread
Experimental
A real imported OpenThread FTD core with an nRF54 platform port, local two-board UDP and MeshCoP validation, and staged SRP/sleepy-device paths.
Matter over Thread
Experimental
CHIP system, crypto, packet-buffer and Inet foundations plus private onboarding/session demos. There is no standards-compatible Matter device runtime yet.
NFC-A tag
Partial
NFCT sense, activation, frame and EasyDMA APIs plus a tag setup example; antenna and phone interoperability depend on the board design and remain lightly validated.
UART/UARTE
Implemented
Serial, Serial1, routing options, buffered I/O, and lower-level UARTE access.
I2C/TWI
Partial
Wire, Wire1, repeated starts and controller mode are established; TWIS target APIs exist with narrower multi-instance validation.
I2S TX/RX/duplex on nRF54L15 and PDM capture on supported Sense boards. nRF54LM20A uses TDM instead of I2S, and no TDM wrapper is exposed yet.
External QSPI flash
Implemented
LM20A onboard PY25Q64 access through SPI_HS, Adafruit SPIFlash compatibility, and explicit deep-power-down support.
VPR IPC/RPC
Partial
RISC-V boot/control, shared transport and selected offload/service probes; not a general production softperipheral runtime.
CMSIS-DAP/SWD upload transport
Implemented
Packaged native nRF OCD upload with pyOCD recovery and UID-bound two-board validation tooling.
Native USB device / TinyUSB
Hardware boundary
The XIAO boards use an external SAMD11 USB bridge. TinyUSB headers are compile-compatibility stubs and report unsupported at runtime.
Wi-Fi / Wi-Fi scanning
Hardware boundary
No Wi-Fi PHY or MAC is present; the 2.4 GHz radio cannot decode or associate with 802.11 networks.
Bluetooth Classic
Hardware boundary
The radio supports Bluetooth LE, not BR/EDR.
ANT and Nordic ESB
Missing
Raw proprietary-radio examples exist, but no supported ANT or Enhanced ShockBurst protocol stack is shipped.
Ethernet and CAN
Missing
No native stack or controller API is shipped. External devices can be driven by user libraries over SPI or UART.
Wireless OTA / secure DFU
Missing
No production BLE DFU, Zigbee OTA, Matter OTA Requestor/BDX, or generic wireless boot-update path is provided.
Bluetooth Low Energy
Implemented BLE rows refer to the documented single-active-link scope. They do
not assert complete Bluetooth Core conformance, complete Bluefruit parity, or
Bluetooth SIG qualification.
Capability
Status
Available now
Important boundary
Legacy advertising and scan response
Implemented
Connectable, scannable, non-connectable, background, and directed advertising with bounded high-duty timeout.
Continue broad phone and long-duration regression testing.
Active/passive scanning
Implemented
Filters, callbacks, scan responses, and central connection initiation.
Cross-platform stress coverage remains narrower than controller qualification.
Central and peripheral roles
Implemented
Both roles and dual-role examples are available.
The supported claim is one active connection; requested Bluefruit link counts do not create a production multi-link controller.
PHY, DLE, and ATT MTU
Implemented
LE 1M, 2M, Coded S2/S8, DLE through 251 bytes, and MTU through 247 bytes when requested.
Broader fallback and hostile-procedure timing tests remain.
Connection control
Partial
Parameter updates, reason reporting, reset recovery, and malformed CONNECT_IND validation.
Interleaved LL control-procedure collisions and multi-link stress are not complete.
Extended advertising/scanning
Partial
Non-connectable payload chains and local scanner reassembly through 995 bytes.
Extended-connectable, cross-vendor and extended scan-response coverage is incomplete.
Periodic advertising
Missing
The capability probe fails closed.
No periodic advertising scheduler or synchronization path.
GATT server and client
Implemented
16/128-bit UUIDs, discovery, reads/writes, CCCDs, notifications, and confirmed indications.
Thread uses a real imported OpenThread FTD core. The experimental status refers
to this nRF54 platform port and its validation, not to the quality or
certification status of upstream OpenThread.
Capability
Status
Available now
Important boundary
Imported OpenThread FTD core
Implemented
Pinned upstream source is compiled when the experimental Thread stage is selected.
This nRF54 platform port is not a certified OpenThread platform.
nRF54 radio/platform layer
Experimental
Radio, alarm, entropy, reset and settings PAL plus cooperative processing.
Cooperative polling and incomplete power/interoperability evidence remain.
Formation and FTD roles
Experimental
Dataset setup and Leader, Router and Child paths; mixed L15/LM20A Leader/Child hardware validation.
No production multi-hop/router topology matrix.
IPv6, 6LoWPAN and mesh
Experimental
Upstream OpenThread networking exercised on a local two-board network.
No external OTBR, cross-vendor, interference or long-duration route test.
UDP, multicast and fragmentation
Implemented
Four sockets, explicit close, both unicast directions, multicast and payloads through 512 bytes.
This is local mixed-board transport evidence, not general interoperability.
Application CoAP / Secure CoAP APIs
Missing
MeshCoP internally uses CoAP/DTLS components.
OPENTHREAD_CONFIG_COAP_API_ENABLE and OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE remain disabled; no supported application API or interoperability gate is shipped.
MeshCoP Commissioner and Joiner
Experimental
Fresh PSKd join, reset-only dataset restore and exact wrong-PSKd rejection pass on two boards.
External Commissioner/Border Agent interoperability and broader negatives are missing.
Operational Dataset persistence
Partial
Normal restart preserves settings and reported storage failures retain the prior mapping.
Shared Preferences storage is not journaled/dual-bank or proven under controlled brownout.
SRP client; DNS client with Matter stage
Partial
SRP client and auto-start are built into Thread stage; the DNS client is enabled only when Matter stage also enables DNS-SD.
No external OTBR/SRP registration, removal, reboot or DNS-SD visibility gate. mDNS/server paths are disabled.
No Thread security conformance or fault/attack campaign.
Sleepy End Device
Experimental
Sleepy-child attach and poll APIs/examples; software CSL parameters are recorded.
The polling PAL has no hardware-timed CSL wakeups; sleep current, missed-poll recovery, parent interoperability and long soaks remain.
Border Router / Border Agent / Backbone Router
Missing
None in the shipped profile.
Use an external OTBR; no onboard NAT64, infrastructure routing or Border Agent.
Advanced optional services
Missing
TCP, channel manager/monitor, jam detection, history, network time and the full link-metrics manager are disabled; upstream CLI, POSIX, NCP/RCP and spinel transport were omitted from the import.
Upstream header presence does not make these available.
External interoperability
Missing
Repo-owned two-board gates only.
No completed OTBR, cross-vendor, three-node, RF-loss or long-duration matrix.
Thread certification
Missing
None.
No Thread conformance harness or product certification has passed.
The Matter entries rate standards-compatible behavior. Private PASE-like,
CASE-like, certificate and command demos are useful tests but are not marked as
standard Matter features.
Capability
Status
Available now
Important boundary
Upstream connectedhomeip foundation intake
Partial
Selected support, System Layer, PacketBuffer, error/key/time and Thread-dataset units are imported.
There is no complete upstream Matter server/runtime.
System clock, timers and work queue
Implemented
Monotonic clock and mutation-safe cooperative timer/work dispatch with host regressions.
A platform foundation is not a Matter device stack.
Crypto foundations
Implemented
SHA-256, HKDF, PBKDF2, AES-CCM, P-256 ECDH/ECDSA and DRBG entry points with fail-closed entropy.
P-256 is software and these primitives are not connected to an upstream Secure Channel.
CHIP PacketBuffer, IPv6 and UDP Inet
Experimental
Four queued endpoints, 1280-byte IPv6 datagrams, a private multicast transport probe and bidirectional payloads through 1200 bytes on two boards.
Transport validation only.
Setup payload helpers
Experimental
Manual/QR payload and setup identity helpers.
They do not prove successful standard commissioning.
DNS-SD / SRP discovery
Partial
Demo commissionable records can be built, queued and removed through OpenThread SRP.
No external OTBR/controller has verified publication or discovery.
Standard PASE / SPAKE2+
Missing
A fail-closed private PASE-like experiment exists.
Its framing/transcript is not Matter wire-compatible and cannot commission with a standard controller.
BLE commissioning rendezvous
Missing
None; the current profile is on-network only.
No standard Matter BLE commissioning service or transport.
Standard CASE sessions
Missing
A private Sigma-style tamper/replay experiment exists.
Private certificates, encodings and key schedule are not wire-compatible CASE.
Exchange Manager and reliable messaging
Missing
None from the upstream runtime.
Local message headers/counters do not replace Matter exchanges and retransmission.
Interaction Model and generated data model
Missing
Project-specific On/Off, Level, Identify and Scenes objects exist.
No upstream IM engine, subscription/reporting engine or generated endpoint model.
Group communication and key management
Missing
None from the upstream runtime.
No Group Data Provider, group sessions/key sets, secured multicast commands or standard Groups-cluster integration.
Access control
Experimental
Local ACL checks fail closed unless complete subject/fabric/node context is supplied.
Not connected to standard fabrics, CASE subjects or Access Control cluster persistence.
Fabric and operational credentials
Missing
A small in-memory demo fabric table exists.
No standard NOC/RCAC/ICAC provisioning, persisted multi-fabric lifecycle, keystore or fail-safe transaction.
Device Attestation
Missing
Test-only PAA/PAI/DAC-like objects and regressions.
Keys are regenerated and encodings are private; no standard DAC chain or Certification Declaration.
Persistence
Partial
Demo setup identity, Thread dataset, factory data and light state use Preferences.
Standard fabrics, ACLs, credentials, sessions and counters are not durably managed or brownout-proven.
OTA Requestor and BDX
Missing
Excluded from the staged upstream intake.
No Matter OTA runtime.
ICD / low-power Matter device
Missing
Thread has a separate experimental sleepy-child path.
No upstream ICD server, check-in protocol or Matter-aware sleepy lifecycle.
Ecosystem interoperability
Missing
Private two-board demos only.
No successful commissioning/control with chip-tool, Home Assistant, Google Home, Apple Home or SmartThings.
Matter certification
Missing
None.
No CSA test harness, production credentials or ecosystem certification.
Timekeeping, compare, wake and fixed-pin GRTC PWM examples.
Continuous waveform validation is limited by board pin conflicts.
DPPI / EGU
Implemented
Hardware event/task routing wrappers and examples.
Domain and channel ownership must be coordinated by the sketch.
EEPROM / Preferences
Implemented
RRAM-backed Arduino-style persistence used by bonds and staged protocol state.
Shared storage is capacity-limited and not a journaled brownout-atomic database.
LM20A external flash
Implemented
PY25Q64 JEDEC/read/write/erase and deep-power-down paths plus SPIFlash examples.
LM20A-specific; other boards may use different or no external flash.
VPR RISC-V control
Partial
Boot/reset, shared memory, RPC transport, ticker and checksum/offload probes.
No stable general-purpose coprocessor framework or resource scheduler.
VPR SoftPeripheral / sQSPI
Experimental
Host wrappers, RPC definitions, firmware scaffolding and a flash probe exist.
The complete firmware pair and low-power restoration are not established across supported boards.
nPM1300 PMIC
Implemented
Charger, VBUS limit, rails, telemetry, hibernate and battery-current examples.
Not present on the L15 XIAO.
System ON/OFF power APIs
Implemented
Low-power idle, timed System OFF, reset-cause APIs, RF-switch and board-specific shutdown helpers.
Measured current depends on debugger, LEDs, sensors, USB and board configuration.
Sense IMU and microphone
Implemented
LSM6DS3TR-C IMU and board-specific PDM microphone examples for supported Sense variants.
Selecting a non-Sense board does not add the sensors.
TinyUSB / native USB device
Missing
Compile-compatibility headers return unsupported.
Upload and serial use the board’s external CMSIS-DAP/SAMD11 bridge.
I3C
Hardware boundary
None.
nRF54L exposes I2C controller/target blocks rather than I3C.
See the board reference for pin, peripheral-instance,
sensor and routing details.
Crypto, Keys, and Tamper
Capability
Status
Available now
Important boundary
CRACEN entropy/RNG
Implemented
Hardware entropy source used fail-closed by BLE and staged Thread/Matter paths.
Product health monitoring and formal validation remain product concerns.
Hardware AAR, ECB and CCM
Implemented
Address resolution and BLE AES operations.
This does not automatically accelerate all Thread/Matter crypto.
Software hashes, HMAC, HKDF, PBKDF2 and AES-CCM
Implemented
mbedTLS-backed CHIP primitives plus the local streaming SHA-256/HMAC/PBKDF2 helper, with host vectors.
Full protocol conformance depends on the surrounding standard stack.
Software secp256r1
Implemented
P-256 key generation/ECDH for BLE Secure Connections and ECDH/ECDSA for private Matter experiments.
Software arithmetic is comparatively slow; the Matter path is not connected to a standard upstream Secure Channel.
CRACEN PKE acceleration
Missing
Nordic publishes Nordic-IC-only PKE microcode and an accompanying NCS driver for CRACEN Base devices such as nRF54L15.
This core does not ship/load that path; nRF54LM20A uses CRACEN Lite and is not a target for this PKE microcode.
KMU
Partial
Low-level slot metadata/task APIs and constrained IKG paths.
No complete product provisioning, rotation and protocol-consumer lifecycle.
Tamper/glitch detection
Partial
TAMPC/control wrappers and diagnostic examples.
External tamper, reset behavior and secure product policy need hardware characterization.
Production credentials
Missing
Development/test credentials exist in experimental paths.
No manufacturing provisioning system for Matter DACs, Zigbee Trust Center identity, or comparable product secrets.
Bluetooth LE
Bluetooth LE is the core’s primary wireless surface. It uses a clean,
register-level host/controller implementation for normal BLE operation and
ships a Bluefruit52Lib compatibility layer so familiar Adafruit-style
sketches can be moved to nRF54L with limited changes.
Implemented Surface
Layer
Available functionality
GAP
Advertising, active/passive scanning, central and peripheral roles, dual-role examples, connection parameter updates, RSSI, 1M/2M/Coded PHY, and reconnect behavior
ATT/GATT
Server and client discovery, 16-bit and 128-bit UUIDs, services, characteristics, descriptors, CCCDs, long reads/writes, fixed/maximum value lengths, notifications, indications, MTU 247, and DLE 251 paths
Compatibility services
BLE UART/NUS, Device Information, Battery, HID keyboard/mouse/gamepad, Current Time, ANCS notification and fragmented attribute handling, beacons, and custom services
Security
LE Secure Connections, Just Works, passkey/PIN flows, asynchronous Numeric Comparison, mutual and one-way OOB, bonding, negotiated 7-16-byte key sizes, CSRK signed writes, and authenticated access permissions
Privacy
Stable identity, local IRK derivation, rotating RPAs, identity-key distribution, eight-peer bond storage, direct/identity/RPA selection, and privacy-aware directed reconnect
Reliability
Encrypted retransmission/counter handling, signed-write anti-replay counters, SMP timeout and repeated-attempt controls, fail-closed CRACEN entropy, and release-gate positive/negative pairing tests
The two-board release gate checks advertising, discovery, CCCDs, PHY changes,
MTU/DLE, long notifications, pairing, bond reload, encrypted reconnect,
Numeric Comparison acceptance and rejection, all three OOB directions, RPA
rotation, identity-key distribution, AAR-based bond resolution, and signed
writes with persisted monotonic counters plus replay rejection. See
Two-Board Release Gate for the exact scope and
test procedure.
Choosing An API
Use #include <bluefruit.h> for the largest example set and compatibility
with common Bluefruit sketches.
Start with Bluefruit52Lib > Peripheral > bleuart for a phone or computer
peripheral, or Bluefruit52Lib > Central > central_bleuart for a central.
Use BLEService and BLECharacteristic for custom GATT services. Configure
properties, permissions, fixed or variable length, and callbacks before
calling begin().
Use Bluefruit.Security and characteristic permissions when a value must be
encrypted or authenticated. Numeric Comparison requires an explicit
asynchronous accept/reject response; the bundled example shows the complete
flow.
Use Bluefruit.Security.enumerateBonds(), getBondInfo(), deleteBond(),
and clearBonds() to manage up to eight built-in peer records. The legacy
custom persistence callback interface remains intentionally capacity-one.
Use the lower-level examples under Nrf54L15-Clean-Implementation for radio,
privacy, crypto, and hardware diagnostics where compatibility wrappers would
hide the behavior being tested.
A normal peripheral sketch follows this order:
Create service and characteristic objects globally.
Call Bluefruit.begin(), set the device name and TX power, and register
connection callbacks.
Configure security before starting protected services.
Configure and start each GATT service.
Add flags, advertised services, and the device name to the advertising and
scan-response payloads.
Enable restart-on-disconnect, select advertising intervals, and call
Bluefruit.Advertising.start().
BLE Scope Boundary
The core’s BLE claim is intentionally narrower than “all Bluetooth LE.” It does
not claim Bluetooth SIG qualification or complete Core conformance. Locally
generated legacy bond-key distribution and the built-in multi-bond privacy
store are implemented; automatic controller-enforced allow-list policy, broad
cross-vendor negative testing, and PTS/BQB remain outside the validated scope.
The built-in store retains up
to eight peers with isolated signing counters, CCCDs, privacy identities, and
Service Changed state. Nordic secure DFU is not
implemented, and BLEDfu::begin() returns ERROR_NOT_SUPPORTED. Legacy
directed advertising is supported with explicit target selection and compliant
high-duty scheduling. Service Changed tracking persists a structural database
fingerprint and pending handle range per bond, retries on encrypted
reconnects, and clears the range only after ATT confirmation. Channel Sounding
is separate from the normal connected BLE stack and remains experimental, as
documented below.
Power Consumption
The core has board-specific low-power behavior rather than treating sleep as a
CPU-only operation. On XIAO nRF54L15 it controls the external RF switch around
radio activity. On XIAO nRF54LM20A it coordinates the nPM1300, oscillator state,
RAM retention, and the onboard QSPI flash’s deep-power-down mode.
For the 1.0.18 L15/LM20A startup-charge and idle-current comparison, see
the issue #114 investigation and the
ble_power_breakdown PPK2 diagnostic.
Version 1.0.19 removes eager BLE pairing-key generation and restores
PMIC measurement settings after telemetry reads. Updated current measurements
are pending; the historical captures below remain attributed to their original
versions.
Community PPK2 Measurements
These are measured board-level snapshots, not datasheet limits or guaranteed
production figures. They depend on the core version, sketch, radio settings,
power path, board revision, instrument wiring, temperature, attached probes,
and peripherals. USB/debug connections can dominate microamp measurements.
Delay and System OFF, side by side
*Community PPK2 comparison posted 14 June 2026: the LM20A trace (left)
labels returning delay() at abou
评论