Het artikel beschrijft een methode om custom firmware (CFW) te installeren op de Steam Controller (2026) door gebruik te maken van een ongedocumenteerde hardwareupdater tool die in de Steam-mappen op Linux te vinden is.
Belangrijke punten uit het artikel:
- Risico's: Er is een aanzienlijk risico op het 'bricken' van het apparaat. De auteur heeft dit zelf ervaren.
- Herstel: Herstel is mogelijk via een Raspberry Pi Pico door te solderen aan de debug-pins, of door het apparaat in bootloadermodus te zetten via de toetscombinatie A + START + SELECT.
- Tooling: De
hardwareupdater.x86_64 is een PyInstaller-gebaseerde CLI waarmee apparaten kunnen worden opgesomd, in bootloadermodus kunnen worden gezet en geflasht kunnen worden.
- Technische details: De firmware voor de controller (codenaam IBEX) is gebaseerd op een Nordic nRF52833 (Cortex-M4) image met een specifieke 32-byte header en CRC-32 verificatie.
Steam Controller (2026): Methode voor Custom Firmware
Hier zijn enkele andere projecten die mensen hebben gemaakt:
- https://github.com/CouchTurtle/sc2-research
- https://github.com/mwdmwd/sc26re
Waarschuwingen
GEVAAR Dit lijkt een interne, ongedocumenteerde tool te zijn. Je kunt je apparaat hiermee 'bricken' (permanent onbruikbaar maken). Zorg ervoor dat je deze map kopieert naar een andere locatie, zodat Steam deze niet onverwacht verwijdert. Sluit Steam volledig af tijdens het proces, zodat de software de flashing-procedure niet onderbreekt. Ik weet niet waar deze bestanden zich op Windows bevinden, of dat ze daar überhaupt bestaan.
EXTREEM GEVAAR Ik heb mijn eigen controller hiermee gebrickt. Totdat ik toegang krijg tot de interne SWD-debugpins en de juiste pinout heb, kan ik dit niet herstellen. Wees uiterst voorzichtig met Custom Firmware (CFW).
Herstel en Recovery
Belangrijke update: Succesvol herstel Met behulp van een Raspberry Pi Pico en door te solderen aan de debug-pins, is het gelukt om de firmware terug te flashen. Ik heb het zelfs aan de praat gekregen met Rust!
Er is bovendien een zeer nuttige recovery-knop voor beschadigde firmware: door A + START + SELECT ingedrukt te houden bij het inschakelen, komt het apparaat in de bootloadermodus. Ik kon deze informatie nergens anders op internet vinden.
Bestanden en Locaties
Mijn doel was om CFW te installeren zodat ik games direct op de controller kan draaien. Na een update van de controller op mijn computer vond ik de volgende map:
~/.local/share/Steam/bin/hardwareupdater/
Het kan ook op deze locatie staan: ~/.steam/steam/ubuntu12_32/hardwareupdater/
In deze map staan enkele zeer nuttige bestanden:
- IBEXFW6A4423D7.fw: IBEX is de codenaam voor de Steam Controller (2026). Dit bestand wordt gecontroleerd met een CRC-32 en lijkt geen cryptografische handtekening of versleuteling te hebben. Dit bestand kan waarschijnlijk worden gereverse-engineered.
- PROTEUSFW6A4423DE.fw: Dit lijkt de firmware te zijn voor de Steam Controller Puck, maar aangezien dit niet mijn hoofddoel is, heb ik dit nog niet onderzocht.
- hardwareupdater.cfg: Dit bestand lijkt de
hardwareupdater te vertellen welk bestand geflasht moet worden, aangezien je het bestand niet als argument meegeeft. De inhoud is als volgt:
MUSTUPDATETRITONFWTS:6A18D057
MUSTUPDATEPROTEUSFWTS:6A18D053
TRITONFWTS:6A4423D7
PROTEUSFWTS:6A4423DE
De Hardware Updater Tool
Het meest nuttige bestand is hardwareupdater.x86_64. Dit is een via PyInstaller gepackaged CLI (Command Line Interface) voor het installeren van firmware op de controller en de puck.
Na het uitvoeren van chmod +x om het bestand uitvoerbaar te maken, geeft het programma de volgende opties:
hardwareupdater.py [--help | --check-for-updates | --update-all | --update-by-serial SERNUM | --prep-by-serial SERNUM | --reboot-by-serial SERNUM | --show-all-devices]
Apparaten opsommen
Door het volgende commando uit te voeren: ./hardwareupdater.x86_64 --show-all-devices
Krijg je een lijst met apparaten in dit formaat:
{
"version": "1.5",
"updates_available": [
{
"type": 2,
"Name": "Triton USB",
"hardware_id": 73,
"serial_number": "FXA9961700A0E",
"current_ts": "0x6A4423D7",
"update_ts": "0x0",
"must_update": false
}
]
}
Bootloadermodus activeren
Met het serienummer kun je de controller in de bootloadermodus zetten: ./hardwareupdater.x8664 --prep-by-serial SERIALNUMBER
Het apparaat identificeert zich dan als: 28de:1005 Valve Software Steam Controller Bootloader
Na een tijdje verlaat het apparaat deze modus. Als Steam openstaat, zal het firmware-update- of onboarding-scherm opnieuw verschijnen.
Firmware Flashen
Ik heb getest of het flashen van de stock-firmware werkt. Het flashen lukt zelfs als de firmware al up-to-date is, maar je krijgt de melding "ERROR: NO UNIT NEEDING UPDATE FOUND FOR SERIAL NUMBER" als je niet eerst --prep-by-serial uitvoert.
Het update-commando is: ./hardwareupdater.x8664 --update-by-serial SERIALNUMBER
Installeren van Custom Firmware: De beste manier om custom firmware te installeren is door het IBEX_FW bestand te vervangen door een nieuw bestand met exact dezelfde naam.
Let op:
- Maak altijd een back-up van het originele bestand zodat je kunt herstellen.
- Sluit Steam volledig af bij het uitvoeren van deze actie om te voorkomen dat Steam het bestand overschrijft of dat de controller gebrickt wordt.
Nagekomen update: Na het opnieuw flashen koppelde de puck correct, maar de haptische feedback klinkt vreemd. Ik weet niet of dit zichzelf oplost of dat het ongerelateerd is.
Technische specificaties van het firmwarebestand
Volgens analyse (via Claude) heeft het IBEX-firmwarebestand het volgende formaat:
Een header van 32 bytes bestaande uit:
- Magic:
0xD2D86467
- Payload grootte:
350672
- CRC-32 van de payload:
0x92D7396B
- 20 null-bytes
Dit wordt gevolgd door een raw Nordic nRF52833 (Cortex-M4) firmware image, waarbij zowel de grootte als de CRC-32 zijn geverifieerd tegen het bestand.
Steam Controller (2026): Methode voor Custom Firmware
Hier zijn enkele andere projecten die mensen hebben gemaakt:
- https://github.com/CouchTurtle/sc2-research
- https://github.com/mwdmwd/sc26re
Waarschuwingen
GEVAAR Dit lijkt een interne, ongedocumenteerde tool te zijn. Je kunt je apparaat hiermee 'bricken' (permanent onbruikbaar maken). Zorg ervoor dat je deze map kopieert naar een andere locatie, zodat Steam deze niet onverwacht verwijdert. Sluit Steam volledig af tijdens het proces, zodat de software de flashing-procedure niet onderbreekt. Ik weet niet waar deze bestanden zich op Windows bevinden, of dat ze daar überhaupt bestaan.
EXTREEM GEVAAR Ik heb mijn eigen controller hiermee gebrickt. Totdat ik toegang krijg tot de interne SWD-debugpins en de juiste pinout heb, kan ik dit niet herstellen. Wees uiterst voorzichtig met Custom Firmware (CFW).
Herstel en Recovery
Belangrijke update: Succesvol herstel Met behulp van een Raspberry Pi Pico en door te solderen aan de debug-pins, is het gelukt om de firmware terug te flashen. Ik heb het zelfs aan de praat gekregen met Rust!
Er is bovendien een zeer nuttige recovery-knop voor beschadigde firmware: door A + START + SELECT ingedrukt te houden bij het inschakelen, komt het apparaat in de bootloadermodus. Ik kon deze informatie nergens anders op internet vinden.
Bestanden en Locaties
Mijn doel was om CFW te installeren zodat ik games direct op de controller kan draaien. Na een update van de controller op mijn computer vond ik de volgende map:
~/.local/share/Steam/bin/hardwareupdater/
Het kan ook op deze locatie staan: ~/.steam/steam/ubuntu12_32/hardwareupdater/
In deze map staan enkele zeer nuttige bestanden:
- IBEXFW6A4423D7.fw: IBEX is de codenaam voor de Steam Controller (2026). Dit bestand wordt gecontroleerd met een CRC-32 en lijkt geen cryptografische handtekening of versleuteling te hebben. Dit bestand kan waarschijnlijk worden gereverse-engineered.
- PROTEUSFW6A4423DE.fw: Dit lijkt de firmware te zijn voor de Steam Controller Puck, maar aangezien dit niet mijn hoofddoel is, heb ik dit nog niet onderzocht.
- hardwareupdater.cfg: Dit bestand lijkt de
hardwareupdater te vertellen welk bestand geflasht moet worden, aangezien je het bestand niet als argument meegeeft. De inhoud is als volgt:
MUSTUPDATETRITONFWTS:6A18D057
MUSTUPDATEPROTEUSFWTS:6A18D053
TRITONFWTS:6A4423D7
PROTEUSFWTS:6A4423DE
De Hardware Updater Tool
Het meest nuttige bestand is hardwareupdater.x86_64. Dit is een via PyInstaller gepackaged CLI (Command Line Interface) voor het installeren van firmware op de controller en de puck.
Na het uitvoeren van chmod +x om het bestand uitvoerbaar te maken, geeft het programma de volgende opties:
hardwareupdater.py [--help | --check-for-updates | --update-all | --update-by-serial SERNUM | --prep-by-serial SERNUM | --reboot-by-serial SERNUM | --show-all-devices]
Apparaten opsommen
Door het volgende commando uit te voeren: ./hardwareupdater.x86_64 --show-all-devices
Krijg je een lijst met apparaten in dit formaat:
{
"version": "1.5",
"updates_available": [
{
"type": 2,
"Name": "Triton USB",
"hardware_id": 73,
"serial_number": "FXA9961700A0E",
"current_ts": "0x6A4423D7",
"update_ts": "0x0",
"must_update": false
}
]
}
Bootloadermodus activeren
Met het serienummer kun je de controller in de bootloadermodus zetten: ./hardwareupdater.x8664 --prep-by-serial SERIALNUMBER
Het apparaat identificeert zich dan als: 28de:1005 Valve Software Steam Controller Bootloader
Na een tijdje verlaat het apparaat deze modus. Als Steam openstaat, zal het firmware-update- of onboarding-scherm opnieuw verschijnen.
Firmware Flashen
Ik heb getest of het flashen van de stock-firmware werkt. Het flashen lukt zelfs als de firmware al up-to-date is, maar je krijgt de melding "ERROR: NO UNIT NEEDING UPDATE FOUND FOR SERIAL NUMBER" als je niet eerst --prep-by-serial uitvoert.
Het update-commando is: ./hardwareupdater.x8664 --update-by-serial SERIALNUMBER
Installeren van Custom Firmware: De beste manier om custom firmware te installeren is door het IBEX_FW bestand te vervangen door een nieuw bestand met exact dezelfde naam.
Let op:
- Maak altijd een back-up van het originele bestand zodat je kunt herstellen.
- Sluit Steam volledig af bij het uitvoeren van deze actie om te voorkomen dat Steam het bestand overschrijft of dat de controller gebrickt wordt.
Nagekomen update: Na het opnieuw flashen koppelde de puck correct, maar de haptische feedback klinkt vreemd. Ik weet niet of dit zichzelf oplost of dat het ongerelateerd is.
Technische specificaties van het firmwarebestand
Volgens analyse (via Claude) heeft het IBEX-firmwarebestand het volgende formaat:
Een header van 32 bytes bestaande uit:
- Magic:
0xD2D86467
- Payload grootte:
350672
- CRC-32 van de payload:
0x92D7396B
- 20 null-bytes
Dit wordt gevolgd door een raw Nordic nRF52833 (Cortex-M4) firmware image, waarbij zowel de grootte als de CRC-32 zijn geverifieerd tegen het bestand.