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. |
||
|---|---|---|
| .. | ||
| boards | ||
| inc | ||
| include | ||
| lib | ||
| scripts | ||
| src | ||
| LICENSE-uf2-samdx1 | ||
| platformio.ini | ||
| README.md | ||
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 (MIT-Lizenz,
siehe 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
cd bootloader
pio run -e versapad_bootloader
Flash (Atmel-ICE/SWD, einmalig, überschreibt ggf. vorhandene App-Firmware nicht,
da nur 0x0000..0x1FFF beschrieben wird)
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
0x0011ist unverifiziert übernommen (siehe../doc/09_known_limitations.md), noch nicht auf echter Hardware getestet. - Ungetestet auf echter Hardware, siehe Branch
feature/usb-bootloader.