Osegi
Sprzęt·2 min czytania

Hub USB-C za 40 euro jako dok Switcha 2: 540 bajtów firmware

Zwykły hub USB-C ładował Switcha 2, ale nie pokazywał obrazu na telewizorze. Około 540 bajtów dopisanego kodu sprawiło, że udaje dok Nintendo.

A Nintendo Switch 2 connected to a TV through a small USB-C hub and cables on a desk
Zdjęcie: Хабр

Switch 2 ładuje się z każdego porządnego huba USB-C i bez problemu wchodzi w tryb DisplayPort Alt Mode, a mimo to na telewizorze nie pojawi się obraz. Autor pewnego projektu miał dość wożenia ze sobą nieporęcznego, kruchego oficjalnego doka, więc sprawdził, co tak naprawdę robi konsola. Skończyło się łataniem firmware w hubie za 40 euro.

Dlaczego zwykły hub USB-C nie działa ze Switchem 2?

Z fabrycznym oprogramowaniem Switch dochodzi zaskakująco daleko: negocjuje zasilanie, wchodzi w DisplayPort Alt Mode i ustawia pin assignment D. Potem nic. Okazuje się, że najpierw musi zajść coś jeszcze. Sniffer USB-PD (WITRN K2, wpinany w kabel) pokazał, że dok przedstawia się jako urządzenie Nintendo (VID 057E, produkt 2062), ogłasza własny SVID 057E i po konfiguracji DP odpowiada na serię wiadomości vendor-defined, czyli formatów zdefiniowanych przez producenta. Zapytanie to 057E0001 plus numer komendy, odpowiedź zaczyna się od 057E0041.

Hub to Cable Matters 7-in-1 z kontrolerem PD VL103 (rdzeń 8051, 32 KiB firmware) i układem RTD2142 jako konwerterem DP na HDMI. Do wolnego miejsca w firmware autor dopisał około 540 bajtów kodu 8051, które odpowiadają konsoli jak oficjalny dok. Zmieniał jedną rzecz naraz: oferta 15 V / 2,8 A zamiast fabrycznych 2,53 A, pełna identyfikacja doka. Samo VID Nintendo nie wystarczyło, Switch sprawdza tożsamość szerzej. Trzysekundową pauzę usunęła dopiero wersja v7.

Odpowiedzi z wersjami skopiowano z oficjalnego doka. Nie opisują niczego, co hub faktycznie ma, a nieznane komendy dalej dostają fabryczne „Not supported”. Do analizy autor używał Ghidry, SDCC i symulatora uCsim, a pomagały mu Claude i GPT.

Skąd blade kolory w HDR?

Obraz ruszył, ale z włączonym HDR kolory były wyraźnie wyblakłe, choć oficjalny dok na tym samym monitorze wyglądał normalnie. Autor wykluczył wyświetlacz, zakres RGB, sam hub (Linux pokazuje przez niego HDR poprawnie) i kontroler PD. Zostały RTD2142, w którego AVI InfoFrame pola kolorymetrii wskazywały BT.709, mimo że Switch wysyła BT.2020. Firmware tego układu, niepodpisany i do wgrania przez flashrom, też wymagał łatki. Według tytułu oryginału poszło na to 108 bajtów.

Aplikacje warte uwagi

SUMO: łamigłówka liczbowa

Wybierz właściwe pola, dodaj je i trafiaj w cel. Łatwa do nauczenia, trudna do opanowania. Za darmo, dla każdego wieku.

Tagi:nintendo switch 2usb-c hubfirmwareusb-pdreverse engineeringhdr

Więcej z tego dnia

Zobacz wszystkie →

Więcej w kategorii: Sprzęt

Zobacz wszystkie →