ARTICLE DETAIL

资讯详情

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

IT6625芯片详解:HDMI转MIPI DSI的桥接原理、硬件设计与Linux适配

IT6625芯片详解:HDMI转MIPI DSI的桥接原理、硬件设计与Linux适配 做嵌入式显示方案的朋友大概率遇到过这个场景手头一块MIPI DSI接口的LCD屏想把它接在只有HDMI输出的主板上或者反过来RK3566、RK3588这类主控明明有HDMI接口却要驱动一块只有MIPI的OLED屏。两边都是常见视频接口但协议、时钟、时序完全是两套语言直接飞线根本不可能。IT6625这种桥接芯片就是把HDMI信号“翻译”成MIPI DSI信号的专用桥梁。这篇文章我不会堆数据手册而是以实际项目视角拆解IT6625的原理、硬件设计、Linux适配和调试坑帮你把这条桥真正架起来。1. 从HDMI到MIPI为什么需要这座桥1.1 两种接口各自的天性先看HDMI。HDMI本质上是一路高速差分视频信号加上TDMS通道、时钟通道、DDCI2C通道和CEC控制通道。它编码的是像素流内部做了8b/10b编码还有HDCP加密保护。HDMI的优势是生态成熟电脑、电视盒子、游戏机都带HDMI输出带宽从HDMI 1.4的10.2Gbps到HDMI 2.0的18Gbps走到4K60Hz都没有问题。但它的电气特性是为长距离传输设计的接口体积大驱动逻辑复杂对嵌入式小尺寸屏幕来说并不合适。再看MIPI DSI。MIPI是Mobile Industry Processor Interface手机行业为了驱动屏幕定制的协议。它的物理层叫D-PHY使用差分线对每个lane跑在几百Mbps到几Gbps没有复杂的HDCP加密也没有热插拔检测。MIPI DSI接口的引脚又少通常1对clock lane加上1到4对data lane就能驱动一块1080P屏幕再加上GPIO控制比HDMI动辄十几根线紧凑得多。但MIPI DSI没有标准的外部输出接口,基本都是板内连接,需要精确的时序参数才能点亮屏幕。问题就来了用一个带HDMI输出的主控去驱动一片MIPI DSI屏直接连是不可能的。你总不能PC端自己写一个HDMI转MIPI的协议栈跑在CPU上那会把主控拖垮。这时候需要一颗专门的桥接芯片IT6625就是在HDMI和MIPI DSI之间做物理层、链路层和协议层翻译的硬件中介。1.2 IT6625在系统中的位置IT6625是一颗HDMI接收端桥接器输入端是HDMI接口输出端是MIPI DSI接口。放在系统里它的位置在视频源和显示面板之间。典型场景有一种是用在RK3566评估板上外部HDMI信号源通过IT6625转成MIPI DSI再接到本地的MIPI屏幕实现一个HDMI输入的显示设备另一种是主控芯片本身有HDMI接口想外接MIPI屏作为副屏也可以在主控HDMI输出和屏幕之间塞一颗IT6625。选择IT6625而不是用FPGA自己做转换核心原因是开发成本。FPGA方案需要自己写MIPI D-PHY发送端的serdes逻辑、DSI协议打包、HDMI接收端的TMDS解码还要处理HDCP工作量巨大。而IT6625把这些全部固化在硅片里你只需要配置它的I2C寄存器告诉它输出分辨率、lane数量、颜色格式剩下的转发工作全自动完成。拿到板子先跑起来比从零搭链路快无数倍。2. IT6625核心架构与信号链解析2.1 芯片内部模块划分IT6625内部可以分成这几个大模块HDMI接收前端负责TMDS解调、8b/10b解码、HDCP解密、EDID读取视频处理模块负责缩放、色彩空间转换、时序调整这是桥接芯片最容易忽略但又很重要的部分MIPI DSI发送模块负责D-PHY发送、DSI包组装、视频流控制I2C配置模块负责运行时寄存器访问、中断控制、面板参数注入。从数据流角度看HDMI信号进来后先做物理层恢复把TMDS差分信号变成数字像素流然后进入内部视频处理单元做时序转换。由于HDMI的输入时序和MIPI DSI输出时序通常是不同步的芯片内部还要用FIFO做缓冲把输入帧缓存到内部存储中再按照MIPI DSI要求的时序发出去。这也是桥接芯片会产生延迟的主要原因一般会有一个到几个frame的延迟正常现象。需要特别说的是MIPI DSI爆发模式burst mode下的处理。MIPI DSI屏幕驱动时数据lane在行有效期内高速一批一批地发送像素帧空白期间可以停。而HDMI输入是连续稳定的像素流两边的带宽并不一致。IT6625必须有足够大的line buffer或帧buffer来平滑速率差。如果你的屏幕分辨率接近芯片最大带宽建议把输出帧率限制在输入帧率附近否则可能出现撕裂或闪烁。2.2 HDCP与EDID处理HDCP是HDMI上绕不开的内容保护机制。IT6625作为HDMI接收端必须支持HDCP1.4或HDCP2.2的接收端功能才能正常解析受保护的视频源。实际调试中如果你用笔记本电脑HDMI输出到IT6625电脑会先和IT6625做HDCP密钥交换成功后才会发送完整视频内容。EDID则是另一条关键链路。HDMI源端在输出前需要通过DDC读取接收端的EDID了解显示器支持的分辨率、刷新率、色彩格式。IT6625内置EDID存储或者可以通过外部I2C接口加载自定义EDID。这里有个经验想要适配不同分辨率屏幕最好把EDID设置成屏幕的原生分辨率并允许源端缩放。否则源端会输出默认的1080P而IT6625再去缩放画质会打折扣。如果你的项目不涉及版权视频我强烈建议在驱动里把HDCP关掉或者配置成“无HDCP”模式能省去很多调试麻烦。部分HDMI源在HDCP握手失败时会直接黑屏此时需要检查IT6625固件是否带了正确的HDCP Key。不过现在的HDMI桥接芯片大都内置key核心还是确认EDID和I2C地址配置。2.3 MIPI DSI输出配置IT6625的输出端按MIPI DSI规范工作。你需要配置的关键参数包括lane数量、连续时钟模式、像素格式RGB888、RGB666等、burst还是sync模式、blanking包的行为、虚拟通道号、以及视频时序参数HSA/HBP/HFP/VSA/VBP/VFP。这些参数一定要和屏幕的数据手册匹配尤其是lane数量和像素时钟。以一块常见1080P MIPI屏为例60Hz刷新率RGB888格式像素时钟约148.5MHz。如果使用4条lane每条lane的比特率大约是148.5MHz乘以24位再除以4约891Mbps这个速率在D-PHY HS模式下完全可行。如果你的面板只支持2条lane速率翻倍到1.782Gbps对布线要求就高很多所以能用4 lane就用4 lane。另外MIPI DSI是包结构传输IT6625内部会把HDMI视频流切成DSI包包含短包同步包和长包像素数据。配置时要注意HFP里插入多少空包太紧凑会让panel时序不够太宽松会浪费带宽。大部分情况下直接按屏幕规格书提供的推荐时序参数填表即可。如果你拿到的是st7701s这类常见驱动IC的屏幕驱动模板很多基本可以抄作业。3. 硬件设计与参考电路3.1 引脚定义与关键信号IT6625的封装通常是QFN引脚分为几组HDMI差分输入对TX0/-、TX1/-、TX2/-、CLK/-、MIPI DSI差分输出对CLKP/N、D0P/N、D1P/N、D2P/N、D3P/N、I2C控制接口SCL/SDA、中断输出、复位输入、以及电源、地、外部晶振引脚。实际画板时最需要关注的是MIPI差分对。MIPI属于高速差分信号需要做100欧姆差分阻抗控制。HDMI同样也是差分但阻抗要求是100欧姆TMDS或更高两者的走线阻抗标准不同不能混用。如果PCB层叠不支持精确阻抗至少要保证差分对内等长并且走线尽量短远离高噪声源。还有一组容易被忽略的引脚是I2C地址选择。IT6625一般有至少一个地址引脚用于设置I2C从地址避免板上其他芯片冲突。调试前先用I2C扫描工具确认芯片地址否则你写驱动半天没反应最后发现是地址配错了。3.2 电源与时钟设计电源设计上IT6625内部通常有1.2V核电压、3.3V IO电压、1.8V MIPI PHY电压。别图省事全部用一个LDOMIPI高速收发器的电源纹波会在输出信号上直接体现。我在实践中会给PHY电源加一个磁珠和一个10uF电容再用0.1uF高频电容配合保证高频退耦。时钟方面IT6625需要一个参考时钟常见的是24MHz或27MHz晶振。这个晶振的精度直接影响输出MIPI时钟的稳定性。如果你在屏幕上看到横纹或间歇性闪屏先怀疑晶振负载电容是不是配错了。晶振的CL值要和芯片要求匹配通常可以在规格书中找到。3.3 FPC连接与PCB布线要点MIPI屏几乎都是通过FPC排线连接到主板。FPC上的MIPI信号也要保持等长和阻抗不能因为是软板就马虎。我见过不少项目因为FPC走线串扰严重导致屏幕雪花后来重新画FPC把差分对间距拉开旁边加地屏蔽问题就消失了。如果你只是调试用成品转接板注意FPC插座的型号MIPI屏的引脚顺序不是标准化的接错会烧屏。上电前务必用万用表核对电源引脚和GND不要直接插。PCB布线的核心原则是HDMI入MIPI出两组高速信号之间要隔离。不要把HDMI的TMDS线布局到MIPI差分线下面否则两者高速信号会串扰。中间用地过孔隔离电源走线尽量避开信号区。还有MIPI信号的换层处要加回流地过孔否则返回路径断开信号质量会严重劣化。4. 软件适配与驱动调试4.1 I2C寄存器配置流程IT6625的大部分功能都靠I2C寄存器控制配置流程一般是复位芯片等待稳定通过I2C读取芯片ID确认通信正常配置输入HDMI相关寄存器配置输出MIPI DSI参数使能视频通道。这里我给一个通用的配置函数结构具体寄存器地址以手册为准static int it6625_init(struct i2c_client *client) { u8 id; /* 1. 软复位 */ it6625_write(client, 0x00, 0x01); msleep(20); /* 2. 读取芯片ID */ it6625_read(client, 0x02, id); if (id ! 0x25) { /* IT6625的ID值参照手册 */ dev_err(client-dev, unexpected chip id\n); return -ENODEV; } /* 3. 配置HDMI输入分辨率、颜色格式、EDID使能 */ it6625_write(client, 0x10, 0x40); /* 示例使能HDMI输入 */ /* 4. 配置MIPI DSI输出lane数量、时钟分频、像素格式 */ it6625_write(client, 0x20, 0x04); /* 示例4 lane配置 */ it6625_write(client, 0x21, 0x00); /* burst模式 */ /* 5. 启动视频通路 */ it6625_write(client, 0x30, 0x01); return 0; }实际配置最关键的是输出时序。你需要把屏幕的HSA、HBP、HFP、VSA、VBP、VFP数值换算成寄存器值在初始化时写入。很多工程师卡在这里由于换算错误导致屏幕不亮或者显示偏移。建议先把MIPI屏接到支持MIPI输出的主控比如RK3568上点屏正常后再把同样的参数填到IT6625里这样可以排除参数错误。4.2 Linux驱动接入RK3566/RK3588在RK3566或RK3588平台上适配IT6625通常有两种方案。一种是把IT6625看作一个MIPI DSI panel通过DRM的bridge框架接入另一种是看作一个HDMI receiver通过media框架接入。不同场景驱动结构不同。如果你的目的是“HDMI输入转MIPI屏”系统里其实是两条独立链路HDMI信号进IT6625IT6625直接驱动屏。主控只负责通过I2C初始化芯片并把屏幕当作另一个输出接口。这时可以注册一个i2c设备驱动在probe函数里完成初始化。也可以使用DRM panel-bridge接口让主控把IT6625输出当panel。如果是RK3588这种有多个显示控制器的平台想把IT6625接到某个VP那么更推荐用DRM bridge。在设备树中把IT6625放在对应VP的MIPI DSI节点上表示这是一块MIPI屏桥接器。驱动把IT6625描述为一个bridge它实现enable、disable、mode_fixup等回调。具体dts大致如下mipi_dsi0 { status okay; panel0 { compatible ite,it6625; reg 0; enable-gpios gpio4 6 GPIO_ACTIVE_LOW; reset-gpios gpio4 7 GPIO_ACTIVE_LOW; port { panel_in: endpoint { remote-endpoint dsi0_out; }; }; }; }; dsi0 { status okay; ports { port0 { endpoint { remote-endpoint vp0_out; }; }; port1 { dsi0_out: endpoint { remote-endpoint panel_in; }; }; }; };驱动中需要实现bridge的atomic_enable和atomic_disable。由于IT6625没有内置DSC或gamma等高级功能bridge驱动相对简单核心还是在初始化时把DSI参数正确写入寄存器。很多RK平台的SDK已经带有IT66xx系列驱动可以复用。4.3 视频旋转与屏幕适配热线词里提到“hdmi视频旋转”这在桥接芯片中是高频需求。因为很多MIPI屏天生是竖屏而HDMI信号源是横屏。IT6625自身不一定有旋转引擎如果硬件不支持只能靠GPU或主控的显示控制器做旋转。RK3588的VP支持旋转但需要额外的内存带宽。如果你的MIPI屏是竖屏而HDMI源是横屏可以在系统层面使用DRM的rotation属性或者在驱动中通过FB的翻转实现。但要注意旋转会增加一行数据读取时间可能在带宽不够时性能下降。还有一种方式是让HDMI源端就输出竖屏分辨率比如在PC端把显示分辨率改为竖屏的1080x1920IT6625不做旋转直接透传。这个方案最简单但不适合通用信号源。Adapter层面你还要处理屏幕的显示时序。MIPI OLED屏和LCD屏差异不小OLED通常需要初始化序列带MADCTL等寄存器配置。IT6625本身不关心面板IC它只负责发送DSI命令和像素。实际驱动中IT6625初始化时可以附带一串panel init code在进入视频模式前通过DSI命令发送给面板。这个序列一般由面板厂提供千万别漏否则屏幕白屏或花屏。5. 调试工具与常见问题排查5.1 常见问题速查表把我在项目中遇到的高频问题整理成表格方便排查现象可能原因排查方法完全无画面I2C地址错误或电源异常扫描I2C总线确认芯片地址检查各路电源电压雪花屏MIPI差分信号质量差示波器看MIPI波形查阻抗、串扰、等长屏幕亮但花屏DSI时序参数或像素格式配置错误核对lane数和RGB888/RGB666设置重新设置HBP/HFP闪烁/撕裂输入输出帧率不匹配或无逐行同步调节输出帧率匹配输入或开启帧缓冲功能开机正常但一段时间后黑屏HDCP握手超时或I2C挂死检查HDCP状态寄存器确认HDCP是否关闭显示方向错误MIPI panel配置了旋转修改屏幕驱动中的翻转/旋转寄存器5.2 实操心得与避坑指南先讲一个最坑的点MIPI屏的FPC引脚顺序。我在项目中拿到一片st7701s的屏为了省事直接参考网上的转接板接线结果上电后屏幕发出焦味返修才发现电源正负接反了。MIPI FPC的标准没有覆盖引脚定义不同屏厂可以自定义插之前务必拿到该屏厂的规格书核对每一个电源引脚和信号引脚。另一个常见问题是MIPI D-PHY的deskew calibration。虽然IT6625的PHY会自动做deskew调整但在高带宽模式下如果layout上差分对长度差超过一定范围自动校准也救不回来。在PCB设计阶段就要估算走线长度尽量让同一组lane的差分对内等长在5mil以内lane之间的长度差控制在200mil以内。同时要确保D-PHY的参考电压和终端电阻正确IT6625一般内置了100欧姆端接不需要外部并联匹配电阻但还是要看手册确认。关于HDMI的I2C通道也就是DDC很多初次调试的人会忽略。IT6625作为HDMI receiver需要源端通过DDC读EDID。如果你的HDMI源是PCPC在启动到桌面时才去读EDID这时如果DDC线上有干扰导致EDID读取失败PC会放弃输出。解决方法是使用屏蔽良好的HDMI线并在软件上把EDID数据提前准备好不要依赖动态读取。再分享一个关于热插拔检测HPD的经验。IT6625一般会有一个HPD输出引脚用于告诉源端“显示器在线”。如果你把HPD引脚悬空部分HDMI源会认为没有显示器不输出信号。软件上可以把HPD引脚配置成常高或者由主控GPIO控制。有些IT6625的配置寄存器里也有一项“强制HPD”开启后就不用外部电路了。调试过程中示波器是必须的。建议先测HDMI输入端的TMDS差分信号确认有波形跳动再测MIPI输出端的lane信号看是否有高速脉冲。如果输入端有波形而输出端没有多半是芯片初始化没成功如果两端都有波形但屏幕不亮重点检查面板初始化序列和背光控制。屏的背光通常在IT6625之外独立控制不要忘了给背光供电和IO口拉高。我还遇到过一个问题同样的IT6625驱动在RK3588上工作正常在RK3566上花屏。排查到最后发现是RK3566的MIPI DSI时钟源频率上限不够导致输出分辨率超过了PHY支持范围。这不是IT6625的问题而是主控的物理层限制。遇到这种情况只能降低屏幕刷新率或减少lane率。所以在选型时不仅要看桥接芯片的带宽上限还要算主控端MIPI DSI的带宽上限两者只能取小。最后说一个小技巧如果在量产调试中频繁出现“白屏但有背光”可以先用逻辑分析仪抓IT6625到屏幕的MIPI DSI包看前几帧是否发送了初始化命令。若是根本没有命令输出大概率是IT6625没有从HDMI输入源检测到有效的信号时序比如输入是4K而IT6625不支持该输入格式。此时可以先把输入分辨率改为1080P排除输入源问题。这个内容后续还可以往两个方向扩展一个是HDMI到MIPI CSI的反向桥接用于视频采集场景另一个是加一个MCU做动态分辨率切换。但就目前的IT6625方案而言它已经是很成熟的HDMI转MIPI DSI桥梁了。我个人在实际调试中最大的体会是桥接芯片的参数配置必须一次规划好宁可多花时间在看屏厂规格书和layout评审上也不要反复改软件寄存器去妥协硬件缺陷。先把电源、时钟、高速信号这几大板级要素弄干净IT6625基本不会给你添乱。
返回列表