Repository navigation
Description
Context
FastLED/FastLED#3832 bring-up on an attached RP2350W reached a repeatable recovery state where fbuild's returned error loses the decisive transport diagnostic.
Exact target and host evidence:
- runtime before reset:
COM17,2E8A:F00F, serial2DCB876B587EA334 - BOOTSEL after reset: healthy composite
USB\VID_2E8A&PID_0003\E0C9125B0D9B MI_00: healthy USB mass storage, mounted as healthyRPI-RP2onG:MI_01: healthyRP2 Boot (Interface 1)withWinUSBservice- topology: BOOTSEL is behind external hub
USB\VID_0BDA&PID_5411\7&25f0bd90&1&3 - installed fbuild:
2.5.6; source comparison: currentmainat5a42f4a0 - artifact: RP2350 family
0xE48BFF59, valid RP2350 errata absolute block0xE48BFF57, 1,393,152 bytes
Reproduction:
fbuild deploy .build/pio/rp2350w -e rp2350w `
-p 'UF2=G:\' --transport picotool --skip-build -vThe PICOBOOT interface is healthy and WinUSB-bound, so the picotool-primary path is eligible. The returned CLI error is only:
deploy failed: RP2040 BOOTSEL volume G:\ did not eject after NEW.UF2; deployment is unconfirmed
It omits the picotool probe/load failure that should be composed by rp2040_picotool::format_failure, and it does not run or surface picotool uf2 info after the ROM leaves the volume mounted. The daemon then attaches a typed recovery request for the stale phantom runtime CDC, which is useful but does not explain why both stock transports failed.
This is related to #1161 but narrower: #1161 tracks the underlying storage/flash-path investigation and watchdog cleanup. This issue tracks preserving and augmenting the transport evidence needed to diagnose that failure safely.
Proposal
- Preserve the picotool-primary probe/load error when the mass-storage fallback also reaches an eject timeout.
- When BOOTSEL remains reachable after a rejected/unconfirmed UF2 download, invoke the managed picotool's read-only
uf2 infodiagnostic under a bounded timeout and append any ROM-reported reason. - Keep typed Windows recovery guidance additive; it must not replace either transport's original error.
- Do not invoke unmanaged picotool, raw serial, or a direct flasher.
Acceptance criteria
- A picotool-primary failure followed by a mass-storage eject timeout reports both failures in order.
- A bounded managed
picotool uf2 infoprobe is attempted only while a BOOTSEL interface remains reachable and its output is included when available. - Failure/timeout of the diagnostic itself cannot extend or replace the primary deploy error.
- Typed USB recovery guidance remains present and additive.
- Unit tests cover: both-transport composition, ROM diagnostic present, ROM diagnostic unavailable, and bounded timeout.
- Attached RP2350W evidence records the exact command, identity, and resulting actionable diagnostic.
Related issues
- investigate(rp2040): readable BOOTSEL volume stalls on first write; make watchdog cleanup handle-safe #1161 — underlying readable-BOOTSEL/flash-path investigation and watchdog cleanup
- investigate(rp2040): harden hub-path BOOTSEL mass-storage diagnostics #1081 — hub-path BOOTSEL diagnostics (closed)
- feat(rp2350w): complete pin-free AutoResearch and ESP32-C6 peer-network bring-up FastLED#3832 — RP2350W bring-up parent
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
zackees commentedon Aug 2, 2026
Local branch + attached-hardware result
Implemented the scoped diagnostic on
fix/rp2350-uf2-diagnosticsand installed the staged native CLI/daemon into the FastLED Phase 2 venv.Validation:
soldr cargo test -p fbuild-deploy— 268 passed, 13 hardware-only ignoredsoldr cargo clippy -p fbuild-deploy --all-targets -- -D warnings— passedA9765E0AADF8F9DB931EE48D00EB9F6743E27F16013A433BF0BA8FC8EF9E5CF7E8266A00B35EDF1D3C29A274C057622751A15057C396922B590D1520C588A9B1The same command now preserves both stock-transport errors and appends the bounded managed ROM query:
That diagnostic prevented a wrong-device assumption. The live
G:\BOOTSEL device is the unrelated RP2040 formerly associated withCOM12, not the requested RP2350W (COM17, serial2DCB876B587EA334). Their recorded USB hub paths differ, and COM17 is currently a non-present phantom. No further write was attempted againstG:\after this result.