2. 摄像头传感器基础:像素时钟、行同步、帧同步、MIPI CSI-2 协议分层

摄像头传感器是图像采集链路的起点。理解其输出时序与协议分层,是驱动工程师设计 CSI 接收控制器与 DMA 传输策略的前提。本节从传感器物理输出信号出发,逐步深入到 MIPI CSI-2 的协议栈结构。

2.1 传感器并行输出时序三要素

传统 DVP(Digital Video Port)接口或内部处理单元通常依赖三个核心同步信号来组织像素数据流:像素时钟 (PCLK)、行同步 (HSYNC / HREF)、帧同步 (VSYNC)。理解这三者的时序关系,有助于后续理解 CSI-2 协议中数据包的分割与重组。

关键概念: 像素时钟是数据流的节拍器;行同步标记每一行像素的起止;帧同步标记每一帧图像的起止。三者共同定义了“像素 → 行 → 帧”的层次结构。
驱动提示: 在配置 CSI 接收端时,必须根据传感器数据手册正确设置 PCLK 的极性(上升沿/下降沿采样)、HSYNC 的有效电平以及 VSYNC 的触发方式。错误的极性配置会导致图像错位或数据丢失。
传感器并行输出时序关系图 VSYNC 帧有效(Frame Valid) HSYNC 行1 行2 行3 行4 行N PCLK DATA[7:0] P0~P7 P8~P15 P16~P23 P24~P31 P32~P39 时序说明: • VSYNC 高电平期间,HSYNC 脉冲序列定义了一帧内的所有行。 • 每个 HSYNC 高电平期间,PCLK 的每个有效沿驱动一个像素数据到数据总线上。

2.2 从并行到串行:MIPI CSI-2 的引入

随着分辨率与帧率的提升,并行接口的引脚数、EMI 和信号同步问题日益突出。MIPI CSI-2(Camera Serial Interface 2)采用差分串行传输,使用 D-PHY 物理层,以极少的引脚(通常 2~4 对数据 Lane + 1 对时钟 Lane)实现高速数据传输。

特性 传统 DVP 并行接口 MIPI CSI-2 串行接口
引脚数量 10~20+(数据+同步+时钟) 4~10(差分对)
最大速率 ~100 MHz PCLK 每 Lane 可达 1.5 Gbps (D-PHY v1.2) / 4.5 Gbps (D-PHY v2.0)
抗干扰能力 较弱,易受 EMI 影响 强,差分信号共模抑制
同步信号 独立 HSYNC/VSYNC 线 内嵌于数据包(短包)
适用场景 低分辨率、短距离 高分辨率、高帧率、长距离

2.3 MIPI CSI-2 协议分层架构

MIPI CSI-2 协议栈分为四层,从物理连接到应用数据,每一层都有明确的职责。驱动工程师需要重点关注 协议层(Protocol Layer) 的数据包格式,因为 CSI 接收控制器(如 STM32 DCMI / i.MX CSI / 专用 IP)正是基于此层进行数据解析与 DMA 触发。

MIPI CSI-2 协议分层架构 应用层(Application Layer) 像素格式定义(RAW8/10/12, YUV422, JPEG 等) 协议层(Protocol Layer) 数据包(长包/短包)封装与解析 ECC 校验、CRC 校验、虚拟通道(VC) 底层协议层(Low-Level Protocol) Lane 分配、字对齐、SoT/EoT 序列 物理层(D-PHY) 差分信号、时钟 Lane、数据 Lane、高速/低功耗模式 驱动关注重点:协议层的数据包结构直接决定了 CSI 接收控制器的解析逻辑与 DMA 传输粒度。

2.4 协议层核心:数据包结构

CSI-2 协议层定义了两种数据包:短包(Short Packet) 和 长包(Long Packet)。短包用于传输帧同步、行同步等控制信息;长包用于传输实际的像素数据。

2.4.1 短包格式

短包固定为 4 字节,无数据负载,用于传递事件或同步信息。

+--------+--------+--------+--------+
|  DI[7:0]  |  WC[7:0]  |  ECC[7:0]  |
+--------+--------+--------+--------+
DI (Data Identifier): 虚拟通道 ID (VC) + 数据类型 (DT)
WC (Word Count):      短包数据字段(如帧号、行号)
ECC (Error Correction Code): 前 16 位的汉明码校验

2.4.2 长包格式

长包包含包头、数据负载和包尾,是像素数据的主要载体。

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|  DI[7:0]  |  WC[15:8] |  WC[7:0]  |  ECC[7:0]  |  Data[0]  |  Data[1]  |  ...  |  Data[N]  |  CRC[15:8] |  CRC[7:0]  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|<------------------ 包头 (4 字节) ------------------>|<-- 数据负载 (WC 字节) -->|<-- 包尾 (2 字节) -->|
DI:  数据标识符 (VC + DT)
WC:  数据负载字节数 (16 位)
ECC: 包头校验
CRC: 数据负载循环冗余校验
驱动陷阱: 长包的 WC 字段指示的是 字节数,而非像素数。对于 RAW10 格式,每个像素占用 10 位,4 个像素打包为 5 字节。驱动在计算 DMA 传输长度时,必须根据像素格式进行字节对齐换算,否则会导致数据错位。

2.5 数据类型(DT)与虚拟通道(VC)

数据类型(Data Type, DT)标识了数据负载的格式,是协议层解析的关键。虚拟通道(Virtual Channel, VC)允许多个传感器或数据流共享同一物理链路。

DT 值 (Hex) 数据类型 说明
0x00~0x07 同步短包 帧起始 (FS)、帧结束 (FE)、行起始 (LS)、行结束 (LE)
0x08~0x0F 通用短包 事件触发、用户定义
0x10~0x17 RGB 格式 RGB444, RGB555, RGB565, RGB666, RGB888
0x18~0x1F YUV 格式 YUV420 8/10 位, YUV422 8/10 位
0x20~0x27 RAW 格式 RAW6, RAW7, RAW8, RAW10, RAW12, RAW14
0x28~0x2F 其他格式 JPEG, H.264, 用户定义
驱动提示: 在初始化传感器时,通常通过 I2C 配置其输出格式(如 RAW10)。CSI 接收控制器必须配置相同的 DT 值,才能正确解析数据。VC 值则用于多路复用场景,驱动需要根据 VC 号将数据路由到不同的 DMA 通道或内存缓冲区。

2.6 从传感器到 CSI 控制器的数据流

下图展示了从传感器像素阵列到 CSI 接收控制器 FIFO 的完整数据流路径,以及 DMA 引擎的介入点。

传感器 → CSI 接收控制器 → DMA 数据流 图像传感器 像素阵列 + PLL MIPI D-PHY 接收 串并转换 协议解析器 包解析 + ECC/CRC FIFO 数据缓存 DMA 请求 DMA 引擎 内存写入 系统内存 帧缓冲区 DMA 引擎通常在 FIFO 达到可编程阈值(如半满)时被触发,以突发模式将数据搬移至内存,减少 CPU 干预。

2.7 本章小结

  • 像素时钟、行同步、帧同步 是传感器输出时序的三大基石,定义了像素到行、行到帧的组织结构。
  • MIPI CSI-2 通过串行差分传输解决了并行接口的瓶颈,并将同步信号内嵌于数据包中。
  • 协议分层 从物理层到应用层逐级抽象,驱动工程师应重点掌握协议层的数据包格式(短包/长包)。
  • 数据类型(DT) 决定了像素格式的解析方式,虚拟通道(VC) 支持多路复用。
  • CSI 接收控制器内部的 FIFO 是连接协议解析与 DMA 引擎的桥梁,其阈值设置直接影响传输效率。