尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

IT66631芯片解析:双路HDMI 2.0独立输出与缩放实现

IT66631芯片解析:双路HDMI 2.0独立输出与缩放实现 1. 拆解IT66631一颗芯片如何撑起双路HDMI 2.0输出第一次拿到IT66631这个型号的时候我正帮一个做商显方案的朋友评估多屏输出板卡。他的需求很直接一路信号源进来要同时驱动两块1080p120Hz或者4K60Hz的屏幕而且两块屏显示的内容可以不一样。市面上能选的方案不多要么用FPGA自己搭成本高开发周期长要么找专用的视频分配/转换芯片但大多数只能做到一路进一路出或者两路出同样的画面。IT66631就是在这个背景下进入视野的——它是一颗专门做HDMI 2.0双路输出的转换器芯片核心能力是把输入的视频流拆成两路独立的HDMI 2.0输出每路都支持最高4K60Hz的带宽规格。这颗芯片解决的核心问题其实就一个信号分配与独立缩放。传统的一进二出HDMI分配器两路输出是完全一样的画面因为它只是把同一组TMDS信号复制了一份。但IT66631不一样它内部有独立的视频处理管线可以对两路输出分别做缩放、帧率转换、甚至画面旋转。这意味着你可以一路输出4K给大屏另一路降成1080p给采集卡或者副屏两路互不干扰。对于做视频会议系统、数字标牌、医疗影像显示、车载多屏娱乐的团队来说这种灵活性比单纯的信号复制有价值得多。适合谁来参考这篇内容如果你是在做多屏显示方案选型的硬件工程师或者正在评估HDMI 2.0信号分配与转换的嵌入式开发者又或者你只是对视频接口芯片的内部架构感兴趣想搞清楚一颗转换器芯片到底是怎么把一路视频流变成两路独立输出的那接下来的内容应该能给你一些实际的参考。我会从芯片的整体架构讲起然后拆解双路输出的实现原理再落到PCB设计和调试中会遇到的实际问题最后分享一些我在测试过程中踩过的坑和验证过的参数配置。2. 芯片整体架构与信号链路拆解2.1 从输入到输出的完整信号流IT66631的架构可以粗略分成四个主要模块输入接收端、视频处理核心、双路输出编码器、以及控制与配置接口。输入侧支持HDMI 2.0的TMDS接收最高带宽18Gbps兼容4K60Hz 4:4:4的色度采样。信号进来之后首先经过均衡器和时钟数据恢复电路把高速串行信号还原成并行的像素数据流。这一步很关键因为HDMI 2.0的速率到了6Gbps每通道PCB走线的损耗和抖动会直接影响接收质量芯片内部的自适应均衡就是用来补偿这些损耗的。视频处理核心是这颗芯片真正值钱的地方。它包含了一个缩放引擎和一个帧率转换器。缩放引擎支持独立的水平和垂直缩放两路输出可以设置不同的分辨率。比如输入是3840x216060Hz输出A保持原分辨率输出B缩放到1920x108060Hz。帧率转换器则负责处理输入和输出帧率不匹配的情况比如输入是50Hz的PAL视频输出要转成60Hz这时候就需要做帧率转换否则画面会抖动或者撕裂。这两个模块的配置都是通过I2C接口写寄存器来完成的芯片内部有完整的寄存器映射表每个参数都有对应的地址和位定义。双路输出编码器各自独立每路都包含TMDS编码器和串行器。编码器把并行像素数据转换成TMDS字符流然后串行器把字符流变成高速差分信号输出。两路输出的时钟是独立的这意味着你可以给两路输出设置不同的像素时钟频率只要不超过HDMI 2.0的规格上限。输出侧还集成了EDID管理和HDCP处理EDID用来读取显示器的能力信息HDCP则负责内容保护握手。这两块在实际调试中经常出问题后面会专门讲。2.2 为什么选择双路独立缩放而不是简单复制这里要解释一个设计上的取舍。市面上很多一进二出的方案用的是信号复制架构就是把输入信号直接分成两路不做任何处理。这种方案成本低、延迟小但两路输出的分辨率、帧率、色彩空间必须完全一致因为信号根本没有被解码和处理过。IT66631选择的是解码-处理-再编码的架构信号进来先解码成像素数据处理完再分别编码输出。这样做的好处是两路输出完全独立你可以一路接4K电视另一路接1080p的采集卡互不影响。代价是什么首先是延迟增加。解码和再编码的过程会引入几毫秒到十几毫秒的延迟具体取决于缩放和帧率转换的复杂度。对于游戏或者实时交互场景这个延迟可能不可接受。其次是成本上升芯片内部多了缩放引擎和两套编码器功耗和面积都上去了。所以选型的时候要明确如果你只是想把同一画面分到两块屏用复制架构的芯片就够了如果你需要两路输出不同分辨率、不同帧率、甚至不同画面内容那IT66631这类带处理能力的转换器才是对的选择。还有一个容易被忽略的点是色彩空间转换。输入可能是RGB 4:4:4输出显示器可能只支持YUV 4:2:0这时候芯片需要做色彩空间转换。IT66631内部支持RGB和YUV之间的转换矩阵配置的时候要注意色域映射是否正确否则颜色会偏。我遇到过输入是sRGB输出显示器是DCI-P3色域没有做色域映射结果红色显示出来偏橙后来在寄存器里调整了转换矩阵才解决。2.3 寄存器配置与I2C控制接口IT66631的所有功能都是通过I2C从机接口来配置的。芯片的I2C地址通常是0x4C或者0x4D具体取决于ADDR引脚的接法。寄存器空间分成几个区域输入配置区、缩放引擎配置区、输出A配置区、输出B配置区、以及全局控制区。每个区域都有对应的页选择寄存器写寄存器之前要先切页这一点和很多视频芯片一样不切页的话写进去的数据会跑到错误的地址。配置流程一般是这样的上电复位后先读取芯片的版本寄存器确认通信正常然后配置输入端的均衡参数和EDID接着配置缩放引擎的输入输出分辨率再分别配置两路输出的TMDS参数和HDCP最后使能输出。整个过程大概需要写几十个寄存器如果用手动写的方式很容易出错。我的做法是先用芯片厂商提供的配置工具生成一个寄存器列表然后在MCU里用数组存起来初始化的时候按顺序写下去。这样既方便调试也方便后续修改。注意I2C的时钟频率不要超过400kHz虽然芯片手册标称支持1MHz但在实际PCB上走线稍长或者上拉电阻偏大1MHz下波形就会变差导致配置失败。我一般用100kHz或者400kHz稳定优先。3. 双路输出的核心实现细节3.1 缩放引擎的参数计算与配置缩放引擎是双路输出独立性的关键。IT66631的缩放引擎支持独立的水平和垂直缩放系数每个系数是一个16位的定点数格式是8位整数加8位小数。举个例子如果输入是3840像素宽输出要缩到1920像素宽缩放系数就是1920/38400.5对应的定点数就是0x0080。如果输出是2560像素宽系数是2560/3840≈0.6667定点数就是0x00AA左右。计算的时候要注意四舍五入系数偏差太大会导致画面边缘出现黑边或者裁切。缩放引擎还支持独立的滤波配置。缩放倍数小于1的时候是降采样需要做抗混叠滤波缩放倍数大于1的时候是升采样需要做插值滤波。IT66631内部有可配置的滤波器系数默认配置下画质已经不错但如果对锐度有要求可以调整滤波器的截止频率。我试过把降采样的滤波器截止频率调高一些画面会锐一点但容易出现摩尔纹调低一些画面会软但更干净。这个取舍要看具体应用场景数字标牌可以锐一点医疗影像建议软一点。配置缩放引擎的时候有一个顺序要求先配置输入分辨率再配置输出分辨率最后使能缩放。如果顺序反了缩放引擎可能会用默认的输入分辨率去计算导致输出画面比例错误。这个坑我踩过一次当时调了半天以为是显示器的问题后来查寄存器才发现是配置顺序不对。3.2 双路TMDS输出的时钟与数据对齐两路HDMI输出各自有独立的TMDS时钟通道和数据通道。TMDS时钟频率等于像素时钟对于4K60Hz 4:4:4像素时钟大约是594MHzTMDS时钟就是594MHz每个数据通道的速率是像素时钟的10倍也就是5.94Gbps。这个速率下PCB走线的差分阻抗控制和长度匹配就非常重要。差分阻抗要控制在100欧姆±10%两条差分线之间的长度偏差要小于5mil否则眼图会闭合接收端可能无法锁定。两路输出之间的时钟偏差也需要关注。虽然两路输出是独立的但如果它们要驱动同一个显示设备的不同输入比如拼接屏两路之间的时钟偏差会导致画面撕裂。IT66631支持输出时钟的相位调整可以通过寄存器微调输出时钟的相位让两路输出的时序对齐。调整的步进是1/16像素时钟周期一般调到两路输出的VSYNC和HSYNC对齐就可以了。还有一点是热插拔检测。HDMI接口有HPD信号显示器插上之后会拉高HPD芯片检测到HPD之后才会启动输出。两路输出的HPD是独立检测的如果只插了一路显示器另一路没有插芯片应该只使能插了的那一路输出。这个逻辑需要在MCU里处理否则没插显示器的那一路会一直输出信号浪费功耗还可能干扰另一路。3.3 HDCP握手与EDID管理的实操要点HDCP是内容保护协议如果输入信号是加密的芯片需要先完成HDCP解密然后再对输出重新加密。IT66631支持HDCP 2.2和HDCP 1.4配置的时候要注意版本匹配。如果输入是HDCP 2.2加密的4K内容输出显示器只支持HDCP 1.4那芯片需要做版本降级把HDCP 2.2解密后再用HDCP 1.4加密输出。这个降级过程需要芯片内部有相应的密钥和证书IT66631是支持的但配置起来比较麻烦需要先加载密钥再配置降级模式。EDID管理是另一个容易出问题的地方。每路输出都需要读取显示器的EDID然后根据EDID的能力信息来配置输出分辨率。如果显示器没有EDID或者EDID读取失败芯片会用一个默认的EDID通常是1080p。实际调试中EDID读取失败的原因很多I2C总线冲突、EDID芯片供电不足、DDC通道的走线太长导致信号衰减。我的经验是DDC通道的走线尽量短上拉电阻用2.2kΩ而不是4.7kΩ这样上升沿更快读取成功率更高。提示如果两路输出接的是同一款显示器EDID内容是一样的可以只读一次然后复制到两路输出的EDID RAM里省去重复读取的时间。但如果两路显示器型号不同就必须分别读取否则输出参数会不匹配。4. PCB设计与信号完整性实战4.1 高速差分线的布局与阻抗控制IT66631的PCB设计是整个项目里最考验功底的部分。HDMI 2.0的TMDS速率到了6Gbps这已经属于高速信号的范畴走线不能随便拉。差分对的内层走线比外层好因为内层有参考平面阻抗更稳定EMI也更低。如果必须走外层那就要保证差分线下方有完整的参考平面不能跨分割。阻抗控制方面100欧姆的差分阻抗需要根据叠层来计算。以常见的四层板为例顶层到第二层的介质厚度如果是0.2mm介电常数4.3那差分线的线宽和间距大概在6mil/6mil左右。这个数值不是固定的要根据板厂的工艺能力调整。我一般会在投板前让板厂出一份阻抗报告确认差分阻抗在100欧姆±10%以内。长度匹配是另一个重点。差分对内的两条线长度偏差要小于5mil差分对之间的长度偏差要小于50mil。如果偏差太大信号到达接收端的时间不一致眼图会变差。我见过一个案例差分对内的两条线差了20mil结果4K60Hz下直接花屏降到1080p就正常了。后来重新布线把偏差控制在3mil以内4K就稳了。4.2 电源滤波与去耦电容的选型IT66631有多路电源核心电压1.1VIO电压3.3VTMDS输出驱动电压1.8V或者3.3V取决于配置。每路电源都需要足够的去耦电容。我的做法是每个电源引脚旁边放一个0.1uF的陶瓷电容然后每路电源再放一个10uF的钽电容或者陶瓷电容做储能。0.1uF的电容要尽量靠近引脚走线要短否则等效电感会抵消电容的高频滤波效果。TMDS输出驱动电源尤其要注意。HDMI输出是高速开关信号电源上的噪声会直接耦合到输出信号上导致眼图恶化。我一般会在TMDS电源引脚旁边放一个1uF的电容和一个0.01uF的电容1uF滤低频0.01uF滤高频。如果空间允许再串一个磁珠把高频噪声挡在电源外面。实测下来加了磁珠之后TMDS眼图的抖动明显减小。注意去耦电容的接地端要就近打过孔到地平面过孔的数量至少两个减少接地电感。如果只打一个过孔高频滤波效果会打折扣。4.3 ESD防护与接口保护HDMI接口是外露接口ESD防护不能省。IT66631的TMDS输出引脚内部有一定的ESD能力但通常只有几kV的人体模型面对实际使用中的静电放电还不够。我一般会在HDMI连接器旁边放一颗专用的ESD保护器件比如TVS二极管阵列钳位电压要低于芯片的绝对最大额定值。选型的时候要注意寄生电容HDMI 2.0的速率下寄生电容超过0.5pF就会影响信号完整性。所以要用超低电容的ESD器件通常标称0.2pF到0.3pF。HPD和DDC通道也要保护。HPD是低速信号对ESD器件的要求不高普通TVS就行。DDC是I2C总线速率400kHz寄生电容可以放宽到几十pF。但DDC通道容易受到总线锁定的影响如果显示器端把DDC拉低不放芯片就无法读取EDID。我的做法是在DDC线上串一个100欧姆的电阻限制电流防止总线锁定。如果还是锁死可以在MCU里加一个超时复位逻辑检测到DDC长时间拉低就重新初始化I2C控制器。5. 调试与常见问题排查实录5.1 输出无画面从HPD到TMDS的逐级排查输出无画面是最常见的问题排查要按信号链路逐级来。第一步查HPD用万用表量HDMI连接器的HPD引脚正常应该是高电平大约5V或者3.3V取决于电路设计。如果HPD是低电平说明显示器没有检测到信号源或者HPD线路断了。第二步查TMDS时钟用示波器量TMDS时钟差分对应该有稳定的差分波形频率等于像素时钟。如果没有波形说明芯片没有使能输出检查输出使能寄存器是否配置正确。第三步查TMDS数据量数据差分对应该有高速数据波形。如果时钟有但数据没有可能是输入信号没有锁定检查输入端的均衡配置和信号检测寄存器。我遇到过一次输出无画面查了半天发现是输入信号没有锁定。输入端的均衡器配置得太保守信号幅度不够芯片检测不到。后来把均衡增益调高了两档输入锁定指示灯亮了输出也正常了。所以调试的时候要养成看状态寄存器的习惯芯片内部有很多状态位比如输入锁定、输出使能、HDCP握手状态这些状态位能快速定位问题。5.2 画面闪烁或花屏时钟与均衡的联合调试画面闪烁或者花屏通常是信号完整性问题。先看TMDS眼图如果眼图闭合说明信号质量不够。可能的原因有差分阻抗不匹配、走线太长、均衡配置不当、电源噪声太大。我的排查顺序是先调均衡把输入端的均衡增益从低到高逐档试找到眼图最好的档位然后查电源用示波器量TMDS电源的纹波如果纹波超过50mV就要加滤波最后查走线如果前面都排除了那可能是PCB走线的问题需要重新设计。还有一种花屏是HDCP握手失败导致的。HDCP握手失败的时候有些显示器会显示花屏或者黑屏有些会显示雪花。判断方法是看HDCP状态寄存器如果握手没有完成状态位会是0。HDCP失败的原因可能是密钥不对、版本不匹配、或者DDC通道通信失败。我遇到过HDCP 2.2的输入源和HDCP 1.4的显示器芯片没有配置降级模式结果握手失败。后来在寄存器里使能了HDCP降级问题解决。5.3 两路输出不同步时钟相位与帧同步调整两路输出不同步的表现是两块屏幕显示的画面有撕裂或者一块屏幕比另一块慢半拍。这个问题在拼接屏或者多屏显示场景下很常见。IT66631支持输出时钟相位调整和帧同步功能。时钟相位调整可以让两路输出的像素时钟对齐帧同步可以让两路输出的VSYNC对齐。配置的时候要注意帧同步需要两路输出的帧率一致如果一路60Hz一路50Hz帧同步是做不到的。我调试过一个双屏方案两块屏都是1080p60Hz但画面有轻微撕裂。后来发现是两路输出的时钟相位差了1/4个像素时钟周期。在寄存器里把输出B的时钟相位调整了4个步进两路对齐了撕裂消失。这个调整需要耐心每次调一个步进观察画面变化直到撕裂消失。5.4 常见问题速查表问题现象可能原因排查方法解决措施输出无画面HPD未拉高万用表量HPD引脚检查HPD线路和显示器输出无画面输入未锁定读输入锁定状态寄存器调整输入均衡增益输出无画面输出未使能读输出使能寄存器配置输出使能位画面闪烁TMDS眼图闭合示波器量眼图调均衡、查电源、查走线画面花屏HDCP握手失败读HDCP状态寄存器配置HDCP版本和密钥两路不同步时钟相位偏差示波器量两路时钟调整输出时钟相位EDID读取失败DDC总线锁定量DDC电平和波形串电阻、加超时复位4K下花屏差分阻抗不匹配查PCB叠层和阻抗报告重新设计走线6. 实际项目中的经验与避坑建议6.1 配置顺序与上电时序的坑IT66631的上电时序有要求核心电压先上IO电压后上两者之间的时间差不要超过10ms。如果IO电压先上芯片内部的ESD保护二极管可能会导通导致电流倒灌长期下来会损坏芯片。我见过一个项目为了省事把1.1V和3.3V同时上电结果芯片发热严重后来改成1.1V先上3.3V延迟5ms温度就正常了。配置顺序也很重要。正确的顺序是上电复位→配置输入→配置缩放→配置输出A→配置输出B→使能输出。如果先使能输出再配置缩放输出可能会用默认的缩放参数导致画面比例错误。我一般会在MCU的初始化代码里严格按照这个顺序写并且在每一步之后读回寄存器确认写入成功。6.2 散热与功耗的实测数据IT66631的功耗和配置有关。双路4K60Hz输出的时候芯片功耗大概在1.5W到2W之间需要散热措施。如果是密闭外壳建议加散热片或者导热垫。我实测过不加散热片的情况下芯片表面温度能到70度以上加了散热片之后降到50度左右。如果环境温度高还要考虑主动散热。功耗优化方面如果只使用一路输出可以把另一路输出的电源关掉能省大概30%的功耗。芯片内部有输出通道使能位关掉不用的通道就行。另外缩放引擎的功耗和缩放倍数有关缩放倍数越接近1功耗越低。如果不需要缩放把缩放引擎旁路掉功耗还能再降一点。6.3 兼容性测试不同显示设备的适配经验兼容性测试是HDMI方案里最耗时的环节。不同品牌、不同型号的显示器EDID内容不一样HDCP能力不一样甚至TMDS的均衡需求也不一样。我的做法是准备一个测试矩阵至少覆盖三星、LG、戴尔、AOC、小米等主流品牌每个品牌选两到三款不同年份的型号。测试内容包括EDID读取、HDCP握手、4K60Hz显示、1080p120Hz显示、热插拔响应。我遇到过一款显示器EDID读取正常HDCP握手也正常但4K60Hz下画面偶尔闪黑。后来用示波器量TMDS信号发现这款显示器的接收端均衡需求比较高芯片默认的输出预加重不够。在寄存器里把输出预加重调高了一档闪黑就消失了。所以兼容性测试不能只看能不能点亮还要看长时间运行的稳定性。提示测试的时候要记录每款显示器的EDID和HDCP能力整理成表格。后续如果遇到兼容性问题可以快速对比是哪款显示器的问题还是芯片配置的问题。6.4 固件升级与寄存器配置的版本管理IT66631的配置是通过I2C写寄存器实现的这些寄存器配置通常存在MCU的固件里。固件升级的时候如果寄存器配置变了但MCU固件没有同步更新就会出现配置不匹配的问题。我的做法是给寄存器配置加版本号MCU启动的时候先读芯片的版本寄存器再读配置的版本号两者匹配才继续初始化不匹配就报错。这样能避免因为配置版本不一致导致的奇怪问题。另外寄存器配置最好用结构化的方式存储比如用结构体数组每个结构体包含寄存器地址、值、掩码。这样修改的时候只需要改数组不需要改代码逻辑。我见过一个项目把寄存器配置硬编码在代码里后来要改一个参数找了半天才找到对应的那行代码效率很低。7. 写在最后的一些个人体会这颗芯片我前前后后调了大概三个月从最初的评估板到最终的量产板踩了不少坑也积累了一些手册上不会写的经验。最大的体会是HDMI 2.0的方案硬件设计和寄存器配置各占一半。硬件设计不好信号完整性有问题寄存器配置再对也出不来画面寄存器配置不对硬件设计再好也发挥不出来。两者必须配合着调不能偏废。另一个体会是测试要趁早。不要等板子全部焊完再测试最好在打样阶段就留出测试点TMDS差分对、电源、I2C总线都要留测试点。这样调试的时候可以直接量波形不用飞线。我吃过这个亏第一版板子没留测试点调试的时候只能把示波器探头焊在电阻上很不方便。最后说一个小技巧如果手头没有HDMI协议分析仪可以用一块支持HDMI输入的开发板比如树莓派或者FPGA开发板来抓取TMDS信号分析时序和内容。虽然不如专业分析仪方便但胜在成本低适合前期调试。我用这个方法抓过几次EDID和HDCP的握手过程对理解协议帮助很大。
返回列表