Steam Controller Custom Firmware Discovery (and failing to do it myself) #185
Replies: 9 comments 2 replies
|
Successful recovery! Doing some tests Claude gave me with a multimeter, I got the pinout for the debug pad, and used an RPI Pico to reflash it. Here's the pinout: I got it working by using USB power instead of using that. I used an RPI Pico flashed with debugprobe, wired like this: To install probe-rs (the flashing tool), run cargo install probe-rs-tools. Afterwords, I recovered with the following: Yes, soldering was needed, but this should make it simpler as it uses alignment holes to just stay on: This. |
|
Right, I forgot. Some probe-rs actions require root, but the path to it isn't in root, so run .cargo/bin/probe-rs instead. |
|
Finally, my controller runs Rust. |
|
A+START+SELECT puts the controller in bootloader mode. |
|
The buttons are odd... A, B, Start and Select are fine, but the rest use something different that I/Claude can't figure out. |
|
bad news, a while ago I accidentally locked up the firmware, and had to do a full erase to fix it, this appears to have broken all analog things and I cannot use joysticks or triggers anymore. |
|
turns out that I am very late to all of this stuff and this already exists: so i found nothing new. |

Uh oh!
There was an error while loading. Please reload this page.
WARNING: This can brick your controller from flashing it (which happened to me)
So I'm not sure where the right place to post about this is, but since this is the biggest modding scene with the controller right now I'll post it here. If anyone knows elsewhere to post, I can also do it there. I was wondering about running custom software on the controller, and was looking through how steam installs firmware, when I found a hardwareupdater folder, which has the controller firmware in it, and a tool to flash/put the controller in bootloader mode. The controller's own firmware is unsigned, CRC-only, without a signature, making it possible to flash custom firmware. I attempted to have Claude make me a small test program to try to run Rust on it (I do know Rust and Python, just not low level stuff like embedded devices), and ended up with a non-functioning device. I think the only way to fix this is to communicate with the J3 debug pad inside the controller. It uses an nRF52833 chip, so I need the SWD pinout, or another idea I don't know. I have the stock firmware backed up and a Pico for SWD flashing. I just can't identify the J3 pinout or get clean contact. I contacted steam support about the SWD pinout, they are steam support, so I might have success, but they haven't responded yet.
I wrote some more about the findings here.
All reactions