IT66612这块芯片,做硬件的朋友应该不陌生。前阵子我手上正好有个项目,要把一路 HDMI 信号同时送到显示器和大屏电视上,折腾了好几种方案,最后定型用的就是 IT66612 这颗 HDMI 一分二有源分配器方案。整个过程踩了不少坑,也把芯片手册翻了个底朝天。这篇就把我的实际经验和这颗芯片的集成化设计思路一起聊聊,给正在选型或者准备画板子的朋友一个参考。
先说结论:如果你只是想简单分两路显示,用无源的分线器或者 HDMI 分配器就行,但如果你要求两路输出都能稳定识别、长距离传输不衰减、并且支持 HDCP 协议,那 IT66612 这颗方案就是典型的“一颗芯片搞定一个系统”的集成化设计思路,值得仔细研究。
先说它解决什么问题。HDMI 一分二,字面上看就是把一个 HDMI 源分成两个一模一样的信号。但 HDMI 和模拟信号不一样,它内部有 TMDS 高速差分线,还有 DDC(显示数据通道)用于 EDID 握手,以及 CEC、HPD 热插拔检测这些控制线。如果只是物理上把信号线并联,那对 HDMI 高速信号来说就是一场灾难——阻抗突变、反射、眼图劣化,轻则花屏,重则完全无信号。所以必须用有源方案:把 HDMI 信号收进来,经过均衡、整形、重定时,再驱动两路输出。这就是 IT66612 这类分配器芯片存在的核心原因。
而“集成化设计思路”这个说法,放在 IT66612 上我觉得特别贴切。因为传统分配器方案,你可能需要 HDMI 接收端芯片加发送端芯片,或者用 FPGA 做视频处理再加 PHY 芯片,光外围器件就一大堆。IT66612 是单芯片完成 1 进 2 出的分配,内部集成了完整的三路 TMDS 收发通路。下面我把整个设计思路和实操细节拆开讲。
1. IT66612 的项目定位与需求拆解
1.1 一分二分配器的核心应用场景
HDMI 一分二最常见的应用场景是:一个播放源,两个显示终端。比如机顶盒接客厅电视和卧室电视,比如工控机同时接触摸屏显示器和大屏展示,比如监控主机要本地显示加远程上墙。在这些场景里,有一个很容易被忽略的硬需求——两个显示器可能分辨率、刷新率、EDID 都不一样,而 HDMI 源只会按照一个 EDID 来做输出。那分配器就得负责“骗好源”和“喂饱屏”。
IT66612 对这个问题处理得比较巧妙,后面详细说。先提一个概念:EDID 管理。源端设备上电后会去读显示器的 EDID(扩展显示标识数据),里面记录了分辨率、刷新率、色彩空间等能力。一分二之后,两边的显示器 EDID 可能不一样,比如一边是 4K60,另一边只支持 1080p,那源端到底按哪个出?
IT66612 的做法是内部带 EDID RAM,可以同时保存两路 EDID 并做逻辑合并。合并后的最简能力 EDID 给到源端,源端输出两屏都能接受的分辨率。如果你的两路输出确实需要不同分辨率,那就要用到单独的 EDID 修整功能,或者配合 MCU 去改写。这个细节是区分专业分配器和廉价分配器的关键,也是设计时最需要注意的地方。
1.2 有源分配器与无源分线器的本质区别
市面上几块钱一根的 HDMI 一拖二线,其实是无源的物理分线,原理就是把 TMDS 差分信号直接并用。短距离、低分辨率、两台一样的显示器,可能勉强能亮;但只要距离超过 1 米,分辨率上到 4K,或者两台显示器 EDID 有差异,马上问题一大堆。
IT66612 这类有源分配器,供应链上是完全不同的思路。它的信号流程是:
HDMI IN -> 均衡器 -> 内部时钟恢复 -> 视频处理器 -> HDMI OUT 0 -> HDMI OUT 1这个流程里有三个关键动作:均衡(把长线导致的信号衰减补偿回来)、重定时(用恢复出来的时钟重新对齐数据,清除抖动)、重新驱动(输出干净的信号给下一级)。这才叫“分配”而不是“分线”。
我实测过,用 IT66612 的板卡,输入线 5 米,输出两路分别走 3 米到显示器,1080p60 和 4K30 都能稳定工作,没有闪屏和雪花。这要是用无源分线器,别说 4K,1080p 过 2 米就开始飘雪花。所以如果你的项目里有“超过 2 米传输”“4K 分辨率”“双屏同显稳定不掉线”这三个需求里的任何一个,都建议直接上有源方案。
1.3 为什么选 IT66612 而不是“接收器加发送器”方案
做硬件选型时,最容易走上的一条路是:用一个 HDMI 接收芯片加两个 HDMI 发送芯片,比如业界常用的 SiI 系列或 LT 系列组合。这个方案的好处是灵活,每个收发芯片你都很熟,画板子照参考设计走就行。但缺点也明显:
- BOM 多,光芯片就三颗,加上外围晶振、电源、电感,成本压不住;
- 板子面积大,三颗芯片的扇出布线很占地方;
- 三颗芯片之间的互连走线也是高速信号,必须做阻抗匹配和等长处理,设计周期长;
- 调试麻烦,一旦出问题,需要判断是哪一颗芯片的哪一段通路坏了。
IT66612 是集成式方案,芯片内部直接完成接收、处理、双路发送。PCB 上只需要处理输入端的差分对和输出端的差分对,内部高速互连不用你操心。板子尺寸能做得很小,实际画过板子的人都明白,在寸土寸金的消费电子里,省面积比省成本还要重要。
另外 IT66612 在 RK3566 开发板上的一个常见用法也值得提:很多 RK3566 板卡只带 HDMI 输出,不带输入。如果你想让 RK3566 能够支持 HDMI IN 采集或者做多屏显示,就可以用 IT66612 先把一路 HDMI 分成两路,一路给显示器,另一路接一个 HDMI 转 MIPI/CSI 的采集模块,喂给 RK3566 的 ISP 做处理。这个玩法在视频处理项目里很常见。
2. 芯片核心特性与设计细节解析
2.1 主时钟与信号调理机制
IT66612 的工作频率覆盖很高,常规的 HDMI 1.4/2.0 频段的 TMDS 时钟从 25MHz 到 600MHz 都能处理,对应从 480p 到 4K60 4:4:4 的视频格式。它内部有 PLL 做时钟恢复,不需要外部单独的高速时钟芯片,只需要一颗 25MHz 参考晶振(部分设计甚至可以用主控直接给时钟)。这点在布局时很友好,省掉了一堆 LC 滤波和匹配网络。
信号调理方面,芯片输入端有自适应均衡器。这是什么概念?HDMI 线缆越长,高频衰减越厉害,眼图张不开。自适应均衡器会根据接收到的信号质量自动调整增益,把衰减补偿回来。IT66612 对 CAT2 线缆(就是普通的 26AWG 左右 HDMI 线)的补偿能力,官方标称能到 10 米以上。实测下来,接工程上常见的 15 米 HDMI 成品线,1080p 没问题,4K 会有点勉强,但短一点 10 米内稳定。
输出端的驱动能力也要看。IT66612 的输出摆幅可调,通过寄存器可以设置。默认情况下输出摆幅偏保守,长线驱动时建议通过 I2C 把摆幅调到高档,这样可以改善长距离传输的兼容性。这个细节很多参考设计不会写,但实际项目里很关键。
2.2 EDID 管理与 HDCP 处理机制
EDID 这块是 IT66612 的重头戏。内部集成了两个 EDID 缓冲区,可以分别存储两路输出的 EDID 信息。分配器工作时,芯片会读取两路显示器的 EDID,然后根据配置决定上报给源端的 EDID。
有三种常见工作模式:
- 直通模式:直接把 HDMI OUT 0 的 EDID 上报给源端,适合两屏规格一致的场景;
- 合并模式:芯片自动把两路的 EDID 能力做交集,上报最简能力,适合两屏规格有差异但希望都点亮的情况;
- 强制模式:由外部 MCU 通过 I2C 往 EDID RAM 里写入定制 EDID,完全自定义上报内容,适合产品有固定规格需求的情况。
我项目里用的是合并模式。实际调试中遇到过一个问题:其中一台电视支持 4K60,另一台只支持 1080p60,合并后源端输出 1080p60,两台都正常。但如果两台显示器恰好都有可变刷新率(VRR)特性,合并逻辑处理不好时可能出现其中一台黑屏。这时候我就用外部 MCU 直接写 EDID 覆盖掉了。
HDCP 这边,IT66612 支持 HDCP 1.4 和 2.2 的中继(repeater)功能。所谓中继,就是芯片扮演 HDCP 链条里的一个节点,从源端获取密钥,解密内容,然后向两个输出端重新加密。因为是合法授权设计,芯片内部有密钥存储和保护逻辑,不需要外部 EEPROM。但有一个设计注意点:如果你的产品只做分配,不涉及内容保护,可以关闭 HDCP,这样芯片处理路径更短,延迟更低,兼容性也更好。但关闭 HDCP 时,如果源端输出的是受保护内容(比如蓝光播放机的 4K 电影),两个显示器都会显示绿屏或者无信号。做产品时,这个开关逻辑要设计成可配置的。
2.3 I2C 接口与热插拔检测
IT66612 的控制接口是标准的 I2C,7 位地址默认是 0x48(具体看芯片手册,不同封装可能不同)。通过 I2C 可以访问所有的控制寄存器和状态寄存器,包括:
- 输入信号检测状态(有没有插线、有没有信号)
- 输出 HPD 状态控制
- EDID 缓冲区读写接口
- 输出摆幅、预加重调节
- 音频格式和视频格式配置
- HDCP 状态读取
在 RK3566 平台上的常见玩法是:RK3566 的 I2C 接口直接连到 IT66612,系统起来后通过 I2C 读取芯片状态,然后根据状态去配置显示参数。这比我以前做的用 GPIO 模拟时序去控制的方式省心太多。
热插拔检测(HPD)的处理也值得注意。HDMI 源端是靠监测 HPD 引脚的电平来判断显示器是否存在。IT66612 内部对 HPD 做了处理,可以把两路输出的 HPD 状态“或”成一个逻辑。也就是说,只要有一个显示器还接着,源端就认为设备在线,不会重新协商。这个逻辑和 EDID 合并是配套的,如果一台显示器拔掉了,芯片会重新处理 EDID,然后通过 HPD 通知源端重新协商。这里有个坑:如果软件配置不当,把 HPD 强制拉高,那拔掉显示器后源端不会感知到,就会一直往一个不存在的设备输出信号。为了避免这个问题,建议读取芯片的状态中断寄存器,检测输出端口的连接变化事件。
3. 集成化设计思路与硬件实现
3.1 最小系统设计参考
基于 IT66612 的最小系统非常精简,核心器件列表我可以直接给出来:
| 元器件 | 规格/型号示例 | 用途 |
|---|---|---|
| IT66612 芯片 | QFN 封装(具体引脚数看封装) | 主芯片 |
| 25MHz 晶振 | 无源贴片晶振,负载电容 18pF | 提供参考时钟 |
| eMMC/I2C EEPROM | 可选,部分固件需要外挂 | 存储默认配置 |
| 电源 | 1.2V 核心供电,3.3V IO 供电 | 电源轨 |
| HDMI 接口 | 标准 Type-A 母座 | 输入输出接口 |
| 去耦电容 | 每个电源引脚放 0.1uF + 1uF | 电源滤波 |
| 差分走线 | 100 欧姆差分阻抗 | TMDS 信号线 |
参考设计的核心就是围绕这三组高速差分对(输入一组、输出两组)来布局。每组差分对包含四对线(三对数据 + 一对时钟),对外表现为 HDMI 端子上的标准引脚映射。下面看一张典型的信号分配框图:
+-------------------+ HDMI IN (Type-A) | | HDMI OUT 0 (Type-A) D2+/D2- ----+------>| IT66612 |--------> D2+/D2- D1+/D1- ----+------>| |--------> D1+/D1- D0+/D0- ----+------>| 1-IN 2-OUT |--------> D0+/D0- CLK+/CLK- ----+------>| 分配器核心 |--------> CLK+/CLK- HPD <-----+-------| |--------> HPD (OUT0) DDC(SDA/SCL)<-+------| |--------> DDC (OUT0) +5V +------| |--------> +5V | | HDMI OUT 1 (Type-A) | |--------> D2+/D2- | |--------> D1+/D1- | |--------> D0+/D0- | |--------> CLK+/CLK- | |--------> HPD +-------------------+--------> DDC | I2C (SCL/SDA) from MCU/RK3566实际画板子时,输入端进来后,先经过 ESD 保护器件,再加共模电感(可选),然后进入 IT66612。输出端也有 ESD。HDMI 接口上还有一个 +5V 电源引脚,这个电源是源端提供的,用来给接收端的一些电路供电,也用于 DDC 通信的上拉。分配器设计时要注意:+5V 的电流能力一般在 50mA 左右,如果你要用它给芯片供电,要算清楚,否则就自己独立供电。
3.2 PCB 布局与高速差分设计要点
这是整个硬件设计里最考验功夫的地方。HDMI 的 TMDS 信号速率很高,4K60 时单通道速率约 3.4Gbps(6Gbps 对 HDMI 2.0 来说对应 600MHz TMDS 时钟),走线稍有不慎就是灾难。
几个关键经验:
差分阻抗要控制到 100 欧姆。HDMI 标准是 100 欧姆差分,100 欧姆±10% 是底线。叠层设计时,先用阻抗计算工具(比如 Polar Si9000 或者免费的 Saturn PCB Toolkit)算好线宽线距,再做叠层确认。四层板的话,建议把 HDMI 差分走在顶层或底层,参考地完整,避免跨越分割。
对内等长、对间等长都要做。HDMI 每组差分内的 P/N 线要等长,这个绝大多数人都知道。但三组数据和一组时钟之间也要做等长,这是 HDMI 信号规范里的关键点。等长误差通常要求时钟对和其他数据对的长度差控制在 5mil 以内,数据对之间的差异可以放宽一点,但最好也控制在 10mil 以内。长线绕线时要采用“波浪形”或“锯齿形”绕法,不要用大面积蛇形,否则耦合过大反而引入串扰。
输入端和输出端要物理隔离。分配器两边都是高速信号,输入端是 3.4Gbps 进来,输出端是同样的速率出去,如果不做隔离,输出信号会通过空间耦合到输入端,造成自激或者信号质量恶化。我见过一个败笔设计,把输入座和输出座放在同一侧,两个端口间距很小,结果 4K 信号一上,显示器偶尔就闪一下屏。后来改板后把输入放左边,输出放右边,中间过芯片,问题就消失了。
电源去耦要讲究。HDMI 分配器对电源纹波比较敏感,尤其是内核电源。每个电源引脚放 0.1uF 高速陶瓷电容,对应电源平面附近再放 4.7uF 或 10uF 的钽电容或大容量 MLCC。晶振下面要挖空地,避免晶振信号干扰旁边的模拟电路。
有个细节是关于差分走线参考平面的:HDMI 差分线下方最好是连续的地平面,不要跨分割。如果实在没办法要换层,那必须要有配套的地过孔,不能信号单独换层而地不跟着走。这个在 HDMI 高速设计里几乎是一条铁律。
3.3 供电与复位设计
IT66612 的供电比较简单,核心逻辑一般用 1.2V,IO 部分用 3.3V。有些封装还会提供 5V 容忍的引脚,用于直连 HDMI 接口的 +5V 检测。
电源时序上,芯片要求 3.3V 先上电,1.2V 后上电,或者同时上电,但不能 1.2V 先于 3.3V。实际设计时用一颗带时序控制的 LDO 或者 DCDC 芯片就解决。复位引脚 RC 延时,一般 10K 电阻加 1uF 电容到地,提供约 10ms 的复位时间,足够芯片稳定起来。如果做产品,建议复位引脚加上 I2C 忙检测,避免复位期间主控去读写寄存器出现总线错误。
3.4 RK3566 平台的硬件接入方式
以 RK3566 开发板为例,IT66612 的接入分两条线:信号线和控制线。
信号线方面:RK3566 自带 HDMI TX 接口,如果要实现“RK3566 输出 HDMI 同时到两个屏”,那 RK3566 的 HDMI TX 直接连 IT66612 的输入。注意 RK3566 的 HDMI 座子一般不直接给 IT66612,而是用板内连接器或者直接飞线,走线尽量短。
控制线方面:RK3566 的 I2C 总线(比如 I2C2)接到 IT66612 的 SCL/SDA。RK3566 可以在内核里注册一个 I2C 设备驱动,把 IT66612 当成一个标准的 I2C 从设备来管理。系统起来后,用户态可以通过 i2cget/i2cset 命令直接调试芯片寄存器,这个比拿逻辑分析仪抓波形的效率高太多。
HDMI IN 到 RK3566 的场景也常用:IT66612 的输入接外部 HDMI 源,输出一路接显示器,另一路接一个 HDMI 转 MIPI CSI 模块,然后进入 RK3566 的 ISP。这样 RK3566 就能同时做显示和视频采集,相当于开发板多了一个独立的 HDMI 输入通道。实际做视频切换、画中画、远程桌面这类应用时,这玩法非常管用。
4. 软件适配与关键寄存器配置
4.1 I2C 读写流程与寄存器概览
IT66612 上电后要做的第一件事是初始化。初始化的关键是写入必要的寄存器,使能输出。这个过程可以分成几个阶段:
第一步:复位释放。硬件复位完成后,芯片处于低功耗状态。通过 I2C 写复位寄存器(不同版本地址不同),触发软复位,等待状态位回零。
第二步:检查输入。读取输入检测状态寄存器,确认 HDMI 输入端的 5V 检测和 HPD 状态。如果输入正常,状态寄存器里应能读到信号锁定标志。
第三步:配置输出。配置输出摆幅、预加重、输出 HPD 控制。默认参考设计通常不调,但长线应用建议手动配置高摆幅。
第四步:开启输出。使能输出通道,等待内部 PLL 锁定。锁定后输出端 HPD 会被拉高,源端感知到显示器在线,开始协商信号。
我常用的一个初始化流程代码(基于 Linux 的 i2c-dev 工具,直接在板子上跑):
# 设备地址假设为 0x48 I2C_ADDR=0x48 # 复位(写 0x80 到复位寄存器,0x05 是示例地址,具体看手册) i2cset -y 2 $I2C_ADDR 0x05 0x80 sleep 0.05 # 检查中断状态,确认复位完成 i2cget -y 2 $I2C_ADDR 0x05 # 配置输出摆幅(示例:写 0x1F 到 0x08) i2cset -y 2 $I2C_ADDR 0x08 0x1F # 使能输出(示例:写 0x01 到 0x09) i2cset -y 2 $I2C_ADDR 0x09 0x01 # 读取输入信号状态(示例寄存器 0x10) i2cget -y 2 $I2C_ADDR 0x10注意:不同批次的芯片或者不同封装,寄存器地址定义可能有变化。我在手册上看到的地址和示例里写的就不完全一致。拿到芯片后,第一个动作一定要是仔细翻阅官方 datasheet 的寄存器映射表,确认复位寄存器和状态寄存器的偏移量。
4.2 EDID 处理与 HPD 联动逻辑
实际上电后,如果什么都不做,IT66612 默认是直通模式,即直接拿 OUT0 的 EDID 上报源端。这在双屏同规格时没问题,但双屏规格差异大时,就要主动去写 EDID。
我常用的一个流程是:
- 读 OUT0 和 OUT1 的 EDID(通过 I2C 或者 EDID 读取专用寄存器);
- 在主控里做 EDID 合并(把两个 EDID 的最大分辨率取交集、刷新率取交集,其余特性做“或”处理);
- 把合并后的 EDID 通过 I2C 写入 IT66612 的 EDID RAM;
- 将 HPD 引脚拉低再拉高(或者写寄存器触发 HPD 复位),让源端重新协商;
- 源端读到新 EDID 后,输出就按合并后的能力来。
这个过程里最容易踩的坑是 HPD 的时序。HPD 拉低的时间不能太短,源端需要至少 100ms 的稳定低电平才能可靠检测到断开。我曾经把 HPD 拉低 10ms 就拉高,结果源端根本不理你,EDID 一直不更新。后来调到 200ms,问题解决。如果你用寄存器做 HPD 控制,注意看手册里 HPD 极性设置,有些芯片是写 1 拉高,写 0 拉低。
4.3 HDCP 与 EDID 的兼容性问题排查
做 HDMI 项目最让人头疼的就是 HDCP 握手失败,现象表现为:黑屏、闪屏、或者显示器提示“HDCP 错误”。
IT66612 做 HDCP repeater 时,整个链路是这样的:
源端 --- HDCP密钥交换 ---> IT66612 --- HDCP密钥交换 ---> 显示器 (解密 + 重新加密) (解密 + 重新加密)如果其中任意一环的密钥交换出问题,整个链路就会断。常见问题有三个:
第一,EDID 里没有正确声明 HDCP 支持。EDID 的 0x50 段是 HDMI 厂商数据块,里面会写是否支持 HDCP。如果合并 EDID 时把这段丢了,源端就认为显示器不支持 HDCP,主动关闭加密,某些内容源(比如蓝光机)会直接不输出图像。解决方法是合并 EDID 时保留 HDMI 厂商数据块。
第二,密钥不匹配。HDCP 中继从源端获取密钥后,要能向两个输出端分别加密。IT66612 内部有密钥管理,但如果你动了 NVRAM 或者换了芯片批次,旧密钥可能失效。这个无解,只能联系原厂做量产烧录。
第三,线缆太长导致时序不对。HDCP 握手对时序有一定要求,长线传输会增加往返延迟。我试过 15 米线 + 分配器输出再接 5 米线,HDCP 就时好时坏,换短一点的线就稳定。如果你必须用长线,建议在分配器后再加一个 HDMI 延长器或者光传。
4.4 RK3566 内核配置驱动示例
在 RK3566 上把 IT66612 配好,有几条命令值得记录。RK3566 的 I2C2 总线设备节点一般是/dev/i2c-2。检查设备是否存在:
ls /dev/i2c-*然后扫描 I2C 总线,确认设备在 0x48:
i2cdetect -y 2看到 0x48 有响应(UU 或者 48),说明设备在线。
如果要写一个简单的内核态驱动框架,核心就是在设备树里声明 I2C 从设备:
&i2c2 { status = "okay"; it66612: it66612@48 { compatible = "ite,it66612"; reg = <0x48>; reset-gpios = <&gpio4 RK_PB2 GPIO_ACTIVE_LOW>; hpd-gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_HIGH>; status = "okay"; }; };然后在驱动里用标准的 I2C 读写函数i2c_transfer访问寄存器。驱动的主要工作是:上电后复位、初始化输出、把输入 HPD 状态上报给显示器子系统、热插拔时通知用户态。
调试时最推荐的方式还是先直接用 i2cget/i2cset 手工操作,确定好芯片正常工作后,再写进驱动。一把梭直接写驱动再调,排错成本高得多。
5. 常见故障排查与设计注意事项
5.1 无信号/黑屏类问题排查清单
遇到分配器无输出,不要慌,按顺序查:
第一步,检查电源。IT66612 的 1.2V 和 3.3V 是否都正常,纹波大不大。用示波器测,低频纹波超过 50mV 就危险。量一下复位引脚电平,低电平时间够不够 10ms。
第二步,检查 I2C。i2cdetect 能不能看到 0x48 地址。如果看不到,先检查 SCL/SDA 上拉电阻(一般 4.7K 到 3.3V),再检查有没有总线冲突。用逻辑分析仪抓一下 I2C 波形,看有没有 ACK。
第三步,检查 EDID。把 IT66612 上报给源端的 EDID 抓出来,用 EDID 分析工具(比如 AW EDID Editor 或者 Linux 下的 edid-decode):
edid-decode /tmp/edid.bin看看里面有没有合法的 EDID 头 (00 FF FF FF FF FF FF 00),分辨率支持是否正确。
第四步,检查 HPD。用示波器量 HPD 引脚,应该在复位完成后被拉高。如果 HPD 是低,说明芯片还没就绪或者配置不对。
把这几步走完,90% 的无信号问题都能定位。
5.2 画面闪烁/花屏类问题排查
闪屏通常不是没信号,而是信号质量边缘。核心看眼图。把示波器探头放在输出端差分对上,看眼图睁开程度和抖动。如果眼图已经很模糊,优先查:
- 输出端的差分走线是不是太长;
- 输出摆幅是不是偏低——这种情况我遇到很多,调寄存器把摆幅调大一档就好;
- 输出端是不是靠近了开关电源,被耦合了噪声;
- 输入端的线缆是不是劣质线,衰减太严重。
花屏则更可能是时序问题。HDMI 的时钟通道出了问题,会导致色彩错位或者整幅画面撕裂。查时钟差分对的等长,查 PLL 锁定状态。IT66612 内部如果有眼图监控寄存器,可以读出来看信号质量等级,这个比肉眼判断精准得多。
5.3 设计失误总结:几条真实踩坑记录
项目做完复盘,有几次犯错印象很深,写出来提醒大家。
坑一:EDID 合并逻辑做反了。一开始我们做的是取“或”而不是取“交集”,结果合并出来的 EDID 同时支持 4K60 和 1080p60,源端果断选了 4K60 输出,1080p 的屏直接不显示。后来改成取交集,源端输出 1080p60,两屏都正常。记住:合并逻辑必须是“共同支持”,不是“有人支持”。
坑二:输出端 HPD 直接连到芯片的 HPD 输出引脚,没有加缓冲。HDMI 的 HPD 引脚在显示器侧有一个 100K 上拉到 5V,但芯片侧的 HPD 输入可能不耐 5V,结果长期运行后芯片端口损坏。加一个二极管钳位或者分压电阻会更稳妥。
坑三:晶振馈入问题。晶振下面没有挖地,25MHz 的谐波串到了 HDMI 时钟对里,导致 4K 模式下屏幕最左侧有竖条纹。后来重新调整了布局,晶振远离差分对,问题消失。
坑四:I2C 地址在总线上冲突。IT66612 的 I2C 地址可以通过引脚设置,但默认值可能和板卡上其他 I2C 设备(比如电源管理芯片)冲突。调试时 i2cdetect 看到两个设备在同一个地址,总线数据错乱。解决方法是改 IT66612 的地地址选择引脚,或者换一条 I2C 总线。
5.4 布局阶段就应该避开的几个雷区
画板子之前如果能看到这些提醒,能帮你省至少一轮改板:
输入差分对和输出差分对不要平行近距离走线。两者之间留出至少 3 倍线宽的间距,或者用地线隔离。不然输出串扰到输入,自激隐患很大。
HDMI 座子的外壳地和信号地要分开处理。HDMI 连接器的金属外壳通常会通过一个 1M 电阻加 0.1uF 电容连接到系统地,这叫“接地散耦”。如果直连,ESD 能量会直接灌进芯片的地网,轻则丢信号,重则打坏芯片。
ESD 保护器件的位置要紧贴 HDMI 座子。必须是“座子 -> ESD -> 芯片”这个顺序,中间不要有过孔打断那一段短截线,否则保护效果大打折扣。TVS 管的钳位电压要选好,太高压不住了,太低压把信号也削了。HDMI 2.0 应用建议用 C 值小于 0.5pF 的低容 TVS。
电源平面分区。如果板上同时有 DCDC 开关电源和模拟电路,建议用星形接地,开关电源的地单独走一小段回到主地,不要和 HDMI 的地大面积共享。
5.5 信号完整性测试参考
如果你有条件做信号完整性测试,至少做以下三项:
- 眼图测试:用示波器(带宽 2GHz 以上)在输出端测 TMDS 时钟和数据的眼图。HDMI 2.0 合规要求眼图高大于某个阈值,具体看 HDMI 规范。如果手头没有高速示波器,用芯片自带的调试寄存器看信号质量等级,也能做个粗略判断。
- 时序测试:检查信号上升沿和下降沿,看是否在规范允许范围内。HDMI 的上升时间在 4K60 时非常快,主要是为了保证时序不崩溃。
- 长线兼容性测试:把分配器接到最长需求长度的线材上,跑 4K 分辨率,连续运行 4 小时以上,观察有没有偶发闪屏。这类测试最朴实但最有用,能暴露长期热稳定性和线缆兼容性问题。
6. 场景扩展与后续优化方向
6.1 在 RK3566 项目中做 HDMI 输入采集
前面提过,IT66612 可以做 HDMI IN 到 RK3566 的采集。具体怎么接:
外部 HDMI 源 ---> IT66612 输入 | +----> OUT 0 接显示器 +----> OUT 1 接 HDMI 转 CSI 模块 ---> RK3566 ISP这个架构下,RK3566 能同时做“本地预览”和“视频采集”。比如做直播机,一路 HDMI 接摄影机,分了一路到监视器,另一路进 RK3566 做编码推流。这个场景在直播领域非常常见,而 IT66612 的分路效果比市面上很多廉价分配器都要稳定,因为它的输出驱动能力强,到采集模块的线可以长一点。
不过要注意,作采集用途时,EDID 合并逻辑可能要改写。因为采集模块(HDMI 转 CSI)的 EDID 往往只有固定几组格式,比如 1080p60 或者 4K30。如果你把采集模块的 EDID 和显示器的 EDID 做合并,合并结果可能变成一个很保守的 1080p,导致显示器端也无法上高分辨率。我的经验是:采集场景下,用“强制模式”写 EDID,直接规定 1080p60 输出,最省心。
6.2 视频旋转与分辨率的二次处理
“HDMI 视频旋转”这个词如果出现在你的需求里,说明你要在竖屏或者特殊角度的显示器上做展示。IT66612 本身不做旋转,旋转通常由上一级的 SoC 来做。但 IT66612 在这里承担的角色是信号的“稳定中转”,保证旋转处理后的视频流能无损地分到两个屏上。
常见架构是:RK3566 跑视频旋转(通过 DRM/KMS 接口的 rotation 属性),然后 HDMI 输出信号进 IT66612 分配,两个竖屏显示器分别接一路。这种情况下,IT66612 只关心 EDID 合并后的分辨率和刷新率是否被两个屏同时接受,至于画面方向是 SoC 已经处理好的。
实操时要用到 RK3566 的 DRM 旋转:
# 以 weston 为例,在 weston.ini 里设置输出变换 # transform=rotate-90 表示顺时针旋转 90 度调试旋转时有个经验:如果两个屏幕是不同型号,最好先固定一个分辨率,再开旋转,避免两个屏的 EDID 差异化导致显示区域不完整。
6.3 多级级联与更大规模的分配
IT66612 是一分二,但产品可能需要一分四、一分八。实践中有两种做法:
第一种是三级级联:IT66612 输出两路,每路再接一个 IT66612,组成 1 进 4 出。这种方式成本不高,但信号链路里多了两级芯片,延迟累积,HDCP 中继级数增加,兼容性变差。实测下来,1 进 4 出做 1080p60 没问题,4K60 会开始吃紧。
第二种是采用专门的“1 进 4 出”芯片(比如 IT66612 的衍生产品或者其他厂商的同类芯片),一步到位。如果产品定位在专业音视频,我更推荐这种方案,布线也简洁。
还有一个方向是矩阵切换。IT66612 和 HDMI 矩阵的核心区别在于,矩阵是多进多出,可以用多个 IT66612 加一个交叉开关来实现,但这是一个完全不同的设计课题,不展开说。有一点可以参考:做矩阵时,每一路的 EDID 管理都要单独做策略,不然源端和显示端的握手会打架,这块是最容易出问题的。
6.4 量产阶段需要考虑的测试项
做产品不是调通一片样板就结束。量产时至少要有这几个测试环节:
老化测试:常温下 48 小时连续播放 4K 视频,监测芯片温度。IT66612 功耗不算高,但外壳小的产品要注意散热,温度过高时 HDMI 驱动能力会下降,出现偶发闪屏。
线材兼容性抽测:换不同品牌的 HDMI 线测试,因为线材的质量直接影响眼图质量。如果你的产品定位中高端,尽量保证在普通线材上也能稳定输出。实测发现,同一台分配器,接原装 PS5 线和路边摊线,4K 模式下表现差距明显。
EDID 压力测试:反复插拔显示器,验证 HPD 和 EDID 重新协商的稳定性。这个测试能暴露固件里 EDID 缓存处理的问题。
HDCP 兼容性测试:接蓝光机、游戏主机、机顶盒三种源,分别测试受保护内容是否正常输出。注意,HDCP 2.2 的密钥管理和 HDCP 1.4 完全不一样,IT66612 都支持,但实际切换逻辑必须测试完整。
写在最后的几点实际体会
IT66612 这套方案做下来,我的总体感受是“省心但不能粗心”。硬件上它把传统三芯片方案压缩成一芯片,板子体积和 BOM 成本都降下来了;软件上 I2C 控制也非常顺手,特别是配 RK3566 这类有丰富 I2C 资源的主控时,基本是一拍即合。但正因为集成度高,调试时一旦黑屏,很多人会陷入“不知道是哪一环出问题”的状态,这时候还是要老老实实回到信号链的每一级去排查。寄存器手册一定要啃透,尤其是 EDID 合并和 HPD 时序这两个环节,80% 的疑难杂症都从那里来。
另外,网上关于 IT66612 的资料相对零散,不同版本的手册细节有差异,拿到芯片后一定要以实际购买的批次手册为准。如果你也在做 HDMI 分配器或者 RK3566 的视频采集项目,欢迎一起交流踩坑心得。这套方案整体来说是稳的,值得用。