Add UF2 bootloader for USB firmware flashing

Vendored and trimmed from microsoft/uf2-samdx1, adapted to the actual
ATSAMD21G17D (128 KiB flash / 16 KiB RAM), fixing the flash/RAM-size
mismatch that the previously commented-out SAM-BA bootloader target
had (it assumed a 256 KiB SAMD21G18A). Builds as a standalone
PlatformIO environment (bootloader/platformio.ini), no python2/make
dependency. Compiles clean, fits in the 8 KiB bootloader region
(7292/8192 bytes). Not yet flashed/verified on real hardware.
This commit is contained in:
cjjohn 2026-08-03 20:56:58 +02:00
parent ce5db617a1
commit de52b57041
143 changed files with 69119 additions and 0 deletions

View file

@ -0,0 +1,32 @@
/*
* Board config for the VersaPad v2 UF2 bootloader.
* Adapted from Microsoft uf2-samdx1 boards/gemma_m0/board_config.h
* (closest upstream template: crystalless ATSAMD21, same USB_VID).
*/
#ifndef BOARD_CONFIG_H
#define BOARD_CONFIG_H
#define CRYSTALLESS 1
#define VENDOR_NAME "Custom"
#define PRODUCT_NAME "VersaPad v2"
#define VOLUME_LABEL "VERSABOOT"
#define INDEX_URL "https://git.jappel.io/jappel/VersaMCU"
#define BOARD_ID "SAMD21G17D-VersaPad-v2"
/* Same VID as the app firmware (platformio.ini), distinct PID so the
* bootloader enumerates as a different USB device than the app. */
#define USB_VID 0x239A
#define USB_PID 0x0011
/* No plain GPIO status LED on this board, only a WS2812 chain on PB22.
* The bootloader's LED_PIN code just toggles a digital output, that would
* not drive WS2812 correctly, so leave it undefined for now. */
//#define LED_PIN
//#define LED_TX_PIN
//#define LED_RX_PIN
//#define BOARD_RGBLED_CLOCK_PIN
//#define BOARD_RGBLED_DATA_PIN
#endif

View file

@ -0,0 +1 @@
#define UF2_VERSION_BASE "versapad-1"