forked from jappel/VersaMCU
Hardware-tested the UF2 bootloader end to end on a real VersaPad v2 board. Found and fixed a real bug: the bootloader's jump into the app (__set_MSP -> SCB->VTOR -> bx) hard-faulted on every standalone boot, even with the debugger fully disconnected; identical register/VTOR values injected directly by a halted debugger ran fine, which pointed at the missing __DSB()/__ISB() barriers ARM's own guidance requires for this exact pattern. Also fixed a USB PID collision (0x0011 is Adafruit's own Gemma M0 bootloader PID, misidentified by Windows as a Circuit Playground COM port instead of exposing VERSABOOT). This board has no dedicated reset/boot button, so add a hardware boot entry that doesn't need one: holding the bottom-right Cherry MX key (key_id 24) during reset/power-on drives its matrix row and reads its column directly in the bootloader, before the app is even validated. Also corrected the app-side flash_with_bootloader.ld (was missing the NVM carve-out flash_without_bootloader.ld already has) and boards/versapad.json (wrong flash/RAM size, wrong MCU macro, stale PID), and enabled the previously-commented-out env:versapad_usb. Documented findings in bootloader/README.md, bootloader/TESTING.md, and doc/09_known_limitations.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
29 lines
1 KiB
INI
29 lines
1 KiB
INI
; VersaPad v2 – PlatformIO Configuration
|
||
; Custom SAMD21G17D board (custom PCB)
|
||
; Programmer: Atmel-ICE via SWD (kein Bootloader nötig)
|
||
|
||
[common]
|
||
platform = atmelsam
|
||
framework = arduino
|
||
board_build.variants_dir = ${PROJECT_DIR}/variants
|
||
lib_deps = adafruit/Adafruit NeoPixel
|
||
build_flags =
|
||
-DUSB_PRODUCT='"VersaPad v2"'
|
||
-DUSB_MANUFACTURER='"Custom"'
|
||
-DUSB_VID=0x239A
|
||
-DUSB_PID=0x0042
|
||
-DCRYSTALLESS
|
||
|
||
; ── Atmel-ICE via SWD (Hauptkonfiguration) ────────────────────────────────────
|
||
[env:versapad]
|
||
extends = common
|
||
board = versapad_nobl
|
||
upload_protocol = custom
|
||
extra_scripts = upload_openocd.py
|
||
debug_tool = openocd
|
||
|
||
; ── USB SAM-BA (nur wenn Bootloader geflasht ist) ─────────────────────────────
|
||
[env:versapad_usb]
|
||
extends = common
|
||
board = versapad
|
||
upload_protocol = sam-ba
|