3. 摄像头硬件接口

MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式领域最主流的摄像头图像数据传输协议。它定义了从图像传感器到应用处理器(AP)或 ISP 之间的高速串行数据链路。理解 CSI-2 协议栈、D-PHY 物理层特性以及数据包结构,是驱动开发人员正确配置摄像头并实现稳定 DMA 采集的前提。

3.1 MIPI CSI-2 协议栈分层

CSI-2 协议采用分层架构,从上到下依次为:应用层、协议层(像素/字节到包转换)、链路层(LLP,Low-Level Protocol)和物理层(D-PHY / C-PHY)。驱动开发最常接触的是协议层与物理层。

驱动视角: 驱动需要配置 D-PHY 的时钟频率、通道数(Lane数)、虚拟通道(VC)映射以及数据包的超时与错误处理。物理层参数直接影响 DMA 传输的带宽与帧率。
MIPI CSI-2 协议栈分层架构 应用层 (Application Layer) 像素数据格式定义(RAW8/10/12, YUV, JPEG) 协议层 (Protocol Layer) 像素/字节打包为数据包,虚拟通道(VC)管理 链路层 (LLP - Low-Level Protocol) 包边界、Escape模式、ECC/CRC校验 物理层 (D-PHY / C-PHY) 差分信号、时钟 Lane、数据 Lane、高速/低功耗模式

3.2 D-PHY 物理层详解

D-PHY 是 CSI-2 最常用的物理层标准,采用差分信号传输,包含一个时钟 Lane 和 1~4 个数据 Lane。每个 Lane 由一对差分线(Dp/Dn)组成。

3.2.1 关键电气特性

参数 高速模式 (HS) 低功耗模式 (LP)
信号幅度 200 mV(差分) 1.2 V(单端)
传输速率 80 Mbps ~ 4.5 Gbps / Lane ~10 Mbps
功耗 高 极低
用途 图像数据突发传输 控制命令、总线周转(BTA)

3.2.2 数据 Lane 与时钟 Lane 关系

时钟 Lane 提供 DDR(Double Data Rate)时钟,数据 Lane 在时钟的上升沿和下降沿各采样一次。驱动配置时需确保时钟频率与数据速率匹配:

// 典型配置示例:4 Lane, 每 Lane 1 Gbps
// 时钟频率 = 数据速率 / 2 = 500 MHz
// 总带宽 = 1 Gbps * 4 = 4 Gbps
// 有效像素带宽需扣除协议开销(约 10%~15%)
驱动配置要点: 在设备树或平台数据中,必须正确设置 data-lanes 属性(如 <1 2 3 4>)和 clock-noncontinuous 标志。时钟连续模式用于高速连续传输,非连续模式用于省电。

3.3 数据包格式

CSI-2 数据以包(Packet)为单位传输,分为长包(Long Packet)和短包(Short Packet)。长包用于传输像素数据,短包用于传输帧同步、行同步等控制信息。

3.3.1 长包结构

CSI-2 长包(Long Packet)结构 SoT 起始 PHI (VC+DT+WC) 数据负载 (Payload) 像素数据,长度由 WC 指定 CRC 校验 EoT 结束

3.3.2 包头部(PHI)字段解析

字段 位数 说明
VC (Virtual Channel) 2 虚拟通道标识,支持最多 4 个独立数据流
DT (Data Type) 6 数据类型,如 RAW10 (0x2B)、YUV422 8bit (0x1E)
WC (Word Count) 16 数据负载的字节数(长包)或保留(短包)
ECC 8 错误校正码,可纠正 1 bit 错误,检测 2 bit 错误

3.3.3 短包结构

短包没有数据负载和 CRC,仅包含 PHI(VC+DT+WC)和 ECC。DT 字段用于区分帧起始(FS,Frame Start)、帧结束(FE,Frame End)、行起始(LS,Line Start)等事件。

// 常见短包 DT 值
#define CSI2_DT_FRAME_START  0x00  // 帧起始
#define CSI2_DT_FRAME_END    0x01  // 帧结束
#define CSI2_DT_LINE_START   0x02  // 行起始
#define CSI2_DT_LINE_END     0x03  // 行结束
驱动调试常见问题: 如果 DMA 采集到的图像出现错位、颜色混乱或帧不完整,首先检查 PHI 中的 DT 是否与传感器配置一致。例如,传感器输出 RAW10 但驱动配置为 RAW8,会导致每个像素的位宽错位。

3.4 虚拟通道(Virtual Channel)

虚拟通道允许在同一个 CSI-2 物理链路上传输最多 4 个独立的图像数据流。每个数据包头部中的 VC 字段(2 bit)标识该包属于哪个通道。驱动通过 VC 号将不同数据流路由到不同的 DMA 通道或内存缓冲区。

3.4.1 虚拟通道应用场景

  • 多摄像头复用: 多个传感器共享同一 CSI-2 接口,每个传感器分配一个 VC。
  • 多数据流输出: 单个传感器同时输出 RAW 和 YUV 数据流,分别使用不同 VC。
  • 元数据通道: 使用 VC 传输传感器统计信息或嵌入式数据。

3.4.2 驱动中的 VC 配置

// 设备树示例:双摄像头共享 CSI-2
&csi2 {
    status = "okay";
    ports {
        port@0 {
            reg = <0>;
            endpoint {
                remote-endpoint = <&sensor_a_ep>;
                data-lanes = <1 2>;
            };
        };
        port@1 {
            reg = <1>;
            endpoint {
                remote-endpoint = <&sensor_b_ep>;
                data-lanes = <3 4>;
            };
        };
    };
};

// 传感器 A 输出 VC=0,传感器 B 输出 VC=1
// 驱动在接收时根据 VC 字段分发数据
虚拟通道(VC)多路复用示意图 Sensor A VC=0 Sensor B VC=1 MUX CSI-2 链路 接收端 (AP/ISP) VC 解复用

3.5 本章小结

  • MIPI CSI-2 采用分层协议栈,驱动开发重点关注协议层(包格式)和物理层(D-PHY 参数)。
  • D-PHY 使用差分信号,支持高速(HS)和低功耗(LP)两种模式,驱动需配置 Lane 数、时钟频率和连续/非连续模式。
  • 数据包分为长包(含 PHI、Payload、CRC)和短包(仅 PHI+ECC),PHI 中的 VC、DT、WC 字段是驱动解析的关键。
  • 虚拟通道(VC)支持多数据流复用,驱动通过 VC 号将数据路由到正确的 DMA 通道或缓冲区。