forked from jappel/VersaMCU
Guard env:versapad's upload against overwriting the bootloader
pio run -e versapad --target upload writes the app starting at 0x0000 and silently destroyed the installed UF2 bootloader twice today during testing -- no warning, no error, just a board that stopped responding to the boot-key hold. upload_openocd.py now checks for the bootloader (verify_image against the locally built bootloader/.pio/build/versapad_bootloader/firmware.bin) before an env:versapad upload and refuses if one is present, pointing at env:versapad_usb instead. Fails closed: an inconclusive check (e.g. bootloader not built locally, SWD not responding) blocks rather than proceeding on a guess -- confirmed necessary the hard way, since a "fail open" first attempt let the destructive upload through silently. Scoped to PIOENV == "versapad" only, since bootloader/platformio.ini's own upload reuses this same script and must always be allowed to write 0x0000. A new erase-bootloader-and-flash custom target remains as the explicit, deliberate override. Documented the workflow (bootloader is its own PlatformIO project, flashed once via SWD; versapad_usb is the normal path afterward; versapad's upload is now guarded) in README.md and doc/10_usb_bootloader.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
cd27639e44
commit
01c5e0930e
4 changed files with 151 additions and 8 deletions
13
README.md
13
README.md
|
|
@ -55,6 +55,19 @@ cd bootloader && pio run -e versapad_bootloader --target upload # einmalig
|
|||
pio run -e versapad_usb --target upload # danach jedes App-Update
|
||||
```
|
||||
|
||||
`bootloader/` ist ein eigenständiges PlatformIO-Projekt (eigene
|
||||
`platformio.ini`, kein Arduino-Framework). Für die PlatformIO-IDE-Buttons in
|
||||
VS Code müsste der Ordner separat als eigener Workspace geöffnet werden; über
|
||||
die Kommandozeile reicht `cd bootloader && pio run ...` im selben Fenster.
|
||||
|
||||
Sobald der Bootloader installiert ist, **verweigert `versapad --target
|
||||
upload` den normalen Upload** — dieser Weg schreibt ab `0x0000` und würde den
|
||||
Bootloader sonst kommentarlos überschreiben (`upload_openocd.py` prüft das
|
||||
vorher automatisch). Bauen und Debuggen über `versapad` bleiben uneingeschränkt
|
||||
möglich, nur der Upload ist betroffen. Für App-Updates danach `versapad_usb`
|
||||
verwenden; bewusst zurück zu reinem SWD-Betrieb geht über
|
||||
`pio run -e versapad -t erase-bootloader-and-flash`.
|
||||
|
||||
Details, Speicherlayout und die Bootloader-Aktivierung (kein physischer
|
||||
Reset-Taster auf dieser Platine) stehen in
|
||||
[10_usb_bootloader.md](doc/10_usb_bootloader.md).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue