修复 NZXT Signal 4K30 第二部分:绿粉色彩频问题

Hacker News Top 新闻

摘要

作者详细介绍了在 Claude AI 协助进行固件调查后,修复因 RGB 与 YUV 格式不匹配导致的 NZXT Signal 4K30 采集卡绿粉色彩频问题的过程。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/09/15 17:58

# 市中心道格·布朗 » 修复NZXT Signal 4K30采集卡(第二部分):绿粉色视频故障 来源:https://www.downtowndougbrown.com/2026/09/fixing-an-nzxt-signal-4k30-part-2-the-green-pink-video-bug/ 去年,我修复了一个在eBay上低价购入的NZXT Signal 4K30 USB视频采集卡(https://www.downtowndougbrown.com/2025/01/easy-repair-of-a-defective-nzxt-signal-4k30-capture-card/)。它完全无法工作,最终发现是电感器的焊接点故障,导致电源无法到达电路板的关键部分。 修复后,我用它采集了多种不同HDMI源设备的信号以确保功能正常。正如我在上一篇相关文章中所说: > 我确实发现了一个它不支持的720p60 HDMI源——采集到的视频呈现绿粉色。 在那篇文章中,我还提到了几个Reddit讨论串(1 (https://www.reddit.com/r/NZXT/comments/17csgqa/picture_is_green_and_pink_from_signal_4k30/)、2 (https://www.reddit.com/r/obs/comments/16l8efg/pink_and_green_screen/)),其中分别在PS5和Nintendo Switch上观察到了类似问题。 以下是该不兼容HDMI源的采集视频截图: [](https://www.downtowndougbrown.com/wp-content/uploads/2026/09/yuv422.jpg) 可以看到颜色呈现绿色和紫色,完全失真。根据我以往在视频编解码器方面的经验,这非常典型,通常是由于RGB和YUV视频格式不匹配造成的。我怀疑这不是硬件故障,尤其是Reddit上其他用户也看到了完全相同的症状。 我暂且搁置了这个问题。并不在意这一个设备无法正常采集,也没有联系NZXT。我注意到此后该设备似乎已完全从市场消失——在Amazon或Newegg上已无法购买,NZXT官网除了支持页面外也毫无提及。显然NZXT已退出采集卡市场。即使现在联系他们,我也怀疑他们能有什么办法。 昨晚,一个念头突然闪过。最近我一直在使用Claude进行一些相当深入的逆向工程和bug调查。例如,这是我几年前深入研究的Elgato Game Capture HD60 S的Linux内核V4L2驱动程序逆向工程成果(https://github.com/dougg3/hd60s-linux-driver)(相关调查文章 https://www.downtowndougbrown.com/2024/09/fixing-an-elgato-hd60-s-hdmi-capture-device-with-the-help-of-ghidra/)。如果让它来研究这个问题呢?这正好可以完善我最初关于硬件修复的文章。也许我们能一起解决这个我猜测是固件问题的最终故障。 在硬件修复阶段,我已记录了设备中所有不同的组件信息,于是我将这些资料连同问题描述、Reddit帖子中的故障图片、NZXT为该设备发布的最后固件更新(2022年发布:https://support.nzxt.com/hc/en-us/articles/35642755429019-Signal-4K30-Downloads),以及ITE为Signal 4K30所采用的IT6805 HDMI接收芯片驱动程序的GitHub仓库克隆(https://github.com/Qiuzixing/IP5000-A302/tree/b7f61f612672301979b6f062129f8ffd0163c45d/modules/ast_modules/it6805)都提供给了Claude。我还指出,根据以往为视频设备开发固件的经验,我怀疑这是某种RGB与YUV格式不匹配的问题。 大约15分钟后,Claude给出了结果。它认同这是YUV与RGB不匹配的问题。它指出了固件中几个看起来很有问题的bug。为确保准确,它要求我核实检测到的信号的某些信息。它告诉我,设备中的Cortex-M0微控制器带有UART调试输出接口。我在电路板上找到了未标记的调试排针,用便携示波器确定了TX引脚(及波特率),在连接问题HDMI源设备的情况下捕获了输出信息,并将其粘贴回去。我还使用了上面提到的逆向工程所得的Elgato Game Capture HD60 S Linux驱动程序,以提供关于问题源设备输出信号类型的更多细节。 该源设备是以DVI模式而非HDMI模式输出信号。这是一个关键线索。DVI模式意味着它没有较新HDMI源设备附带的一些额外数据包,例如AVI InfoFrames(AVI信息帧)。 Claude精确定位了ITE原厂IT6805驱动程序(https://github.com/Qiuzixing/IP5000-A302/blob/b7f61f612672301979b6f062129f8ffd0163c45d/modules/ast_modules/it6805/iTE6805_SYS.c)中一段看起来有问题的代码,并确认NZXT的固件中也存在此代码。以下是精简后的代码片段: ``` // REG6B[5:4]: Reg_ColMod_Set 输入颜色模式设置 00: RGB模式 - 01: YUV422模式, 10: YUV444模式, 11: YUV420模式 chgbank(0); if (iTE6805_Check_HDMI_OR_DVI_Mode(iTE6805_DATA.CurrentPort) == MODE_HDMI) { HDMIRX_DEBUG_PRINT(("---- CSC HDMI模式 ----\n")); ... hdmirxset(0x6B, 0x30, iTE6805_DATA.AVIInfoFrame_Input_ColorFormat << 4);// 通过信息帧设置输入格式 ??? 不需要 ??? ... } else { ... HDMIRX_DEBUG_PRINT(("---- CSC DVI模式 ----\n")); hdmirxset(0x6B, 0x30, 0x10); // 设置输入格式为RGB ... } ``` 这段代码用于判断IT6805检测到的是HDMI信号还是DVI信号,并根据结果配置各种寄存器。其中一个寄存器告诉IT6805如何解码传入的视频信号。如果是HDMI信号,它会直接从AVI InfoFrame中获取颜色模式,并设置到寄存器0x6B的第4位和第5位。 另一方面,如果是DVI信号,它知道视频信号必须是RGB格式,因此它尝试将寄存器0x6B的这些位配置为RGB模式。 但是...这段代码是错误的。注释正确地写明在这种情况下应配置为RGB(“设置输入格式为RGB”),但它实际写入寄存器0x6B的第5:4位的值是`01`,根据顶部的注释,这代表YUV 4:2:2模式。 我不能完全确定,但我认为我看到了原始ITE开发者的错误。当我的目光第一次跳到RGB模式的注释时,脑海中最显眼的是“RGB模式 – 01”。但那是我的大脑错误解析了注释。它实际说的是“00: RGB模式”。我认为注释仅使用一个连字符而其他地方使用逗号的写法造成了混淆。如果原始开发者在脑中发生了类似的解析错误,我也不会感到惊讶。 好的,现在我有了一个理论。如何验证呢?不幸的是,调试UART无法读取或写入IT6805的寄存器,否则我可以轻松测试。 为了一个有趣的故事,并且有可能为所有人发布这个修复方案,我愿意承担设备变砖的风险。Claude对此非常犹豫,想让我先尝试通过SWD访问MCU以备份其固件,但我决定直接全力以赴。我猜芯片可能已被锁定。我让Claude逆向工程NZXT的固件更新工具以弄清其工作原理,并判断是否可以直接修补固件,将写入寄存器0x6B这些位的值从`01`改为`00`。我特别担心会改变固件映像中的校验和或CRC,但Claude相当确定MCU固件没有以任何方式校验。它通过修补NZXT固件中的一个字节,将`movs r2, \#16`指令改为`movs r2, \#0`,修复了ITE驱动程序中的这个bug。 Claude还给了我一个命令行工具,利用NZXT更新器附带的DLL来重新刷写固件。我不能直接使用NZXT的原厂工具,因为它如果认为设备已是最新版,就会拒绝安装固件更新文件。 尽管有可能使我的采集卡完全无法工作,我还是决定运行更新程序。整个更新过程完成,最终界面如下: [](https://www.downtowndougbrown.com/wp-content/uploads/2026/09/image.png) 我按照指示重新启动了采集卡电源,然后打开OBS查看行为是否有任何变化。 令我欣慰的是,更新后一切仍然正常,而且更棒的是,bug消失了!采集我的DVI源设备时,颜色看起来完美无瑕。 [](https://www.downtowndougbrown.com/wp-content/uploads/2026/09/rgb.jpg) 这绝对就是那个bug。实际上这是ITE驱动程序中的一个bug,所以它可能会影响许多只是直接采用此供应商代码,而没有针对各种不同HDMI源和显示设备进行实际测试的设备。 在我的案例中,我使用的源设备根本不提供InfoFrames,因此遇到没有InfoFrames信号的HDMI显示设备本应假定数据是RGB。至于其他用户的情况,即使使用现代HDMI源设备,如果他们在直通端口上连接了旧的DVI显示器,且该显示器的EDID由于某种原因不支持HDMI模式,也可能遇到同样的问题。 Reddit帖子中的PS5和Switch很可能遇到了一个完全不同的问题,只是恰好症状相同。我所知道的是Claude的bug修复对我确实有效,现在我可以使用这张采集卡,以完美、鲜艳的色彩采集这个特定的显示设备了! 如果将来有其他用户遇到同样的已停产NZXT Signal 4K30采集卡,此修复或许能派上用场,我决定将这个固件bug修复分享给社区。以下是我的GitHub仓库及安装说明:https://github.com/dougg3/nzxt-signal-4k30-color-bug-firmware-patch/ Claude在查找bug和逆向工程固件方面变得如此出色,这让我至今仍感震惊。虽然在这个特定分析中没有遇到问题,但我必须说,有时在追踪问题时我会碰到Claude的网络安全护栏。我理解这些保障措施存在的原因,但有时确实令人沮丧。我并非正式的网络安全专业人士,因此不确定是否值得尝试申请他们的网络安全验证计划。但我认为,逆向工程乃至本地硬件漏洞利用,有时确实有正当的非恶意用途,例如能够用改进的、开源的替代固件替换可疑设备中有bug的闭源固件。我希望作为爱好者,有一种方式能向Anthropic传达这种意图,而不触发那些护栏! 总之,这个项目我完全没有遇到那个问题。总体而言,我认为这个修复完全成功!在修补固件后,我用几个不同的HDMI源设备进行了测试,现在它们都能完美工作。能够圆满结束我的Signal 4K30修复故事,感觉真好。 顺便一提,用于展示颜色问题的示例图片来自Kodak无损真彩色图像套件(https://r0k.us/graphics/kodak/)。是的,这些图片确实是固件修复前后从4K30采集卡直接截取的!

相似文章

我今天学到了关于GPU的知识

Lobsters Hottest

一位游戏开发者讲述了他在游戏《Blackshift》中修复GPU渲染bug的经历。问题是将8位邻接整数转换为浮点数时出现的浮点数精度问题,导致在部分NVIDIA GPU上出现视觉瑕疵,且该bug只在主渲染模式中出现,预览模式中并未出现。

修复我的 Kinesis Advantage

Lobsters Hottest

作者讲述了通过订购定制PCB板、采购元件并使用QMK构建固件来修复Kinesis Advantage键盘的过程,期间克服了电路损坏和兼容性挑战等问题。