ARTICLE DETAIL

资讯详情

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

MIPI HS TX深度解析:从电气参数到FPGA调试实战

MIPI HS TX深度解析:从电气参数到FPGA调试实战 搞过MIPI屏调试的朋友应该都有这种经历板子回来上电代码烧进去屏幕死活没反应示波器怼上去却又不知道抓哪里好不容易有波形了屏幕又横向花屏或者颜色不对。这些问题里十有八九根子都出在MIPI HS TX这条链路上。我自己在FPGA和嵌入式平台上折腾MIPI也好几年了从D-PHY到C-PHY从屏幕驱动到摄像头采集踩过不少坑今天就把HS TX这块的底细讲清楚。这篇东西适合三种人看一是正在用FPGA驱动MIPI屏但没信号的二是在SoC上调试CSI/DSI接口遇到花屏和时序问题的三是做硬件设计、想知道MIPI同层挖空和VCC供电怎么处理的。如果你是新手哪怕暂时看不懂电气细节把概念过一遍也很有帮助。1. MIPI HS TX到底是什么它处在链路中的哪个位置1.1 高速发送器要解决的核心问题MIPIMobile Industry Processor Interface是一套为移动设备制定的接口标准其中物理层最常见的是D-PHY后来又有C-PHY。无论是D-PHY还是C-PHY工作模式都分成两种低功耗LP模式和高速HS模式。HS TX的全称是High-Speed Transmitter也就是高速发送器它负责把像素数据、摄像头数据或者控制指令以差分高速信号的形式从发送端送到接收端。为什么要单独设计一套HS模式根本原因是数据量。以一块1080P、60Hz的屏幕为例RGB888格式总带宽需求大概是1920×1080×3×60算下来超过1.5Gbps再加上消隐区开销RGB接口或者传统并口根本扛不住。MIPI D-PHY一条lane的理论速率可以做到2.5Gbps以上几条lane并起来带宽完全够用。但高速信号不能像普通GPIO那样直接推挽输出它需要恒定的阻抗、受控的摆幅和精确的时序这正是HS TX身上要解决的。1.2 HS TX在协议栈里的位置我们可以把MIPI链路简单分成三层应用层、协议层和物理层。应用层处理像素格式、帧率协议层负责打包成packet比如CSI-2协议的short packet和long packet物理层就是PHY其中D-PHY的TX端由HS-TX、LP-TX和高速接收器HS-RX组成。一个典型的发送链路是主控或者FPGA内部的协议模块把像素数据组包然后交给PHY层的并转串模块最后通过HS TX驱动差分对输出。屏幕那一端是MIPI RX也就是接收器的HS-RX和LP-RX。我们平时说“MIPI屏调试没信号”多数时候指的是TX这端压根没把正确的差分波形送出去。HS TX不是简单地输出方波。它要把单端信号转成差分对带预加重或者压摆率控制还要支持LP和HS自动切换。整个PHY层的工作状态机和并转串逻辑数据能不能正常出去全看TX设计得合不合理。对于FPGA实现MIPI的场景比如Xilinx Vivado、紫光同创这类平台通常有两条路一条是用芯片自带的硬核PHY另一条是用普通逻辑加外部电平转换芯片搭软核PHY。硬核方案稳定但可配置性有限软核方案灵活但要自己搞定阻抗匹配和时序。后面章节我会详细展开这两种做法的取舍。2. HS TX关键电气参数与信号完整性基础2.1 电压摆幅、终端电阻与共模电压D-PHY的HS模式是低压差分信号一对线上的差分摆幅通常在200mV左右。具体来说HS-TX驱动器的输出高电平和低电平由VCC供电决定发0时一对线分别接近低电平和高电平发1时反过来差分电压幅度Delta大概在140mV到300mV之间。接收端的标准终端是两个50Ω电阻到共模点也就是100Ω差分阻抗。这和我们熟悉的LVDS很像但要注意MIPI的HS-RX终端不是一直在线的。接收器会根据LP状态决定要不要把终端电阻接通这在测试时要特别留意示波器探头直接怼上去如果接收端没有proper端接测出来的摆幅会偏大波形反射也严重。关于C-PHY它的电气特性和D-PHY差别很大。C-PHY用的是三条线组成一组lane通过三线之间的三种电平状态组合来编码没有独立时钟线数据率按symbol来算。C-PHY的S参数设计和D-PHY也不同它对线间耦合更敏感测试时要用三端口网络分析仪看S参数。现在很多旗舰屏幕和摄像头模组是C-PHY接口FPGA这边如果只支持D-PHY需要转接芯片才能适配。2.2 压摆率、上升时间和眼图HS TX的压摆率直接决定电磁辐射和信号质量。D-PHY标准规定HS模式下信号上升时间和下降时间通常要在0.15个UI到0.3个UI之间UI就是单位间隔也就是一个比特的时间。比如1Gbps速率下UI是1ns上升时间大概在150ps到300ps。压摆率太快振铃明显过冲甚至可能损伤接收端太慢眼睛图闭合接收端采样误码。很多MIPI驱动芯片内部提供了压摆率配置寄存器比如ST7701S这类显示驱动IC它的PHY配置寄存器里就有关于驱动强度和压摆率的选项。如果你发现信号很干净但接收端就是误码可以试着调整TX端的驱动强度而不是一味加大电压。注意FPGA软核实现MIPI TX时常见误区是把IOBUF的输出强度设成最大值。LVCMOS和LVDS输出级不是一回事MIPI的差分摆幅和阻抗要求都需要专门驱动电路不能靠普通GPIO硬顶。眼图是所有高速信号的最终评价指标。MIPI HS TX的眼图至少要看差分电压幅度、交叉点电压、眼宽和眼高。交叉点通常要求接近共模电压过冲限制在几百毫伏以内。如果手头没有高速示波器也可以用差分探头加采样模式观察但探头带宽至少要达到信号速率的1.5倍以上否则测出来的眼图完全不可信。2.3 HS/LP切换时序与总线状态D-PHY的链路状态不是只有0和1它还包括LP-00、LP-01、LP-10、LP-11的组合状态。HS传输前要先进入LP-11状态再经过一段LP-11到HS的切换过程包括准备时间T_HS_PREPARE和起始码。发送端必须按照协议状态机准确控制这条切换序列否则接收端压根不认这是HS数据屏幕就会表现为“没信号”。TX端的HS/LP切换时序由PHY内部状态机控制但协议侧的组包逻辑要负责在帧间隙发送LP状态帧首部发short packet像素数据发long packet。很多FPGA软核方案在LP切换上偷工减料导致屏幕初始化能过但显示花屏这种问题非常隐蔽。3. 核心设计与实现方案FPGA完整跑通MIPI HS TX3.1 方案选型硬核PHY、GT高速收发器、软核并行LVDS想用FPGA输出MIPI HS信号先摸清器件资源。Xilinx 7系列和Ultrascale的HP bank拥有硬核MIPI D-PHY支持但完整D-PHY物理层一般在专用Zynq UltraScale里才带普通Artix/Kintex只能另想办法。办法之一是使用GTX/GTH高速收发器。GTX本质是CML接口可以配置成多种协议模式MIPI D-PHY信号幅度、电压共模和GTX不太一样一般需要加外部电平转换芯片或者用AC耦合电容配合匹配网络。好处是速率高单lane能跑好几Gbps坏处是延时和功耗偏大而且GTX不是所有封装都支持。办法之二是用软核方案也就是在普通IO上外接MIPI PHY芯片。比如TI的SN65DSI83、东芝的TC358870这类桥接芯片内部集成了完整的D-PHY PHYFPGA只需要输出并行RGB或者LVDS信号桥接芯片负责组包和MIPI发送。这样做最省事但增加了BOM成本和板面积。第三种做法是FPGA内置的硬核MIPI PHY配合协议核。紫光同创部分FPGA有MIPI硬核Xilinx也提供了MIPI CSI/DSI IP核需要在Vivado里配置lane数、速率、像素格式等参数。硬核方案时序好S参数表现也稳但一旦配置错排查起来不比软核轻松。3.2 供电设计VCC、DVDD与负载电容的关系刚开始调MIPI时我最容易忽略的就是供电。MIPI PHY的TX驱动器需要独立电源D-PHY的HS TX供电通常叫VCC或者D3V3但实际驱动电压可能只有1.2V到1.8V。屏幕模组那端的I/O供电比如DVDD必须和TX端的共模电压匹配。我在一块板子上遇到过这样的问题用示波器测量MIPI lane电压发现差分波形摆幅正常但共模电压始终不对接收端就是锁不住。后来查原理图发现TX驱动器的VCC被接到了3.3V但屏幕RX端内部端接的共模参考只有1.2V。解决办法是把TX端的VCC调整到和RX端一致或者串接AC耦合电容。要记住MIPI D-PHY的HS信号直接在两端电源不匹配的情况下可能无法传输AC耦合在很多产品中其实是标配。画原理图时把MIPI TX VCC的滤波电容放在靠近PHY引脚的同一层回流路径要短。VCC的压降在100mV以内比较安全。负载电容也要留意每个lane的总电容包括封装、ESD和走线电容一般控制在几pF接反了极性或者电容过大TX驱动输出会被拉垮。3.3 PCB布局为什么会出现“MIPI同层挖空”搜索热词里“MIPI同层挖空”值得单独说一说。高速差分线在PCB设计时需要在参考平面完整的情况下保持一致的阻抗。如果某个区域比如差分对下方有地平面挖空阻抗会突然升高信号反射随之而来。我见过有人为了隔离芯片引脚电源直接把MIPI差分信号下方的铜皮挖掉一块结果眼图质量明显下降。正确的做法是差分线要走完整的参考平面同层挖空只用于特殊射频结构MIPI这种自带返回电流的信号必须保证参考平面连续。换层时也不要随意打孔每对差分线的过孔要成对放置最好加共面地孔。这些细节调试阶段很难量化但S参数扫描一下差距立现。4. 实操过程从FPGA代码到点亮ST7701S MIPI屏4.1 初始化序列与寄存器配置ST7701S是常见的小尺寸MIPI DSI屏驱动IC支持D-PHY接口。点亮它的第一步不是发像素而是通过LP模式发送初始化命令。这些命令包括关闭显示、设置伽马、设置分辨率、设置像素格式等等。主控通过TX端发送DCS命令短包屏幕通过RX端接收并执行。完成初始化后进入HS模式发送像素数据。FPGA驱动的典型代码流程是PLL生成像素时钟时序控制器产生hsync、vsync、de信号组包模块把这些同步信号封装成short packet把像素数据封装成long packet然后进入PHY层。下面是一个简化的组包时序计数器思路用Verilog写大致长这样// MIPI DSI packet generator core idea always (posedge lane_clk) begin if (frame_active) begin if (line_active) begin send_short_packet(VSYNC_START); send_blanks(horizontal_back_porch); send_long_packet(pixel_data, line_pixels); send_blanks(horizontal_front_porch); end end end真正工程化时要处理ECC和CRC校验。MIPI DSI的short packet带ECC字节long packet带16位CRC。组包模块如果漏了CRC大多数屏仍能工作但某些严格要求校验的时序会出现偶发花屏。ST7701S对时序容忍度算高的换成其他模组就不一定了。4.2 时钟频率与lane速率计算配置MIPI TX之前必须算清楚比特率。以1080P RGB888、60Hz为例总像素时钟 1920 × 1080 × 60 ≈ 124.4MHz 考虑消隐区开销实际像素时钟大约在148.5MHz到150MHz之间。 带宽 像素时钟 × 24bit ≈ 3.56Gbps。 如果用4条lane每条lane速率约890Mbps。这里的“mipi屏调试横向花屏”往往就出在线速率算错上。如果lane速率低于需求帧数据传不完接收端就会显示错乱。如果速率过高信号压摆率跟不上同样出问题。Vivado里配置MIPI DSI IP核时有一个关键参数叫“Clock Rate”需要填写lane速率。很多初学者把像素时钟当成lane时钟填进去结果速率差了4倍屏幕自然没信号或者只能显示上半部分。4.3 平台实操Vivado与紫光同创的MIPI调试Xilinx平台用Vivado的MIPI DSI TX IP需要注意HP bank的IO电压和参考电压VREF。MIPI PHY的IDELAY和ODELAY链路要正确计算否则输出时序偏移很大。我建议第一次上板时用ILA观测PHY层状态信号比如hs_settle、lp_tx_active、byteclk等。紫光同创FPGA驱动MIPI的做法类似但它有自己的一套MIPI PHY硬核和PDS软件。上手路径是先跑Demo工程观察它的PHY配置寄存器。紫光平台的MIPI PHY硬核对LP切换序列做了封装出问题反而更难排查所以最好把状态机的关键信号都用逻辑分析仪拉出来看。调试经验是先把速率降为原来的四分之一比如设置lane速率250Mbps用简单的纯色测试画面跑通再逐步提速到目标值。这一步能快速排除协议组包和PHY配置的大问题。5. 常见问题与排查技巧实录5.1 “MIPI屏调试没信号”的五大根因没信号是MIPI调试里遇到最多的现象。我归纳了五个检查方向按照排查顺序排列如下电源检查TX VCC、屏幕AVDD、DVDD是否上电顺序对不对。MIPI屏通常对电源顺序要求严格先IO后核心还是先核心后IO不同IC不一样。复位MIPI模组的复位引脚不要通过FPGA GPIO直接拉高要用RC延时或者专用复位控制复位时间不够屏幕状态机不响应初始化命令。时钟确认FPGA输出的byte clock和lane clock是否稳定PLL是否锁定。用示波器量一下PHY参考时钟很多“没信号”其实是时钟没起振。LP状态示波器用差分探头测数据线先看静态时有没有LP-11电平。如果两条线一直保持低电平或者高电平说明PHY的LP TX输出有问题根本没有进入待机状态后续HS序列也发不出去。方向确认屏的MIPI接口是否要求TX方向有的嵌入式板子用的是MIPI RX接口接摄像头代码却配置成DSI输出电平仲裁完全对不上。 提示把“mipi屏调试没信号”当成一个状态机问题来看。先问“我现在处在哪个状态”再问“下一个状态需要什么条件”。肉眼找波形不如直接抓状态信号。 ### 5.2 “MIPI液晶屏横向花屏”到底是谁的锅 横向花屏通常表现为图像错位一行显示正确、下一行偏到左边或者一块一块的颜色错乱。这个现象大概率不是电气信号问题而是时序和组包问题 - 行消隐参数不对。MIPI DSI在水平消隐区里要插入多个blank包如果blank包长度不够接收端缓冲区被撑爆显示就错位。 - 分辨率配置不一致。ST7701S初始化命令里设置的面板分辨率和FPGA实际发送的以像素包长度不一致屏幕按自己的配置取数据自然花屏。 - 像素格式错了。FPGA发送RGB888但屏配置成RGB666或者反过来数据错位一格就会让人感觉像“花屏”。 - lane分配错误。MIPI多lane是有顺序的lane0对应第一个数据包的一部分。FPGA侧组包时如果调用反转了lane顺序数据交叉错位画面表现也是花屏。 横向花屏的排查我建议先用纯色画面。如果纯红色正常、绿色偏蓝那就是像素格式或颜色映射问题如果画面像被“搅乱”的纹理重点检查lane顺序和组包长度。 ### 5.3 关于RK3588等SoC平台的特殊问题 RK3588这类SoC自带多个MIPI接口支持CSI输入和DSI输出。有人在RK3588上用MIPI输入1080i隔行信号这是很特殊的需求。默认MIPI CSI是逐行传输的1080i需要做去隔行处理否则采集到的图像会有梳状条纹。SoC侧MIPI RX的FIFO配置也要留意1080i隔行信号时间上不连续容易出现FIFO下溢建议把fifo深度调大或者在协议层用缓冲帧的方式处理。 SoC平台和FPGA相比调试工具更丰富但底层状态不易看到很多寄存器都在vendor BSP里封装好了。遇到TX方向问题先核对设备树里的lane映射和时钟频率确认用的是MIPI_TX端口还是MIPI_RX端口。很多“没信号”其实是设备树配错引脚功能复用成了I2C或者GPIO。 ### 5.4 示波器、逻辑分析仪和寄存器轮询超时 调试MIPI HS TX的硬件工具优先级高带宽示波器加差分探头排在第一位其次是逻辑分析仪抓协议包最后是协议分析仪。S参数测量一般到SI仿真阶段才用得上C-PHY调试才会特别依赖三端口S参数。 如果示波器带宽不够就去测LP状态的静态电平和HS burst的包络虽然看不到眼图也能确认有没有HS数据在传。逻辑分析仪采样率至少要是信号速率的4倍以上否则协议解码会出错。 一些平台上的调试还会遇到寄存器轮询超时问题比如类似“ptp4l timed out while polling for tx timestamp”的报错。虽然那是时间同步协议的报错但核心思想一致在轮询某个硬件状态位时要设置超时避免死等。在MIPI PHY调试里初始化寄存器写入后如果轮询busy位超时就应该复位PHY重新执行序列而不是一直等下去。 ## 6. 最后分享一点实际测试中的经验 回到MIPI HS TX本身有时候不是因为哪个单独模块坏了而是TX驱动能力和负载不匹配。我做过一组对比实验同一块屏三块不同的板子一样的主控初始化代码由于TX端VCC供电走线不同一块显示正常一块轻微噪点另一块完全黑屏。把TX VCC的电容从0.1uF换到1uF并靠近引脚之后第三块板恢复正常。这给我留下了很深的印象所以硬件布线时我总会把MIPI TX的电源当作RF电路来对待而不是简单当作数字电源。 另外MIPI D-PHY的TX端如果不用AC耦合两端共模电压必须严格一致。这个坑在显示驱动芯片上不常见但一旦遇到现象就是信号有波形但屏幕不亮非常容易误判成软件问题。可以直接用万用表测量TX和RX端的共模电压如果相差超过几十毫伏就优先考虑加AC耦合电容或者调整TX端偏置电阻。 后续你可以这样扩展如果做的不是屏幕而是摄像头把TX换成RX很多排查逻辑依然成立只是数据方向反过来组包逻辑从DSI换成了CSI-2。再往后就是多lane同步问题、C-PHY三线传输的调试、以及MIPI over长距离线缆的均衡设计这些都比单纯点亮一块屏更有挑战性但也更有意思。先把HS TX这层的电气特性和状态机吃透后面这些就都是水到渠成的事。
返回列表