跳转到正文
知识笔记
通用📖 学习中

MIPI CSI 接口 ​

MIPI CSI-2(Camera Serial Interface 2)是 MIPI 联盟制定的摄像头接口标准,是目前嵌入式摄像头最主流的接口。


什么是 MIPI CSI-2 ​

CSI-2 是一种高速串行差分接口,用于将 Camera Sensor 输出的图像数据传输到 SoC 的 ISP 或视频输入模块。

Sensor ── MIPI CSI-2 ──> SoC (CSI 接收 → ISP → V4L2)

特点 ​

  • 高速:每 lane 可达 2.5 Gbps(D-PHY)或 4.5 Gbps(C-PHY v1.2)
  • 低功耗:HS(高速)模式和 LP(低功耗)模式切换
  • 差分信号:抗干扰能力强
  • 可扩展:1/2/4 lane 灵活配置

D-PHY vs C-PHY ​

D-PHY(最常用) ​

  • 使用差分对传输数据,每个 lane 一对线:Dp / Dn
  • 另需一对时钟线:ClkP / ClkN
  • 速率:每 lane 最高 2.5 Gbps(v1.2)
  • 编码:8b/9b 编码
  • 优点:简单、成熟、应用广
2 lane D-PHY 需要的信号线:
D0p / D0n   (数据 lane 0)
D1p / D1n   (数据 lane 1)
Clkp / Clkn (时钟 lane)
共 6 根线

C-PHY ​

  • 三态差分信号,每 lane 三根线
  • 不需要独立的时钟线(时钟嵌入数据中)
  • 速率:每 lane 最高 4.5 Gbps(v1.2)
  • 优点:相同带宽下 pin 数更少
  • 缺点:更复杂,兼容性稍差

Lane 数与带宽 ​

常见的 lane 配置:1 lane、2 lane、4 lane。

带宽计算 ​

以 D-PHY 为例:

总带宽 = lane 数 × 每 lane 速率
Lane 数每 lane 速率总带宽支持的典型分辨率
1 lane1.5 Gbps1.5 Gbps720P 30fps
2 lane1.5 Gbps3.0 Gbps1080P 30fps
4 lane1.5 Gbps6.0 Gbps4K 30fps / 1080P 120fps
4 lane2.5 Gbps10 Gbps4K 60fps

实际数据量估算 ​

以 1080P 30fps RAW10 为例:

每帧数据 = 1920 × 1080 × 10bit = 20,736,000 bit
每秒数据 = 20,736,000 × 30 = 622,080,000 bps ≈ 622 Mbps

2 lane D-PHY(每 lane 800Mbps)= 1.6Gbps,足够。

💡 实际传输有协议开销(8b/9b 编码、帧头帧尾等),通常按 1.5~2 倍余量计算。


CSI-2 协议层 ​

应用层          (像素数据、GPIO、中断)
    ↓
协议层          (像素格式、虚拟通道、数据类型)
    ↓
通道管理层      (通道分配、帧同步、行同步)
    ↓
低层协议层      (SoT/EoT、8b/9b 编码)
    ↓
物理层 (D-PHY/C-PHY)

数据类型 (Data Type) ​

DT 值类型说明
0x00 ~ 0x07同步FS、FE、LS、LE 等
0x08 ~ 0x0FGeneric通用 8/16/24 位数据
0x18YUV420 8bitYUV420 8 位
0x1EYUV422 8bitYUV422 8 位
0x28RAW8RAW 8 位
0x2BRAW10RAW 10 位
0x2CRAW12RAW 12 位

虚拟通道 (Virtual Channel) ​

CSI-2 支持最多 4 个虚拟通道(VC 0~3),可以在同一条物理链路上传输多个数据流。


D-PHY 传输模式 ​

HS(High Speed)模式 ​

  • 高速数据传输
  • 差分信号,摆幅约 200mV
  • 传输图像数据时使用

LP(Low Power)模式 ​

  • 低功耗,速率低(~10Mbps)
  • 单端信号,摆幅 1.2V
  • 控制和状态通信时使用
  • 传输帧间隙、控制指令

传输过程:LP 模式 → 进入 HS 模式 → 发送数据 → 回到 LP 模式


设备树配置 ​

Sensor 端输出配置dts
sensor@1a {
    port {
        sensor_out: endpoint {
            remote-endpoint = <&csi2_dphy_in>;
            data-lanes = <1 2 3 4>;  // 使用 4 条数据 lane
            clock-noncontinuous;     // 时钟非连续模式
            link-frequencies = /bits/ 64 <450000000>; // 450MHz
        };
    };
};
SoC 端接收配置dts
&csi2_dphy0 {
    status = "okay";
    ports {
        port@0 {
            reg = <0>;
            csi2_dphy_in: endpoint@0 {
                remote-endpoint = <&sensor_out>;
                data-lanes = <1 2 3 4>;
            };
        };
        port@1 {
            reg = <1>;
            csi2_dphy_out: endpoint {
                remote-endpoint = <&isp_in>;
            };
        };
    };
};

常见问题 ​

1. 接收不到数据 / DQBUF 超时 ​

  • MIPI D-PHY 未锁定
  • 检查 Sensor 是否正确输出数据
  • 检查 lane 数是否匹配
  • 检查 data-lanes 顺序是否正确

2. 画面花屏 / 错位 ​

  • lane 数不匹配(Sensor 输出 4 lane,接收端配置 2 lane)
  • 分辨率或像素格式不匹配
  • 行长度不对齐

3. 高速模式下数据错误 ​

  • 阻抗不匹配(PCB 走线阻抗应控制在 100Ω±10%)
  • 信号完整性问题(走线太长、过孔太多)
  • 电平不匹配(IO 电压不一致)

4. clock-noncontinuous ​

有些 Sensor 支持时钟非连续模式(帧间隔时钟停止),有些不支持。配置错了可能导致接收端 PLL 失锁。


调试方法 ​

查看 MIPI D-PHY 状态bash
cat /sys/kernel/debug/mipi-dphy/status
cat /sys/kernel/debug/rkisp1/stats
查看 CSI 中断计数bash
cat /proc/interrupts | grep csi
用示波器/逻辑分析仪看 MIPI 信号bash
# 需要专用的 MIPI 探头,普通示波器抓不到这么高速的差分信号

相关知识 ​

相关 Debug ​

相关实验 ​