MIPI 信号这东西,第一次拿示波器去量的人,十个里有八个会被屏幕上那团密密麻麻的波形劝退。尤其是从 DDR 时钟切到行同步这一段,波形一会儿是高速差分对,一会儿又变成低速单端脉冲,中间还夹着 LP 和 HS 的模式切换,探头没选对、触发没设好,看到的全是毛刺和振铃,根本没法判断链路到底通没通。这篇就把 MIPI DSI 从时钟到行同步的整条波形链路拆开讲,重点放在怎么用示波器把每一段波形量准、量对,以及量出来之后怎么判断它是不是正常。不管你是做屏厂调试、驱动开发,还是 FPGA 侧接 MIPI 的硬件工程师,这套拆解思路都能直接拿去用。
1. 先搞清楚 MIPI DSI 物理层到底在传什么
很多人一上来就抓波形,结果连自己抓的是哪一层都没分清。MIPI DSI 的物理层叫 D-PHY,它最特殊的地方在于:同一对差分线上,既要跑高速数据,又要跑低速控制信号。这就决定了你看到的波形不是单一形态,而是分层的。
1.1 高速模式和低功耗模式的本质区别
D-PHY 有两条工作通道状态:HS(High Speed)和 LP(Low Power)。HS 模式下,差分对工作在 80Mbps 到几 Gbps 的速率,差分摆幅很小,典型只有 200mV 左右,共模电平也低。LP 模式下,两条线各自独立工作,变成单端信号,电平是 0V 和 1.2V 这个量级,速率通常只有 10Mbps 以下。
这个区别直接决定了你示波器的设置。量 HS 的时候,你得用差分探头或者至少两个单端探头做数学运算,带宽要够,采样率要够。量 LP 的时候,普通单端探头就够了,但触发方式完全不同。我见过太多人用同一个探头设置去抓整段波形,结果 HS 段糊成一团,LP 段又触发不上。
提示:D-PHY 的 LP 模式不是"低速版 HS",它是完全不同的电气规范。LP 用单端,HS 用差分,两者之间靠 LP-11、LP-01、LP-00 这样的时序序列来切换。
1.2 时钟通道和数据通道的分工
MIPI DSI 通常有一个时钟 lane 和一到四个数据 lane。时钟 lane 在 HS 模式下是一个连续的差分时钟,频率等于数据速率的一半(DDR 方式,双边沿采样)。数据 lane 在 HS 模式下传的是串行比特流,在 LP 模式下传的是控制序列。
这里有个容易搞混的点:时钟 lane 也有 LP 和 HS 两种状态。在进入 HS 传输之前,时钟 lane 要先从 LP 切换到 HS,这个切换过程本身就是一个重要的观测点。如果你发现时钟 lane 一直停在 LP 状态,那数据 lane 根本不可能进入 HS,整条链路就是死的。
1.3 为什么"从 DDR 时钟到行同步"是一条完整的观测链
DDR 时钟是链路最底层的节拍源,行同步是上层协议里可见的帧结构标志。从时钟到行同步,实际上是从物理层一路看到协议层。你只有先把时钟量准了,才能确认数据 lane 的采样窗口;只有数据 lane 的 HS 传输正常了,才能在协议层解出行同步。这条链路是层层依赖的,跳过任何一层去直接看行同步,都是空中楼阁。
2. 示波器抓 MIPI 波形前的硬件准备
波形抓不准,八成不是示波器的问题,而是探头和连接方式的问题。MIPI 的 HS 信号速率高、摆幅小,对测量系统的要求比普通数字信号苛刻得多。
2.1 探头选型:差分探头和单端探头的适用场景
量 HS 差分信号,首选高带宽差分探头。差分探头能直接给出差分电压,共模抑制好,看到的波形干净。如果没有差分探头,可以用两个单端探头分别接 P 和 N,然后在示波器里做 CH1-CH2 的数学运算。但这种方式有个致命问题:两个探头的延迟必须严格匹配,否则高频成分会被抵消掉,波形严重失真。
我实测下来,两个单端探头做差分的方案,在 500Mbps 以下还能凑合看,再往上就明显不可靠了。所以如果预算允许,差分探头是必须的。量 LP 信号就简单了,普通无源探头接 P 线或 N 线都行,因为 LP 是单端信号。
| 测量对象 | 推荐探头 | 带宽要求 | 备注 |
|---|---|---|---|
| HS 差分信号 | 高带宽差分探头 | ≥ 信号速率 2 倍 | 共模抑制比要高 |
| HS 差分信号(替代方案) | 两个单端探头做数学运算 | 同上 | 延迟需匹配 |
| LP 单端信号 | 无源探头 | ≥ 100MHz | 普通探头即可 |
| 时钟 lane | 差分探头 | ≥ 时钟频率 2 倍 | 注意占空比测量 |
2.2 焊接测试点的注意事项
MIPI 的走线通常很短,测试点不好找。常见的做法是在 FPC 排线或者 PCB 的测试焊盘上焊接细同轴线。这里有几个坑:
第一,焊接引线要尽量短。引线一长,就相当于给信号加了一个电感,高频成分直接被吃掉,你看到的上升沿会变缓,振铃会加重。我一般把同轴线的地线剥得很短,直接焊在最近的接地点上。
第二,不要用鳄鱼夹接地。鳄鱼夹的地线环路面积太大,会引入大量噪声,HS 信号本来就小,噪声一盖就什么都看不清了。必须用弹簧地针或者焊接短地线。
第三,测试点要选在链路中间,不要选在发送端或接收端的最末端。末端往往有反射,波形不代表链路真实状态。
2.3 示波器带宽和采样率的计算
这是个硬指标,不能拍脑袋。按照经验,示波器带宽至少要是信号最高频率成分的 2 倍,采样率至少要是信号速率的 4 倍以上。
举个例子,假设你的 MIPI 数据速率是 1Gbps,DDR 时钟就是 500MHz。时钟的基频是 500MHz,但方波含有丰富的高次谐波,要看清上升沿,带宽至少要到 1.5GHz 到 2GHz。采样率方面,1Gbps 的信号,采样率至少要 4GSa/s,最好 8GSa/s 以上。
如果带宽不够会怎样?上升沿会被严重平滑,你测出来的上升时间偏大,眼图会闭合,但实际上链路可能是好的。这就是典型的"测量系统拖累了被测信号"。
注意:带宽不足时,你看到的"信号质量问题"很可能是假象。在判断链路故障之前,先确认测量系统本身够不够格。
3. DDR 时钟波形的拆解与判读
时钟 lane 是整个 MIPI 链路的基准,时钟不对,后面全白搭。这一段重点讲怎么把时钟波形量准,以及从波形上能读出哪些信息。
3.1 时钟 lane 从 LP 到 HS 的切换过程
时钟 lane 进入 HS 之前,要先经历 LP-11 → LP-01 → LP-00 的序列,然后进入 HS-0 状态,开始发送差分时钟。这个切换过程在波形上非常明显:你会看到信号从单端的 1.2V 电平,突然变成小幅度的差分振荡。
抓这个切换过程,触发方式很关键。我一般用 LP 段的下降沿做触发,然后调整时基,把整个切换过程展开。切换时间通常在几十纳秒量级,时基设到 20ns/div 左右比较合适。
切换过程里有个关键指标叫 T_LPX,是 LP 状态之间的最小持续时间。如果这个时间太短,接收端可能来不及识别状态,链路就会握手失败。示波器上直接量两个 LP 状态之间的时间间隔就行。
3.2 HS 时钟的频率、占空比和抖动测量
进入 HS 后,时钟是一个连续的差分方波。要测三个东西:频率、占空比、抖动。
频率测量比较直接,用示波器的频率计功能,或者手动量一个完整周期的时间。DDR 时钟的频率应该是数据速率的一半,如果你测出来对不上,先检查是不是探头接错了 lane。
占空比这个指标容易被忽略,但它很重要。D-PHY 规范要求 HS 时钟的占空比在 45% 到 55% 之间。占空比偏差太大会压缩某一侧的采样窗口,导致误码。测量时要用示波器的占空比统计功能,看一段时间内的平均值和波动范围。
抖动分两种:随机抖动和确定性抖动。随机抖动看 RMS 值,确定性抖动看峰峰值。对于 MIPI 这种高速链路,时钟抖动直接决定了眼图的水平张开度。我一般会打开示波器的抖动分析功能,看 TIE(时间间隔误差)的直方图。
3.3 时钟波形异常时的排查顺序
如果时钟波形看起来不对,按这个顺序排查:
- 先确认探头连接是否正确,P 和 N 有没有接反。接反了波形会倒相,但频率还是对的,容易骗过人。
- 检查 HS 进入条件是否满足。如果 LP 序列不完整,时钟可能根本没进 HS。
- 看差分摆幅是否在规范范围内。太小可能是驱动能力不足,太大可能是终端匹配有问题。
- 检查是否有反射。反射表现为波形上的台阶或振铃,通常是阻抗不连续引起的。
- 最后才怀疑发送端芯片本身。
这个顺序的逻辑是:从测量系统到链路条件,再到芯片,由外向内排查,避免一上来就换芯片,浪费时间。
4. 数据 lane 的 HS 传输与眼图分析
时钟量准了,接下来看数据 lane。数据 lane 的 HS 传输是真正承载像素数据的地方,它的质量直接决定画面有没有噪点、有没有花屏。
4.1 数据 lane 进入 HS 的握手序列
数据 lane 进入 HS 的序列比时钟 lane 更复杂,因为它要先发送 SoT(Start of Transmission)序列。这个序列是 LP-11 → LP-01 → LP-00 → HS-0 → HS-Sync,其中 HS-Sync 是一个固定的同步码。
在波形上,你会看到数据 lane 从 LP 单端状态,经过一系列跳变,然后进入 HS 差分传输。SoT 序列的时间参数有明确规定,比如 T_HS-SETTLE 是进入 HS 后到第一个同步码之间的稳定时间。这个时间不够,接收端可能采到错误的同步码。
抓 SoT 序列,我一般用 LP-00 到 HS 的跳变做触发。时基要设得比较小,因为整个 SoT 序列只有几十纳秒。
4.2 眼图测试的搭建方法
眼图是判断 HS 信号质量最直观的工具。搭建眼图需要示波器支持时钟恢复或者外部时钟输入。MIPI 的时钟是独立 lane,所以可以直接把时钟 lane 的信号作为眼图触发的时钟源。
具体步骤:把数据 lane 接到一个通道,时钟 lane 接到另一个通道,示波器设置为用时钟通道触发,然后开启眼图模式,累积足够多的 UI(单位间隔)。累积数量一般要上万才能看出统计规律。
眼图要看几个指标:眼高、眼宽、抖动。眼高反映的是电压裕量,眼宽反映的是时间裕量。如果眼图闭合,说明信号质量差,可能是驱动太弱、走线太长、或者终端匹配不对。
提示:眼图测试时,示波器的采样率要足够高,否则眼图会被"平滑"掉,看起来比实际好。这是个常见的自欺欺人的坑。
4.3 从眼图判断链路健康度的经验阈值
规范里对眼图有明确的模板要求,但实际调试中,我一般用这套经验阈值快速判断:
- 眼高大于差分摆幅的 60%,基本健康。
- 眼宽大于 0.7 UI,基本健康。
- 抖动 RMS 小于 0.05 UI,基本健康。
如果低于这些值,就要进一步分析是发送端、信道还是接收端的问题。发送端问题通常是驱动能力或预加重设置;信道问题通常是损耗或反射;接收端问题通常是均衡设置。
5. 行同步信号在协议层的定位与波形对应
前面讲的都是物理层,行同步是协议层的东西。但协议层的信号最终也要落到物理层的波形上,所以这一节讲怎么把两者对应起来。
5.1 行同步在 DSI 协议包中的位置
DSI 协议里,行同步对应的是 HSS(Horizontal Sync Start)和 HSE(Horizontal Sync End)这两个短包。它们夹在行有效数据之间,标志着一行的开始和结束。在波形上,这些短包也是以 HS 传输的形式出现的,只是数据内容不同。
要抓到行同步对应的波形,你需要先让链路跑起来,然后触发在 HSS 包上。触发条件可以设成特定的数据模式,或者用协议解码功能直接触发在 HSS 上。
5.2 用协议解码功能把波形翻译成包
现代示波器大多支持 DSI 协议解码。开启解码后,示波器会自动把 HS 传输的比特流翻译成包,你就能在波形上直接看到 HSS、HSE、RGB 数据这些标记。
这个功能极大降低了调试难度。没有解码的时候,你得手动去数比特、对同步码,非常痛苦。有了解码,你一眼就能看出哪一段是行同步,哪一段是有效数据。
但解码功能也有坑:如果物理层信号质量太差,解码会出错,显示出来的包是乱的。所以解码之前,先确保眼图是开的。
5.3 行同步异常与画面现象的对应关系
行同步出问题,画面上会有明显表现。我整理了一张对应表:
| 波形现象 | 可能原因 | 画面表现 |
|---|---|---|
| HSS 包丢失 | 链路误码 | 画面撕裂或滚动 |
| HSS 周期不稳 | 时钟抖动大 | 画面抖动 |
| HSS 与 HSE 间隔异常 | 行时序配置错误 | 画面偏移或压缩 |
| 行同步包解码错误 | 物理层信号差 | 花屏或噪点 |
这张表的用法是:先看画面现象,再反推波形上该看什么。比如画面撕裂,就去抓 HSS 包,看是不是有丢失。
6. 实测中那些让人抓狂的坑
理论讲完了,讲讲实际调试中真正让人头疼的问题。这些坑,文档里不会写,但每一个都能让你耗掉一整天。
6.1 探头接地不良导致的假振铃
这个坑我踩过不止一次。波形上看到明显的振铃,以为是信号完整性问题,换了终端电阻、改了走线,都没用。最后发现是探头地线太长,引入了测量伪影。
判断方法很简单:把探头从测试点上拿开,只接地线,看示波器上还有没有类似的振铃。如果有,那就是测量系统的问题,不是被测信号的问题。
解决方法是缩短地线,用弹簧地针,或者直接焊接同轴线的屏蔽层到最近的接地点。
6.2 LP 和 HS 切换时的触发丢失
LP 到 HS 的切换过程很短,如果触发设置不对,根本抓不到。常见的问题是触发电平设在了 HS 的差分摆幅范围内,结果 LP 段的信号根本触发不了。
正确的做法是:触发电平设在 LP 信号的电平范围内,比如 0.6V 左右,然后用边沿触发抓 LP 的跳变。抓到之后,再用延迟触发或者缩放功能,把 HS 段展开看。
6.3 多 lane 之间的 skew 测量
MIPI 通常有多个数据 lane,lane 之间会有 skew。skew 太大会导致接收端采样错位。测量 skew 需要同时抓多个 lane 的波形,然后比较同一时刻的跳变位置。
这里的关键是:所有探头的地线要接到同一个接地点,否则地环路会引入额外的延迟差异。另外,探头之间的延迟差异要事先校准,可以用一个共同的信号源同时喂给所有探头,测出延迟差,然后在软件里补偿。
6.4 时钟恢复设置错误导致的眼图失真
眼图测试时,如果时钟恢复设置不对,眼图会失真。MIPI 的时钟是独立 lane,所以应该用外部时钟模式,直接把时钟 lane 的信号作为触发源。如果用内部时钟恢复,恢复出来的时钟可能和实际时钟有相位偏差,眼图就会偏移。
这个坑的隐蔽性在于:眼图看起来是开的,但位置不对,你会误以为链路没问题,实际上采样点已经偏了。
7. 从波形到结论:一套可复用的判读流程
最后把这套流程串起来,形成一套可复用的判读方法。下次拿到一块新板子,按这个流程走一遍,基本能定位大部分问题。
7.1 分阶段测量的顺序安排
我的习惯是分四个阶段:
第一阶段,量时钟 lane 的 LP 到 HS 切换,确认链路能进 HS。这一步不过,后面都不用看。
第二阶段,量时钟 lane 的 HS 波形,确认频率、占空比、抖动都在范围内。
第三阶段,量数据 lane 的眼图,确认信号质量够好。
第四阶段,开协议解码,看行同步包是否正常。
这个顺序的逻辑是:从底层到上层,从时钟到数据,从物理到协议。每一层都是下一层的基础,跳过任何一层都可能导致误判。
7.2 每个阶段的通过标准和失败动作
| 阶段 | 通过标准 | 失败时的动作 |
|---|---|---|
| 时钟 LP-HS 切换 | 切换序列完整,T_LPX 达标 | 检查发送端配置和链路连接 |
| 时钟 HS 波形 | 频率正确,占空比 45%-55%,抖动小 | 检查驱动设置和终端匹配 |
| 数据眼图 | 眼高 > 60% 摆幅,眼宽 > 0.7 UI | 检查走线、均衡、预加重 |
| 协议解码 | HSS/HSE 包正常,无解码错误 | 回到物理层重新检查信号质量 |
这张表可以直接打印出来贴在工位上,调试的时候对着走。
7.3 把波形结论翻译成驱动或硬件改动
波形量完了,最终要落到改动上。我的经验是:
如果是时钟抖动大,优先检查发送端的 PLL 配置,其次检查电源噪声。
如果是眼图闭合,优先检查走线阻抗和长度,其次检查接收端均衡。
如果是行同步包异常但物理层正常,那基本是驱动里的时序参数配错了,去查 DSI 的时序寄存器。
这个翻译过程需要你对链路两端都熟悉,光懂波形不够,还要懂驱动和硬件。这也是为什么 MIPI 调试往往需要软硬件工程师一起上。
我个人在实际操作中的体会是,MIPI 波形调试最忌讳的就是"跳步"。很多人一上来就想看行同步,结果物理层一团糟,看了也是白看。老老实实从时钟开始,一层一层往上走,反而最快。另外,测量系统的可靠性永远要放在第一位怀疑,探头、地线、触发这些基础的东西没搞对,后面所有的分析都是建立在流沙上的。最后再分享一个小技巧:把每次调试的波形截图和当时的设置参数一起存档,下次遇到类似问题,翻出来对比,能省掉大量重复劳动。