3. MIPI CSI-2 物理层:差分信号、Lane 配置、时钟与数据恢复(CDR)

好,咱们今天聊聊 MIPI CSI-2 的物理层。说白了,就是摄像头和 FPGA 之间那几根线是怎么工作的。很多刚入行的朋友觉得这层就是“连上线就能跑”,其实不然。我当年第一次调 MIPI 接口时,就被差分信号的走线坑过,板子回来死活没图像,最后发现是等长没做好。

物理层是 CSI-2 协议的基础。它不关心你传的是 YUV 还是 RAW 数据,只负责把 0 和 1 从发送端搬到接收端。这一层的关键词就三个:差分信号、Lane 配置、时钟与数据恢复。

3.1 差分信号:为什么是两根线?

MIPI 物理层用的是低压差分信号(LVDS),但不是传统的 LVDS,而是 MIPI D-PHY 标准。每一路信号由两根线组成:Dp(正极)和 Dn(负极)。

为什么要用两根线?抗干扰。你想想看,外部噪声同时耦合到两根线上,接收端只看它们的差值,噪声就被抵消了。我在一个项目中遇到过电源纹波很大的情况,单端信号根本没法看,但差分对愣是稳如泰山。

D-PHY 的电压摆幅很小,只有 200mV 左右(传统 LVDS 是 350mV)。这意味着功耗更低,但也更娇气——对 PCB 走线要求更高。

关键参数:
  • 差分阻抗:100Ω(±10%)
  • 共模电压:约 200mV
  • 摆幅:140mV ~ 270mV
  • 信号速率:最高 2.5Gbps(D-PHY v1.2)

3.2 Lane 配置:一条还是四条?

MIPI CSI-2 支持 1、2、3、4 条数据 Lane,外加一条时钟 Lane。Lane 的数量决定了带宽。

举个例子:一个 1080p60 的摄像头,10-bit RAW 数据,需要的带宽大约是:

1920 × 1080 × 60 × 10 = 1.244 Gbps

如果用 1 Lane,每 Lane 跑 1.2Gbps,刚好够。但实际工程中我会留余量,用 2 Lane,每 Lane 跑 600Mbps,更稳。

我个人习惯:

  • 低分辨率(VGA 以下):1 Lane 就够了,省引脚
  • 720p 或 1080p30:2 Lane,性价比高
  • 1080p60 或 4K:4 Lane,必须的
避坑指南: 我曾经在一个项目里用了 4 Lane,但 FPGA 的 BANK 电压没配好,导致信号质量差。记住,MIPI 的 Lane 必须分配到同一个 BANK,且 BANK 电压要设为 1.2V(或 1.8V,看具体器件)。

Lane 的分配不是随便来的。发送端和接收端必须约定好 Lane 映射。比如摄像头输出 Lane0~Lane3,FPGA 接收也得对应 Lane0~Lane3。有些 FPGA 允许内部重映射,但我不建议这么干——增加调试难度。

3.3 时钟与数据恢复(CDR)

这是物理层最核心的部分。MIPI D-PHY 有两种模式:

  • 高速模式(HS):时钟 Lane 提供 DDR 时钟,数据 Lane 在时钟的上升沿和下降沿各采一次
  • 低功耗模式(LP):单端信号,电压 1.2V,用于控制命令传输

在高速模式下,时钟和数据是同步的。但问题来了——时钟 Lane 和数据 Lane 的走线长度不可能完全一致,会有 skew(偏移)。

CDR 的作用就是:从数据流中恢复出时钟,再用这个时钟去采样数据。说白了,就是让接收端自己“找节奏”。

我画了一张图,帮你理解 CDR 的核心逻辑:

MIPI CSI-2 CDR 核心逻辑 发送端 摄像头 Sensor Data Lane (Dp/Dn) Clock Lane (Clkp/Clkn) PCB 走线 接收端 FPGA CDR 模块 时钟数据恢复 恢复时钟 数据采样 图:CDR 从数据 Lane 中提取时钟,用于后续数据采样

CDR 的实现方式有很多种。FPGA 里常用的是 PLL 加鉴相器。简单说就是:

  1. 接收端有一个本地 PLL,产生一个本地时钟
  2. 鉴相器比较本地时钟和数据跳变沿的相位差
  3. 调整 PLL 的输出频率,直到锁定

这里有个坑:CDR 需要数据有足够的跳变沿。如果传的是全 0 或全 1,没有跳变,CDR 就锁不住了。所以 MIPI 协议规定,数据必须经过 8b/10b 编码(或者 D-PHY 的 8b/9b 编码),保证有足够的跳变。

注意: 有些低端 FPGA 没有硬核 CDR,只能用逻辑资源搭。我试过,跑 1Gbps 以上基本不可靠。建议选带 MIPI D-PHY 硬核的 FPGA,比如 Xilinx 的 Artix-7 或 Zynq 系列。

3.4 实际调试中的经验

调 MIPI 物理层,我一般按这个顺序来:

  1. 先测时钟 Lane:用示波器看时钟 Lane 的差分波形,频率对不对,摆幅够不够
  2. 再看数据 Lane:数据 Lane 在空闲时应该是 LP-11 状态(两条线都是高电平)
  3. 检查眼图:高速信号一定要看眼图,眼睛睁开够大才算合格
  4. 确认 Lane 映射:用逻辑分析仪抓一下,确保 Lane0 对应 Lane0

我曾经遇到一个奇葩问题:摄像头输出正常,FPGA 就是收不到数据。查了两天,最后发现是 PCB 上数据 Lane 的 Dp 和 Dn 接反了。差分对极性反了,信号就全反相了。所以画板子时一定要仔细核对丝印。

小技巧: 调试时可以在 FPGA 端加一个 IBERT(集成误码率测试)核,它能自动检测 Lane 的极性错误和偏移。Xilinx 的 Vivado 里自带这个工具,非常好用。

3.5 总结一下

MIPI CSI-2 物理层,说白了就是三件事:

  • 差分信号:两根线传一个信号,抗干扰强,但走线要等长、阻抗要匹配
  • Lane 配置:根据带宽需求选 1/2/4 Lane,注意 BANK 电压和引脚分配
  • CDR:从数据里恢复时钟,保证采样正确,需要数据有足够跳变

嗯,这一章就到这里。物理层是基础,基础不牢,后面协议解析、图像采集都会出问题。下一章咱们会深入 CSI-2 的协议层,看看数据是怎么打包成包的。


可可精品资料库