Files
meshtastic_firmware/variants/nrf54l15/nrf54l15dk/README.md
T
2026-07-01 19:01:27 -05:00

110 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# nRF54L15-DK - EBYTE E22-900M30S Wiring Guide
Board: **Nordic nRF54L15-DK (PCA10156)**
Radio: **EBYTE E22-900M30S** (SX1262, 30 dBm, 868/915 MHz)
---
## Why P2 (HP domain) and not P1
The nRF54L15 splits its GPIOs across three supply domains:
- **P0** - Main domain, **3.0 V** - usable
- **P1** - LP domain, **1.8 V** - **not compatible** with the SX1262
- **P2** - HP domain, **3.0 V** - usable
The SX1262 requires VIH ≥ 0.7 × VDD (≈ 2.31 V at VDD = 3.3 V). P1's 1.8 V output
leaves the chip stuck in reset with `BUSY` never going LOW. All E22 signals
therefore live on **P2** and are driven by **SPIM00**.
> `P2.09` is normally wired to LED0 on the DK; we ignore the LED and use
> SPIM00's default MISO pin. The on-board MX25R64 NOR flash also sat on SPIM00
>
> - it is deleted in the device-tree overlay to free the bus.
---
## Connections - J2 header, P2 bank
| E22-900M30S | GPIO | DK pin | Function |
| ----------- | ----- | ------ | ---------------------------------------------- |
| MISO | P2.04 | 36 | SPIM00 data in |
| NSS / CS | P2.05 | 37 | SPI chip-select (driven by RadioLib as a GPIO) |
| DIO1 | P2.06 | 38 | IRQ - modem interrupt (routed via gpiote30) |
| BUSY | P2.03 | 35 | Module busy (GPIO input) |
| NRESET | P2.00 | 32 | Module reset (GPIO output, active LOW) |
| RXEN | P2.07 | 39 | LNA enable - held HIGH via `SX126X_ANT_SW` |
| MOSI | P2.02 | 34 | SPIM00 data out |
| SCK | P2.01 | 33 | SPIM00 clock |
| GND | - | GND | Common ground |
| VCC | - | VDD | 3.3 V |
> **Numbering convention**: `P0.n = n`, `P1.n = 16+n`, `P2.n = 32+n`.
> Example: `P2.04` → 32 + 4 = **36**.
---
## DIO2 → TXEN bridge (required)
The E22-900M30S does **not** connect DIO2 to TXEN internally. A physical bridge on the module is required:
1. Locate the `DIO2` and `TXEN` pads on the underside of the E22 module.
2. Solder a wire bridge or a 0 Ω resistor between the two pads.
3. With this bridge, the SX1262 drives the PA automatically via `SX126X_DIO2_AS_RF_SWITCH`.
Without this bridge the module **will not transmit** (PA is never enabled).
---
## RXEN - LNA always on
`RXEN` (P2.07) is held HIGH permanently via `SX126X_ANT_SW 39` in `variant.h`.
**Do not use** `SX126X_RXEN` - RadioLib would drive it LOW in IDLE state and
the LNA would stay disabled (radio deaf in RX).
---
## Reserved DK pins - do not reuse
| Pins | Reserved function |
| ----------- | -------------------------------------------------------- |
| P0.00-P0.03 | IMCU debug UART (uart30, J-Link VCOM - used by RTT host) |
| P0.04 | BTN3 |
| P1.00-P1.01 | 32 kHz crystal |
| P1.02-P1.03 | NFC antenna |
| P1.10 | LED1 (status LED - kept) |
| P1.13 | BTN0 (only remaining user button) |
| P1.14 | LED3 |
| P2.01-P2.05 | SPIM00 / E22 (see connection table above) |
| P2.08-P2.10 | Trace ETM / LED2 (avoid) |
---
## Build and flash
```bash
# Build
pio run -e nrf54l15dk
# Flash (requires a J-Link connected via the DK's on-board IMCU)
pio run -e nrf54l15dk -t upload
# Monitor RTT (channel 1 = Meshtastic logs)
JLinkRTTLogger -device nRF54L15_xxAA -if SWD -speed 4000 -RTTChannel 1 boot.log
```
Expected boot log:
```text
*** Booting Zephyr OS build zephyr-v40201 ***
[nrf54l15] Reset cause: ...
[nrf54l15] B: calling setup()
INFO | ... SX1262
INFO | ... lora.begin() = 0 ← RADIOLIB_ERR_NONE
[nrf54l15] C: setup() returned
```
If you see `Record critical error 3` (`NO_RADIO`), check: DIO2→TXEN bridge,
supply voltages (the E22 must see 3.0-3.3 V on P2, not 1.8 V), and SPI wiring
continuity.