Add UF2 bootloader for USB firmware flashing
Vendored and trimmed from microsoft/uf2-samdx1, adapted to the actual ATSAMD21G17D (128 KiB flash / 16 KiB RAM), fixing the flash/RAM-size mismatch that the previously commented-out SAM-BA bootloader target had (it assumed a 256 KiB SAMD21G18A). Builds as a standalone PlatformIO environment (bootloader/platformio.ini), no python2/make dependency. Compiles clean, fits in the 8 KiB bootloader region (7292/8192 bytes). Not yet flashed/verified on real hardware.
This commit is contained in:
parent
ce5db617a1
commit
de52b57041
143 changed files with 69119 additions and 0 deletions
51
bootloader/README.md
Normal file
51
bootloader/README.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# VersaMCU UF2-Bootloader
|
||||
|
||||
USB-Bootloader für das VersaPad-v2-Makropad. Wird per Atmel-ICE/SWD einmalig
|
||||
auf den ATSAMD21G17D geflasht und belegt `0x0000..0x1FFF` (8 KiB). Danach
|
||||
lässt sich die App-Firmware ohne SWD über USB aktualisieren: Bootloader-Modus
|
||||
aktivieren (Doppel-Tap Reset), Board erscheint als USB-Laufwerk `VERSABOOT`,
|
||||
`.uf2`-Datei drauf kopieren.
|
||||
|
||||
## Herkunft
|
||||
|
||||
Abgeleitet und stark eingekürzt aus
|
||||
[microsoft/uf2-samdx1](https://github.com/microsoft/uf2-samdx1) (MIT-Lizenz,
|
||||
siehe [`LICENSE-uf2-samdx1`](LICENSE-uf2-samdx1)). Übernommen wurden nur die
|
||||
SAMD21-Bootloader-Sourcen (`src/`, `inc/`), die zugehörigen CMSIS-/ASF-Header
|
||||
für genau den `SAMD21G17A`-Chip (`lib/`) sowie das Linkerskript, angepasst auf
|
||||
den 128-KiB-Flash/16-KiB-RAM-Chip auf diesem Board (Original-Vorlagen zielen
|
||||
auf 256-KiB-Chips wie den SAMD21G18A). Board-Vorlage war `boards/gemma_m0`
|
||||
aus dem Original-Repo (crystalless, gleiche USB_VID wie unser Board).
|
||||
|
||||
Nicht übernommen: SAMD51/SAME54-Support, der Bootloader-Selbstupdate-Pfad
|
||||
(`selfmain.c`, `sketch.cpp`, das `python2`-Tooling `uf2conv.py`/`gendata.py`)
|
||||
und das Node-/Makefile-basierte Build-System — stattdessen ein eigenständiges
|
||||
PlatformIO-Environment, damit dasselbe Tooling wie für die App-Firmware
|
||||
ausreicht.
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
cd bootloader
|
||||
pio run -e versapad_bootloader
|
||||
```
|
||||
|
||||
## Flash (Atmel-ICE/SWD, einmalig, überschreibt ggf. vorhandene App-Firmware nicht,
|
||||
da nur `0x0000..0x1FFF` beschrieben wird)
|
||||
|
||||
```bash
|
||||
pio run -e versapad_bootloader --target upload
|
||||
```
|
||||
|
||||
## Bekannte Einschränkungen
|
||||
|
||||
- Flash-Auslastung ~89 % (7292 von 8192 Byte). Wenig Puffer für Änderungen.
|
||||
- Kein physischer Boot-Pin definiert, nur Doppel-Tap-Reset (RAM-Magic-Wert).
|
||||
Ein Hardware-Fallback-Pin wäre für die Wiederherstellung bei kaputter
|
||||
App-Firmware sinnvoll, ist aber noch nicht eingerichtet.
|
||||
- Kein Status-LED-Feedback im Bootloader-Modus, da die Platine nur eine
|
||||
WS2812-Kette (kein einfaches GPIO-LED oder DotStar) hat und der
|
||||
Original-Code dafür nicht ausgelegt ist.
|
||||
- USB_PID `0x0011` ist unverifiziert übernommen (siehe
|
||||
`../doc/09_known_limitations.md`), noch nicht auf echter Hardware getestet.
|
||||
- Ungetestet auf echter Hardware, siehe Branch `feature/usb-bootloader`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue