Skip to the content
PCBKitNew board
2 layers53 × 45 mmXIAO nRF54L15 V1, the printed circuit board in 3D

XIAO nRF54L15 V1

hmd83/tanen17

LoRaWAN beehive monitor: hive weight, temperature and battery over TTN. Seeed XIAO nRF54LM20A + SX1262, Zephyr/nRF Connect SDK. ~4 uA sleep, ~10 year life on 3X AAA cell. Includes KiCad hardware and a Web Bluetooth config app.

Size
53 × 45 mm
Copper layers
2
Thickness
1.6 mm
Parts
19
Nets
20
Pads
44
Tracks, vias
80, 32
Pours
16
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
27 Jul 2026
Updated
26 Oct 2026

Overview

XIAO nRF54L15 V1 is an open-source printed circuit board by hmd83, from the hmd83/tanen repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 53 × 45 mm with 19 parts on 20 nets, routed with 80 tracks and 32 vias.

Its parts include 4 connectors, 2 ICs and 1 resistor. It belongs with the radio and wireless and power boards and the nRF52 and nRF5x boards of this library.

README

Tanen_Base_pcb/README.md

TanenBase carrier PCB

KiCad 7+ project for the TanenBase carrier board — the passive breakout that holds the XIAO module, the Wio-SX1262 LoRa kit, the load-cell terminal block, the DS18B20 terminal block, and the battery connections.

FileContents
XIAO_nRF54L15 V1.kicad_schSchematic
XIAO_nRF54L15 V1.kicad_pcbBoard layout
XIAO_nRF54L15_V1_Gerber/Gerbers + drill files (as fabricated)
XIAO_nRF54L15_V1_Gerber.zipSame, zipped for the fab house
simulation_image_top.png / _bottom.png3D renders

Why is this named "nRF54L15" when the firmware targets the nRF54LM20A?

Because the board does not care, and renaming it would invalidate a PCB that has already been fabricated and verified.

The Seeed Studio XIAO family is a fixed mechanical and electrical standard: all XIAO modules share the same 21 × 17.5 mm outline, the same two 7-pin 2.54 mm headers, and the same pin roles in the same physical positions:

text
        ┌──────────────┐
   5V ──┤              ├── D0
  GND ──┤              ├── D1
  3V3 ──┤     XIAO     ├── D2
  D10 ──┤   21×17.5mm  ├── D3
   D9 ──┤              ├── D4
   D8 ──┤              ├── D5
   D7 ──┤              ├── D6
        └──────────────┘

The XIAO nRF54L15 and the XIAO nRF54LM20A are drop-in mechanical replacements for each other on this carrier. The footprint, the outline, the castellated pads, the header pitch, and the power pin positions are identical. Only the GPIO number sitting behind each header pin differs, and that is a firmware concern, resolved entirely in the devicetree overlay boards/xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay.

So the KiCad project filename is historical — it records the module that was in the socket when the board was laid out. The board itself is silkscreened "Tanen Base v0.1", not with any module name. The gerbers in this directory are the ones that were actually fabricated; renaming the project would mean regenerating them for zero electrical benefit.

Header role mapping across both modules

Firmware keeps the header roles fixed, so the carrier's netlist is valid for either module:

XIAO PinCarrier netnRF54L15 GPIOnRF54LM20A GPIO
D0DS18B20 data (1-Wire) — mandatory K1 cut, see belowP1.04P1.00
D1SX1262 DIO1P1.05P1.31
D2SX1262 RST + external TanenButtonP1.06P1.30
D3SX1262 BUSYP1.07P1.29
D4SX1262 NSSP1.10P1.03
D5LORA_RF_SW1 (Wio-SX1262 ant. switch)P1.11P1.07
D6NAU7802 SCLP2.08P1.08
D7NAU7802 SDAP2.07P1.09
D8SPI SCKP2.01P1.04
D9SPI MISOP2.04P1.05
D10SPI MOSIP2.02P1.06

Mandatory rework: cut the Wio-SX1262 K1 button off D0

The Wio-SX1262 for XIAO ships a user button K1 (TS-1188E) and a 10 kΩ pull-up R2 to +3V3 on D0 — the net this carrier uses for the DS18B20 1-Wire data line.

This is not optional and not a corner case: with K1/R2 fitted, 1-Wire does not read at all. Observed on hardware. R2 lands in parallel with the carrier 1-Wire pull-up (~3.2 kΩ effective) on top of the switch stub loading; the exact failure mechanism was not chased down because the cut fixes it outright.

The cut: the single trace from the K1/R2 node to the D0 castellated pad on the Wio board. One cut lifts both K1 and R2 off D0 and leaves the D0 pass-through (XIAO → carrier → DS18B20 terminal) intact. Verify by continuity: XIAO D0 still reaches the DS18B20 terminal, K1 node now isolated from D0. Done on the units built so far — repeat it on every new Wio-SX1262 before assembly, or temperature reads will fail on that unit.

Optional afterwards: the cut leaves K1 + R2 as a self-contained button-with-pull-up, currently isolated and unused. Wiring that node to P0.09 on the XIAO — in parallel with the module own user button — makes K1 a second TanenButton with no firmware change: P0.09 is already the armed System OFF wake source (gpio_disconnect_all() in src/core/power.c) and R2 reinforces the internal pull-up. P0.09 is not on any header, so that wire has to land on the XIAO on-board switch pad.

External button: D2 (P1.30) — shares the SX1262 NRESET net

Field-verified 2026-09-09 — bare switch to GND on D2, wake from System OFF into SETUP, no issues observed.

The second TanenButton lands on D2 = P1.30, the same net as the SX1262 NRESET. D2 is on a 7-pin header, so carrier v0.1 already routes it — no flying wire, and v0.2 needs no new net. (It was on D19 = P0.00, a bottom pad, until 2026-09-07; D19 is now free.)

Wiring: a plain momentary switch from D2 to GND. Nothing else — no pull-up, no cap. The SoC's internal pull-up (R_PU = 12 / 14 / 16 kΩ min/typ/max) holds the line high while the pin is sense-armed in System OFF, and that is also what keeps the SX1262 out of reset.

Why sharing a reset line is acceptable here. SETUP is a once-a-year calibration action and the station is asleep 99.8 % of the time (185 s awake per day at T_meas = 900 s / T_tx = 14400 s, from docs/POWER_BUDGET.md §1):

  • Asleep (99.8 %) — press pulls NRESET low: the SoC wakes and the SX1262 resets. The radio reset is free, because every wake is a full SoC reset and the sx126x driver drives NRESET low at device init anyway.
  • Awake (0.2 %) — the pin is a driver-owned output, so the press is not latched and is simply lost. Shorting a standard-drive pad to GND is harmless: I_OH,SD is 1 / 3 / 4 mA against a 15 mA recommended all-GPIO budget. The SETUP LED is the user's feedback — no LED, press again.
  • Switch fails closed — NRESET held low: wake loop draining the cell and a radio stuck in reset. Missing uplinks make it visible server-side within one heartbeat interval.

Add 100 nF to GND at the switch only if the button wire leaves the enclosure. On D19 a coupled glitch cost a spurious boot; on D2 it also resets the radio, possibly mid-TX. 100 nF against the ~14 kΩ pull-up is ~1.4 ms — harmless next to the driver's 20 ms reset pulse.

Port note: any wake-capable port works. The nRF54LM20A datasheet Port capabilities table lists P0, P1 and P3 as wakeup sources with pin sense/detect and GPIOTE; P2 has none of the three and cannot wake the system at all. Avoid D22/D23 (P0.03/P0.04 carry GRTC PWM / CLKOUT32K).

Firmware already supports it: button_arm_sense() in src/core/power.c arms P0.09 and P1.30 identically, and either press wakes into SETUP.

Differences that are worth knowing

These do not affect the carrier board, but they change firmware behaviour:

  • Battery sensing. The nRF54L15 module has no PMIC — the L15 firmware read VBAT through a divider on an ADC pin. The nRF54LM20A carries an on-board Nordic nPM1300, and the firmware reads its factory-trimmed VBAT ADC instead. Nothing on the carrier changed; the divider was on the module side.
  • Antenna switch. The L15 build had to sequence an RF switch on P2.03/P2.05. On the LM20A those pins belong to the on-board NOR flash. The Wio-SX1262 kit brings its own switch control out to header pin D5 = P1.07 (LORA_RF_SW1); the firmware never drives it, because the radio is configured dio2-tx-enable and the SX1262 switches the path from DIO2. D5 is therefore committed to an RF control net and is not a spare GPIO — do not put a button, pull-up, or anything else on it.
  • On-board NOR flash. The LM20A has a py25q64 on P2.00–P2.05. Firmware must put it into deep power-down before System OFF or it costs ~14 µA. Again, module-side only.

Fabrication notes

  • 2-layer board, standard 1.6 mm FR4, HASL or ENIG both fine.
  • No components on the bottom layer other than the silkscreen.
  • The 470 µF low-ESR bulk capacitor on the battery rail is mandatory, not optional — the LoRa TX burst peaks around 92 mA and the chosen ER14505 AA Li-SOCl₂ cell is rated 100 mA continuous. See docs/POWER_BUDGET.md §6.
  • The battery input is wired straight to the XIAO BAT pin, i.e. the nPM1300 VBAT input: 2.3 V min, 4.45 V max recommended, 5.5 V absolute. Anything connected there must stay inside that window at fresh open-circuit and at end of life. See docs/POWER_BUDGET.md §8.

Safety: the firmware deletes charging-enable from the nPM1300 charger node on purpose. This design runs a primary, non-rechargeable Li-SOCl₂ cell. Do not fit a rechargeable cell and do not re-enable charging without changing both together.


License

The hardware design files in this directory are released under the same Apache-2.0 license as the rest of the project.

Parts

19
QtyValueFootprintReferences
4LOGOLOGOG***, G***, G***, G***
14K7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
1BATT INConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1BATT OConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ4
1SWConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1Screw_Terminal_01x03abjad:TerminalBlock-3_P5.08mmJ1
1~abjad:XIAO-nRF54l15U1
1~abjad:NAU7802_AdafruitU2

The 11 most common of 19 parts.

Questions

How big is the XIAO nRF54L15 V1 PCB?

It measures 53 × 45 mm and has 2 copper layers, 1.6 mm thick.

What parts does the XIAO nRF54L15 V1 use?

19 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the XIAO nRF54L15 V1 KiCad files?

From the hmd83/tanen repository on GitHub, at the commit this page was made from: the board is Tanen_Base_pcb/XIAO_nRF54L15 V1.kicad_pcb and its schematic Tanen_Base_pcb/XIAO_nRF54L15 V1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the XIAO nRF54L15 V1 design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers43.9 × 27.7 mmTcd1304-4v, the printed circuit board in 3D

    Tcd1304-4v

    OpnTec/open-spectrometer-hardware

    Open source VIS spectrometer

    19 parts1.5k
  • 2 layers50 × 60 mmDebate Device, the printed circuit board in 3D

    Debate Device

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    19 parts915
  • 2 layers102.9 × 96.7 mmISA adapter, the printed circuit board in 3D

    ISA adapter

    polpo/picogus

    Emulation of ISA sound cards and CD-ROM on Raspberry Pi Pico (GUS, SB/Adlib, MPU-401, Tandy, CMS, Panasonic CD-ROM) with USB mouse/joystick support

    19 parts805
  • 2 layers60 × 39 mmPs2usb, the printed circuit board in 3D

    Ps2usb

    rasteri/HIDman

    Adapting USB devices to work on old computers

    19 parts432
  • 2 layers70.1 × 43.2 mmIaq device, the printed circuit board in 3D

    Iaq device

    nkitanov/iaq_board

    IAQ Board is a DIY (Do-It-Yourself) device for measuring internal air quality

    19 parts396
  • 2 layers80 × 80 mmGB BRK CPU G1, the printed circuit board in 3D

    GB BRK CPU G1

    Gekkio/gb-hardware

    Game Boy -related custom hardware by gekkio

    19 parts379CC-BY-4.0
  • 2 layers25.4 × 25.4 mmIna169, the printed circuit board in 3D

    Ina169

    Ardumower/ardumower

    Develop an open source robotic lawn mower (HW+SW reference platform)

    19 parts282
  • 2 layers58.4 × 28.6 mmNew rele, the printed circuit board in 3D

    New rele

    zmaker/arduino_cookbook

    gli sketch del nuovo progetto Arduino Cookbook e dei video di YouTube

    19 parts269