1. 先搞清楚 LP TX 是什么:MIPI 里被忽视的“另一半”
1.1 一条 MIPI lane 其实是两条“性格完全不同的电路”
很多人一听到 MIPI,第一反应就是“高速差分串行总线”,脑子里全是示波器上那种 200mV 的小摆幅、几百 MHz 以上的跳变沿。这个印象没错,但只对了一半。MIPI D-PHY 的一条 lane(比如 DSI 的数据 lane、时钟 lane,或者 CSI-2 的数据 lane)从电气上分两种工作模式:HS(High Speed,高速)和 LP(Low 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 状态 | Dp | Dn | 典型用途 |
|---|---|---|---|
| LP-00 | 0 | 0 | HS 进入前的准备段、EoT 结束段 |
| LP-01 | 0 | 1 | HS 进入前的 Prepare 段、BTA 请求 |
| LP-10 | 1 | 0 | HS 退出后的 Exit 段 |
| LP-11 | 1 | 1 | 空闲/Stop 状态,链路保持待机 |
重点是:LP-11 是默认的“停”状态,整条链路空闲时,Dp 和 Dn 都应该稳定在 1.2V。所以你用示波器去量一块正常工作的 MIPI 屏,不传数据的时候大概率看到两根线都挂在 1.2V,只有每次要传数据时才会看到电平被打下来、在几个状态之间跳变,最后再回到 LP-11。如果示波器上看到的总是 0V 或者一直乱跳,那链路根本没进入正常的空闲态。
从驱动的角度看,LP TX 的每条线上其实有独立的“上拉管”和“下拉管”,能分别实现三种输出:拉高到 1.2V、拉低到 0V、以及高阻释放。这个高阻态非常关键,它让链路两侧的设备可以“交接”lane 的控制权。比如 CSI-2 摄像头做寄存器回读时,SoC 先把线让出来,传感器的 LP TX 再把线拉起来回数据——这就是 BTA(Bus 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-11(Stop)→ LP-01(Prepare)→ LP-00(Zero)→ HS 数据突发 → LP-00(Trail)→ LP-10(Exit)→ LP-11(Stop)左边是时钟 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 Mode:ST7701S 这类 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 Mode,lane 上开始出现规律的 HS 突发,画面才真正亮起来。所以如果你在示波器上只看到 LP 翻转、始终没有 HS,说明初始化阶段就卡住了,大概率不是屏幕“不支持”,而是面板状态机没走到“可以收 HS 数据”的那一步。常见原因包括:复位时序不对、供应电压顺序不对、lane 数配置不对(比如面板是 2 lane,SoC 配成了 4 lane),以及你手上那份 init code 的 LCD_ID 校验没过。
2.3 CSI-2 的 BTA:LP 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 规范里有几个著名参数:LPX(LP 传输周期)最小值通常在 50ns 级别;HS-Prepare 从 40ns 量级起算,还要加上若干个 HS 的 bit 周期;HS-Exit 通常要 100ns 量级。不过具体数值每个 SoC 的 D-PHY IP 和面板接收端要求都不一样,调试时不要死记数字,而是看“状态保持时间是否足够让对端稳定识别”。如果屏幕偶尔能亮、偶尔不亮,或者某一边初始化失败,先把这些过渡段的时间拉长一倍试试,往往就能定位到是谁时间不够。
3.3 一次正常的 DSI 启动波形长什么样
我用自己的经验给你描述一遍正常画面。上电后先看到 lane 上两根线浮在 1.2V(LP-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 硬核的 SoC | RK3588、全志、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 是否存在 |
| 有背光但屏幕一直黑,初始化后无 HS | SoC 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 这玩意,越是看似玄学的问题,越要从电平、时序、回流这些最基本的物理上去找答案。