First classic-ESP32 (non-S3) board in the firmware, and first SX127x radio. ESP32 + SX1276 + SSD1306 OLED + AXP192 PMIC, CP2102 USB-UART bridge. Pin map verified from MeshCore variants/lilygo_tbeam_SX1276. The AXP192 gates power to the LoRa chip and OLED. Its I²C bus is shared with the display, so the firmware builds I²C0 in blocking mode first for the PMIC init, then converts the same handle to async and hands it to the display task — avoids double-consuming the peripheral. Lora-phy's Sx127x support drives DIO0 as the sole IRQ (SX127x has no BUSY line); the chip runs from a crystal, tx_boost routes +20 dBm through PA_BOOST. The `esp-hal` / `esp-rtos` / `esp-backtrace` / `esp-println` deps have been restructured so the chip flavour (esp32 vs esp32s3) is selected at the per-board feature level instead of baked into the dep lines. This keeps the existing S3 boards building on esp32s3 while the new T-Beam feature selects classic esp32 via the same dependency set. LoRaBoard gains supported_sf_bitmap() / supported_bw_bitmap() methods (with SX126x defaults) so the T-Beam can report SF6–SF12 via GET_INFO — the SX1276 has no SF5. radio_chip_id() reports 0x0011 per donglora-protocol RadioChipId::Sx1276. freq_range_hz widens to the SX1276 datasheet span of 137 MHz–1020 MHz. New modules: - src/hal/esp32.rs — classic-ESP32 MCU primitives - src/board/esp32.rs — Sx127x radio + SSD1306 display pipe - src/board/lilygo_tbeam.rs — the board file - src/driver/axp.rs — AXP192 init added alongside AXP2101
66 lines
2.5 KiB
Markdown
66 lines
2.5 KiB
Markdown
# DongLoRa Firmware
|
|
|
|
Embedded Rust firmware for DongLoRa boards. Exposes the LoRa radio over
|
|
USB CDC-ACM using a COBS-framed binary protocol.
|
|
|
|
## Building
|
|
|
|
```sh
|
|
just setup # one-time toolchain install
|
|
just build heltec_v4 # build for a specific board
|
|
just flash heltec_v4 # build + flash
|
|
just check-all # compile-check all boards
|
|
just clippy heltec_v4 # lint
|
|
just test # host-side protocol unit tests
|
|
```
|
|
|
|
All commands are run from the `firmware/` directory.
|
|
|
|
## Supported Boards
|
|
|
|
| Board | Feature | MCU | Radio | USB | Target |
|
|
|-------|---------|-----|-------|-----|--------|
|
|
| Heltec V3 | `heltec_v3` | ESP32-S3 | SX1262 | Native CDC-ACM | xtensa-esp32s3-none-elf |
|
|
| Heltec V3 (UART) | `heltec_v3_uart` | ESP32-S3 | SX1262 | CP2102 bridge | xtensa-esp32s3-none-elf |
|
|
| Heltec V4 | `heltec_v4` | ESP32-S3 | SX1262 | Native CDC-ACM | xtensa-esp32s3-none-elf |
|
|
| ELECROW ThinkNode-M2 | `elecrow_thinknode_m2` | ESP32-S3 | SX1262 | CP2102 bridge | xtensa-esp32s3-none-elf |
|
|
| LilyGo T-Beam | `lilygo_tbeam` | ESP32 | SX1276 | CP2102 bridge | xtensa-esp32-none-elf |
|
|
| LilyGo T-Beam S3 Supreme | `lilygo_tbeam_supreme` | ESP32-S3 | SX1262 | Native CDC-ACM | xtensa-esp32s3-none-elf |
|
|
| RAK WisBlock 4631 | `rak_wisblock_4631` | nRF52840 | SX1262 | Native CDC-ACM | thumbv7em-none-eabihf |
|
|
| Waveshare RP2040-LoRa | `waveshare_rp2040_lora` | RP2040 | SX1262 | Native CDC-ACM | thumbv6m-none-eabi |
|
|
| Wio Tracker L1 | `wio_tracker_l1` | nRF52840 | SX1262 | Native CDC-ACM | thumbv7em-none-eabihf |
|
|
|
|
### Heltec V3 USB Note
|
|
|
|
The default `heltec_v3` build uses **native USB CDC-ACM**, which requires a
|
|
hardware modification to your board. Stock Heltec V3 boards route USB through a
|
|
CP2102 bridge chip to UART — the ESP32-S3's native USB pins (GPIO19/GPIO20) are
|
|
routed to header pins but not connected to the USB connector.
|
|
|
|
**To enable native USB on a Heltec V3:**
|
|
|
|
1. Solder 0-ohm (or 22-ohm) resistors at pads **R29** (D+) and **R3** (D-)
|
|
2. Disconnect the CP2102 from the USB connector's D+/D- lines (cut traces or
|
|
remove the CP2102 bridge resistors)
|
|
|
|
After this mod, the board appears as `/dev/ttyACM0` with the DongLoRa VID:PID
|
|
(1209:5741), just like the V4 and nRF boards.
|
|
|
|
**If you have a stock (unmodified) V3**, use `heltec_v3_uart` instead:
|
|
|
|
```sh
|
|
just build heltec_v3_uart
|
|
just flash heltec_v3_uart
|
|
```
|
|
|
|
This builds firmware that communicates via the CP2102 bridge (appears as
|
|
`/dev/ttyUSB0`).
|
|
|
|
## Adding a Board
|
|
|
|
See [src/board/PORTING.md](src/board/PORTING.md).
|
|
|
|
## Protocol
|
|
|
|
See [PROTOCOL.md](PROTOCOL.md) for the complete wire format specification.
|