
1. 先搞清楚 LP TX 是什么MIPI 里被忽视的“另一半”1.1 一条 MIPI lane 其实是两条“性格完全不同的电路”很多人一听到 MIPI第一反应就是“高速差分串行总线”脑子里全是示波器上那种 200mV 的小摆幅、几百 MHz 以上的跳变沿。这个印象没错但只对了一半。MIPI D-PHY 的一条 lane比如 DSI 的数据 lane、时钟 lane或者 CSI-2 的数据 lane从电气上分两种工作模式HSHigh Speed高速和 LPLow Power低功耗而且这两种模式不是互相替代的关系而是交替出现、互相配合的关系。本文标题里的MIPI LP TX指的就是低功耗模式下那条发送链路它在 Dp/Dn 这对线上负责把低速的 0/1 电平“打”出去。LP 模式下的线还不是我们熟悉的那种差分信号。差分是 HS 的事LP 模式把 Dp 和 Dn 当作两根完全独立的单端线来用高电平约 1.2V低电平约 0V两线可以分别是 00、01、10、11 四种组合。也就是说一根 lane 在 LP 下实际上被当成两根 GPIO 用只是这两根线必须遵循 D-PHY 的状态机和时序规范。很多第一次调 MIPI 屏的人会在示波器上看到一串 1.2V 的小方波以为是自己接线接错了其实那恰恰就是 LP 信号——它正常得不能再正常。LP TX 的核心价值很简单负责“能不能开始传数据”这件事。HS 相当于在高速公路上跑车LP 就是上高速之前的收费站、匝道和路况信号。车跑不起来先别怪发动机先看看匝道上的灯是不是亮的。1.2 四个 LP 状态LP-00 到 LP-11 是谁拉高、谁拉低D-PHY 规范里lane 的 LP 状态用两位数字表示第一位是 Dp 线第二位是 Dn 线1 表示 1.2V 高电平0 表示 0V 低电平LP 状态DpDn典型用途LP-0000HS 进入前的准备段、EoT 结束段LP-0101HS 进入前的 Prepare 段、BTA 请求LP-1010HS 退出后的 Exit 段LP-1111空闲/Stop 状态链路保持待机重点是LP-11 是默认的“停”状态整条链路空闲时Dp 和 Dn 都应该稳定在 1.2V。所以你用示波器去量一块正常工作的 MIPI 屏不传数据的时候大概率看到两根线都挂在 1.2V只有每次要传数据时才会看到电平被打下来、在几个状态之间跳变最后再回到 LP-11。如果示波器上看到的总是 0V 或者一直乱跳那链路根本没进入正常的空闲态。从驱动的角度看LP TX 的每条线上其实有独立的“上拉管”和“下拉管”能分别实现三种输出拉高到 1.2V、拉低到 0V、以及高阻释放。这个高阻态非常关键它让链路两侧的设备可以“交接”lane 的控制权。比如 CSI-2 摄像头做寄存器回读时SoC 先把线让出来传感器的 LP TX 再把线拉起来回数据——这就是 BTABus Turn-Around的基础。1.3 HS TX 和 LP TX同一个 lane两种完全不同的驱动电路HS 和 LP 的差别远不止电压幅度。HS 是真正的高速差分驱动典型差分摆幅 200mV 左右共模电压大约 200mV一对线里一根高、一根低靠差分接收器去判别 0/1而 LP 是低速单端驱动直接以 0V/1.2V 的相对地电平来判别状态。这两套驱动电路在物理上是分开的D-PHY 收发器内部会有独立的 HS 驱动级和 LP 驱动级由状态机控制切换。切换的瞬间必须先经过特定的 LP 状态序列绝对不允许直接从 LP 跳到 HS这是时序规范里写死的事。为什么非要搞这么复杂直接全用 HS 不行吗技术上能跑但功耗受不了。LP 模式的设计目标就是待机时几乎不耗电1.2V 的上拉可以在链路空闲时把功耗压到极低而 HS 虽然电压低但它需要持续翻转、需要终端匹配待机时一直跑 HS 对便携设备的电池来说完全是灾难。明白这一点你就能理解为什么 LP TX 的时序、电平和状态机在 MIPI 调试里和 HS 一样值得认真对待。2. 为什么需要 LP TX没有它HS 连门都进不去2.1 HS 进出场靠 LP 铺垫一条完整的状态迁移链我见过不少工程师调试 MIPI 屏时上来就盯 HS 波形结果 HS 波形从头到尾就没出现过。原因很简单接收端没识别到合法的 LP 状态迁移根本不给你进 HS 的机会。下面这条状态链是 D-PHY 里最常见的一段LP-11Stop→ LP-01Prepare→ LP-00Zero→ HS 数据突发 → LP-00Trail→ LP-10Exit→ LP-11Stop左边是时钟 lane 和数据 lane 都会走的路径。链路空闲在 LP-11要发 HS 数据前发送端先把 Dp 拉低、Dn 保持高形成 LP-01持续一个“HS-Prepare”时间再把两根线都拉低进入 LP-00持续一个“HS-Zero”时间之后才真正切到 HS 驱动在两线上输出 200mV 级别的差分信号。HS 发完之后也不能直接熄火要先回到 LP-00 维持一个“HS-Trail”时间再打成 LP-10 维持“HS-Exit”时间最后回到 LP-11 才算完整收场。用大白话说进入 HS 之前要“先举手示意、再蹲下准备、最后起跑”退出 HS 时要“先减速、再换姿势、最后停下”。这些准备段和收尾段全是 LP TX 的活。示波器上如果把时间轴拉宽你会看到每个 HS 突发前后都有 1.2V 电平的“前摇”和“后摇”那就是 LP TX 在工作。如果前摇不存在、或者状态顺序不对接收端的状态机立刻判错丢包、花屏、链路重训练都是这么来的。2.2 DSI Command ModeST7701S 这类 MIPI 屏的初始化指令怎么发出去调 ST7701S 这类 DSI 屏的人手里通常都有一份厂商给的初始化代码一长串寄存器写入什么 PLL 配置、Gamma、分辨率、时序参数全在里面。很多人以为这份代码是通过 SPI 或者 I2C 写进屏幕的其实不对。对于 DSI 接口的 ST7701S初始化指令走的是 DSI 协议本身——SoC 的 DSI 控制器把寄存器写命令封装成 DSI 短包再通过 MIPI lane 发过去。这个过程既可以用 HS 突发来发也可以用 LP 模式来发而 LP 模式下那套低速传输机制常称为 LPDT / Escape Mode就是把 1.2V 的 LP 电平按特定规则编码成 0/1 数据流速率被刻意限制在很低的水平省电、抗干扰也方便状态机处理。实际点屏时你会观察到一种典型节奏上电、拉复位、释放复位之后lane 上先是持续一段 LP-11 空闲然后出现一串比较慢的 LP 电平翻转——那通常就是 SoC 在往面板里灌初始化命令初始化完成之后SoC 才会切换到 Video Modelane 上开始出现规律的 HS 突发画面才真正亮起来。所以如果你在示波器上只看到 LP 翻转、始终没有 HS说明初始化阶段就卡住了大概率不是屏幕“不支持”而是面板状态机没走到“可以收 HS 数据”的那一步。常见原因包括复位时序不对、供应电压顺序不对、lane 数配置不对比如面板是 2 laneSoC 配成了 4 lane以及你手上那份 init code 的 LCD_ID 校验没过。2.3 CSI-2 的 BTALP TX 不只是 SoC 的专利再举个例子MIPI CSI-2 摄像头的寄存器回读。摄像头传感器通常是 slave初始化和读寄存器都要靠 SoC 发命令但 sensor 要回数据就得把数据 lane 的控制权暂时拿过来。协议里用 BTA 机制实现SoC 先发一个特殊的 LP 状态序列请求换向然后把自己的 LP TX 释放成高阻sensor 检测到请求后把自己的 LP TX 接管 lane回送应答或数据结束后再交换回去。整个过程里两边的 LP TX 都要能准确完成“拉高、拉低、高阻”三种动作。这解释了一个常见的调试误区用逻辑分析仪去钩 CSI-2 lane 时如果只按 HS 来解码很多时候什么都解不出来因为命令阶段本来就是 LP。正确的做法是先用示波器确认 lane 上有完整的 LP 状态迁移和 BTA 序列确认链路建起来了再谈 HS 解码。链路层握手都不通后面全是空谈。3. 用示波器实测 LP TX波形、电平、时序一次说清3.1 探头和触发别再拿长接地线去钩 1.2V 方波测 LP TX 其实比测 HS 宽容得多它毕竟只是 1.2V 的单端信号不需要差分探头也能看。但正因为电平“看起来像普通数字信号”很多人就随手拿一根普通探头接上长接地线去量结果看到一堆振铃和毛刺还以为是 LP TX 本身有问题。实际上那是地线电感引起的共模噪声。正确做法是探头用短接地弹簧尽量让探头尖端和接地弹簧直接落在 Dp 或 Dn 的测试点上把回路面积压到最小。仪器方面带宽 500MHz 起步采样率至少 2.5GSa/s这种配置在大多数实验室都算“低配”量 LP 完全够用如果你还要顺便看 HS 眼图那就得上 1GHz 带宽加差分探头了。触发建议设成 Dp 的上升沿或者 Dn 的下降沿因为正常链路里 LP-10 → LP-11 这种跳变很典型抓到之后再看前后的状态序列。如果你要观察整条初始化流程触发后加一个几十微秒到几百微秒的 holdoff避免被 HS 突发里的高频翻转反复触发。3.2 该盯哪几个参数电平、LPX、Prepare、Exit波形抓到了接下来要会读。我一般按优先级盯这几件事第一LP 高电平必须接近 1.2V。D-PHY 接收端对 LP 的判别是有阈值的高电平低于 1.1V 甚至掉到 0.9V接收端可能直接把“1”判成“0”或者进入不确定区。电平偏低最常见的两个原因一是那一路的上拉参考电压本身不是 1.2V二是线路上串了太大的电阻或者 FPC 太长压降把电平拖低了。第二LP-11 空闲态是否稳定。正常情况两根线都挂在 1.2V 附近隐约能看到一点幅度很小的共模噪声或纹波这是正常的。如果 LP-11 期间出现掉毛刺、周期性塌陷常见的怀疑对象是电源纹波和地弹尤其是背光 LED 的开关噪声窜进了 MIPI 的参考地。第三关键时序数字。D-PHY 规范里有几个著名参数LPXLP 传输周期最小值通常在 50ns 级别HS-Prepare 从 40ns 量级起算还要加上若干个 HS 的 bit 周期HS-Exit 通常要 100ns 量级。不过具体数值每个 SoC 的 D-PHY IP 和面板接收端要求都不一样调试时不要死记数字而是看“状态保持时间是否足够让对端稳定识别”。如果屏幕偶尔能亮、偶尔不亮或者某一边初始化失败先把这些过渡段的时间拉长一倍试试往往就能定位到是谁时间不够。3.3 一次正常的 DSI 启动波形长什么样我用自己的经验给你描述一遍正常画面。上电后先看到 lane 上两根线浮在 1.2VLP-11持续几十到几百毫秒不等取决于 SoC 固件里设置的等待时间复位释放后开始出现低速的 LP 翻转一段一段的每段之间又回到 LP-11这是初始化命令在传命令传完lane 上会出现明显的规律性变化——每帧图像由一组组 HS 突发构成HS 突发期间两条线从 1.2V 掉到 200mV 共模附近、以很小的差分摆幅高速翻转突发结束后又能看到电平拉回 1.2V 的 LP 段。整个画面就是一个“LP-11 大平台上HS 小突起规律排列”的样子。如果在命令行阶段看到 LP 翻转但始终没有 HS 突发链路根本没进入视频模式去查 panel 驱动和时序适配。如果连初始化前的 LP-11 都见不到优先查电源、复位、FPC 连接而不是一头扎进代码里改配置。总线信号是硬件状态的最诚实反映先让它说话再动软件。4. FPGA 或 MCU 想自己发 LP TX别踩电平这个坑4.1 为什么 FPGA 的 LVCMOS 输出不能直接当 LP TX经常有人问我 FPGA 速度够能不能直接把 LVCMOS 引脚接 MIPI 屏的点这个问题每次看到我都捏把汗。MIPI 的 LP 高电平是 1.2V而 FPGA 的 LVCMOS 输出常见是 1.8V 或 3.3V直接把 3.3V 灌进 D-PHY 接收端轻则判错逻辑电平重则打坏面板的 DPHY 输入级。1.8V 虽然稍微接近 1.2V但也远超接收端的 VIH 设计而且 FPGA 的 IO 驱动能力和输出阻抗跟 D-PHY 的 LP 驱动器完全不一样根本做不出规范要求的上拉特性。裸 FPGA 要完整实现 D-PHY 的 LP TX最大的障碍不是逻辑而是物理层你需要 1.2V 参考电压的驱动级、需要高阻释放能力、需要和 HS 驱动切换的状态机级联。这些在普通 FPGA IO 上都不存在。所以结论很明确Xilinx 也好紫光同创也好国产 FPGA 也好想用普通器件直接点 MIPI 屏都需要外部 PHY 或桥接芯片来做电平适配。FPGA 适合干的活是图像处理、时序生成、控制逻辑而不是去硬怼 D-PHY 电平。4.2 靠谱的三条路线桥接、PHY 芯片、带 MIPI 硬核的 SoC如果你非要在 FPGA 平台上点 MIPI DSI 屏目前主流靠谱的方案就三类方案典型器件方向适用场景说明并行 RGB / LVDS 转 MIPI DSI 桥接龙迅、联阳等厂商的 RGB→MIPI DSI 桥片FPGA 出 RGB 信号点 DSI 屏桥片内部自带 D-PHY TX 和 LP 状态机FPGA 不用碰电平专用 MIPI D-PHY 收发/串化器TI、瑞奇达及各厂商的 D-PHY 桥接 PHY 或 serializer需要把并行数据转成标准 DSI/CSI 时序注意区分方向TX 和 RX 芯片不能混用带 MIPI 硬核的 SoCRK3588、全志、Zynq MPSoC 等量产产品、软件生态成熟硬核内部已经处理 HS/LP 切换开发者专注驱动和调试我的个人建议是如果是做产品优先选带 MIPI 硬核的 SoC如果只是 FPGA 验证算法或点屏直接买一块现成的 RGB→MIPI DSI 转接板或桥接芯片评估板比你自己在 FPGA 里调状态机省一个月的工时。你自己在 FPGA 里写并转串、写 HS 驱动也许可行但 LP 状态机那一堆边沿时序、跟 HS 的切换配合绝对是坑中之坑不值得在项目里冒险。4.3 极简自制的想法只适合实验室里验证“面板活着”我也见过有人试图用“电阻分压 开漏/三态缓冲”去拼一个假 MIPI。思路是用 1.8V 逻辑经过电阻分压变成 1.2V再想办法让线能拉高拉低释放。听上去似乎可行实际做出来你会发现几个硬伤一是驱动能力完全不对带不动 D-PHY 接收端的等效负载二是切换沿的斜率不受控时序上做到规范要求几乎不可能三是 D-PHY 接收端的输入电容和 ESD 结构对源端阻抗很敏感你那个“土炮”驱动级根本匹配不上。结果十有八九是屏幕毫无反应你还分不清是面板坏了还是信号不行。更务实的实验室验证方法是先确认面板有没有 I2C/SPI 配置接口。很多 DSI 模组同时引出 I2C 引脚用于读取面板 ID 或做背光控制如果存在就先单独给面板供电、通过 I2C 读 ID能读到 ID 说明面板本身活着问题只差在 DSI 链路读不到 ID 就先解决 FPC、供电、复位这类基础问题。这比去折腾假 MIPI 高效得多。5. 实战排查MIPI 屏“没信号”“花屏”时怎么从 LP TX 入手5.1 “没信号”的排查顺序先别急着改代码MIPI 屏调试没信号是最常见也最容易让人血压升高的问题。我的排查顺序固定如下电压域 → 复位 → 时钟 lane LP-11 → 数据 lane LP-11 → 命令回包 → HS。每一步都有明确的操作和观察点第一步量供电。面板需要的 VCI/VDD、VDDIO、背光 LED_ANODE 都要在规定范围且上电顺序要符合面板手册。ST7701S 这类屏对 VCI、VDDIO 的上电顺序和复位时序比较敏感顺序错了面板内部 LDO 起不来后面什么信号都白搭。第二步量复位。RESX 释放后要有足够时延给内部电路稳定。第三步用示波器看时钟 lane 的 Dp/Dn 是否出现 LP-11双线 1.2V如果时钟 lane 连 LP-11 都没有要么是面板没被“使能”要么是 lane 根本没接对。第四步看数据 lane 和时钟 lane 一样应该有 LP-11 挂住。第五步看初始化命令阶段有没有 LP 翻转没有就查 SoC DSI 控制器是否真的使能了dts 或寄存器配置是否被加载。最后一步等 HS 突发出现确认进入 video mode。这里多说一句很多“没信号”最终还是 FPC 排线虚焊、座子氧化、线序接反这类低级问题。LP 信号才 1.2V、电流又小排线稍微氧化或者接触阻抗变大电平就会被拖得一塌糊涂。所以一上来先拿放大镜看 FPC 和连接器永远不算浪费时间。5.2 花屏、横纹与 LP 时序的关系花屏分好几种每种背后的信号问题不一样。如果是整个屏幕雪花、乱码一片多半是链路层的同步都没有建立常见原因包括 lane 数配置错误、数据 lane 映射错误、极性反了这时候回到 LP 状态检查先确认 lane 上状态机有没有正常走到 HS如果 HS 突发本身不稳再查终端电阻和走线阻抗。如果是横向条纹或者画面上半部分正常、下半部分花这通常是行时序配置的问题比如 HBP/HFP 配错、panel 的 porch 参数跟 SoC 侧不一致。很多人想不到这跟 LP 有什么关系其实有关系DSI 视频模式分 burst mode 和 non-burst mode在 non-burst 模式下每一行的空白期要走 LP 状态如果 LP 空闲时间太短、或者空白期的 LP 状态被驱动得毛毛躁躁panel 的行同步就会失锁表现出来就是横向撕裂、错位。所以调横纹时除了改 porch也建议用示波器量一下高负载时的 LP 空白段是不是有异常毛刺。还有一个特别容易被忽略的问题长 FPC 走线会在 LP 和 HS 切换瞬间产生反射表现为状态转换沿附近的振铃。这种振铃在 HS 阶段可能只是眼图变差但出现在 LP 的判别窗口里就会让接收端误判成 Escape 命令。我处理过一个案子屏幕偶发跳来跳去最后定位到是 FPC 上一段过窄的走线阻抗偏高把 LP 沿搞出多余回勾。剪短排线、加大线宽、或者在临近连接器的地方加几十欧姆的串阻压振铃问题就没了。5.3 排查速查表现象、优先查什么、往哪个方向解决现象优先排查解决方向完全没有信号、无背光供电、FPC、复位先确认面板和背光供电正常再看 lane 的 LP-11 是否存在有背光但屏幕一直黑初始化后无 HSSoC DSI 配置、init code查 lane 数、数据类型、时序参数是否匹配面板手册整屏雪花/乱码lane 映射、极性、链路稳定性确认 Dp/Dn 极性和 lane 顺序检查 HS 差分幅度和终端电阻横向条纹或部分花屏porch 参数、burst/non-burst 模式对比面板规格书调整 HBP/HFP/VBP/VFP检查 LP 空白段间歇性花屏、偶发黑屏FPC 接触、LP 振铃、电源纹波检查排线、串阻退振铃、背光噪声串扰这张表不保证覆盖所有案子但按照这个顺序走至少能把 80% 的 DSI 屏问题从“玄学”变成“能查”。6. 画板时关于 LP 的几条经验回流、挖空与阻抗6.1 100Ω 差分阻抗和完整地平面LP 也靠同一对线画板时很多人把精力全放在 HS 的 100Ω 差分阻抗和长度匹配上这当然没错可 LP 信号虽然在电气上是“单端”它的回流路径一样依赖这对线和参考地平面。D-PHY 规范里 lane 的 HS 是差分 100Ω 目标阻抗LP 虽然是 0V/1.2V 单端但和 HS 共用同一对物理走线、同样的参考平面条件所以 LP 的性能同样受阻抗连续性影响。换句话说HS 走线要求什么LP 阶段也逃不掉底层要有完整参考地走线要按叠层计算线宽线距换层时要成对打地过孔避免跨分割。我见过一些板子为了“抗干扰”对 MIPI 差分对下方的地平面动手脚结果串扰反而更严重、眼图更差。原因很简单LP 和 HS 的回流电流都需要紧贴走线的连续地平面你把地掏掉一块回流路径变长、电感变大噪声和振铃全来了。所以对 D-PHY 来说保护参考地完整是最高优先级。6.2 “同层挖空”到底什么时候才该做搜索热词里有“mipi 同层挖空”我得专门说一下。同层挖空在射频天线和某些高速连接器设计中确实会出现作用通常是调整阻抗、降低对周围敏感电路的耦合或者给天线留净空。但把它套用到 D-PHY 的差分走线上大部分场景都是坑。除非你的叠层设计里 MIPI 走线旁边的同层铜皮离得太近、把差分阻抗拉偏了否则我不建议主动挖空。正确做法是按叠层算好 100Ω 差分阻抗让旁边的铜皮、过孔、走线都离 MIPI 对足够远然后保持参考平面完整。如果你把“挖空”理解为“在 MIPI 对下面的地层掏洞”那更不该做这等于亲手切断回流路径。6.3 MIPI、LVDS、DVP 怎么选接口选择与调试成本的权衡同样做屏或摄像头的接口FPGA 时代大家喜欢 LVDS因为它没有 LP纯差分、电平好解决FPGA 的 LVDS IO 可以直接驱动调试也直观缺点是引脚效率不如 MIPI高分辨率下走线更多。DVP 则更古老并行数据 PCLK/VSYNC/HSYNC逻辑上最“笨”、最好调但高速率下 EMI 和信号完整性就是灾难摄像头数据线上乱七八糟的谐波很难压。MIPI 在最前端复杂HS/LP 状态机、电平适配、时序规范都多但在高分辨率、低功耗、少引脚方面优势明显所以现在手机、平板、车载屏几乎一边倒向 MIPI。我的建议很简单做产品选型时如果平台自带 MIPI 硬核就放心用 MIPI如果平台是普通 FPGA 且屏的分辨率不高LVDS 可能让你省掉一个桥接芯片DVP 除非是超低成本的单片机方案否则新项目尽量别碰。接口的复杂度和后期调试成本是成正比的你要买的不是“能响”的接口而是“好修”的接口。最后再分享两点我自己的实操心得。第一调试 MIPI 屏示波器探头的地线一定要用短弹簧别用原装长地线否则你看到的 LP 波形全是假的振铃非常误导人。第二遇到难缠的花屏问题先怀疑 FPC 和连接器再用软件手段去调时序软件里改参数成本最低但要先让硬件信号“干净”了软件才有意义。MIPI 这玩意越是看似玄学的问题越要从电平、时序、回流这些最基本的物理上去找答案。