3. DVP接口硬件原理
DVP(Digital Video Port)是Sensor与主控SoC之间最经典的并行接口之一。在RK平台上,DVP接口常用于中低分辨率Sensor(如2M~8M)或对带宽要求不高的场景。理解DVP的硬件信号定义、时序关系和数据格式,是正确配置Sensor驱动和调试图像异常的基础。
3.1 DVP接口信号定义
一个标准的DVP接口包含以下核心信号组:
| 信号组 | 信号名称 | 方向 | 功能描述 |
|---|---|---|---|
| 像素时钟 | PCLK | Sensor → SoC | 像素数据的同步时钟,每个有效沿传输一个像素 |
| 行同步 | HSYNC / HREF | Sensor → SoC | 标识一行有效像素数据的起始与结束 |
| 场同步 | VSYNC | Sensor → SoC | 标识一帧图像的起始与结束 |
| 数据总线 | D[9:0] / D[7:0] | Sensor → SoC | 并行像素数据,常见位宽为8bit或10bit |
| 主时钟 | MCLK / XVCLK | SoC → Sensor | Sensor工作主时钟,由SoC提供 |
| 控制接口 | SCL / SDA | 双向 | I2C总线,用于配置Sensor寄存器 |
关键区分:PCLK是Sensor输出的像素同步时钟,而MCLK是SoC提供给Sensor的参考时钟。两者频率不同,MCLK通常为6~27MHz,PCLK则取决于输出分辨率和帧率。
3.2 并行数据总线与位宽
DVP的数据总线宽度决定了每个时钟周期能传输的像素数据量。常见配置如下:
- 8-bit 数据总线:最常用,适用于RAW8、YUV422、RGB565等格式。每个PCLK周期传输一个字节。
- 10-bit 数据总线:用于RAW10格式,Sensor输出10bit原始数据。RK平台的VIP(Video Input Processor)模块支持10bit输入。
- 12-bit 数据总线:较少见,用于高精度RAW12,部分工业Sensor使用。
数据总线的物理连接必须一一对应:
/* DVP 8-bit 数据线连接示例(RK3588 + SC2336) */
/* Sensor输出 -> RK3588 VIP端口 */
D0 -> VIPN_D0
D1 -> VIPN_D1
D2 -> VIPN_D2
D3 -> VIPN_D3
D4 -> VIPN_D4
D5 -> VIPN_D5
D6 -> VIPN_D6
D7 -> VIPN_D7
/* 高位D8/D9悬空或接地,取决于Sensor配置 */
硬件设计注意:数据线必须等长布线,避免因走线长度差异导致数据建立/保持时间违例。在RK平台上,DVP数据线长度差建议控制在±50mil以内。
3.3 PCLK/HSYNC/VSYNC时序关系
DVP接口的时序由三个同步信号协同工作,理解它们的相对关系是调试图像错位、花屏的关键。
核心时序流程:VSYNC拉低(或拉高)表示一帧开始 → HSYNC脉冲表示一行开始 → PCLK每个有效沿采样数据总线。
下面通过SVG图展示一帧图像内的信号关系:
3.4 数据格式与像素排列
DVP接口支持多种数据格式,不同格式下数据总线上的像素排列方式不同。RK平台的VIP模块支持以下常见格式:
| 格式 | 位宽 | 每像素时钟数 | 数据排列(D[7:0]) | 典型应用 |
|---|---|---|---|---|
| RAW8 | 8-bit | 1 | B[7:0] | 黑白/彩色Bayer Sensor |
| RAW10 | 10-bit | 1(高位对齐) | D[9:2] 在 D[7:0] 上,D[1:0] 丢弃或SPI方式 | 高精度Bayer Sensor |
| YUV422 | 8-bit | 2 | Y0-U0-Y1-V0(交错排列) | USB摄像头、视频监控 |
| RGB565 | 8-bit | 2 | R[4:0]G[2:0] 在 Byte0,G[5:3]B[4:0] 在 Byte1 | LCD显示、GUI |
| JPEG | 8-bit | 可变 | 压缩数据流,需VSYNC/HSYNC辅助帧同步 | 压缩输出Sensor |
驱动配置要点:在RK平台的设备树中,通过
rockchip,format 属性指定数据格式。例如 rockchip,format = "RAW8" 或 rockchip,format = "YUV422"。格式不匹配会导致图像颜色异常或数据错位。
3.5 数据采样沿与极性配置
PCLK的采样沿和同步信号的极性可以通过Sensor寄存器配置,RK平台的VIP也支持对应的极性设置。
- PCLK采样沿:
- 上升沿采样(默认):数据在PCLK上升沿稳定,VIP在上升沿锁存。
- 下降沿采样:部分Sensor在下降沿输出数据,需配置VIP的PCLK极性反转。
- VSYNC极性:
- 高有效:VSYNC高电平表示帧有效。
- 低有效(常用):VSYNC低电平表示帧有效。
- HSYNC极性:
- 高有效:HSYNC高电平期间数据有效。
- 低有效:HSYNC低电平期间数据有效。
下面通过SVG图展示不同采样沿的差异:
3.6 DVP接口的硬件连接要点
在RK平台的实际硬件设计中,DVP接口的连接需要关注以下要点:
- 信号分组与隔离:PCLK作为高频时钟信号,应与其他数据信号保持距离,避免串扰。建议在PCB布局中将PCLK用地线包围。
- 上拉/下拉电阻:VSYNC和HSYNC信号在Sensor未输出时可能处于高阻态,建议在SoC端加10kΩ上拉或下拉电阻,确保默认电平确定。
- 数据线顺序:数据线D[7:0]必须与SoC的VIP端口一一对应,不能交叉。交叉连接会导致图像数据错位,表现为颜色混乱。
- MCLK时钟质量:MCLK由SoC的GPIO或专用时钟输出引脚提供,时钟抖动应小于200ps,否则可能导致Sensor内部PLL失锁。
常见调试陷阱:如果图像出现“锯齿”或“撕裂”,首先检查HSYNC极性是否配置正确。如果图像整体偏移,检查VSYNC极性。如果图像颜色异常,检查数据总线连接顺序和格式配置。
3.7 RK平台DVP接口的驱动配置示例
在RK3588/RK3568等平台的设备树中,DVP接口的典型配置如下:
/* rk3588-cam.dtsi - DVP Sensor节点示例 */
&csi2_dphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
dvp_sensor_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi_csi2_input>;
/* DVP接口配置 */
bus-width = <8>; /* 8-bit数据总线 */
data-shift = <0>; /* 数据移位,0表示无移位 */
hsync-active = <1>; /* HSYNC高有效 */
vsync-active = <0>; /* VSYNC低有效 */
pclk-sample = <1>; /* PCLK上升沿采样 */
};
};
};
};
/* Sensor I2C配置 */
&i2c4 {
status = "okay";
clock-frequency = <400000>; /* 400kHz I2C速率 */
sensor@30 {
compatible = "ovti,ov5648";
reg = <0x30>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M0>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
/* 上电时序由pinctrl和regulator控制 */
pinctrl-names = "default";
pinctrl-0 = <&sensor_pwr_en &sensor_rst>;
port {
sensor_out: endpoint {
remote-endpoint = <&dvp_sensor_out>;
};
};
};
};
驱动调试建议:在驱动初始化阶段,通过I2C读取Sensor的CHIP_ID寄存器确认通信正常。然后使用示波器测量PCLK频率是否与预期一致(PCLK = 分辨率宽度 × 高度 × 帧率 × 额外开销)。如果PCLK频率正确但无图像,检查HSYNC/VSYNC波形是否正常。
通过以上对DVP接口硬件原理的深入理解,开发者可以准确配置RK平台的VIP模块,快速定位图像采集过程中的硬件相关问题。下一节将深入探讨上电时序的硬件要求与驱动实现。