All notable changes to Flashy — the J2534-style Pass-Thru interface for the Adafruit Feather M4 CAN Express — are documented here.
CLEARDTC — 3-pass cross-vendor clear: Mode $04 broadcast on functional 0x7DF, then physical UDS $10 03 + $14 FF FF FF per responder, then a GMLAN $28/$A2/$A5 broadcast wake-up + $14 with $20 returnToNormal cleanup. Bench-verified non-destructive across repeated runs.SCAN FULL — per-module Mode 9 dump: VIN, ECU Name (PID 0A), all CAL IDs (PID 04), all CVNs (PID 06), GM $1A B4 cal-info string. Default SCAN / SCAN FAST remains the quick presence + VIN walk.tools/obd2/ — vendor-neutral host wrappers for CLEARDTC and SCAN FULL with parsed output (including --json) and an NRC reference table.tools/set_rtc_local.py — sets the Feather’s PCF8523 RTC from the host’s current local time. Auto-detects the Feather by USB VID and exits the boot menu first.OSID now walks every GM diagnostic slot like SCAN and prints the primary OSID per responder (was: only the active ECM).PING accepts NRC as proof of life (matches SCAN’s logic) and prints the destination IDs so you can see which module is being pinged.0x7E3 “ABS” → “ABS/FPCM”, 0x7E1 “ECM2” → “ECM2/FSCM”, 0x7E6 “RCDLR” → “ECU6”. Vendor assignment varies; SCAN FULL’s ECU Name field is the authoritative identifier.initialized() and lostPower() flags were being misinterpreted; now we trust now().year() plausibility.tools/flashy_diag.py decoded firmware output as ASCII; em-dashes from the firmware were rendering as …. Now decodes UTF-8.E92ID) and AUTH gate — routes 5-byte seeds to algo 146 on late E92, refuses $27 02 on unknown variants to protect the MEC counter.kernel.bin + meta.json under Cernels/private/<id>/, picked up at build. New KLIST / KUSE commands.SET / PARAMS) and three new dev tools (flashy_diag, socketcan_sniff, vinwrite_debug).VINWRITE fallback to UDS $2E F190, longer filename support in cmd_kernel_read, clearer SD mkdir warnings.Added First bench-verified Flashy CAL & Full Write on T87A without bricking. Root cause of earlier brick attempts identified as an incorrect $6C size-field encoding. Per-module encoding mined from NT-Link reference capture, applied to Flashy, validated end-to-end.
0x011000 for all addresses; correct values are 0x011000 (M0 LMSR, addr < 0x080000), 0x021000 (M1 LMSR, 0x080000–0x0FFFFF), 0x031000 (HSR, addr ≥ 0x100000). Fix in extkern_write_block.HSWRITE now reads source bin OS PN at flash offset 0x014638 and compares against live TCM OSID via Mode 9 PID 4 before any kernel load or flash touch. Mismatch → aborts with a clear banner, TCM untouched. Prevents the cross-OS boot-anchor brick mechanism.HSREAD/CALREAD to load the kernel. Mirrors CALWRITE's internal session flow.HSWRITE completion (matches CALWRITE). Makes post-write recovery step explicit.apply_patches() — aborts if any patch offset's "old" bytes don't match expected. Prevents silent corruption of bins where compiler output places checks at different addresses. Proven on OS 24286985 (checks at 0x034730 / 0x034794 / 0x034B90, not 0x034648 / 0x0346AC / 0x034A70).OS_PATCHES dict keyed by OS PN lets each OS have its own patch addresses. Default table matches OS 24288836; OS 24286985 entry registered with correct shifted offsets.T87A_OS-24286985_Unlock_Patched_v2.bin built with correct offsets, bench-verified full-flow (Flashy CALREAD + HSWRITE + power-cycle + boot)."FLASHY " (46 4C 41 53 48 59 20) instead of the legacy "USBJTAG" bytes. Flashy-project ownership visible on the wire.FLA or USB prefix) — drop-in compat with existing tool ecosystems.FLSHY / JACKD / IN!!!) was already present; documented and indexed.g_sd_filename separately.<MODULE>_<VIN>_<OSID>_<OP>_<timestamp>.bin — groups by ECU in file explorer.Footprint: Flash ~31% / RAM ~49.5%. Bench hours this release: ~14. Bricks along the way: 3 (each led to a fix).
Added Hands-free T87A Rollin Smoke kernel exit. After HSREAD / CALREAD, the firmware now sends a 16 MB $A0 kill stream that causes the MCU to reset itself and cold-boot the OS within ~2 minutes. No power cycle required. Mined from a bench capture showing the kernel's final payload is a PowerPC blr (4E 80 00 20) — the kernel's own return-from-main triggers the MCU reset path.
AUTOKEXIT on by default — every HS-CAN read cleans up the kernel automatically. AUTOKEXIT off defers cleanup until MENU → 9 Reset.KEXIT command — run the kernel-exit sequence manually after any read session.$11 01 that the resident kernel silently ignores./Read/CALREAD_<OSID>_<timestamp>.bin.24288836) via OBD-II Mode 9 PID 4 ($09 04), matching the naming convention used in .bin files. Falls back to GM $1A B4 alphanumeric cal ID for modules that don't answer Mode 9./Read/ on the SD card with consistent <OP>_<VIN>_<OSID>_<timestamp>.bin naming — HSREAD, CALREAD, BAMREAD, and E92 FULLREAD.0x014638 after the dump completes and renames the file to embed it.SDLIST [path] — lists files and subdirectories (fixed prior root-only limitation). Defaults to /.SDTREE [path] — recursive listing, 3-level depth cap.SDSTAT — card total / used / free MB plus root-entry counts.SDPEEK upgraded to xxd-style output: OFFSET: hex hex hex |ASCII| rows.Footprint: Flash 29.8% (151 KB / 508 KB), RAM 49.5%. +3.7 KB vs. v1.4.0.
Added First public release of Flashy — a clean-room, MIT-licensed J2534-style Pass-Thru tool. Built from public protocol documentation and reference manuals only. No commercial flash-tool source code, kernels, or proprietary IP referenced or included.
docs/INIT required for normal operation$03 with human-readable decode like P0300 / U0100), Clear DTC ($04), VIN read/write, OSID, ECU reset<OSID>-YYMMDD-HHMMSS.bin), session-counter fallbackCernels/e92_read/ — 1816-byte Book E read kernel for MPC5674F. Handles $01 PING, $1A readDataByIdentifier, $23 ReadMemoryByAddress (multi-frame ISO-TP TX with full FC/BS/STmin support), $11 01 ECUReset (SIU SRCR). Inherits bootloader stack, silently discards unrecognized frames. Built with the free NXP powerpc-eabivle-gcc toolchain.Cernels/t87a_read/ — VLE/Book E read kernel for SPC564A80, work-in-progress.capture_bus.py — raw CAN bus capture to SavvyCAN-format CSVvin_scan.py / vin_update.py — multi-module bus scan + VIN updaterdetect_port.py — Feather COM port auto-detect (USB VID match)seed_key_algo.py — GM 2-byte seed/key (1280-algo lookup)gm5byte/ — GM 5-byte seed/key (AES-128 + SHA-256)bin2header.py — .bin → C header for embedding kernels in firmwarebuild_exe.py — PyInstaller build pipeline (portable dist/Flashy-Tool/ bundle, no Python required on target machine)docs/ecu-reference.html — MCU specs, memory maps, and module verification statusdocs/Read-Write-Instructions.html — step-by-step usage guidedocs/J2534-CANbus-Reference.html — protocol reference (UDS / ISO-TP / J2534)wiki/, CONTRIBUTING.md, GitHub issue templatesFlashy-Tool.zip — portable bundle, double-click any .bat to launchFlashy-Tool-Setup-1.3.0.exe — Windows installer (Inno Setup)firmware.uf2 bundled in bothLicense: MIT. Fork it, ship it, sell it — just keep the notice.