MIPI CSI-2 摄像头接口:D-PHY/C-PHY、帧包结构与 Lane 合并
更新时间:2026-09-19。前置:MIPI DSI、SerDes 8b/10b。CSI-2(Camera Serial Interface)是与 DSI 同源物理层、但方向相反(传感器→SoC)的摄像头接口。
本文要回答的问题
- 一帧图像在 CSI-2 上怎么分包,FS/FE/LS/LE 是什么?
- 多 lane 怎么把字节流拆开再正确合并?
- D-PHY 和 C-PHY 有什么不同?
- lane 映射、字节对齐和 ECC/CRC 错误有哪些坑?
一、物理层:D-PHY 与 C-PHY
- D-PHY:1 对连续(或非连续)时钟 lane + 1~4 对数据 lane,源同步、HS 差分低摆幅传图像,LP 单端传握手/低功耗;每 lane 双向能力(通常传感器只向 SoC 发)。
- C-PHY:较新,用 3 线一组(trio)的三相编码,没有独立时钟(时钟嵌在符号里),每组约 2.5G symbols/s 传 ~2.28 Gbps,带宽密度更高,常 1~3 个 trio。接收端要做符号判决和解码,比 D-PHY 复杂。
- 与 DSI 一样有 LP-11 停止态、SoT(Start of Transmission)握手;空闲时 lane 回 LP,连续时钟模式下时钟 lane 可保持 HS。
二、帧/包结构(接收端状态机核心)
CSI-2 把图像组织成分层:像素 → 字节 → 包 → lane。包分两类:
- 短包(4 字节):Data ID(VC+DT) + 2 字节 + ECC。用作帧/行同步码:
- Frame Start(FS, 0x00)/ Frame End(FE, 0x01):载荷是帧号。
- Line Start(LS, 0x02)/ Line End(LE, 0x03)(部分格式用)。
- 长包:包头(Data ID + Word Count + ECC)+ payload(一整行像素等)+ 16 位 CRC。
一帧典型序列:
bash
LP-11 → SoT(HS 进入)
FS 短包(帧号)
长包(第 0 行像素, payload=一行字节数)
长包(第 1 行)
... 每行长包;可选 LS/LE
FE 短包(同一帧号)
EoT → 回 LP接收端靠 FS/FE 界定帧、用长包 Word Count 收齐一行、用帧号检测丢帧。
三、数据类型与虚拟通道
- Data Type(DT,6 位):标明像素打包方式,如 RAW8/RAW10/RAW12、YUV422 8-bit、RGB565/RGB888、还有用户自定义/嵌入式数据(如 8-bit embedded 传传感器元数据)。RAW10 是每像素 10 位按 4 像素 5 字节紧凑打包,接收端需正确解包。
- 虚拟通道(VC,2 位,CSI-2 v1.3 扩展到 16 条):同一组 lane 上时分复用多路传感器/数据(如主摄+景深或图像+嵌入行),用包头 VC 区分,接收端按 VC 分流到不同缓冲。
四、多 lane 合并与字节对齐
传感器把一条长包字节流按字节轮询分到 N 条 lane(lane0 发字节 0、N、2N…,lane1 发 1、N+1…),接收端做相反操作:
bash
传感器像素打包 → 字节流 → round-robin 分到 N lane
SoC: 每 lane 去 SerDes → 字节对齐(找同步序列) → 按 lane 编号交错重组
→ 包解析(ECC/CRC) → 按 VC/DT 解包 → DMA 写入内存帧缓冲- 字节/字对齐:每 lane HS 开始有同步序列(B8 hex 等),接收端的 byte aligner 用它锁定字节边界;没对齐则后续全错位。
- lane 去偏移(deskew):多 lane 走线/延迟不同,接收端校准使各路字节在同一时刻合并(类似 PCIe 的 deskew,见 LTSSM)。
- lane 可交换/极性反转:很多 CSI-2 RX 支持 lane 映射和极性可配,应对布线交换;映射必须和物理一致。
- 数据到达后经 DMA 写入帧缓冲(见 显示/帧缓冲 DMA、DMA 突发)。
五、错误检测与处理
- 包头 ECC:可纠 1 位、检 2 位错误;包头决定 VC/DT/长度,错了最致命。
- payload CRC:检一行数据错误(不纠正,通常报错/丢行统计)。
- 接收端还监控:SoT 错误、同步丢失、Word Count 不符(行长度对不上)、ECC/CRC 错误、FIFO 溢出(来不及 DMA)。错误计数暴露给驱动/调试,错误严重时丢弃整帧并重新等 FS。
六、常见的坑
- lane 映射/顺序配错:物理 lane 交换而 RX 映射没改,重组后像素错乱或无法对齐。
- 极性反转未配置:差分对 Dp/Dn 接反且 PHY 未开反转,全 0/错。
- 字节未对齐就解析:没正确检测同步序列,整帧错位。
- 多 lane deskew 未校准:高速下各路偏移导致周期性错行。
- 数据类型/位宽理解错:RAW10 当 RAW8 解,图像花绿、宽度不对。
- Word Count 与行宽不符:传感器行打包配置和 RX 期望不一致,行错位累积。
- 帧号不检查:FS/FE 丢帧无感知,画面撕裂却定位不到。
- VC 复用不分流:多路复用数据全写一个缓冲。
- 连续/非连续时钟模式不匹配:传感器停时钟而 RX 期望连续,丢 SoT。
- FIFO/带宽不足溢出:高分辨率高帧率 DMA/内存带宽跟不上,报溢出丢行(见 多通道 DMA)。
- LP/HS 时序与 I2C 配置不一致:CSI 控制通道通常走 I2C(见 I2C 主机),分辨率/帧率/lane 数由 I2C 配,配错则物理流不匹配。
- C-PHY 当 D-PHY 配:三相编码与差分对模型完全不同,PHY 模式选错无数据。
相关与延伸
同源物理层/显示方向见 MIPI DSI;SerDes 基础见 8b/10b;多 lane 对齐类比 PCIe LTSSM;控制通道见 I2C 主机;帧写入见 帧缓冲 DMA。
总结
MIPI CSI-2 从传感器向 SoC 串行传图,物理层可用带独立时钟、1~4 差分 lane 的 D-PHY 或三相编码无独立时钟的 C-PHY;一帧由「FS 帧起始短包—若干携带一行像素的长包—FE 帧结束短包」构成,短包带帧号和 ECC、长包有 Word Count+payload+CRC,像素按 RAW8/10/12 等数据类型打包并用 VC 虚拟通道复用多路;多 lane 由传感器按字节轮询分发、接收端先逐 lane 用同步序列做字节对齐和 deskew 再按 lane 编号交错重组后 DMA 入帧缓冲——lane/极性映射错、字节未对齐、RAW 打包解错和带宽溢出是四大花屏/丢帧根因。