Add end-to-end USB flashing for the app firmware via UF2
Adds uf2conv.py (minimal, dependency-free .bin -> .uf2 converter matching bootloader/inc/uf2format.h's block layout) and upload_uf2.py, a PlatformIO upload hook for env:versapad_usb that finds the mounted VERSABOOT volume and copies the converted firmware onto it. env:versapad_usb previously used upload_protocol=sam-ba, the classic Arduino/Atmel protocol -- the actual bootloader speaks UF2/mass storage, not SAM-BA, so that upload path never worked. Switched to upload_protocol=custom with the new hook, and cleaned the now-unused SAM-BA-specific fields out of boards/versapad.json. Verified end to end on real hardware: pio run -e versapad_usb --target upload builds, converts, copies to the VERSABOOT drive, and the bootloader jumps into the freshly written app on its own. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
f60a29137c
commit
d325297063
7 changed files with 210 additions and 32 deletions
|
|
@ -9,20 +9,23 @@ Das aktive Ziel `versapad_nobl` reserviert den kompletten Bereich
|
|||
`0x1FB00..0x1FFFF` für Makros und Config.
|
||||
|
||||
Ein USB-Bootloader-Pfad wird im Branch `feature/usb-bootloader` aufgebaut
|
||||
(`bootloader/`, App-Environment `env:versapad_usb`). Der Bootloader selbst
|
||||
(UF2, `bootloader/`) ist dort auf echter Hardware verifiziert — inklusive
|
||||
eines gefundenen und behobenen Bugs beim Sprung in die App (fehlende
|
||||
`__DSB()`/`__ISB()` vor dem `bx`, siehe `bootloader/README.md`,
|
||||
"Hardwaretest"). `env:versapad_usb`s Linkerskript
|
||||
(`bootloader/`, App-Environment `env:versapad_usb`). Der komplette Weg ist
|
||||
dort auf echter Hardware verifiziert: Bootloader-Flash, USB-Enumeration,
|
||||
Tastencheck-Einstieg (kein physischer Reset-Taster auf diesem Board, siehe
|
||||
`bootloader/README.md`, "Hardware-Bootloader-Einstieg"), App-Firmware per
|
||||
`.uf2` über `env:versapad_usb --target upload` schreiben, automatischer
|
||||
Rücksprung in die neue App. Details und ein gefundener/behobener
|
||||
Hard-Fault-Bug beim Sprung Bootloader→App (fehlende `__DSB()`/`__ISB()` vor
|
||||
dem `bx`) stehen in `bootloader/README.md`, "Hardwaretest".
|
||||
`env:versapad_usb`s Linkerskript
|
||||
(`variants/versapad/linker_scripts/gcc/flash_with_bootloader.ld`) reserviert
|
||||
inzwischen denselben NVM-Bereich wie `flash_without_bootloader.ld`.
|
||||
|
||||
Trotzdem noch kein Produktionsziel: `env:versapad_usb` verwendet
|
||||
`upload_protocol = sam-ba`, das klassische Arduino/Atmel-SAM-BA-Protokoll —
|
||||
das spricht der UF2-Bootloader nicht. Die App-Firmware erzeugt außerdem noch
|
||||
keine `.uf2`-Datei. Vor einem Merge nach `master` fehlen also noch die
|
||||
`.uf2`-Erzeugung und ein Ende-zu-Ende-Test des tatsächlichen USB-Flashwegs
|
||||
(Datei aufs `VERSABOOT`-Laufwerk kopieren).
|
||||
Trotzdem noch kein Merge-fertiges Produktionsziel: Der `.bin`→`.uf2`-Weg
|
||||
(`uf2conv.py`, `upload_uf2.py`, Repo-Root) sucht das `VERSABOOT`-Laufwerk
|
||||
bisher nur über die Windows-API, keine macOS/Linux-Unterstützung. Die
|
||||
Bootloader-USB-PID (`0x0043`) ist zwar kollisionsfrei verifiziert, aber kein
|
||||
offiziell registrierter Wert unter Adafruits VID `0x239A`.
|
||||
|
||||
Die aktive Boarddatei benennt die MCU als `samd21g17d`, setzt für den
|
||||
Arduino-Core aber weiterhin das Kompatibilitätsmakro `__SAMD21G18A__`. Der
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue