Osegi
Железо·2 мин чтения

USB-C хаб за 40 евро стал доком Switch 2 после 540 байт кода

Обычный USB-C хаб заряжал Switch 2, но не выводил картинку на телевизор. Около 540 байт добавленного кода заставили его вести себя как док Nintendo.

A Nintendo Switch 2 connected to a TV through a small USB-C hub and cables on a desk
Фото: Хабр

Switch 2 спокойно заряжается от обычного USB-C хаба и даже входит в DisplayPort Alt Mode, но на телевизоре картинки нет. Автор проекта устал возить с собой громоздкий и хрупкий на вид официальный док, поэтому подключил к консоли сниффер и выяснил, чего именно она ждёт. В итоге он залатал прошивку хаба за 40 евро.

Почему Switch 2 не работает с обычным USB-C хабом?

Со стоковой прошивкой консоль заходит удивительно далеко: договаривается о питании, входит в DisplayPort Alt Mode, настраивает pin assignment D. Дальше тишина. Сниффер USB-PD WITRN K2, который включается в разрыв кабеля, показал причину. Официальный док представляется устройством Nintendo (VID 057E, продукт 2062), объявляет собственный SVID 057E, а после настройки DP обменивается с консолью vendor-сообщениями, то есть форматом, который определяет сам производитель. Запрос выглядит как 057E0001 плюс номер команды, ответ начинается с 057E0041.

Хаб у автора Cable Matters 7-in-1: контроллер PD VL103 (ядро 8051, 32 КиБ прошивки) и RTD2142, который работает конвертером DP→HDMI. В стёртую область прошивки он дописал около 540 байт кода 8051. Код отвечает на сообщения Nintendo, всё остальное остаётся за родным стеком. Менял по одной вещи: предложил 15 В / 2,8 А, как у дока (у хаба было 2,53 А), отдал полную идентификацию официального дока. Одного vendor ID оказалось мало, Switch проверяет идентификацию шире. Паузу примерно в 3 секунды убрала версия v7.

Версии в ответах скопированы с официального дока и ничего реального в хабе не описывают. На незнакомые команды по-прежнему уходит стоковое «Not supported». Для разбора автор использовал Ghidra, SDCC и симулятор uCsim, а ещё активно пользовался Claude и GPT.

Почему в HDR цвета были блёклыми?

Режим телевизора заработал, но с HDR цвета заметно бледнели, хотя официальный док на том же мониторе в той же игре давал нормальную картинку. Автор исключил дисплей, диапазон RGB, сам хаб (ПК с Linux выводит через него HDR правильно) и контроллер PD. Остался RTD2142: поля колориметрии в AVI InfoFrame на выходе HDMI говорили BT.709. Прошивка чипа не подписана, её читают и пишут через flashrom. Судя по заголовку оригинала, на HDR ушло ещё 108 байт.

Приложения, на которые стоит взглянуть

SUMO: числовая головоломка

Выбирайте нужные клетки, складывайте, достигайте цели. Легко понять, сложно освоить. Бесплатно, для любого возраста.

Теги:nintendo switch 2usb-c hubfirmwareusb-pdreverse engineeringhdr

Ещё за этот день

Показать все →

Ещё в рубрике: Железо

Показать все →