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

87 lines
4.1 KiB
C
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.
#pragma once
/*
* Nordic nRF54L15-DK (PCA10156) - Meshtastic variant
*
* ── GPIO voltage domains ─────────────────────────────────────────────────────
* P0 (gpio0 @ 0x10A000) Main domain 3.0 V ← usable
* P1 (gpio1 @ 0xd8200 ) LP domain 1.8 V ← NOT compatible with E22
* P2 (gpio2 @ 0x50400 ) HP domain 3.0 V ← usable
*
* The SX1262 needs VIH ≥ 0.7 × VDD = 2.31 V (VDD = 3.3 V).
* P1 outputs only 1.8 V → chip stays in reset, BUSY never goes LOW.
* All E22 signals are therefore on P2 (3.0 V), driven by SPIM00.
*
* EBYTE E22-900M30S (SX1262) wiring - J2 header, all P2:
*
* E22 pin GPIO pin# Notes
* ─────────────────────────────────────────────────────────────────────
* MISO → P2.04 36 SPIM00 data in
* NSS/CS → P2.05 37 SPI chip-select (RadioLib GPIO)
* DIO1 → P2.06 38 IRQ - interrupt via gpiote30
* BUSY → P2.03 35 GPIO input
* NRESET → P2.00 32 GPIO output
* RXEN → P2.07 39 Held HIGH via ANT_SW (LNA always active)
* MOSI → P2.02 34 SPIM00 data out
* SCK → P2.01 33 SPIM00 clock
*
* DIO2 → TXEN bridge required on E22 module (solder bridge / wire).
* DIO3 drives TCXO reference (1.8 V).
*
* Pin numbering convention: P0.n = n, P1.n = 16+n, P2.n = 32+n.
*
* Reserved / do-not-use DK pins:
* P0.00-P0.02 IMCU VCOM TX/RX/RTS pads (uart30 disabled; pads idle)
* P0.03 I2C SDA (TWIM30) - sensor bus
* P0.04 I2C SCL (TWIM30) - sensor bus; SW3 button on this pad,
* DO NOT press SW3 while I2C is active
* P1.00-P1.01 32 kHz crystal
* P1.02-P1.03 NFC antenna
* P1.10 LED1 (status LED - keep)
* P1.13 BTN0 - main user button
* P1.14 LED3
* P2.01-P2.05 SPIM00 / E22 (see above)
* P2.08-P2.10 Trace pins (avoid)
*/
#ifndef NRF54L15_DK
#define NRF54L15_DK
#endif
// ── SX1262 / E22-900M30S - all P2, HP domain (3.0 V) ────────────────────────
#define USE_SX1262
#define SX126X_CS 37 // P2.05 - chip-select
#define SX126X_DIO1 38 // P2.06 - IRQ (gpiote30 capable)
#define SX126X_BUSY 35 // P2.03 - BUSY
#define SX126X_RESET 32 // P2.00 - NRESET
// RXEN (P2.07) held HIGH permanently - LNA always active.
// RadioLib must NOT toggle it; ANT_SW drives it HIGH before lora.begin().
#define SX126X_ANT_SW 39 // P2.07 - RXEN driven HIGH at init
// DIO2 controls TXEN via bridge on E22 module.
// DIO3 provides 1.8 V TCXO reference.
#define SX126X_DIO2_AS_RF_SWITCH
#define SX126X_DIO3_TCXO_VOLTAGE 1.8f
// ── LEDs (active HIGH) ───────────────────────────────────────────────────────
#define PIN_LED1 26 // P1.10 - LED1 (status LED, LP domain - output only, OK)
#define PIN_LED2 41 // P2.09 - LED0 on DK (remapped; P2.07 now used for RXEN)
#define LED_STATE_ON 1
// ── Buttons (active LOW, internal pull-up) ───────────────────────────────────
// BTN1 (P1.09), BTN2 (P1.08) and BTN3 (P0.04) deleted from DTS - only BTN0
// remains. BTN3's pad (P0.04) is now I2C SCL.
#define PIN_BUTTON1 29 // P1.13 - BTN0
#define BUTTON_NEED_PULLUP
// ── I2C bus (TWIM30, HP domain, 3.0 V) ──────────────────────────────────────
// SDA=P0.03, SCL=P0.04. Pinctrl + clock-frequency live in the board overlay.
// External 4.7 kΩ pull-ups required on both lines. Meshtastic's Arduino
// TwoWire layer (src/platform/nrf54l15/Wire.cpp) resolves the device at
// compile time via DT_NODELABEL(i2c30); these PIN_WIRE_* defines are kept
// for parity with the Arduino convention used by other variants.
#define PIN_WIRE_SDA 3 // P0.03
#define PIN_WIRE_SCL 4 // P0.04
#define WIRE_INTERFACES_COUNT 1