第4章 数据线(tData)时序:建立时间、保持时间与偏斜

MIPI 调试里,数据线时序是最容易出问题的地方。我个人习惯先把三条主线理清楚:数据建立时间(tSetup)、保持时间(tHold)、还有时钟与数据之间的偏斜(tSkew)。这三者就像三根柱子,有一根歪了,整条链路就可能崩。

4.1 建立时间(tSetup)——数据来的够早吗?

tSetup 定义很简单:数据信号必须在时钟采样沿到达之前稳定下来。这个“之前”到底要多久?MIPI D-PHY 规范没给一个死数字,它依赖具体的时钟频率和 lane 速率。

参数 典型参考值(HS模式,1 Gbps) 说明
tSetup (min) 0.15 UI(约150 ps @1Gbps) 数据沿必须先于时钟沿到达
tSetup 裕量 ≥ 50 ps 留够余量,否则误码率飙升

核心公式:
tSetup_available = tClock_period – tData_propagation_delay – tClock_skew
保证实际 tSetup ≥ 规范最小值。

我在项目中遇到过一块板子,CSI-2 时钟走线比数据线长了几乎 2 英寸。结果建立时间直接变成了负数。嗯,那画面太美我不敢看——全屏雪花。后来把时钟线做等长并加了一组蛇形走线,问题才消失。

4.2 保持时间(tHold)——数据别跑太快

tHold 和建立时间正好相反:采样沿过去之后,数据还不能马上变,必须维持一段时间。MIPI 接收器内部有个锁存窗口,你数据跑得太快,窗口没关闭,它就读了错误的值。

我给你的小技巧: 保持时间不够时,别急着调整时钟延时。先看看数据线上有没有加串阻或电容。我曾经在 D0P/D0N 上各加了一个 2 pF 的电容到地,保持时间从 20 ps 拉到 120 ps,效果立竿见影。

为什么要这样?说白了,电容延缓了数据的下降/上升沿,等效于把数据窗口拉宽。但好处也有代价——会降低眼图开口。所以电容值要精调,不能乱怼。

4.3 数据-时钟偏斜(tSkew)——它们本是一对

偏斜是建立时间与保持时间的综合结果。理想状态下,每个 MIPI 数据 lane 和它对应的时钟 lane,沿对齐误差应该控制在 ±0.5 UI 以内。实际上嘛……

  • 板级偏斜来源: PCB 走线不等长、过孔不一致、参考层不连续。
  • 芯片内部偏斜: 驱动器的输出 buffer 延时差异、温度电压变化。
  • 跨 lane 偏斜: 不同数据 lane 之间(用于 multi-lane 同步),要求 ≤ 0.25 UI。

注意: 我曾经在调试时只测一条 lane,一切正常。等四路摄像头全挂上去,画面就撕裂了。原因就是各 lane 的偏斜加起来超过了接收端的容忍范围。所以一定得做全 lane 打拍同步。

4.4 三个参数的联动关系——一张图说清楚

你想想看,建立时间、保持时间、偏斜,其实是同一个现象的不同侧面。我画了一个简化时序图,把三者放到一条时间轴上:

数据线时序:Setup、Hold 与 Skew 的关系 Clock 采样沿 Data (理想) Data (有偏斜) tSetup tHold tSkew 关键观察 • 建立时间不足 → 采样沿到达时数据还未稳定 → 产生亚稳态 • 保持时间不足 → 采样沿后数据过快变化 → 锁存错误值 • 偏斜过大 → 等效于同时违反 setup 和 hold → 误码率上升

4.5 实战调试:三步定位时序问题

  1. 测量眼图,看开口 —— 先用示波器在接收端测每个 lane 的眼图。如果眼高低于 200 mV 或眼宽小于 0.6 UI,基本就是时序出事了。
  2. 量建立/保持时间 —— 用示波器的“时间测量”功能分别抓 setup/hold 的统计值。规范里一般要求 setup ≥ 0.15 UI,hold ≥ 0.15 UI。
  3. 调偏斜,走等长 —— 如果某个 lane 的偏斜超出其他 lane 的 ±0.1 UI,在 PCB 上想办法补线。实在不行就用 FPGA 内部的 delay 链。

一个来自实战的避坑指南: 我曾经遇到一个案子,眼图看着很棒,但实际跑起来就丢帧。最后发现是电源纹波耦合到了数据线上,导致 setup/hold 在某个瞬间被砸穿。所以在量建立/保持时间时,务必在实际工作负载下测,别在空载下瞎乐。

4.6 小结一下——三个数,一条线

你记住这张表,后面调 MIPI 时能省不少功夫:

参数 物理含义 常见失效表现 我的第一反应
tSetup 数据在采样沿之前稳定的时间 画面局部噪点、偶尔丢行 查时钟 vs 数据走线长度差
tHold 采样沿之后数据维持的时间 固定列方向的条纹 加小电容,或调整驱动强度
tSkew 数据与时钟沿的相对偏移 多路同时工作时画面错位 每组 lane 做等长,≥ 5 mm 的差距都要调

说白了,数据线时序调试就是跟皮秒(ps)级别的时间打交道。别怕,手头有示波器和耐心,再配上这里的方法,多数问题都能搞定。