RK平台Sensor驱动开发 DVP接口与上电时序调试 - 第1节
1. 课程导论
DVP(Digital Video Port,数字视频端口)是 CMOS 图像传感器与主控 SoC 之间传输并行数字图像数据的经典硬件接口。在 RK 平台中,DVP 接口通常用于连接中低分辨率(如 2M/5M/8M)的 Sensor 模组,具有信号线多、时序要求严格、PCB 布局敏感等特点。
1.1.1 DVP 接口信号定义
| 信号名称 | 方向 | 功能描述 |
|---|---|---|
| PCLK | Sensor → SoC | 像素时钟,每个上升沿或下降沿传输一个像素数据 |
| HSYNC | Sensor → SoC | 行同步信号,标识一行像素数据的开始/结束 |
| VSYNC | Sensor → SoC | 帧同步信号,标识一帧图像数据的开始/结束 |
| D[0:9] | Sensor → SoC | 并行数据总线,支持 8/10/12 bit 位宽 |
| SCL / SDA | 双向 | I²C 控制总线,用于配置 Sensor 寄存器 |
| XCLK / MCLK | SoC → Sensor | 主时钟输入,由 SoC 提供 Sensor 工作时钟 |
| PWDN / RST | SoC → Sensor | 电源关断 / 硬件复位控制 |
接口选型提示: DVP 接口在 RK 平台中通常用于替代 MIPI CSI-2 的低成本方案。当 Sensor 分辨率 ≤ 8M、帧率 ≤ 30fps 时,DVP 是性价比最高的选择。但需注意 DVP 信号线数量多(至少 13 根),在 PCB 布局时容易引入串扰和时序偏差。
1.1.2 DVP 与 MIPI CSI-2 对比
| 对比维度 | DVP 接口 | MIPI CSI-2 接口 |
|---|---|---|
| 信号线数量 | 13~20 根(并行) | 4~10 根(差分串行) |
| 最大带宽 | ~100 MHz PCLK | ~1.5 Gbps / lane |
| 抗干扰能力 | 较弱(并行线间串扰) | 强(差分信号) |
| PCB 布局难度 | 高(等长、屏蔽) | 中(差分对等长) |
| RK 平台支持 | RK3288 / RK3399 / PX30 | 全系列支持 |
| 典型应用 | 低成本摄像头、扫描仪 | 手机、平板、车载 |
1.2 Sensor 驱动在 RK 平台中的角色
在 RK 平台的 Camera 软件栈中,Sensor 驱动处于最底层,直接与硬件寄存器交互。它向上层提供统一的 V4L2(Video for Linux 2)子设备接口,使 ISP(图像信号处理器)和应用程序无需关心具体 Sensor 型号。
1.2.1 驱动层级架构
1.2.2 Sensor 驱动的关键功能
- 硬件初始化: 配置 Sensor 内部寄存器,设置输出分辨率、帧率、数据格式(RAW8/RAW10/RAW12)。
- 上电时序管理: 严格按照 Sensor Datasheet 要求的顺序控制 AVDD/DOVDD/DVDD 电源、MCLK 时钟、RST 复位、PWDN 关断信号。
- 流控制: 通过 V4L2 的
VIDIOC_STREAMON/VIDIOC_STREAMOFF控制 Sensor 开始/停止输出图像数据。 - 控制参数调节: 曝光时间、模拟增益、数字增益、白平衡、镜像/翻转等。
- 同步与事件上报: 向 ISP 驱动上报帧同步信号、错误状态等。
RK 平台特有机制: RK 的 Sensor 驱动通常以 V4L2 Subdev 形式注册,通过 Media Controller 框架与 ISP 驱动绑定。驱动中必须实现
.s_power、.s_stream、.enum_mbus_code、.s_fmt 等回调函数。
1.3 课程目标与前置知识
1.3.1 课程目标
通过本课程的学习,学员将能够独立完成 RK 平台下 DVP 接口 Sensor 驱动的开发与调试工作。具体目标如下:
| 目标编号 | 能力描述 | 对应章节 |
|---|---|---|
| G1 | 理解 DVP 接口的电气特性与时序约束 | 第 1~2 章 |
| G2 | 掌握 RK 平台 DVP 控制器(CIF / VIP)的寄存器配置 | 第 3~5 章 |
| G3 | 独立编写 Sensor 驱动的上电时序代码 | 第 6~8 章 |
| G4 | 使用示波器/逻辑分析仪调试 DVP 信号时序 | 第 9~11 章 |
| G5 | 在 RK 内核中集成并调试完整的 Sensor 驱动 | 第 12~15 章 |
| G6 | 解决常见 DVP 图像异常(花屏、偏色、帧不同步) | 第 16~18 章 |
1.3.2 前置知识要求
为了确保学习效果,建议学员具备以下基础:
- 嵌入式 Linux 基础: 熟悉 Linux 内核模块编译、设备树(Device Tree)语法、字符设备驱动模型。
- V4L2 框架基础: 了解 Video for Linux 2 的基本概念(Video Device、Subdev、Buffer 队列)。
- I²C 协议: 掌握 I²C 总线读写时序,能够在 Linux 用户空间使用
i2c-tools调试。 - 硬件基础知识: 能够阅读 Sensor Datasheet 中的时序图,理解建立时间(Setup Time)和保持时间(Hold Time)。
- RK 平台开发环境: 拥有 RK 开发板(如 RK3288 / RK3399 / PX30),并搭建好交叉编译环境。
重要提醒: 本课程不从头讲解 Linux 驱动基础或 V4L2 框架原理。如果对上述前置知识不熟悉,建议先学习《Linux 设备驱动开发基础》和《V4L2 框架入门》两门前置课程。
1.3.3 课程内容概览
1.3.4 开发环境准备
在开始课程之前,请确保已准备好以下开发环境:
# 1. 安装交叉编译工具链(以 RK3399 为例)
sudo apt-get install gcc-aarch64-linux-gnu
# 2. 下载 RK 内核源码(以 Linux 4.19 分支为例)
git clone -b rk3399-linux-4.19 https://github.com/rockchip-linux/kernel.git
# 3. 配置内核,使能 DVP 控制器驱动
make ARCH=arm64 rockchip_linux_defconfig
make ARCH=arm64 menuconfig
# 路径:Device Drivers → Multimedia support → Rockchip CIF driver
# 4. 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
# 5. 准备调试工具
sudo apt-get install i2c-tools minicom
推荐硬件: 建议使用 RK3399 开发板(如 Firefly ROC-RK3399-PC)配合 OV5640 / GC2053 等 DVP 接口 Sensor 模组进行实验。这些 Sensor 的 Datasheet 和驱动源码在 RK SDK 中均有参考实现。