# 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`.