2. 硬件接口基础:MIPI CSI-2、DVP、SMIA CCP2 对比

在嵌入式 Camera 驱动开发中,硬件接口是连接图像传感器(Sensor)与图像信号处理器(ISP)或 SoC 的物理层与协议层桥梁。本章深入对比三种主流接口:MIPI CSI-2(Mobile Industry Processor Interface Camera Serial Interface 2)、DVP(Digital Video Port)并行接口以及 SMIA CCP2(Standard Mobile Imaging Architecture Compact Camera Port 2)。理解它们的电气特性、协议分层、时钟机制和适用场景,是调试 Camera 驱动与分析 DMA 传输的基础。

核心观点: 现代嵌入式 Camera 接口正从并行(DVP)向高速串行(MIPI CSI-2)演进。CCP2 作为早期串行标准,在特定领域仍有应用。驱动开发者需根据接口特性配置对应的 DMA 引擎与时钟同步逻辑。

2.1 MIPI CSI-2 协议详解

MIPI CSI-2 是目前移动端和嵌入式领域最主流的 Camera 串行接口标准。它采用差分信号传输,具有高带宽、低功耗、抗干扰强的特点。

2.1.1 物理层与分层架构

CSI-2 协议分为三层:物理层(PHY Layer)、协议层(Protocol Layer) 和 应用层(Application Layer)。物理层通常基于 MIPI D-PHY 或 C-PHY 规范。

MIPI CSI-2 协议分层架构 MIPI CSI-2 协议分层架构 应用层 (Application Layer) 像素数据格式封装 (RAW8/10/12, YUV, JPEG) 协议层 (Protocol Layer) 长包/短包格式 · 虚拟通道 (VC) · 数据类型 (DT) · ECC/CRC 物理层 (PHY Layer - D-PHY/C-PHY) 差分信号 · 时钟通道 + 数据通道 · 低功耗模式 (LP) / 高速模式 (HS) 驱动开发关注点:协议层包解析、虚拟通道路由、DMA 传输配置

2.1.2 数据包格式与虚拟通道

CSI-2 协议层使用两种包类型:短包(Short Packet) 和 长包(Long Packet)。短包用于帧同步(帧起始/帧结束)和行同步(行起始/行结束);长包用于传输实际的像素数据。

包类型 组成 长度 用途
短包 数据标识 (DI) + 16位数据 + ECC 4 字节 帧/行同步信号、事件触发
长包 32位包头 (DI+WC+ECC) + 数据负载 + 16位 CRC 可变 像素数据、嵌入式数据

虚拟通道(Virtual Channel, VC) 允许在同一个物理链路上复用最多 4 个独立的 Camera 数据流。VC 信息编码在数据标识(Data Identifier, DI)字节的高 2 位中。驱动开发中,VC 用于区分多摄像头或同一 Sensor 的不同数据流(如主图像与副图像)。

调试技巧: 使用逻辑分析仪或示波器抓取 CSI-2 数据线时,关注短包中的帧同步信号。如果 DMA 传输出现帧错位,首先检查帧起始(Frame Start)短包是否被正确解析。

2.2 DVP 并行接口

DVP 是传统的并行 Camera 接口,通过多根数据线同时传输像素数据。虽然带宽受限,但在低分辨率、低帧率的应用中仍然常见。

2.2.1 信号定义与时序

DVP 接口包含以下关键信号:

  • PCLK:像素时钟,每个时钟周期传输一个像素(或一个颜色分量)。
  • HSYNC:行同步信号,标识一行数据的开始。
  • VSYNC:场同步信号,标识一帧数据的开始。
  • DATA[7:0] 或 DATA[9:0]:并行数据总线,通常为 8 位或 10 位。
  • MCLK:主时钟,由主机提供给 Sensor 的参考时钟。
DVP 并行接口时序 DVP 并行接口时序(一帧数据) VSYNC HSYNC PCLK DATA[7:0] 像素 0 ~ N 像素 DVP 驱动关键:PCLK 采样沿配置(上升沿/下降沿)、HSYNC 与 VSYNC 极性

2.2.2 驱动配置要点

在 Linux 内核中,DVP 接口通常通过 struct sensor_interface 或平台数据配置。关键参数包括:

/* DVP 接口配置示例 */
static struct sensor_interface dvp_if = {
    .type           = SENSOR_INTERFACE_DVP,
    .pclk_polarity  = PCLK_ACTIVE_RISING,   // 像素时钟上升沿采样
    .hsync_polarity = HSYNC_ACTIVE_HIGH,    // 行同步高电平有效
    .vsync_polarity = VSYNC_ACTIVE_LOW,     // 场同步低电平有效
    .data_width     = 8,                    // 数据总线宽度
    .mclk_freq      = 24000000,             // 主时钟 24MHz
};
常见问题: DVP 接口在高速率下容易受信号反射和串扰影响。当分辨率超过 720p@30fps 时,建议优先考虑 MIPI CSI-2 接口。调试时,使用示波器测量 PCLK 与 DATA 之间的建立/保持时间。

2.3 SMIA CCP2 接口

SMIA CCP2 是早期为移动摄像头设计的串行接口标准,由 Nokia 和 STMicroelectronics 等公司推动。它使用差分信号传输,但协议相对简单。

2.3.1 协议特点

  • 数据通道:1 对差分数据线 + 1 对差分时钟线。
  • 传输模式:支持 HS(高速) 和 LP(低功耗) 模式,类似 MIPI D-PHY。
  • 数据格式:使用 8b/10b 编码,内嵌时钟恢复。
  • 控制接口:通常配合 I²C 或 SPI 进行寄存器配置。

2.3.2 与 MIPI CSI-2 的差异

特性 MIPI CSI-2 SMIA CCP2
编码方式 D-PHY: 差分 NRZ 8b/10b 编码
最大通道数 4 数据通道 (D-PHY) 1 数据通道
虚拟通道 支持 (最多 4 个 VC) 不支持
带宽 高 (单通道可达 2.5 Gbps) 中 (单通道约 800 Mbps)
协议复杂度 较高 (ECC/CRC/包格式) 较低
应用领域 主流智能手机、嵌入式平台 早期手机、工业相机

2.4 三种接口对比总结

三种 Camera 接口对比 MIPI CSI-2 vs DVP vs SMIA CCP2 对比 对比维度 MIPI CSI-2 DVP SMIA CCP2 信号类型 差分串行 并行单端 差分串行 最大带宽 ~10 Gbps (4-lane) ~1 Gbps (8-bit) ~800 Mbps 抗干扰能力 强 (差分) 弱 (单端) 强 (差分) 协议复杂度 高 低 中 驱动开发复杂度 中-高 低 中 选择建议:新设计优先 MIPI CSI-2;低分辨率/低成本选 DVP;兼容旧平台考虑 CCP2 DMA 传输配置需根据接口类型选择对应的控制器(如 DVP 的 PCLK 域 vs MIPI 的 Byte Clock 域)

2.5 接口选择对 DMA 传输的影响

不同的硬件接口直接影响 DMA 控制器的配置:

  • MIPI CSI-2:DMA 传输通常基于 Byte Clock 域,数据以包为单位到达。需要配置 DMA 描述符链来处理可变长度的长包,并解析包头中的字计数(WC)字段。
  • DVP:DMA 传输基于 PCLK 域,数据以像素为单位连续到达。通常使用单次或循环 DMA 模式,配合 HSYNC 信号触发下一行传输。
  • SMIA CCP2:DMA 传输类似 MIPI,但协议更简单,通常不需要复杂的包解析逻辑。
实战要点: 在调试 DMA 传输时,首先确认接口类型对应的时钟域。例如,MIPI CSI-2 的 DMA 中断服务程序(ISR)中,应读取协议层的包状态寄存器,而不是直接操作物理层寄存器。