第二讲:MIPI CSI接口详解

各位同学,今天我们来聊聊MIPI CSI接口。说实话,这个接口在车载摄像头开发中太重要了。我当年刚接触MTK平台时,就在CSI配置上栽过跟头。嗯,今天我把这些经验都分享给你们。

2.1 MIPI CSI-2协议基础

MIPI CSI-2,说白了就是摄像头和处理器之间的"高速公路"。它定义了数据怎么从摄像头传感器传到应用处理器。我个人习惯把CSI-2协议分成三层来看:

  • 物理层(PHY Layer):负责电信号传输,就是D-PHY或C-PHY
  • 协议层(Protocol Layer):定义数据包格式,包括短包和长包
  • 应用层(Application Layer):处理像素数据格式,比如RAW10、YUV422

你想想看,摄像头每秒要传几十帧图像,每帧几百万像素,没有MIPI这种高速串行接口根本搞不定。我在项目中遇到过有人用并行接口做高清摄像头,结果布线布到崩溃——MIPI用差分信号,抗干扰能力强,线也少。

核心要点:CSI-2使用差分信号传输,每个通道由一对D-P(正极)和D-N(负极)组成。数据通道可以有1、2、4条,时钟通道独立。

2.2 Lane速率计算

这个知识点很关键。很多开发者在配置CSI时,Lane速率算错了,导致图像花屏或者根本不出图。我来教你们怎么算。

先看公式:

Lane速率(Mbps)= (图像宽度 × 图像高度 × 帧率 × 每像素位数) / Lane数量

举个例子,1080P摄像头,30fps,RAW10格式,用4个Lane:

1920 × 1080 × 30 × 10 / 4 = 155,520,000 bps ≈ 156 Mbps

等等,这里有个坑。实际传输时还要考虑blanking开销。我记得有一次调试,按理论值算出来刚好够,结果实际跑起来就丢帧。后来才发现,MIPI协议有水平消隐和垂直消隐,大概要预留20%-30%的余量。

我的建议:实际配置时,把计算值乘以1.3。比如上面算出来156Mbps,实际配置200Mbps比较稳妥。

为什么会这样?因为摄像头传感器输出的数据不是连续的,每行之间有H-Blank,每帧之间有V-Blank。这些空白期虽然不传有效像素,但占用了带宽。

2.3 MTK8676 CSI控制器特性

MTK8676这颗芯片,我用了快两年了。它的CSI控制器有几个特点值得注意:

特性 参数 说明
CSI接口数量 4个 每个接口可配置为1/2/4 Lane
最大Lane速率 2.5 Gbps/Lane D-PHY 1.2标准
支持分辨率 最高4K@60fps 需多接口拼接
虚拟通道 支持4个VC 可用于多摄像头复用

我个人觉得最实用的是虚拟通道功能。做全景影像时,四个摄像头可以接在同一个CSI接口上,通过不同的虚拟通道ID区分。这样省接口,也省布线。

注意:MTK8676的CSI控制器对时钟极性有要求。我曾经因为时钟极性配反了,折腾了两天才找到原因。默认情况下,CSI时钟的上升沿采样数据,但有些传感器是下降沿采样。一定要看传感器数据手册。

2.4 硬件原理图分析要点

拿到原理图,怎么看CSI部分?我教你们几个关键点:

  1. 差分对等长:D-P和D-N走线长度差不能超过5mil。我见过一个项目,走线差了20mil,结果高速信号眼图都闭了。
  2. 阻抗匹配:差分阻抗100Ω,单端阻抗50Ω。这个要跟PCB厂家确认。
  3. ESD保护:CSI信号线上一定要加ESD保护管。车载环境静电多,不加的话,插拔摄像头时很容易烧接口。
  4. 去耦电容:每个CSI接口的电源引脚附近要放0.1μF和10μF的去耦电容。嗯,这个很多人会忽略。

看原理图时,我习惯先找到CSI接口的引脚定义。MTK8676的CSI引脚命名一般是CSI0_D0_P、CSI0_D0_N这样。对照数据手册,确认每个引脚的功能。

// 典型的CSI引脚定义
CSI0_CLK_P  -> 时钟正极
CSI0_CLK_N  -> 时钟负极
CSI0_D0_P   -> 数据通道0正极
CSI0_D0_N   -> 数据通道0负极
CSI0_D1_P   -> 数据通道1正极
CSI0_D1_N   -> 数据通道1负极
...

还有一个容易踩的坑:MIPI信号不能跨分割平面。也就是说,CSI走线下面必须是完整的GND平面。如果跨了分割区,信号完整性会变差,严重时直接不出图。

总结一下:MIPI CSI接口调试,说白了就是三件事——速率算对、极性配对、走线布好。这三件事做好了,基本不会有大问题。

下一讲我们会实际动手,在MTK8676开发板上配置CSI接口,把摄像头点亮。到时候你们会发现,理论懂了,动手其实不难。

课后小作业:找一块你们项目的原理图,看看CSI部分的走线长度、阻抗标注、ESD保护电路。对照今天讲的内容,看看有没有遗漏的地方。

好了,今天就到这里。有问题随时在群里问我,我看到就会回。