# 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.
