IT6113这块片子我是大概两个月前才正式用上,起因是手头一个项目的主控SoC只给出了4-lane的MIPI DSI输出,但面板那边非要走8-lane DSI才带得动高分辨率,组里老工程师直接甩给我一句"你去看看IT6113"。一开始我还觉得这是不是有点舍近求远,但真把方案调通之后,回头看才明白这类DSI桥接芯片在显示链路里到底扮演什么角色。这篇就把我在这套4-lane进、8-lane出方案上的理解、原理图设计、寄存器配置和一些踩坑过程一起分享出来,给以后要做类似显示桥接的兄弟一个参考。
1. 什么场景下非用4-lane进8-lane出的DSI桥接不可
1.1 主控SoC与高端面板之间的lane数错位
做显示方案的人应该都有这种感觉:选SoC的时候,面板规格往往还没完全定下来。等面板定稿了,一查主控规格,发现DSI接口只有4-lane,每lane速率也就是1.5Gbps到1.8Gbps的水平,算下来总带宽就6到7Gbps。这个带宽在1080P@60Hz或2K@60Hz还算够用,但一上到4K@60Hz或者带高刷新率的屏,立刻就不够了。
有人会问,为什么不直接选一个原生8-lane DSI输出的主控?答案很现实:不是每个项目都能自由换主控。有时候是客户指定了平台,有时候是BOM已经锁死了,还有时候是整个软件框架都基于某个主控,换平台意味着巨大的工作量。这个时候,在中间加一颗桥接芯片,把4-lane进来的视频流扩展成8-lane出去,就成了唯一不动主控、只改硬件链路就能解决带宽瓶颈的办法。
1.2 桥接芯片在系统中实际的位置
IT6113这一类芯片,在系统里的位置很清晰:主控SoC的MIPI DSI输出,经过FPC或PCB走线进入IT6113的输入侧,然后IT6113的输出侧接面板的8-lane DSI接口。控制方面,通常走I2C,主控负责初始化IT6113的寄存器。
我这边实际接法的简化描述是这样的:
- 主控DSI输出(TX) -> IT6113输入(RX)
- IT6113输出(TX) -> 面板DSI输入(RX)
- 主控I2C -> IT6113配置引脚
- IT6113中断引脚(INT) -> 主控GPIO(可选)
这个结构看起来简单,但里面其实藏着不少讲究。比如说,主控的DSI clock lane在桥接芯片输入端是不是需要匹配阻抗,输出端8条lane的等长控制应该做到什么程度,以及芯片的供电时序要不要和主控、面板严格联动。这些不是看一遍规格书就能直接拍脑袋的,我也是在实调过程中一点点摸出来的。
2. 从信号链路上拆解IT6113的4-lane转8-lane原理
2.1 MIPI DSI基本元素:lane、clock和封包
要理解4-lane转8-lane,先要过一遍MIPI DSI的基础。DSI物理层用的是D-PHY,数据lane最少1条、最多8条,再加上1条专用的clock lane,所有lane共用一个时钟。视频数据在HS模式下以差分信号高速传输,控制指令和帧的起始结束则在LP模式下慢速传。
常见的DSI接口配置有1-lane、2-lane、4-lane三种,8-lane在手机上很少见,但在平板、车载显示器、工业屏领域是真实存在的需求。lane数量越多,同样时间内能传送的像素数据就越多。可以简单理解成高速公路的车道数:4车道高峰期堵车,8车道就顺畅很多。
IT6113做的事情,本质上就是数据通道的扩展。它接收4-lane进来的高速差分信号,把payload解析出来,再重新打包成8-lane输出。这个过程中不是简简单单把信号一分二,而是实打实的协议处理。
2.2 桥接芯片内部的数据处理路径
从工作路径上看,输入侧的DSI RX模块先做D-PHY接收和解包,把data lane上的像素数据恢复成并行的RGB数据流和同步信号,然后这个数据流进入内部的处理逻辑,最后经过DSI TX模块重新编码、打包,从8条lane上发出去。
关键点在于,桥接芯片内部的像素数据宽度和时钟域必须要能覆盖8-lane输出的带宽需求。我实测下来,IT6113在4-lane输入、8-lane输出时,内部是连续工作的流模式,不是先缓存整帧再送出去,所以延迟非常低,基本可以忽略,这对触摸交互类的屏很重要。如果内部是帧缓冲模式,延迟就会明显增加。
另外,输入和输出的视频时序可以不一样。也就是说,输入侧是主控给的某种timing,输出侧可以经过芯片内部的调整,以另一种timing发给面板。这个特性在实际项目里有大用,比如主控只能给60Hz的刷新率,但面板要的是75Hz的刷新率,芯片内部可以把视频流重新定时输出。
2.3 除了DSI转DSI,IT6113还支持哪些工作模式
IS6113这类桥接芯片通常不会只做一种转换。除了DSI进DSI出,还常见如下模式:
- DSI转DPI/RGB
- DSI转eDP
- DPI/RGB转DSI
- DSI转dual DSI
我项目里用的就是DSI转DSI,4-lane进8-lane出。但如果你手头的项目是MCU类主控只有RGB接口,又想接MIPI DSI面板,那同样可以考虑这颗芯片,它的输入端可以支持DPI/RGB,只是配置寄存器的方式会不同。
有一点要特别提醒:不是所有支持的模式都能同时开。比如某些桥接芯片在启用自刷新功能时会占用内部SRAM,而做格式转换时又需要另一部分逻辑资源。如果什么功能都想往上加,可能配置完发现某组寄存器读出来不符合预期,这时候最好回头对照规格书确认功能和资源互斥关系。
3. 上行输入4-lane与下行输出8-lane配置的几个硬指标
3.1 带宽和分辨率到底够不够用
做显示类项目,第一步不是画原理图,而是算带宽。带宽不够,后面一切都白搭。MIPI DSI的带宽估算公式不复杂,但对很多人来说容易忽略blanking开销。
一个大概的计算过程如下:
- 确定像素总数。比如4K分辨率,3840×2160 ≈ 8294400像素。
- 乘以刷新率。60Hz的话,每秒就是8294400×60 = 497664000像素。
- 乘以每像素bit数。RGB888是24bit,RGB666是18bit。
- 再加上blanking开销。实际传输的像素包含HFP、HBP、VFP、VBP,一般比有效像素多10%到20%。
如果按5%到10%的blanking算,4K@60Hz RGB888大概需要13到14Gbps的有效带宽。8条lane如果每条跑1.5Gbps,总带宽12Gbps,比较紧张;跑1.8Gbps才比较从容。所以IT6113方案里,输出侧lane速率设置很关键,必须对着面板规格把速率调到位。
输入侧4-lane按1.5Gbps算只有6Gbps,显然是撑不起4K@60的。那为什么还能做4K?因为输入侧源端主控可能本身输出分辨率不高,或者靠的是双DSI输入的组合。是的,有部分桥接芯片支持两组4-lane输入合并成8-lane输出,IT6113在一些细分型号规格里也有类似能力。这点要具体看手上芯片的型号和版本确认。
3.2 lane速率、clock lane和连续时钟模式
配置DSI链路时,要同时设置clock lane频率。clock lane频率不等于data lane速率,它一般是像素时钟相关的。你可以根据一帧的line总数和一行lane上的byte总数来推算需要的clock频率,但实际项目里更靠谱的做法是参考主控和面板的经验值,然后用示波器去量实际的HS clock频率是否在设定范围内。
还有一个容易忽略的点:DSI clock lane在传输过程中是否连续发送HS频率。有的桥接芯片支持continuous clock mode,有的只支持非连续模式。如果主控和桥接芯片之间这个模式没匹配好,可能画面闪、偶尔黑屏,甚至完全无显示。IT6113和主控之间我建议都用non-continuous clock mode试试,实测稳定。
4. 原理图设计和Layout里藏着的那些细节
4.1 供电、时钟和复位电路的连接建议
IT6113通常需要多路供电,常见的包括核心逻辑电压、IO电压、以及模拟PLL电压。我项目里用的就是1.2V核心、1.8V/2.8V MIPI IO和3.3V的周边电路。因为涉及多个电源域,上电顺序很重要。规格书里一般会给一个推荐的power sequence,大意是最先给核心电压,然后给模拟和IO电压,最后解除复位。
我自己踩过的坑就是一开始图省事,把核心和IO捆在同一路DC-DC上,结果芯片能初始化,但显示偶尔花屏。后来示波器量了才发现模拟电压纹波偏大。换成独立的LDO给模拟供电之后,同样配置的画面干净了很多。所以建议在原理图上就把模拟供电单独留一个LDO的位置,哪怕到时候不用,也好过画完PCB再飞线改板。
复位这块,建议直接接到主控GPIO,不要简单地用RC延时电路。因为有些主控希望在特定时序下释放复位,RC电路的时序和主控的启动时序不一定能对齐。接了GPIO之后,软件端可以按预定的delay顺序来操作,可控性高很多。
4.2 PCB Layout的等长和阻抗关注点
MIPI DSI走的是高速差分信号,布线的时候要特别注意以下几点:
- 每对差分线阻抗控制在100Ω,MIPI D-PHY标准也是按100Ω差分阻抗来设计的
- 组内等长,4-lane输入端的4对数据lane加1对时钟lane,相互之间的skew尽量控制在5mil以内
- 8-lane输出端的数据lane数量比较多,时钟lane要最后走,不要在中间被其他信号割断
- 尽量避免跨平面,如果非要跨,也要保证返回路径连续
我这边layout reviewer最常提的意见就是,"你的8条数据lane在里面穿来穿去,等长绕线把里面的地平面切了一刀"。这确实是个问题,因为MIPI的回归电流在参考平面上,如果参考平面被破坏了,信号质量直接下降。实际能做的就是规划好绕线区域,尽量保持一个完整的参考层,必要时加地过孔来缝合。
另外,I2C走线不要和MIPI并行太长,特别是I2C的SCL和SDA不要贴着DSI时钟lane走。我遇到过因为I2C信号耦合,导致初始化数据出错、屏幕亮不起来的诡异现象,后来把I2C沿线拉远、加大串阻才缓解。
5. 寄存器初始化与参数配置的完整步骤
5.1 第一步:确认芯片ID和基础通信
上电之后,不要急着写一堆配置,先读一下芯片的ID寄存器,确认I2C通信正常。我习惯在项目初期把这条读ID的代码放在开机日志里,这样量产时如果出现I2C异常,能第一时间定位是硬件问题还是软件配置问题。
读ID的示意代码:
#define IT6113_I2C_ADDR 0x50 int it6113_read_id(void) { uint8_t id[2] = {0}; i2c_write_read(IT6113_I2C_ADDR, 0x00, id, 2); // 假设0x00/0x01寄存器存放ID return (id[0] << 8) | id[1]; }不同型号桥接芯片的ID寄存器和地址不同,别直接抄我之前用的值,关键是这个方法。如果读不到ID,优先检查I2C上拉电阻、地址引脚电平、复位状态,以及供电是否正常。
5.2 第二步:复位和上电时序的操作顺序
我的软件初始化顺序是这样:
- 拉低复位引脚,保持至少10ms
- 确认各路供电正常,电压值在规格书范围内
- 拉高复位引脚,释放复位
- 延时20ms左右
- 通过I2C读ID,确认芯片已经就绪
- 开始按顺序写入配置寄存器
这里要特别注意步进时间不能太短。有的兄弟为了省时间,在复位释放后立刻进行I2C操作,结果芯片内部PLL还没锁定,怎么读写都不对。等个几十毫秒又不会死,没必要抢这个时间。
5.3 第三步:配置输入侧DSI参数
输入侧配置主要包括:
- DSI输入是4-lane,对应D-PHY RX的lane数设置
- 每条lane的速率,即HS clock频率与时序
- 像素格式是RGB888还是RGB666、RGB565
- 分辨率:水平有效像素、垂直有效像素
- 帧同步参数:HSYNC宽度、V旦SYNC宽度、前后肩、blanking大小
这一堆参数,看起来繁琐,其实核心信息都来自主控的DSI输出timing,可以直接去主控的显示驱动里抄。但有一个坑:主控Linux kernel里用的是struct drm_display_mode给的方式,驱动的DSI参数和IT6113寄存器里要求的格式不一样,单位也不同。比如有些寄存器是按byte为单位,有些是按lane时钟周期为单位,换算错了屏幕就不亮。
我的做法是自己写一个小脚本,把主控的像素时钟、lane数、分辨率换算成IT6113需要的寄存器值,然后一条条核对。脚本可以减少人工换算错误,但最终还是要实测验证。
5.4 第四步:配置输出侧8-lane DSI参数
输出侧配置和输入侧类似,但是lane数变成了8,像素时钟和lane速率必须按输出面板的要求设置。这里有一个值得注意的地方:输出侧的像素时钟不完全等于输入侧,如果你启用了内部refresh re-timing功能,输出时钟会由桥接芯片的内部PLL产生,支持输入输出不同帧率。
我当时配置8-lane输出时,开始直接照搬输入侧的timing,结果面板画面有横向条纹。后来查了输出侧PLL的配置,才发现需要单独设定输出像素时钟。改完之后,输出侧时序才真正对得上面板的VBLANK和HBLANK。
6. 实测调试中遇到的三类问题与排查链路
6.1 现象一:完全没有显示,I2C读ID正常
I2C能读到ID,说明芯片活着。没显示就要分两头查:是输入侧没有数据进芯片,还是输出侧没有信号出去。
排查过程是这样:
- 示波器量输入侧clock lane,确认有HS时钟
- 示波器量输出侧clock lane,确认有HS时钟
- 如果输入侧没有时钟,问题在主控,看主控DSI输出有没有使能
- 如果输入有、输出没有,问题在IT6113的配置,回头查输入输出分辨率是不是合法、PLL有没有lock
- 如果输入输出都有时钟,大概率是lane数据或视频timing配置不对
有一次我卡在"输入有、输出没有"的状态,最后发现是输入分辨率配置里的HSYNC宽度和我主控实际发下来的不一致。主控那边用了一个很奇怪的宽度值,而我配置寄存器时填了默认值。把实际值填进去之后,输出马上就出来了。所以别小看这个时序寄存器,每一项都要主控那边对齐。
6.2 现象二:画面偏移、花屏或噪点
这类问题,最常见的原因是输入或输出侧lane速率和像素时钟不匹配。数据速配不上,接收端就会解析出错误像素。
我调试时遇到过花屏,排查思路如下:
- 先确认花屏是固定的还是随机闪的
- 固定花屏,优先查寄存器配置,有没有把RGB888写成RGB666
- 随机花屏,优先查电源纹波和信号完整性,用示波器看HS信号眼图
- 输出侧8-lane中,如果某条lane数据线焊盘接触不良,也会造成固定区域花屏
有一个细节我记忆很深:一开始我把输入输出都设为1.8Gbps,花屏特别频繁。查了好久,最后发现面板实际只能支持1.5Gbps,超跑之后输出信号抖动过大,面板端的接收能力跟不上。把lane速率降到1.5Gbps,问题就消失了。也就是说,桥接芯片标称能跑到多少,和你面板实际能吃到多少是两码事,配置要以最弱的一环为准。
6.3 现象三:系统休眠唤醒后黑屏或闪屏
这种和上电时序、复位时序强相关。IT6113这类桥接芯片在主控休眠时,如果供电被切断了还好说,如果供电还在但主控的DSI时钟停了,芯片状态就不可控了。
排查步骤是这样的:
- 休眠时记录芯片供电状态,确认是持续供电还是被关断
- 如果是持续供电,看唤醒时是否需要重新初始化一次寄存器
- 如果唤醒后黑屏,试着重置复位引脚再初始化
我这边最终的做法是,把IT6113的复位引脚和主控的一个GPIO绑定,休眠时不断电,但保留复位拉低,唤醒时重新拉高复位再初始化。这样每次唤醒都能干净地恢复状态,没有再出现偶发黑屏。当然,如果系统允许,直接把芯片供电做成可控,休眠时断电、唤醒时上电,更省电也更稳妥。
7. 方案选型时刻:IT6113和软解/直连的其他思路对比
7.1 为什么要选桥接芯片而不是改主控
有的项目兄弟可能会说:"与其外挂一颗芯片,不如直接让主控用DSI multi-head包或者DSC压缩。"这话放在高端旗舰上没毛病,但普通项目里主控是否支持DSC、DSC后画质损失是否可接受,都是问题。DSC在固定码率压缩下确实能节省带宽,但它不是所有面板都支持,也不是所有SoC都给你开了这个驱动。
相比之下,用IT6113这类桥接是硬件层面的硬扩展。不需要主控额外支持某种压缩协议,也不依赖于面板端解压缩能力。只要主控能输出标准MIPI DSI,面板能接收标准MIPI DSI,这个芯片就能插在中间转一下。这是它在量产项目里最大的价值:通用、简单、可控。
7.2 IT6113和同类型桥接的横向考量
市面上类似的DSI转DSI桥接芯片不少,但IT6113在4-lane进8-lane出这个特定形态上,有它做得好的地方:
- 8-lane输出能力,适合高分辨率面板
- 输入和输出参数可以独立配置
- 支持自刷新模式,可以在静态界面省主控带宽
- I2C配置接口简单,开发门槛低
但也有要注意的:它毕竟是外挂芯片,原理图上多一颗IC、多一个I2C从设备、多一组供电。软件多一坨初始化代码,量产多一个物料和测试项,这些都是成本。如果项目的主控本来就干得动,那就不必为了炫技加芯片。选型的时候,实际算一下带宽,不要把桥接当作万能灵药。
我还试过另一种思路,就是用两颗IT6113各自带一根4-lane,分成双DSI接口接面板的dual-DSI输入,这其实也是可行方案。但带来的问题是双DSI扫描同步复杂,容易产生撕裂或白线,单颗芯片做8-lane统一输出在工程上更省心。如果你的面板支持dual DSI方式又要求成本极致,可以考虑,但我不建议轻易尝试。
8. 最后说说这套方案在实际量产中的注意点
讲到这里,IT6113这颗芯片的用法和调试逻辑基本已经落在一个能跑的框架里了。从我自己的项目经验来说,最想强调的一个点是:桥接方案的关键,不在于芯片本身有多神奇,而在于你有没有把输入输出两侧的参数用工程语言真正对齐。
所谓对齐,不只是分辨率、刷新率一样就够了。它包含像素格式、lane数、HS时钟频率、blanking参数、同步极性,甚至包括LP和HS模式切换的时序细节。这些参数换算错了任何一项,屏幕都可能不亮或者显示异常。而这部分,恰恰是芯片规格书里不会替你检查的,只能靠工程师自己对着主控和面板两边去核对。
还有一个建议:在生产测试阶段,一定把这个桥接芯片的初始化日志打出来。最好是能把配置好的关键寄存器都dump一遍,和标准值做比对。这样如果贴片出来的板子有显示问题,产线软件可以直接贴出寄存器比对表,是I2C短路了、供电没起来还是芯片本身虚焊,一眼就能分清楚。
IT613方案做下来,给我的整体感受是:4-lane转8-lane这套办法,在当前的显示接口生态里确实很实用,尤其是那些被主控接口数量卡住的项目。它不会像换主控那样伤筋动骨,也不会像压缩编码那样在画质上做妥协,本质上是用一颗芯片的物料成本,换来了整体链路带宽的宽松。
当然,每颗芯片都有自己的脾气,IT6113也不例外。像是电源质量敏感、输出PLL配置要求高这类问题,你多调两个项目自然就熟了。我现在再看到有人问"主控只有4-lane但面板要8-lane怎么办",一般就一句话回复:去看IT6113,先把输入输出timing搞对称,然后踏踏实实过一遍功耗、信号完整性和产线测试,这个方案就能站住。