Un aficionado que firma como mkopec convirtió un hub USB-C de Cable Matters, de unos 45 dólares, en un dock funcional para la Nintendo Switch 2. Para lograrlo modificó el firmware con apenas 540 bytes de código, lo que permite que el hub se haga pasar por el dock oficial, según detalló en una entrada de su blog. Tom's Hardware lo publicó el 12 de noviembre.

El firmware editado responde a los mensajes propietarios de Nintendo y devuelve la misma identidad que el dock oficial. Con eso funciona el modo TV, que con el firmware de fábrica no andaba. Un arreglo aparte, con otra reescritura menor, corrige además el HDR deslavado por HDMI.

El autor escribió que "Nintendo se fue por un camino propietario (como hace tan a menudo)". Decidió modificar el firmware para armar un dock de viaje funcional, porque el oficial es voluminoso. Desbloquear las funciones extra no tuvo un costo visible, y según cuenta, el hub "sigue funcionando normalmente con mi PC y mi teléfono".

¿Por qué el hub no mostraba imagen?

El hub de fábrica carga la consola sin problemas, pero no entrega imagen, aunque negocia tanto la energía como el modo alternativo DisplayPort. El autor capturó el tráfico del dock oficial de la Switch 2 con un analizador de USB Power Delivery (USB-PD) y encontró que el dock anuncia dos identificadores (Standard o Vendor ID). Uno es para DisplayPort y el otro para el modo propio de Nintendo.

La consola entra primero en el modo de Nintendo, luego en DisplayPort, y una vez configurado DisplayPort envía los mensajes propietarios de Nintendo. Ese es el intercambio de mensajes con que se negocia la conexión. Nintendo le dijo a Tom's Hardware el año pasado que "no tiene ninguna intención de obstaculizar ni invalidar la compatibilidad legal de docks de terceros".

Los chips del Cable Matters

La modificación solo requirió agregar unos 540 bytes a un firmware de apenas 32 KiB. El hub Cable Matters 7 en 1 para tres pantallas es, como la mayoría, una suma de chips especializados.

ChipFabricanteFunción en el hub
VL103VIA LabsControlador USB-PD
VL817VIA LabsHub para los puertos USB
RTD2142RealtekDisplayPort MST, conversión de DisplayPort a HDMI
XT25F16BMemoria flash

De fábrica, el hub informa el identificador de fabricante de VIA, y esa identidad era la que había que cambiar.

¿Cómo se hizo la modificación?

Primero el autor conectó el analizador USB-PD en línea WITRN K2 al dock oficial. Después volcó el firmware del VL103 con el complemento vli de fwupd, la herramienta de actualización de firmware de Linux, y lo grabó con los cambios por USB a través del VL817.

Los cambios fueron graduales, en siete versiones.

1. Respuestas a los comandos de descubrimiento, entrada al modo y eco de Nintendo. 2. Ajuste del Power Delivery para ofrecer 15 V a 2,8 A, igual que el dock. 3. Cambio del identificador de fabricante al de Nintendo. 4. Suplantación completa del dock oficial, con el modo TV funcionando. 5. Una secuencia idéntica a la del dock, que eliminó una pausa de unos 3 segundos.

Según Tom's Hardware, el proceso parece contradecir lo que dos fabricantes de accesorios le dijeron a The Verge, que la verificación del dock usa cifrado con un chip dedicado. En este caso bastaron datos de identidad copiados y respuestas fijas.

El arreglo del HDR

Lograr el modo TV ya habría sido un logro, pero el autor siguió. Con HDR activado, la imagen por HDMI se veía deslavada, y fue cosa de acotar la causa. Su hipótesis final fue un error en cómo el AVI InfoFrame del hub señalaba BT.709, el espacio de color de rango dinámico estándar, en lugar del BT.2020 más amplio que usa el HDR.

La hipótesis se confirmó con un parche de 108 bytes al firmware del RTD2142. Lo grabó con flashrom por I2C, transportado en el canal AUX de DisplayPort por el mismo cable USB-C, y desde entonces la señal se marca como BT.2020 cada vez que hay HDR. El firmware de un dock de terceros contiene la cadena de depuración "switch2 color space patch", lo que sugiere que el problema es conocido. El HDR por el puerto DisplayPort propio del hub sigue deslavado.

El firmware del hub tampoco soporta frecuencia de refresco variable (VRR). Como el hub parchado se identifica como el dock oficial, la consola ahora ofrece VRR, pero al activarlo la imagen por DisplayPort se congeló y la de HDMI quedó en 60 Hz. En una prueba aparte en Linux, con el hub parchado para anunciar Adaptive-Sync y una EDID forzada, la pantalla se puso negra apenas variaba la tasa de cuadros. La función quedó apagada.

Lo que la publicación no incluye

La entrada del autor no comparte código, archivos de parche ni repositorio, aunque explica bien el método. Los puertos USB y el Ethernet no se probaron a fondo, y tampoco dice qué versión del sistema de la Switch 2 usó. El autor tampoco entiende muchos de los comandos de Nintendo, así que las respuestas de versión del hub son copias de las del dock oficial, y los comandos que no reconoce siguen recibiendo la respuesta de fábrica del hub.

Ese detalle importa porque la actualización de sistema 21.0.0 de Nintendo dejó algunos docks de terceros cargando la consola pero sin salida de video. Los fabricantes publicaron firmware corregido. Una modificación casera como esta no tiene a ningún fabricante detrás, y quien la copie queda por su cuenta.