mkopec이라는 이름의 취미 개발자는 약 $45 상당의 Cable Matters USB-C 허브를 사용하여, 단지 약 540바이트의 코드를 이용해 펌웨어를 수정함으로써 작동하는 Nintendo Switch 2 도크로 만들었습니다. mkopec은 blog post에서 이 과정을 상세히 설명했습니다.
수정된 펌웨어는 Nintendo의 공급업체 메시지(vendor messages)에 응답하고 공식 도크와 동일한 신원을 반환하며, 허브의 기본 펌웨어로는 작동하지 않았던 TV 모드를 가능하게 합니다. 별도의 사소한 펌웨어 재작성 수정은 HDMI를 통한 흐릿한 HDR 문제도 해결하는 좋은 추가 기능입니다.
이 개조자는 “Nintendo가 독점적인 방향으로 나아갔다(그들이 자주 하듯이)”고 언급하며, Nintendo의 공식 도크는 부피가 크기 때문에 작동하는 휴대용 도크를 만들기 위해 허브의 펌웨어를 수정하기로 결정했습니다. 추가 기능을 활성화하는 데 눈에 띄는 비용이 발생하지 않았는데, 허브가 “여전히 제 PC와 휴대폰에서 정상적으로 작동”했기 때문입니다. 시중에 판매되는 USB-C 허브를 가져와 더 많은 기능이 있는 장치로 만드는 것은 상당한 기술력이 필요한 작업입니다.
기본 허브는 콘솔 충전에는 문제가 없지만, 전력과 DisplayPort Alt Mode(디스플레이포트 대체 모드)를 모두 협상함에도 불구하고 화면 출력을 보여주지 않습니다. 공식 Switch 2 도크의 트래픽을 USB Power Delivery (USB-PD) 스니퍼로 포착한 결과, 이 허브가 DisplayPort용과 Nintendo 자체 모드용의 두 가지 표준 또는 공급업체 ID를 광고한다는 것을 개조자는 발견했습니다.
콘솔은 먼저 Nintendo 모드로 진입하고, 그다음 DisplayPort를 거칩니다. DisplayPort가 구성되면, Nintendo의 벤더 메시지를 전송합니다. 이것이 협상을 위한 [독점 메시지 교환]입니다. 비록 회사가 작년에 "합법적인 서드파티 도크 호환성을 방해하거나 무효화할 의도가 없다"고 말했지만요.
이번 수정은 단 32 KiB의 펌웨어에 약 540바이트만 추가하면 되었습니다. Cable Matters 7-in-1 트리플 디스플레이 허브는 대부분과 마찬가지로 별도의 전문화된 칩들을 조합한 것입니다. 구체적으로는 다음과 같습니다: USB-PD 컨트롤러 역할을 하는 VL103, USB 포트를 위한 VL817 USB 허브 칩, DisplayPort-to-HDMI 기능을 위한 RTD2142 DisplayPort Multi-Stream Transport 칩, 그리고 XT25F16B 플래시 메모리 칩입니다. VL 칩은 VIA Labs에서 제공하며, RTD2142는 Realtek에서 제공합니다. 순정 허브는 VIA의 벤더 ID를 보고하는데, 이 신원은 이번 모드를 위해 변경되어야 했습니다.
모더는 먼저 공식 도크에 WITRN K2 인라인 USB-PD 스니퍼를 사용했습니다. 그 후, 리눅스 펌웨어 업데이트 도구인 fwupd의 vli 플러그인을 사용하여 VL103의 펌웨어를 덤프(dumping)한 다음, USB와 VL817을 통해 변경 사항을 VL103에 플래싱하는 과정이 남았습니다.
변경 사항은 점진적으로 이루어졌으며, 총 일곱 가지 버전이 있었습니다. 처음에는 Nintendo의 디스커버리(discovery), 모드 진입, 에코 명령어에 대한 응답부터 시작하여, 도크와 유사하게 15V에 2.8A를 제공하도록 전력 공급을 업데이트하고, 보고되는 벤더 ID를 Nintendo의 것으로 변경하며, 공식 도크인 것처럼 완전히 위장하여 TV 모드를 작동시키고, 마지막으로 약 3초간의 일시 정지를 제거하는 전체 시퀀스 매치까지 진행되었습니다.
이 과정은 두 액세서리 제조업체가 The Verge에 주장했던 도크 확인 절차가 전용 칩을 사용한 암호화를 이용한다는 내용과 모순되는 것으로 보이며, 이 경우 복사된 식별 데이터와 고정 응답만으로 충분했습니다.
TV 모드를 작동시키는 것 자체가 축하할 만한 성과였겠지만, 해당 수정자는 더 나아가 작업을 진행했습니다. HDMI를 통한 화면이 HDR을 켜자 색상이 바래 보였고, 이는 단순히 원인을 좁혀나가는 문제였습니다. 최종 이론은 허브의 AVI InfoFrame이 표준 동적 범위 색 공간인 BT.709를 신호하는 방식에 오류가 있었으며, 대신 HDR에서 사용되는 더 넓은 BT.2020을 신호해야 한다는 것이었습니다.
이 이론은 RTD2142의 펌웨어에 대한 108바이트 패치로 확인되었는데, 이 패치는 동일한 USB-C 케이블을 통해 DisplayPort AUX 채널 위 I2C를 거쳐 flashrom으로 플래시되었습니다. 이를 통해 HDR 사용 시 신호를 BT.2020으로 표시하게 됩니다. 제3자 도크의 펌웨어 중 하나에는 “switch2 color space patch”라는 디버그 문자열이 포함되어 있어, 이것이 알려진 문제임을 시사합니다. 다만, 허브 자체 DisplayPort 포트를 통한 HDR은 여전히 색상이 바래 보입니다.
별도로, 해당 허브의 펌웨어는 가변 주사율(VRR) 지원 기능이 없지만, 패치된 허브가 공식 도크로 식별되기 때문에 콘솔에서 VRR 기능을 제공합니다. 하지만 VRR을 켜자 DisplayPort 화면이 멈추었고, HDMI는 60Hz에 머물렀습니다. 별도의 Linux 테스트에서는, 허브를 Adaptive-Sync 광고 및 EDID 오버라이드(override)가 적용되도록 패치했을 때 프레임 속도가 변하자마자 화면이 검게 변했기 때문에 이 기능은 비활성화 상태로 두었습니다.
수정자의 게시물에는 코드가 공유되어 있지 않으며, 패치 파일이나 저장소도 없습니다. 하지만 방법 자체는 잘 설명되어 있습니다. USB 포트와 이더넷은 철저하게 테스트되지 않았으며, 해당 게시물에서는 어떤 Switch 2 시스템 버전이 사용되었는지 언급하지 않습니다. 또한 수정자는 Nintendo의 많은 명령어들을 이해하지 못하기 때문에, 허브의 버전 응답은 공식 도크의 복사본이며, 인식되지 않은 명령어는 여전히 허브의 기본 응답을 받습니다.
이것은 중요한 점입니다. 왜냐하면 Nintendo의 [시스템 업데이트 21.0.0]이 일부 [제3자 도크]를 충전만 가능하게 하고 비디오 출력은 불가능하도록 만들었기 때문입니다. 제조사들이 수정된 펌웨어(firmware)를 해결책으로 제공했지만, 이 모더가 만든 임시방편적(ad hoc) 솔루션은 뒤에 제조사가 없으므로, 다른 모딩을 시도하려는 사람들은 스스로 방법을 찾아야 할 수 있습니다.