ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IT6616桥接芯片实战:HDMI转MIPI CSI/DSI协议解析与调试指南

IT6616桥接芯片实战:HDMI转MIPI CSI/DSI协议解析与调试指南 1. 从一块转接板说起IT6616到底解决了什么现实问题第一次接触IT6616是在一个多屏拼接的项目里。客户拿过来一块巴掌大的转接板一头是标准HDMI接口另一头是FPC软排线接出来的MIPI接口板子中央就一颗QFN封装的小芯片。当时的需求很朴素把一路HDMI 1.4的信号转成MIPI CSI-2送进主控做图像采集。听起来简单但真正动手之后才发现这类桥接芯片的坑远比想象中密集。IT6616这颗芯片的定位说白了就是一座翻译桥。HDMI和MIPI是两套完全不同的信号体系——前者是面向显示器的消费级音视频接口走的是TMDS差分传输带着完整的EDID协商、HDCP加密、音频嵌入等一整套协议栈后者是面向移动端和嵌入式设备的内部高速接口CSI-2负责摄像头输入DSI负责显示输出用的是D-PHY物理层讲究的是低功耗、高集成度。这两套体系之间没有天然的互通性IT6616的价值就在于把HDMI接收端和MIPI发送端集成在一颗芯片里让工程师不用再拿FPGA去硬扛协议转换的活。这颗芯片主要面向几类场景。一是工业视觉领域很多工业相机、内窥镜、医疗影像设备需要把HDMI输出的图像源接入嵌入式主控而主控端只有MIPI CSI接口二是车载娱乐和座舱系统车机主控普遍用MIPI DSI驱动屏幕但外部视频源可能是HDMI三是消费电子的转接配件比如把游戏机、机顶盒的HDMI信号转到便携屏上。这些场景的共同特点是主控平台如瑞芯微、全志、高通、联发科等原生只提供MIPI接口而信号源是HDMI中间必须有一颗桥接芯片来翻译。适合读这篇内容的人大概分三类正在选型桥接方案的硬件工程师、需要调试HDMI转MIPI链路的嵌入式软件工程师、以及想搞清楚这类芯片内部到底在干什么的技术爱好者。我会从芯片的协议栈分工讲起然后落到寄存器配置、时序调试、常见故障排查这些实操层面尽量把踩过的坑和验证过的方法都摊开说。2. IT6616内部到底在做什么HDMI接收端与MIPI发送端的协议分工2.1 HDMI 1.4接收端不只是解串那么简单很多人以为HDMI接收就是把差分信号解成并行数据实际上IT6616的HDMI RX模块要做的事情远不止这些。HDMI 1.4的TMDS链路有三对数据通道加一对时钟通道每对通道的速率取决于视频的像素时钟和色深。以1080p60、24位色深为例像素时钟是148.5MHzTMDS字符率是像素时钟的10倍也就是1.485Gbps每通道。IT6616的RX端首先要做时钟恢复从TMDS时钟通道里恢复出像素时钟然后用这个时钟去采样三对数据通道。采样之后是解码。HDMI用的是8b/10b编码每个10bit字符里包含8bit有效数据和2bit控制信息。解码出来的数据分三种周期控制周期、数据岛周期、视频数据周期。控制周期里传的是HSYNC、VSYNC这些同步信号数据岛周期里塞的是音频采样、InfoFrame包含AVI InfoFrame、Audio InfoFrame等视频数据周期才是真正的像素数据。IT6616需要把这些周期正确分离把同步信号提取出来把音频和InfoFrame解析出来才能交给后面的MIPI TX模块去打包。这里有个容易被忽略的点HDMI的EDID协商。HDMI源端比如PC、机顶盒在输出信号之前会通过DDC通道读取接收端的EDID确认对方支持什么分辨率、什么色深、什么音频格式。IT6616内部通常需要外挂一颗EEPROM来存储EDID数据或者由主控通过I2C动态写入。如果EDID配置不对源端可能直接不输出信号或者输出一个你不想要的分辨率。我在项目里遇到过源端只认1920x108060Hz、其他分辨率一律黑屏的情况最后查出来是EDID里少了对应时序的描述符。2.2 MIPI CSI/DSI发送端D-PHY的时序约束是核心IT6616的MIPI TX模块支持CSI-2和DSI两种协议模式具体走哪种取决于应用场景。CSI-2是摄像头串行接口数据流向是接收端到主控适合图像采集DSI是显示串行接口数据流向是主控到显示模组适合屏幕驱动。IT6616作为桥接芯片如果是把HDMI信号送进主控做图像处理就配成CSI-2模式如果是把HDMI信号直接推到MIPI屏幕就配成DSI模式。MIPI D-PHY的物理层有几个硬性约束必须满足。一是Lane数量IT6616通常支持1到4条数据Lane加1条时钟LaneLane越多单Lane速率越低但布线复杂度越高。二是速率范围D-PHY v1.2规范下单Lane速率大概在80Mbps到2.5Gbps之间IT6616的具体支持范围要查数据手册。三是时序参数包括HS高速和LP低功耗模式之间的切换时间、时钟Lane的建立保持时间、数据Lane的Skew容限等。这些参数如果配错表现就是花屏、闪屏、甚至完全无输出。以1080p60、RGB888为例总数据率是148.5MHz × 24bit 3.564Gbps。如果用4条Lane每条Lane承担891Mbps在D-PHY的舒适区内如果用2条Lane每条要跑1.782Gbps接近上限对PCB走线和信号完整性要求就高很多。实际选型时我一般建议留20%到30%的速率余量不要贴着芯片的极限跑否则温度一上来或者线材稍差就容易出问题。2.3 桥接芯片内部的缓冲与时钟域跨越HDMI RX和MIPI TX是两个独立的时钟域。HDMI RX的像素时钟来自源端MIPI TX的字节时钟来自芯片内部的PLL或者外部参考时钟。这两个时钟不是同源的所以IT6616内部必须有一个FIFO缓冲来做时钟域跨越。FIFO的深度决定了芯片能容忍多大的时钟抖动和频偏。如果源端时钟和本地时钟偏差太大FIFO会溢出或者读空表现就是画面撕裂或者间歇性黑屏。这里有个实操经验当源端是PC显卡时像素时钟的精度通常很高但当源端是某些低成本机顶盒或者采集卡时时钟偏差可能达到几百ppm。这种情况下要么在IT6616的PLL配置里做时钟跟踪要么在FIFO水位管理上留足余量。我在一个项目里遇到过机顶盒输出1080p50Hz注意是50Hz不是60Hz的情况EDID里没描述这个时序芯片默认按60Hz去锁结果FIFO持续溢出画面每隔几秒就闪一下。后来在EDID里补上50Hz的描述符问题才解决。3. 寄存器配置实战从I2C上电到第一帧图像出来3.1 上电时序与复位流程IT6616的上电不是给电就能跑那么简单。芯片通常需要多路电源核心电压比如1.2V、IO电压比如3.3V或1.8V、MIPI D-PHY的模拟电压比如1.2V。这几路电源的上电顺序有要求一般是核心电压先上IO电压后上模拟电压最后上具体顺序要查数据手册的Power-Up Sequence章节。如果顺序反了可能导致芯片内部锁存器进入不确定状态I2C都读不通。复位流程一般是拉低RESET引脚至少1ms然后拉高等待内部PLL锁定通常几ms再通过I2C去读芯片ID寄存器确认通信正常。我习惯在复位后先读一遍0x00和0x01这两个ID寄存器确认返回值符合手册描述再进行后续配置。如果ID读出来是0xFF或者0x00先查I2C地址对不对IT6616的I2C地址通常是0x98或0x9A取决于ADDR引脚的接法再查上电时序和复位信号。3.2 EDID的写入与验证EDID是HDMI通信的身份证。IT6616通常支持两种EDID模式一种是外挂EEPROM芯片通过DDC通道直接读EEPROM另一种是主控通过I2C把EDID数据写进芯片内部的RAM。前者适合固定配置的产品后者适合需要动态切换分辨率的场景。写EDID的时候最容易出错的是Checksum。EDID的128字节块里第127字节是前面127字节的校验和必须满足所有字节相加后低8位为0。我见过不少工程师直接用工具生成EDID然后烧进去结果忘了校验和源端读EDID时直接报错不输出。验证方法是写完之后通过I2C把EDID读回来自己算一遍校验和确认无误。另一个坑是EDID里的时序描述符。HDMI源端会优先选择EDID里Preferred Timing标记的那个分辨率。如果你希望源端输出1080p60就要确保EDID里第一个Detailed Timing Descriptor是1080p60并且设置了Preferred Timing标志位。否则源端可能选一个你不想要的分辨率比如720p或者1024x768。3.3 MIPI TX的Lane配置与速率计算MIPI TX的配置核心是两件事Lane数量和单Lane速率。Lane数量由硬件设计决定PCB上走了几条差分对就配几条。单Lane速率要根据输入视频的像素时钟、色深、以及Lane数量来算。计算公式是单Lane速率 像素时钟 × 每像素比特数 ÷ Lane数量。以1080p60、RGB888、4 Lane为例148.5MHz × 24 ÷ 4 891Mbps。这个速率要写进IT6616的PLL配置寄存器里同时还要配置D-PHY的时序参数比如HS Entry/Exit的时序、LP模式的驱动强度等。这里有个细节MIPI CSI-2和DSI的包格式不一样。CSI-2用短包Short Packet传帧同步和行同步用长包Long Packet传像素数据DSI用不同的包类型和虚拟通道机制。IT6616在配置时要明确选择CSI-2还是DSI模式否则包格式不对主控端根本解析不出来。我在调试CSI-2模式时用示波器抓MIPI Lane上的波形看到有数据在跑但主控就是收不到图后来发现是虚拟通道号配错了——CSI-2的虚拟通道号要跟主控端CSI接收器的配置一致默认是0但如果主控端配了其他通道号就得跟着改。3.4 音频嵌入与InfoFrame的处理如果应用场景需要传音频IT6616的HDMI RX端会从数据岛周期里提取音频采样然后通过I2S或者SPDIF接口输出给主控。如果不需要音频可以在寄存器里关掉音频处理减少内部资源占用。InfoFrame的处理也值得注意。AVI InfoFrame里包含了色彩空间、扫描方式、宽高比等信息。如果这些信息配错了主控端可能把RGB当成YUV处理颜色就全乱了。我在一个项目里遇到过画面偏绿的问题查了半天发现是AVI InfoFrame里的Colorimetry字段设成了BT.601而实际输入是BT.709主控按BT.601去解码绿色通道就偏了。改回BT.709之后颜色立刻正常。4. 调试链路中的典型故障与排查路径4.1 无输出从电源、I2C到EDID的逐级排查无输出是最常见的故障排查要按链路顺序来。第一步查电源用万用表量每一路电源的电压是否在手册规定范围内纹波是否超标。第二步查I2C用I2C调试工具读芯片ID确认通信正常。第三步查EDID把EDID读回来确认校验和正确、时序描述符包含源端支持的分辨率。第四步查HDMI RX的锁定状态IT6616通常有寄存器指示TMDS时钟是否锁定、是否检测到视频信号。如果时钟没锁查HDMI线材和源端输出如果时钟锁了但没视频查EDID协商和HDCP状态。HDCP是另一个容易忽略的点。如果源端开启了HDCP加密而IT6616没有正确处理HDCP握手源端可能输出黑屏或者降级到低分辨率。IT6616通常支持HDCP 1.4解密但需要正确的密钥烧录和握手流程。如果项目不需要HDCP可以在EDID里声明不支持HDCP让源端不加密输出。4.2 花屏与闪屏MIPI时序和FIFO水位的联合调试花屏和闪屏的原因比较多可能是MIPI时序参数不对也可能是FIFO水位管理有问题还可能是PCB信号完整性问题。排查时先用示波器或者MIPI协议分析仪抓MIPI Lane上的波形看HS和LP模式的切换是否干净、时钟Lane是否稳定、数据Lane的Skew是否在容限内。如果波形看起来正常但画面还是花就要查FIFO水位。IT6616通常有寄存器可以读取当前FIFO的填充水平。如果水位持续偏高或者偏低说明时钟域跨越有问题。解决办法一是调整PLL配置让本地时钟更接近源端时钟二是调整FIFO的阈值让读写指针保持在一个安全区间。PCB信号完整性问题在高速MIPI上很常见。差分对的阻抗要控制在100欧姆±10%走线长度要匹配过孔要尽量少参考平面要完整。我见过一个案例MIPI差分对走了两层板中间没有完整地平面结果1.5Gbps的速率下眼图几乎闭合降到1Gbps才能勉强工作。后来改版加了地平面问题才彻底解决。4.3 颜色异常色彩空间与InfoFrame的匹配颜色异常通常不是链路问题而是配置问题。前面提到的BT.601和BT.709混淆是最常见的一种。另一种是RGB和YUV的混淆如果源端输出YUV444而主控端按RGB去解析颜色就会完全不对。排查方法是读AVI InfoFrame里的Color Space字段确认跟主控端的配置一致。还有一种情况是色深不匹配。HDMI 1.4支持24位、30位、36位色深如果源端输出30位而IT6616配成了24位低位数据会被截断表现是颜色过渡不平滑、有banding。这种情况下要在EDID里声明支持的色深或者在寄存器里配置正确的色深模式。4.4 间歇性黑屏时钟抖动与温度漂移的排查间歇性黑屏是最难查的故障之一因为它不是稳定复现的。常见原因有三个一是源端时钟抖动超标导致FIFO偶尔溢出二是芯片温度升高后PLL失锁三是电源纹波在特定负载下超标。排查时可以先监测FIFO水位寄存器和PLL锁定状态寄存器看黑屏发生时这些寄存器的值有没有异常跳变。如果是时钟抖动问题可以尝试在源端和IT6616之间加一颗时钟净化芯片或者在IT6616的PLL配置里增加抖动容限。如果是温度问题用热风枪或者冷喷剂改变芯片温度看故障是否跟温度相关。如果是电源问题用示波器抓电源纹波看黑屏时纹波是否突然增大。5. 选型与设计中的取舍Lane数量、参考时钟与PCB布局5.1 Lane数量的权衡速率余量 vs 布线复杂度Lane数量的选择是一个典型的工程取舍。Lane越多单Lane速率越低信号完整性压力越小但PCB布线越复杂连接器引脚越多成本也越高。Lane越少布线简单但单Lane速率高对PCB材料和走线要求更严。我的经验是1080p60及以下2 Lane通常够用单Lane速率在1.8Gbps左右用普通FR4板材和合理布局可以搞定1080p120或者4K30建议4 Lane单Lane速率控制在1.5Gbps以内4K60的话IT6616可能就力不从心了需要更高规格的桥接芯片。选型时先算速率再看PCB能不能支持最后看成本能不能接受。5.2 参考时钟的选择无源晶振 vs 有源晶振IT6616通常需要一个外部参考时钟频率可能是24MHz、27MHz或者别的值具体查手册。参考时钟可以用无源晶振加内部振荡电路也可以用有源晶振直接输入。无源晶振成本低但起振时间和频率精度受负载电容影响大有源晶振成本高但频率稳定、抖动小适合对时钟要求高的场景。如果项目对MIPI速率要求高我建议用有源晶振抖动指标选50ps以下的。如果只是1080p60这种中低速场景无源晶振也能用但负载电容要按晶振厂家的要求配否则频率偏了会影响PLL锁定。5.3 PCB布局的几条硬规则MIPI差分对的布局有几条硬规则一是差分对内部两根线要等长误差控制在5mil以内二是差分对之间要等长误差控制在50mil以内三是差分对要远离电源和时钟等噪声源至少保持3倍线宽的间距四是差分对下面的参考平面要完整不能跨分割五是过孔要尽量少如果必须过孔要保证过孔周围的回流路径连续。HDMI端的布局相对宽松一些但TMDS差分对也要按100欧姆阻抗控制等长要求类似。另外HDMI连接器的外壳地要跟PCB地良好连接ESD保护器件要靠近连接器放置。6. 几个让我印象深刻的调试案例6.1 案例一EDID里少了一个描述符项目卡了三天这个项目是用IT6616把机顶盒的HDMI信号转到MIPI屏幕上。硬件打样回来之后屏幕一直黑屏。查电源正常I2C通信正常HDMI RX的时钟也锁定了但就是没有图像。用示波器抓MIPI Lane发现完全没有数据。排查了两天最后把EDID读出来逐字节分析发现EDID里只描述了720p和1080i没有1080p。机顶盒读EDID后选择了一个EDID里有的分辨率输出但IT6616的MIPI TX配置是按1080p配的输入720p时MIPI TX的时序完全不对所以没有输出。在EDID里补上1080p60的描述符并设为Preferred Timing问题解决。这个案例的教训是EDID不是随便填的它决定了源端输出什么而源端输出什么又决定了IT6616后面怎么配。EDID、HDMI RX配置、MIPI TX配置这三者必须一致。6.2 案例二MIPI Lane的Skew超标导致间歇性花屏这个项目是工业相机HDMI源是相机模组MIPI接收端是瑞芯微的主控。画面大部分时间正常但每隔几分钟会花一下。用MIPI协议分析仪抓波形发现四条数据Lane之间的Skew偶尔会超过D-PHY的容限。查PCB发现四条Lane的走线长度差异比较大最长和最短差了将近200mil。重新布线把差异控制在50mil以内问题消失。这个案例说明MIPI的Skew容限比想象中严格尤其是速率高的时候走线等长不是尽量而是必须。6.3 案例三HDCP握手失败导致源端降级输出这个项目是用PC作为HDMI源IT6616转MIPI进主控。PC输出1080p时正常但输出4K时黑屏。查HDMI RX状态寄存器发现HDCP握手失败。PC检测到接收端HDCP不兼容就降级到1080p输出但IT6616的MIPI TX还是按4K配的所以黑屏。解决办法是在EDID里声明不支持4K让PC直接输出1080p或者在IT6616里正确配置HDCP密钥让4K也能握手成功。前者简单但限制了分辨率后者复杂但功能完整。最终项目选择了前者因为应用场景不需要4K。7. 写在最后这类桥接芯片的调试心法调IT6616这类桥接芯片我最大的体会是不要把它当成一个黑盒要把它当成两个独立模块HDMI RX和MIPI TX加一个内部FIFO。调试时先确保HDMI RX能正确锁定和解析信号再确保MIPI TX能正确发送数据最后调FIFO的时钟域跨越。任何一段有问题表现都是没图像但排查的切入点完全不同。另一个心法是寄存器配置要跟硬件设计严格对应。Lane数量、参考时钟频率、电源电压、EDID内容这些硬件相关的参数一旦配错软件怎么调都没用。我习惯在调试前先做一张硬件-寄存器对照表把每个硬件参数对应的寄存器地址和期望值列出来逐项确认后再上电调试。最后分享一个小技巧IT6616通常有内部测试图案生成功能可以输出彩条或者渐变图。在调试MIPI TX的时候先让芯片输出测试图案确认MIPI链路和主控接收端都正常再切换到HDMI输入。这样可以快速定位问题是在HDMI RX端还是在MIPI TX端省去很多来回折腾的时间。
返回列表