Nordic nRF54L
The nRF54L series from Nordic Semiconductor is based on an ARM Cortex-M33 application core. NuttX supports nRF54L15 and nRF54LM20A/B as standalone secure images, with a 128 MHz CPU clock and SysTick or GRTC scheduling.
Peripheral Support
The following list indicates peripherals supported in NuttX:
Peripheral |
Support |
Notes |
|---|---|---|
GPIO |
Yes |
|
GPIOTE |
Yes |
|
GRTC |
Yes |
Counter and tickless scheduling |
PWM |
Yes |
|
QDEC |
No |
|
RADIO |
Yes |
Bluetooth LE through SDC |
RRAMC |
Yes |
Progmem erase/write interface |
SAADC |
Yes |
|
SPIM |
Yes |
|
TIMER |
Yes |
|
TWIM |
Yes |
|
UARTE |
Yes |
No hardware flow control |
USBHS |
Yes |
LM20A/B device controller |
WDT |
No |
GPIO
Pins can be configured and operated using nrf54l_gpio_* functions.
GPIOTE supports channel events and tasks, with optional per-pin callbacks
for PORT events. Channels 0 through 7 belong to GPIOTE20 and serve P1 and
P3. Channels 8 through 11 belong to GPIOTE30 and serve P0. P2 does not
support GPIOTE.
GRTC
nrf54l_grtc_init(0) provides access to the 52-bit, 1 MHz system counter
and twelve compare channels. CONFIG_NRF54L_SYSTIMER_GRTC reserves the
instance and compare channel zero for tickless scheduling. The GRTC is timed
by LFCLK, so the LFCLK source selected with CONFIG_NRF54L_USE_LFCLK
determines the long-term accuracy of the system time.
With SDC enabled, channels 7 through 11 are reserved for MPSL.
PWM
PWM0 through PWM2 correspond to PWM20, PWM21 and PWM22. Each instance
supports four output channels. The board must provide an
NRF54L_PWMn_CHm_PIN definition for each enabled channel.
RADIO
CONFIG_NRF54L_SOFTDEVICE_CONTROLLER enables Nordic’s SoftDevice Controller
using nrfxlib 3.4.1. This SDK version no longer accepts raw HCI command
packets, so nrf54l_sdc_hci.c translates each HCI command into the
corresponding SDC command function and builds the Command Complete or
Command Status event. Events and ACL data pass through unchanged. Supported
commands cover legacy advertising, scanning, central and peripheral
connections, Data Length Extension, and 1M, 2M and Coded PHYs. The driver
provides the NuttX Bluetooth driver interface for the native host or HCI
transport. The build downloads nrfxlib; CONFIG_ALLOW_BSDNORDIC_COMPONENTS
must be enabled.
MPSL and SDC reserve TIMER10, TIMER20, GRTC channels 7 through 11, RADIO,
ECB00, AAR00, CCM00, CLOCK, TEMP and RRAMC, together with their DPPI/PPIB
resources. TIMER0, TIMER6 and progmem are unavailable while SDC is enabled.
The remaining GRTC channels can be used by the tickless scheduler. HFXO
remains running; the LFCLK source is selected with CONFIG_NRF54L_USE_LFCLK.
RRAMC
CONFIG_NRF54L_PROGMEM enables the progmem interface. RRAM supports
overwriting either bit value; erase operations fill emulated 4 KiB blocks
with 0xff. Writes require word-aligned addresses and lengths.
SAADC
nrf54l_adcinitialize() provides the ADC lower half, with up to eight
single-ended or differential channels, 8/10/12/14-bit resolution and
optional oversampling. Each ANIOC_TRIGGER collects one result per
channel. The local timer supports a single channel; scanning with
oversampling requires burst mode on every channel.
The internal reference is 0.9 V. Available gains range from 1/4 to 2. External analog and reference pins must have their digital input buffers, outputs and pulls disconnected before opening the device. AIN0 through AIN7 map to P1.04/05/06/07/11/12/13/14 on L15 and P1.00/31/30/29/06/05/04/03 on LM20.
SPIM
SPI0 through SPI4 correspond to SPIM20, SPIM21, SPIM22, SPIM30 and SPIM00.
nRF54LM20 also provides SPI5 and SPI6 using SPIM23 and SPIM24. Each bus
requires BOARD_SPIn_SCK_PIN and the applicable BOARD_SPIn_MOSI_PIN
and BOARD_SPIn_MISO_PIN definitions. Boards provide the select, status
and optional command/data callbacks declared in nrf54l_spi.h.
The driver supports 8-bit transfers, modes 0 through 3 and configurable
bit order. SPI4 supports up to 32 MHz; other instances support up to 8 MHz.
SPI_SETFREQUENCY() returns the clock selected using the hardware divider.
SPI, I2C and UART cannot use the same SERIAL instance concurrently.
TIMER
TIMER0 through TIMER6 correspond to TIMER20, TIMER21, TIMER22, TIMER23, TIMER24, TIMER00 and TIMER10. The timer lower-half driver uses a 1 MHz counter clock on each instance.
TWIM
I2C0 through I2C3 correspond to TWIM20, TWIM21, TWIM22 and TWIM30.
nRF54LM20 also provides I2C4 and I2C5 using TWIM23 and TWIM24. Each bus
requires BOARD_I2Cn_SCL_PIN and BOARD_I2Cn_SDA_PIN definitions.
UART and I2C cannot use the same SERIAL instance concurrently.
The driver supports 7-bit addressing at 100, 250 and 400 kHz, including
write/read transfers with a repeated START and two-part continued writes.
Other message chains requiring an uninterrupted bus return -ENOTSUP.
Continued writes use a per-bus buffer sized by
CONFIG_NRF54L_I2C_MASTER_COPY_BUF_SIZE. A combined write exceeding this
size returns -E2BIG before starting the transaction.
Bus reset is not supported.
UARTE
UART0 through UART4 correspond to UARTE20, UARTE21, UARTE22, UARTE30 and
UARTE00. nRF54LM20 also provides UART5 and UART6 using UARTE23 and UARTE24.
Each enabled UART requires BOARD_UARTn_TX_PIN and BOARD_UARTn_RX_PIN
definitions. Any enabled UART can be selected as the serial console.
UART4 requires the dedicated UARTE00 TXD and RXD pins listed in the chip’s
pin assignment table.
CONFIG_SERIAL_TERMIOS enables runtime baud rate, data bits, parity and
stop bit configuration. A format change returns -EBUSY while a byte is
being transmitted or DMA error recovery is in progress.
USBHS
CONFIG_NRF54L_USBDEV enables the LM20A/B USB device controller.
CONFIG_USBDEV_DUALSPEED enables high-speed operation; otherwise the
controller uses full speed. The driver provides sixteen endpoints in each
direction, including EP0. IN endpoints support packets up to 512 bytes.
USBHS is a Synopsys DWC2 core. nrf54l_usbd.c is a port of the STM32H7
OTG device driver (stm32h7/stm32_otgdev.c); nrf54l_usbhs.c handles
the Nordic wrapper: clock, PHY, core reset and VBUS detection.
Power Management
The idle loop uses WFI when GRTC provides tickless scheduling. With
SysTick selected, the CPU remains awake so its clock keeps running.
CONFIG_PM initializes the NuttX power management framework. System OFF
is not supported.