First RP2040 board and third MCU family (after ESP32-S3 and nRF52840). Hardware: RP2040 + SX1262 radio, 850-930 MHz HF, PE4259 antenna switch, LED on GPIO25, no OLED, USB-C via FPC ribbon cable to adapter board. New files: - src/hal/rp2040.rs: MCU primitives (SPI bus, USB driver, flash unique ID MAC) - src/board/waveshare_rp2040_lora.rs: board implementation - ld/rp2040-memory.x: linker memory layout Also fixes cortex-m-rt/set-vtor (moved from global dep to per-board feature, since Cortex-M0+ has no VTOR register) and makes build.rs memory.x selection target-aware.
63 lines
2.2 KiB
Markdown
63 lines
2.2 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 |
|
|
| 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.
|