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。 |
2.1.2 时序要点
DVP的时序,核心就一句话:在PCLK的上升沿(或下降沿)采样数据,同时参考HSYNC和VSYNC的电平。
为什么会这样?因为Sensor输出的数据是“流”的。VSYNC告诉你“新的一帧开始了”,HSYNC告诉你“新的一行开始了”,PCLK则负责把每个像素的数值敲进主控的FIFO里。
我曾经在一个项目中遇到过图像“撕裂”的问题——上半帧是正常的,下半帧全是雪花。查了半天,发现是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的优势。
2.3 知识结构图:接口选型与核心逻辑
下面这张图,帮你理清DVP和MIPI CSI-2的选型逻辑和核心差异。我建议你把它存下来,以后做方案评估时直接对照。
2.4 配置实战:从Sensor到主控的链路
不管用DVP还是MIPI,配置流程其实大同小异。我总结了一个通用步骤:
- 上电时序:先给Sensor供电(AVDD、DVDD、IOVDD),再给主时钟(XCLK)。最后拉高复位引脚。顺序错了,Sensor可能无法正常初始化。
- I²C配置:通过SCCB/I²C总线,写入Sensor的寄存器。比如设置输出分辨率、帧率、增益、曝光时间等。这一步是调试的重灾区,我建议你先把所有寄存器读出来,跟数据手册的默认值对比一遍。
- 接口配置:如果是DVP,配置主控的DVP控制器,设置PCLK极性、HSYNC/VSYNC极性、数据位宽。如果是MIPI,配置MIPI D-PHY的Lane数、速率、时钟频率。
- 抓图验证:让Sensor输出一帧数据,主控收到后,通过DMA存到内存里。然后用上位机或者串口把数据导出来,用RawViewer之类的工具看图像是否正常。
嗯,接口这部分内容不少,但都是硬功夫。你把这些引脚定义、时序、协议分层吃透了,后面调驱动、测模组的时候,就能少走很多弯路。