2. 摄像头传感器基础:传感器接口类型、像素时钟与行场同步信号、数据格式
摄像头传感器是图像采集链路的起点,它将光信号转换为数字电信号。理解传感器的物理接口、同步时序以及数据输出格式,是后续设计 DMA 传输与缓存管理的基础。本章将围绕这三个核心维度展开,为驱动开发提供必要的硬件知识。
2.1 传感器接口类型:MIPI CSI 与 DVP
摄像头传感器与主控 SoC 之间的数据传输接口,目前主流分为两大类:MIPI CSI(Mobile Industry Processor Interface, Camera Serial Interface)和 DVP(Digital Video Port)。两者的电气特性、引脚数量、传输速率和适用场景差异显著。
| 特性 | MIPI CSI (D-PHY) | DVP (并行接口) |
|---|---|---|
| 信号类型 | 差分串行 (LVDS-like) | 单端并行 (CMOS/TTL) |
| 典型引脚数 | 4~10 (1~4 Lane + CLK) | 20~30 (DATA[8:12] + HSYNC + VSYNC + PCLK) |
| 最大速率 | 单 Lane 可达 2.5 Gbps (D-PHY v1.2) | 通常 ≤ 150 MHz PCLK (约 150 MB/s) |
| 抗干扰能力 | 强 (差分信号) | 弱 (易受串扰) |
| 适用场景 | 高分辨率、高帧率 (≥ 1080p@60fps) | 低分辨率、低成本、短距离 (≤ 30cm) |
| 协议复杂度 | 高 (需 PHY 层 + 协议层) | 低 (直接采样像素数据) |
drivers/media/platform 下的 V4L2 子设备驱动管理,需要配置 D-PHY 的电压摆幅、偏置电流和均衡参数。DVP 接口则更简单,主要关注 GPIO 的复用功能和 PCLK 的极性。
2.1.1 MIPI CSI 架构与 Lane 配置
MIPI CSI 采用分层架构:PHY 层(D-PHY)负责电气特性与串行化,协议层(CSI-2)负责数据包格式与错误检测。一个典型的 CSI-2 发送端包含 1 条时钟 Lane 和 1~4 条数据 Lane。
data-lanes(如 <1 2> 表示使用 Lane 1 和 Lane 2)、clock-noncontinuous(非连续时钟模式)以及 link-frequencies(链路速率)。错误配置会导致 PHY 无法锁定或数据错位。
2.1.2 DVP 接口与同步信号
DVP 接口使用并行数据总线(通常 8/10/12 位)配合 3 个同步信号:PCLK(像素时钟)、HSYNC(行同步)、VSYNC(场同步)。驱动需要根据传感器数据手册配置这些信号的极性和时序关系。
2.2 像素时钟与行场同步信号
像素时钟(PCLK)是传感器数据输出的基准时钟,每个 PCLK 周期传输一个像素(或一个像素分量)。行同步(HSYNC)和场同步(VSYNC)信号定义了像素数据的有效区域。驱动必须正确解析这些时序,才能从数据流中提取出完整的图像帧。
2.2.1 时序参数计算
对于给定的分辨率和帧率,可以计算出所需的 PCLK 频率。以下是一个 1080p@30fps 的典型计算示例:
// 参数定义
#define H_ACTIVE 1920 // 有效像素每行
#define V_ACTIVE 1080 // 有效行数每帧
#define H_BLANKING 280 // 行消隐(HFP + HBP + HSYNC)
#define V_BLANKING 45 // 场消隐(VFP + VBP + VSYNC)
#define FRAME_RATE 30 // 目标帧率
// 计算总像素每行
uint32_t total_pixels_per_line = H_ACTIVE + H_BLANKING; // 2200
// 计算总行数每帧
uint32_t total_lines_per_frame = V_ACTIVE + V_BLANKING; // 1125
// 计算 PCLK 频率
uint32_t pclk_hz = total_pixels_per_line * total_lines_per_frame * FRAME_RATE;
// pclk_hz = 2200 * 1125 * 30 = 74,250,000 Hz ≈ 74.25 MHz
struct v4l2_pix_format 的 width 和 height 只表示有效像素区域。消隐区数据通常被传感器或接收端丢弃,不进入 DMA 缓存。但消隐区长度会影响帧间隔和带宽计算。
2.2.2 同步信号极性配置
不同传感器对 HSYNC/VSYNC 的极性定义可能不同。驱动需要通过设备树或寄存器配置来匹配。常见的极性选项包括:
- HSYNC 极性:高电平有效(active high)或低电平有效(active low)。
- VSYNC 极性:高电平有效或低电平有效。
- PCLK 边沿:上升沿采样或下降沿采样。
- VSYNC 触发方式:同步(与 HSYNC 对齐)或异步(独立触发)。
| 传感器型号 | PCLK 边沿 | HSYNC 极性 | VSYNC 极性 |
|---|---|---|---|
| OV5640 | 上升沿 | 高有效 | 高有效 |
| IMX219 | 下降沿 | 低有效 | 低有效 |
| AR0230 | 上升沿 | 高有效 | 低有效 |
2.3 数据格式:RAW、YUV、JPEG
传感器输出的数据格式直接影响 DMA 传输的位宽、缓存大小以及后续处理流程。常见的输出格式分为三类:RAW(原始拜耳数据)、YUV(亮度和色度分离)和 JPEG(压缩图像数据)。
2.3.1 RAW 格式
RAW 格式是传感器 ADC 直接输出的拜耳阵列数据,每个像素只包含一种颜色分量(R、G 或 B)。常见的位深有 8-bit、10-bit、12-bit 和 14-bit。RAW 数据占用带宽最小,但需要 ISP 进行去马赛克(demosaic)处理才能得到彩色图像。
2.3.2 YUV 格式
YUV 格式将亮度(Y)与色度(U/V)分离,便于压缩和传输。常见的子采样格式包括 YUYV(4:2:2)、UYVY、NV12(4:2:0)等。YUV 格式的数据量通常大于 RAW,但可以直接用于显示或编码。
| 格式 | 子采样 | 每像素位数 | 典型应用 |
|---|---|---|---|
| YUYV | 4:2:2 | 16 | USB 摄像头、V4L2 默认 |
| NV12 | 4:2:0 | 12 | 视频编码(H.264/H.265) |
| YV12 | 4:2:0 | 12 | 旧版编码器、软件处理 |
| UYVY | 4:2:2 | 16 | 部分 DSP 直接支持 |
2.3.3 JPEG 格式
部分高端传感器(如 OV5640、AR1335)内置 JPEG 编码器,可以直接输出压缩后的 JPEG 数据流。JPEG 格式的数据量是动态变化的,取决于图像内容。驱动需要处理变长数据包,并解析 JPEG 的 SOI(Start of Image)和 EOI(End of Image)标记。