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,必须的
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 的核心逻辑:
CDR 的实现方式有很多种。FPGA 里常用的是 PLL 加鉴相器。简单说就是:
- 接收端有一个本地 PLL,产生一个本地时钟
- 鉴相器比较本地时钟和数据跳变沿的相位差
- 调整 PLL 的输出频率,直到锁定
这里有个坑:CDR 需要数据有足够的跳变沿。如果传的是全 0 或全 1,没有跳变,CDR 就锁不住了。所以 MIPI 协议规定,数据必须经过 8b/10b 编码(或者 D-PHY 的 8b/9b 编码),保证有足够的跳变。
3.4 实际调试中的经验
调 MIPI 物理层,我一般按这个顺序来:
- 先测时钟 Lane:用示波器看时钟 Lane 的差分波形,频率对不对,摆幅够不够
- 再看数据 Lane:数据 Lane 在空闲时应该是 LP-11 状态(两条线都是高电平)
- 检查眼图:高速信号一定要看眼图,眼睛睁开够大才算合格
- 确认 Lane 映射:用逻辑分析仪抓一下,确保 Lane0 对应 Lane0
我曾经遇到一个奇葩问题:摄像头输出正常,FPGA 就是收不到数据。查了两天,最后发现是 PCB 上数据 Lane 的 Dp 和 Dn 接反了。差分对极性反了,信号就全反相了。所以画板子时一定要仔细核对丝印。
3.5 总结一下
MIPI CSI-2 物理层,说白了就是三件事:
- 差分信号:两根线传一个信号,抗干扰强,但走线要等长、阻抗要匹配
- Lane 配置:根据带宽需求选 1/2/4 Lane,注意 BANK 电压和引脚分配
- CDR:从数据里恢复时钟,保证采样正确,需要数据有足够跳变
嗯,这一章就到这里。物理层是基础,基础不牢,后面协议解析、图像采集都会出问题。下一章咱们会深入 CSI-2 的协议层,看看数据是怎么打包成包的。
可可精品资料库