VersaMCU/bootloader
2026-08-03 21:15:02 +02:00
..
boards Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
inc Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
include Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
lib Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
scripts Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
src Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
LICENSE-uf2-samdx1 Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
platformio.ini Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
README.md Add UF2 bootloader for USB firmware flashing 2026-08-03 20:56:58 +02:00
TESTING.md Add hardware bring-up instructions for bootloader testflash 2026-08-03 21:15:02 +02:00

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