Problem:
After BIOS update to version 133, the controller board got stuck in bootloader mode. Bought a replacement board — same result after first boot (it worked before connecting to this Steam Deck).
jupiter-controller-update detects the device correctly:
Device is in bootloader mode, update required
Found candidate device, build timestamp 6112FB7A, BL true, BL_Type 1, HYB false
But always fails during erase with: ioctl ($FEATURE): Broken pipe
or
DogBootloaderUpdateError
Timeout waiting for Flash erase
FW update failed. Retrying... Count: 3
FW update out of retries
!! Failed to apply firmware update
What was tried:
Multiple SteamOS versions (3.5.6, 3.5.7, latest recovery images)
Old jupiter-hw-support packages (20240209, 20260211)
Patching d21bootloader16.py — replacing hidapi feature reports with direct os.write/read on /dev/hidraw0 → BrokenPipeError
Skipping erase step entirely → same pipe error on program
--check flag confirms needs_update=1
Both original and replacement boards show identical behavior
Root cause hypothesis:
The bootloader timestamp 1628633978 is extremely old. The chip responds to HID enumeration but does not ACK the erase command. The _poll_ack function in d21bootloader16.py times out waiting for UPDATE_STATUS_OK after sending erase — chip returns UPDATE_STATUS_ERROR immediately.
Question: Has anyone successfully recovered a controller with this BL timestamp? Is there an older version of the updater that handles this gracefully?
Hardware: Steam Deck LCD (Jupiter)
Controller chip: ATSAMD21J18A
Bootloader timestamp: 1628633978 (very old, 2021)
Current firmware target: D21_APP_REL_677C6202
Problem:
After BIOS update to version 133, the controller board got stuck in bootloader mode. Bought a replacement board — same result after first boot (it worked before connecting to this Steam Deck).
jupiter-controller-update detects the device correctly:
But always fails during erase with:
ioctl ($FEATURE): Broken pipeor
What was tried:
Multiple SteamOS versions (3.5.6, 3.5.7, latest recovery images)
Old jupiter-hw-support packages (20240209, 20260211)
Patching d21bootloader16.py — replacing hidapi feature reports with direct os.write/read on /dev/hidraw0 → BrokenPipeError
Skipping erase step entirely → same pipe error on program
--check flag confirms needs_update=1
Both original and replacement boards show identical behavior
Root cause hypothesis:
The bootloader timestamp 1628633978 is extremely old. The chip responds to HID enumeration but does not ACK the erase command. The _poll_ack function in d21bootloader16.py times out waiting for UPDATE_STATUS_OK after sending erase — chip returns UPDATE_STATUS_ERROR immediately.
Question: Has anyone successfully recovered a controller with this BL timestamp? Is there an older version of the updater that handles this gracefully?