MIPI LP TX:看似不起眼的低功耗发射机,却是MIPI链路稳定的关键
先讲个亲身经历。去年调试一块7寸MIPI屏上电之后背光亮了屏幕却是整片白怎么刷寄存器都没反应。我把逻辑分析仪挂在DSI数据线上一段时间内居然只看到Low电平没有任何高低跳变的LP状态。折腾到后面发现SoC侧MIPI TX的LP驱动压根就没被enable初始化命令根本没送出去。这件事让我意识到很多看起来像“高速信号问题”的故障根源其实都藏在MIPI最不起眼的LP TX这一层。MIPI协议搞嵌入式的人都不陌生尤其调试camera、LCD屏和FPGA桥接方案的时候天天都在跟它打交道。但大家习惯了把注意力放在HS高速数据传输上看差分幅值、测眼图、调终端电阻很少有人认真关注LP这条低功耗链路。实际上MIPI D-PHY的启动、复位、休眠、总线切换、甚至部分命令传输都依赖LP状态LP TX一旦出问题后面一切的HS传输都不可能正常。这篇文章不打算堆协议原文就按我实际调试的经验把MIPI LP TX的电气特性、状态机、PCB布局和常见故障一次说清楚。无论你是驱动工程师、硬件工程师还是做FPGA显示的应该都能从里面找到对得上号的东西。1. 先从一次屏不亮说起为什么LP TX检查总是排到最后1.1 那台设备的现象和排查过程当时是RK3588平台配一块ST7701S驱动的MIPI DSI屏现象很典型背光正常屏幕全白没有图像也没有Logo。按平时的习惯我第一反应是查MIPI屏的上电时序和复位时序。确认电源正常、复位引脚拉高之后又去翻设备树里DSI节点的lane数和时钟配置看起来也没问题。接着用示波器去点D0P/D0N测试点想确认有没有HS burst结果波形一直是平的。这时候才意识到可能不是HS信号没发出来而是更前面的LP驱动压根没有工作。用逻辑分析仪抓DSI时钟通道发现时钟线停在Low状态不是正常的LP-11空闲态。再查SoC的PHY寄存器发现LP_TX_EN这个关键位没有被置上导致PHY内部LP驱动器一直处于高阻输出总线上没有任何有效电平。这个案例后来只改了一行初始化代码就好但排查过程花了半天就是因为一开始把方向放在了HS高速链路上完全忽略了LP状态。1.2 LP TX在D-PHY里到底是什么角色MIPI D-PHY的物理层每条lane由一对差分线组成分别是Dp和Dn。PHY内部其实有两套完全独立的驱动器一套是HS高速差分驱动器专门负责像素数据的高速串行传输另一套就是LP低压驱动器负责低速状态控制。LP TX就是驱动Dp和Dn进入LP状态的发射端电路。它的输出不是差分信号而是两个单端信号两线分别输出0V或1.2V。通过这两根线电平的组合D-PHY对外表达出不同的总线状态比如LP-00、LP-01、LP-10、LP-11。主机和从机之间要做什么操作先通过拉什么状态、保持多长时间、然后切换成什么状态来说明。这套机制在MIPI DSI和CSI-2协议里是基础中的基础。协议栈上层的包传输、帧同步、命令读写最终都要落到PHY的HS/LP状态切换上。如果你只看协议文档里的包结构不看物理层的LP状态机调试的时候就会觉得很抽象。1.3 为什么LP TX比HS更隐蔽、更难定位HS信号一旦出问题现象通常非常明显花屏、条纹、图像噪点。而且HS有特定的差分特征、幅度和频率示波器一看就知道有没有数据。LP信号就麻烦得多。它的速率低电平范围大没有固定的差分形态。很多示波器探头直接点在MIPI测试点上看到的LP电压跳变幅度也就1V左右如果触发条件设置不对很容易误以为总线上没信号。更麻烦的是LP状态切换很多发生在初始化阶段在系统启动后的几毫秒内就完成了等到你接上示波器再看系统已经停在某个错误状态里。另外LP TX是否正常工作严重依赖PHY寄存器配置和SoC驱动对PHY的初始化顺序。稍微配错一个位LP驱动不使能或被错误地保持在高阻态总线就处于“悬空”状态。这种问题在原理图和PCB上完全看不出来只能靠状态机一层层去追。2. LP TX的电气层电平、摆率与四条状态线的含义2.1 输出电压和阈值别把1.2V当普通IOMIPI D-PHY的LP信号以1.2V为参考逻辑电平高电平一般贴着1.2V走低电平接近0V。它不是传统3.3V CMOS IO也不是1.8V LVCMOS你要真把它当普通GPIO去测量和判断会踩不少坑。接收端的LP阈值有明确要求通常V_IL典型值在0.5V上下V_IH大约在0.88V以上中间就是迟滞区间。也就是说对方接收器判定“1”不是看你有没有超过0.8V而是要超过0.88V才算可靠。如果LP TX驱动强度不足输出高电平只有0.8V左右示波器看着波形像高电平接收端却根本不认。我遇到过一种情况FPGA做了RGB转MIPI DSI的桥接MIPI输出端用的IO电压是1.8V然后直接通过电阻分压送到屏端。分压之后高电平大概0.9V实测眼图还算干净但屏就是不稳定十次有八次初始化失败。原因是分压网络会让LP输出阻抗变大摆率下降而且高电平余量太小在线缆噪声影响下经常掉进迟滞区。所以设计MIPI链路时LP电源和PHY的IO电压必须按照器件手册来能直接对接就直接对接不要想当然加电平转换。实在要做电平转换也得选带宽足够、带摆率控制的专用MIPI电平转换芯片普通双路MOSFET转换器在LP状态下都可能出问题。2.2 上升/下降时间和EMILP不是越快越好LP TX的驱动端通常带有摆率控制上升沿和下降沿的时间可以通过寄存器调整。一般PHY芯片会把LP边沿时间控制在几十纳秒量级并根据负载电容做适配。很多人觉得边沿越快越好逻辑电平越陡峭越稳定。但在MIPI的LP部分这个想法是错的。LP信号覆盖的是低频段但它的上升沿和下降沿含有丰富的高频分量边上越陡高频谐波越强对周围电路的辐射干扰就越大。这也是为什么很多MIPI板子在过EMC测试时发现问题不是出在HS数据上而是出在LP控制信号的边沿太陡。反过来边沿也不是越缓越好。如果LP TX驱动强度太弱上升沿会变得非常平缓可能超过接收端允许的最大上升时间导致对方在状态判断上产生歧义。举个例子总线从LP-11切换到LP-10要求Dp线和Dn线按照一定先后顺序变化如果两条线的边沿都拖得很长接收端可能先看到LP-01或LP-10的中间毛刺从而误判状态。实际调试时PHY寄存器里通常会有驱动强度配置项从弱到强分好几档。建议在确保信号完整性的前提下尽量选偏弱的那一档能过就行。这样EMI余量更大系统稳定性也更好。2.3 LP状态编码两线四个组合的含义LP状态由Dp和Dn两条线的电平共同组成一共四种组合分别记为LP-00、LP-01、LP-10、LP-11。1代表高电平0代表低电平。这四种状态不是随便定义的在D-PHY状态机里各有特定作用。最常用的是LP-11表示总线空闲也就是所谓Stop状态。HS数据传输开始前总线要从LP-11依次切换到其他状态最后进入HS模式传输结束后又会切回LP-11。很多驱动工程师刚开始看D-PHY状态机时容易被这套切换时序绕晕。我的建议是先把四种状态当成两个独立单端信号来看Dp和Dn。状态切换本质上就是这两根线在不同时间被拉高或拉低。你只要在逻辑分析仪上把两根线一起抓出来配合协议手册里的时序图就能把启动过程一步一步还原出来。2.4 HS和LP的核心区别项目LP模式HS模式信号形式单端信号差分信号电平幅度0V到1.2V共模约200mV差分摆幅约200mV传输速率极低主要用于控制可达Gbps级别功耗极低相对较高终端匹配无终端或高阻100欧差分终端主要用途状态控制、初始化和低速命令像素数据、高速传感器数据看到这个表格就明白LP TX存在的意义是省电。如果MIPI总线一直保持HS差分信号即使没有数据在传功耗也压不下来。而有LP状态后总线平时停在LP-11功耗几乎可以忽略。MIPI能在手机、IoT设备里大面积普及很大程度靠的就是这个设计。3. 协议栈里的LP TXBTA、LPDT、复位时序与ULPS3.1 BTA总线转向主机和从机角色互换的基石MIPI链路通常是主从结构SoC作为host发送数据camera sensor或LCD屏作为slave接收。但有些场景下slave需要主动向host发数据比如camera sensor要上报状态信息或者CSI-2链路上需要读回寄存器值。这时候单纯靠HS数据通道是做不到的因为HS方向通常是固定的。于是D-PHY定义了一次总线转向过程也就是BTA。BTA的过程完全由LP状态切换来完成。主机先把总线拉出一串特定状态的组合然后释放总线控制权让从机接管从机接着驱动总线把应答数据发回来。实际调试中如果camera sensor的I2C初始化读不到数据不要只查I2C控制器配置还要检查D-PHY的BTA时序和LP驱动能力。有些SoC的PHY在BTA过程中需要额外配置总线保持时间如果这个时间配得太短从机还没准备好接管总线就乱了读操作时序就会超时。3.2 LPDT低功耗数据传输一条不常走但很重要的路除了HSD-PHY还定义了一种在LP状态下传输数据的方式叫LPDT。它的速率很低大概只有1Mbps级别好处是功耗非常低而且不需要进入HS模式。LPDT常见的使用场景包括部分sensor的控制通道复用。比如有的摄像头模组只有MIPI CSI接口没有额外的I2C引脚那么SoC就可以通过D-PHY接口上的LPDT来读写sensor寄存器。这种情况下你表面上看到的是MIPI接口实际上底层跑的是I2C over LPDT。如果驱动初始化代码里把PHY配置成不支持LPDT或者LP状态机没有正确进入Escape模式那么对sensor寄存器的读写就会失败。这类问题很容易被认为是“CSI无信号”实际上链路层的LP命令压根就没送出去。排查时建议先用示波器抓LPDT期间的Dp/Dn波形确认是否有LP状态的跳变再去看上层的I2C报错。3.3 复位和关机序列LP-11是很多屏的“生命线”LCD模组初始化手册里复位时序之后通常会要求MIPI DSI发送端输出一个特定状态让屏端PHY先锁定到停止状态。这个停止状态就是LP-11。很多屏的驱动IC对上电后的第一个LP状态非常敏感。如果SoC上电后MIPI TX一直保持High-Z或者错误地输出LP-00屏端的PHY状态机会卡在错误位置上后续再发什么初始化命令都不响应。这一点在调试时特别容易误导人。有些工程师会看到HS数据已经正常发出来了但屏幕还是白屏就桩在DSI初始化命令上反复改。其实问题可能在最前面复位后那个LP-11没有正确建立。你只要用示波器抓一下从复位释放到第一个初始化命令之间的总线状态就能看到总线是否经历过LP-11。如果一上来就是其他状态先把这一环修好再谈后续配置。3.4 ULPS超低功耗状态休眠和唤醒时的坑ULPS是MIPI里专门为低功耗待机定义的状态。进入ULPS后MIPI lane上的LP驱动器会进入高阻态总线电压被拉低PHY进入极低功耗模式。很多IPC、电池设备在休眠时会启用ULPS。ULPS的坑在于唤醒时机。唤醒时需要重新经历一个完整的LP状态切换流程把PHY从ULPS中恢复出来。如果SoC的睡眠驱动没有正确等待ULPS退出完成或者唤醒后立即发送HS数据就会导致链路没有来得及同步。实际表现往往是设备从睡眠唤醒后显示屏花一下或者数据流中断需要重启才能恢复。碰到这种问题优先检查驱动中的唤醒序列是否有足够延时以及PHY是否暴露了ULPS状态寄存器。如果没有状态查询接口宁可在时序上多等几个毫秒也比抢跑省那几十微秒可靠。4. PCB设计避坑为什么LP TX不需要阻抗匹配却也不能随便画4.1 LP低功耗不等于低速率走线有讲究很多硬件工程师画MIPI差分对的时候都知道按100欧差分阻抗去控制。但到了LP信号大家就容易放松觉得反正频率低随便走一走没关系。LP信号的速率确实低但它的电平跳变包含的高频分量并不少尤其边沿较快的时候。Dp和Dn两根线在LP模式下是单端信号在HS模式下是差分对这两种模式共用物理走线。所以你在画板时不能只考虑HS差分的阻抗还要考虑这两根线在LP模式下各自参考地平面的完整性。LP走线太长或参考不完整会造成两条线的延迟差变大、噪声耦合不对称进而影响LP状态切换时的顺序。别小看这一点D-PHY状态机对Dp/Dn的相对变化顺序有要求如果一快一慢很容易产生多余的毛刺状态。实际操作中MIPI差分对从SoC到连接器的走线建议控制在几十毫米以内并且Dp/Dn两条线尽量等长。虽然协议里没有对LP走线长度给出硬性限制但实践经验告诉我超过100毫米的MIPI布线即使HS还能工作LP状态也容易变得不稳定。4.2 同层挖空看似优化信号实则掏空回路搜索MIPI调试经验时“同层挖空”这个词经常出现。一些工程师为了让MIPI差分对的阻抗达到目标值会把差分对下方的参考铜皮挖空通过改变参考平面距离来调整阻抗。但对LP TX来说挖空区域就等于切断了低阻抗回流路径。HS模式下电流回流主要通过差分对之间的耦合影响还小一些LP模式下是单端回流电流要沿着最近的参考地平面返回。如果参考平面被挖出一条长槽回流电流只能绕一个大圈子这个圈子的面积就成了一个环形天线既不抗干扰又容易对外辐射。我见过一个项目MIPI时钟线正下方挖空调整阻抗后屏幕在正常工作时出现横向噪点怎么调驱动都没用。后来把挖空区域收窄只保留HS关键路径下方局部挖空噪点立刻消失。这就是典型的“HS优化牺牲了LP参考面”的案例。所以画板时同层挖空不是不能用而是要有节制。最好只在连接器焊盘附近、过孔换层位置做局部处理不要在整段走线下方都挖空尤其不要让挖空区域切断LP回流路径。4.3 串扰LP TX和周边信号线的恩怨MIPI在PCB上经常和I2C、GPIO、电源走线混在一起。LP信号幅度有1.2V摆率又受控照理说不容易干扰别人。但反过来如果周边有开关电源或高速数字信号LP线反而容易变成被干扰的对象。最典型的情况是MIPI走线旁边平行走了一条I2C线。I2C信号虽然速率不高但边沿很陡经常没有匹配终端振铃很大耦合到MIPI的Dn/Dp线上后就可能让LP状态出现抖动。如果恰好发生在初始化阶段屏幕就会出现偶发不亮。建议在设计初期就把MIPI lane两侧各留出至少两倍线宽的间距不要跟其他信号贴太近。如果空间实在紧张可以在MIPI线旁边加一条地线做隔离效果比单纯拉开间距还好。5. 调试一盘棋无信号、横向花屏和MIPI CSI输入的完整排查5.1 无信号时先从LP状态开始所谓“无信号”在不同场景下含义不一样。有的是MIPI DSI屏完全没显示有的是CSI-2摄像头采集不到数据还有的是FPGA收到了数据但解析不对。但不管哪一种都有一个通用的排查起点先确认MIPI总线上有没有正确的LP状态。用逻辑分析仪抓MIPI lane时把采样率调高一点触发器设置成上升沿。上电后先看总线是否进入LP-11稳定状态再往后看初始化过程里是否有多个LP状态切换。如果从复位释放到初始化命令发送之间总线一直是同一个电平那多半LP状态机没有跑起来问题在SoC或FPGA的PHY配置而不是上层协议。如果LP状态正常再继续看HS burst是否存在。HS信号在逻辑分析仪上表现为一段快速翻转的差分波形很容易和LP区分开。这样一层层剥下去就能把问题定位到LP、HS还是协议层。5.2 横向花屏为什么和LP TX有关横向花屏一般被认为跟HS数据传输质量有关比如时钟不够、差分对等长不好、终端不匹配。但我实际遇到过一种横向花屏原因却是LP驱动的释放时序有问题。具体现象是屏幕的大部分区域显示正常但在特定行位置出现横向条纹而且条纹位置会随屏幕内容变化。排查下来发现每次HS数据传输结束后总线需要从HS退出并回到LP-11如果LP TX在这个切换过程中释放得不够干净就会在下一行数据开始前残留一个异常瞬态导致屏幕解出错误数据。这种情况在调试时只抓HS波形看不到问题因为瞬态出现在HS之后的LP区间里。必须把示波器时基拉长同时看HS和LP两个阶段才能捕捉到总线退出HS时的异常毛刺。确认后调整PHY中HS转向LP的延迟参数花屏就会消失。5.3 RK3588的MIPI CSI输入别被1080i这类信号绕晕RK3588支持多路MIPI CSI-2输入不少项目会用它来接各种摄像头模组。但我发现有很多人在接老式隔行信号源时容易踩坑比如搜索里常见的“RK3588 mipi 输入1080i信号”。CSI-2是个包传输协议帧同步靠的是包头的frame start和包尾的frame end而不是像传统模拟视频那样靠行场同步。1080i是隔行视频它的两场信号在时间轴上是交替的如果camera模块直接把这种信号封装成CSI-2包接收端需要做去隔行处理。但很多RK3588的采集驱动默认按逐行处理这就会导致图像上下两场错位、出现横纹。这类问题不属于LP TX故障但排查时很容易和LP状态混淆。建议先确认camera模组输出的CSI-2包结构看帧头是否按正确节奏出现。如果帧头节奏正常说明LP和HS状态都没问题接下来才需要去协议层做隔行处理适配。顺带说一句处理MIPI CSI输入时还要关注camera模组的LPDT和I2C配置是否正常。很多模组需要通过I2C写入初始化序列I2C通不通直接决定了CSI链路能不能进入工作状态。5.4 ST7701S这类LCD驱动IC的实战验证ST7701S是一颗很常见的MIPI DSI TFT驱动IC很多国产屏都在用。它的初始化命令通过DSI接口发送命令类型分为DCS和Generic发送时可以选择LP或HS模式。在调试ST7701S屏时我建议把初始化命令固定在LP模式下发送不要图省事用HS。因为LP模式下命令时序更直观逻辑分析仪也更容易抓到而且LP受链路质量影响小能排除很多变量。等屏基本正常显示后再根据实际功耗需求把命令发送切到HS模式。我遇到过一块ST7701S屏用HS发初始化命令时偶发白屏改成LP发送后连续跑了几天都没问题。后来查PHY配置发现HS模式下命令发送的前导时序不满足IC要求。这就是典型的“初始化路径和显示路径需要分开验证”的场景。6. FPGA/SoC实现者视角LP TX最容易翻车的地方6.1 状态机不能只搭HSLP的等待时间同样关键用FPGA做MIPI桥接或MIPI接口扩展的项目越来越多比如“RGB to MIPI DSI”或者“FPGA实现MIPI CSI接收”。大家一开始都会把精力放在高速串行器和并串转换上毕竟那是技术含量最高的部分。但仿真跑通了上板子就翻车很多就翻在LP状态机的等待时间上。D-PHY协议对每个LP状态的持续时间有明确要求比如进入HS前的T_LPX、T_HS_PREPARE、T_HS_ZERO退出HS后的T_HS_TRAIL等。这些时间参数不是固定值而是一个范围需要根据实际总线负载、PHY电气参数去套用。FPGA实现时如果只是按仿真里拍脑袋定的延迟去写状态机不同PCB上表现可能完全不同。我给一个比较保守的建议LP状态机里的各个计时参数尽量通过SoC或外部寄存器动态配置不要写死在RTL里。这样在调试时不用重新综合整个工程改了寄存器就能适配不同的屏和camera模组。这个习惯帮我省了大量的编译时间。6.2 S参数和信号完整性别只盯着HS现在做高速接口仿真的人习惯看S参数MIPI也不例外。C-PHY的S参数分析、D-PHY的差分插损回损都是信号完整性工程师的常见工作。但在FPGA实现MIPI的场景里很多人只做HS链路的S参数验证把LP路径完全忽略掉。其实LP路径的S参数同样重要。LP是单端信号你要分别看Dp对地和Dn对地的回损以及两根线之间的串扰。很多时候HS仿真指标完全OK但LP的回流路径被破坏了导致LP状态机不稳定最终HS数据也传不出去。板级仿真时建议把LP模式下的单端TDR也纳入检查范围不要只测差分阻抗。6.3 基于个人经验的一条实用建议最后分享一个我自己的习惯。每次上电调试MIPI链路我第一件事不是去测高速波形而是用逻辑分析仪抓从复位释放到第一次HS burst之间的整个LP过程。把这段波形保存下来和协议手册里的时序图做逐段对比。一旦LP过程完整正确后面就算遇到HS问题定位范围也能缩小很多。这套方法说不上高深但确实帮我解决过不少疑难杂症。MIPI LP TX看起来只是物理层一个不起眼的发射机实际上它撑起了整个MIPI链路的状态管理和功耗控制地位一点都不比HS差分传输低。希望这篇经验对正在调MIPI的朋友有所帮助少走几个我已经踩过的坑。