2、硬件接口详解:DVP接口时序与引脚定义、MIPI CSI-2协议基础、差分信号与数据通道配置

摄像头模组跟主控芯片之间怎么“说话”?说白了,就是通过硬件接口。我这些年经手过的项目,从几十万像素的VGA模组,到如今千万级的车载摄像头,接口方案翻来覆去就两大主流:老牌的DVP和现在几乎统治市场的MIPI CSI-2。

这一章,咱们就把这两种接口的底裤扒干净。你搞懂了引脚定义和时序,画板子、调驱动的时候心里才有底。

2.1 DVP接口:并行传输的“老兵”

DVP,全称Digital Video Port。它最大的特点就是“并行”——数据线一拉就是8根、10根甚至12根,像素数据一口气传过去。

我记得早年做行车记录仪,用的就是DVP接口的OV7670。那时候MIPI还没普及,DVP是的主流。现在虽然高端项目少了,但在低分辨率、低成本或者主控不带MIPI的场景下,DVP依然很能打。

2.1.1 引脚定义

一个标准的DVP接口,至少需要以下几组信号:

信号组 引脚名称 说明
数据总线 D[7:0] / D[9:0] 并行数据线,8位或10位。像素数据就在这上面跑。
像素时钟 PCLK 每个时钟沿锁存一次数据。频率越高,分辨率/帧率越高。
行同步 HSYNC / HREF 指示一行数据的开始。高电平期间,数据有效。
场同步 VSYNC 指示一帧数据的开始。通常高电平或低电平脉冲表示新帧。
主时钟 XCLK / MCLK 由主控提供给Sensor的驱动时钟。Sensor内部PLL靠它倍频。
控制接口 SCCB / I²C 配置Sensor寄存器用的。DVP本身不包含控制总线,一般复用I²C。
我的习惯:画原理图时,我会把D[7:0]这组线在PCB上做等长处理。虽然DVP频率不高(通常几十MHz),但等长能减少数据线之间的相对延迟,避免采样出错。尤其是当分辨率跑到VGA以上时,这个细节能省掉你不少调试时间。

2.1.2 时序要点

DVP的时序,核心就一句话:在PCLK的上升沿(或下降沿)采样数据,同时参考HSYNC和VSYNC的电平。

为什么会这样?因为Sensor输出的数据是“流”的。VSYNC告诉你“新的一帧开始了”,HSYNC告诉你“新的一行开始了”,PCLK则负责把每个像素的数值敲进主控的FIFO里。

我曾经在一个项目中遇到过图像“撕裂”的问题——上半帧是正常的,下半帧全是雪花。查了半天,发现是VSYNC的极性配置反了。Sensor输出的是低电平有效,我配成了高电平有效,导致主控在帧中间才开始采集数据。

避坑指南:DVP的HSYNC和VSYNC极性,不同Sensor厂商定义可能完全相反。有的用高电平表示有效,有的用低电平。拿到新模组,第一件事就是看数据手册里的时序图,确认极性。我曾经因为想当然,浪费了一整天在逻辑分析仪上数波形。

2.2 MIPI CSI-2:高速串行的“新贵”

MIPI CSI-2,全称Mobile Industry Processor Interface Camera Serial Interface 2。它用差分信号对(D-PHY)来传输数据,速度比DVP高出一个数量级。

现在手机、平板、车载摄像头,清一色都是MIPI。为什么?因为DVP的并行线太多,高频干扰大,布线也麻烦。MIPI用一对差分线就能跑到Gbps级别,省引脚、抗干扰、能传高分辨率。

2.2.1 协议分层

MIPI CSI-2协议分三层,我习惯这么理解:

  • 物理层(PHY Layer):就是D-PHY。负责把0和1变成差分电压,在线上跑。定义了高速模式(HS)和低功耗模式(LP)。
  • 协议层(Protocol Layer):负责把像素数据打包成“包”。每个包有包头(包含数据类型、虚拟通道号、数据长度)和包尾(校验和)。
  • 应用层(Application Layer):定义像素格式。比如RAW8、RAW10、YUV422、JPEG等。主控拿到数据后,按这个格式去解析。

核心概念:MIPI CSI-2的“虚拟通道”(Virtual Channel, VC)。一条MIPI链路上可以同时传最多4路不同的视频流。每个数据包的包头里带了一个2位的VC ID。主控根据VC ID把数据分发到不同的处理通道。这在多摄像头方案里非常有用。

2.2.2 差分信号与数据通道

MIPI D-PHY使用差分信号对。一对线叫一个“Lane”。标准配置是:

  • 时钟 Lane:一对差分时钟线(CLK_P / CLK_N)。提供数据采样的基准时钟。
  • 数据 Lane:一对或多对差分数据线(DATA0_P / DATA0_N, DATA1_P / DATA1_N ...)。数据在时钟的上升沿和下降沿都传输(DDR)。

通道配置(Lane数)直接影响带宽。我整理了一个对照表:

Lane数 典型带宽(1Gbps/Lane) 适用场景
1-Lane ~1 Gbps 低分辨率(VGA以下)、低帧率
2-Lane ~2 Gbps 720p / 1080p @ 30fps
4-Lane ~4 Gbps 4K @ 30fps / 1080p @ 60fps

你想想看,4-Lane模式下,4对差分线加上1对时钟线,总共也就10根线。换成DVP,光数据线就至少8根,还不算控制线。这就是MIPI的优势。

我的经验:画MIPI的PCB时,差分对内的两根线必须等长、等距,阻抗控制在100Ω ± 10%。而且,不同Lane之间也要做等长处理,误差最好控制在5mm以内。我见过一个项目,因为DATA0和DATA1的走线长度差了2cm,导致高速模式下数据错位,图像出现条纹。最后飞线才解决,教训深刻。

2.3 知识结构图:接口选型与核心逻辑

下面这张图,帮你理清DVP和MIPI CSI-2的选型逻辑和核心差异。我建议你把它存下来,以后做方案评估时直接对照。

摄像头接口选型与核心逻辑图 摄像头硬件接口选型与核心逻辑 摄像头接口 DVP(并行接口) MIPI CSI-2(串行接口) 引脚:D[7:0], PCLK, HSYNC, VSYNC 时序:PCLK沿采样,HSYNC/VSYNC定帧 协议:物理层→协议层→应用层 差分信号:CLK_P/N, DATA0_P/N ... 选型建议 低分辨率、低成本、主控无MIPI → 选DVP 高分辨率、高速率、多摄像头 → 选MIPI CSI-2

2.4 配置实战:从Sensor到主控的链路

不管用DVP还是MIPI,配置流程其实大同小异。我总结了一个通用步骤:

  1. 上电时序:先给Sensor供电(AVDD、DVDD、IOVDD),再给主时钟(XCLK)。最后拉高复位引脚。顺序错了,Sensor可能无法正常初始化。
  2. I²C配置:通过SCCB/I²C总线,写入Sensor的寄存器。比如设置输出分辨率、帧率、增益、曝光时间等。这一步是调试的重灾区,我建议你先把所有寄存器读出来,跟数据手册的默认值对比一遍。
  3. 接口配置:如果是DVP,配置主控的DVP控制器,设置PCLK极性、HSYNC/VSYNC极性、数据位宽。如果是MIPI,配置MIPI D-PHY的Lane数、速率、时钟频率。
  4. 抓图验证:让Sensor输出一帧数据,主控收到后,通过DMA存到内存里。然后用上位机或者串口把数据导出来,用RawViewer之类的工具看图像是否正常。
我曾经踩过的坑:MIPI的D-PHY有“高速模式”和“低功耗模式”两种状态。初始化时,主控和Sensor必须协商好进入高速模式的时机。如果一方已经切到高速,另一方还在低功耗模式等待,链路就建立不起来。表现为:逻辑分析仪能看到时钟,但数据Lane上全是Escape Mode的指令,没有图像数据。解决办法是:严格按照Sensor数据手册里的“初始化序列”来,不要自己瞎猜时序。

嗯,接口这部分内容不少,但都是硬功夫。你把这些引脚定义、时序、协议分层吃透了,后面调驱动、测模组的时候,就能少走很多弯路。