3. Sensor与ISP的接口协议:MIPI CSI-2协议详解,RAW数据格式与Lane速率计算
好,我们进入第三章。这一章讲的是Sensor和ISP之间的“高速公路”——MIPI CSI-2协议。说白了,就是Sensor拍到的原始数据怎么传给ISP。我做了这么多年ISP,发现很多性能问题其实都出在这条“路”上。带宽不够、时序不对、数据格式搞错,都会让后面的图像处理白费功夫。
3.1 MIPI CSI-2协议概览
MIPI CSI-2是目前移动端和嵌入式领域最主流的摄像头接口协议。它定义了物理层、协议层和应用层。我们ISP工程师最关心的是协议层——数据怎么打包、怎么传输。
CSI-2的传输结构分三层:
- PHY层(物理层):D-PHY或C-PHY,负责电气信号和时钟同步。D-PHY最常见,用差分信号对传输。
- 协议层(Protocol Layer):定义数据包格式,包括短包(Short Packet)和长包(Long Packet)。
- 应用层(Application Layer):定义数据内容,比如RAW8、RAW10、RAW12等格式。
核心要点:CSI-2是“包”传输的。每个帧由一系列包组成。短包传控制信息(帧开始、帧结束、行开始),长包传图像数据。
我遇到过不少工程师,调试时发现图像错位,最后查出来是短包解析出了问题。嗯,这里要注意:短包的ECC(纠错码)一定要校验,否则一个bit错误就会导致整帧数据错位。
3.2 RAW数据格式详解
Sensor输出的RAW数据,说白了就是每个像素点的原始电压值。但不同Sensor的像素排列方式不一样,这就引出了不同的RAW格式。
3.2.1 Bayer格式
Bayer是最经典的格式。每个像素只采集一种颜色分量,按RGGB模式排列。为什么是RGGB?因为人眼对绿色最敏感,所以绿色像素占一半。
| 像素位置 | R | Gr | Gb | B |
|---|---|---|---|---|
| 第1行 | R | Gr | R | Gr |
| 第2行 | Gb | B | Gb | B |
| 第3行 | R | Gr | R | Gr |
| 第4行 | Gb | B | Gb | B |
Bayer格式的ISP处理流程很成熟。但有个坑:Gr和Gb虽然都是绿色,但实际增益可能不同。我曾经在一个项目中,因为没区分Gr和Gb,导致图像出现“棋盘格”噪声。后来在ISP的Bayer处理阶段做了Gr/Gb平衡才解决。
3.2.2 RGB-IR格式
RGB-IR是在Bayer基础上,把部分绿色像素换成红外(IR)像素。这种Sensor可以同时采集可见光和红外光,常用于安防、人脸识别场景。
典型的RGB-IR排列:
- R-Gr-IR-B:一个绿色像素换成IR
- R-IR-G-B:两个绿色像素都换成IR
注意:RGB-IR的ISP处理比Bayer复杂。因为IR像素会“污染”可见光通道。我建议在ISP的Bayer域做IR补偿,否则颜色会偏紫。具体做法是:用相邻IR像素的值减去可见光通道的串扰量。
3.2.3 RCCB格式
RCCB是另一种变体。它把Bayer中的绿色像素换成两个Clear(透明)像素。Clear像素对全光谱敏感,进光量更大,适合低光场景。
RCCB的排列:
- R-C-C-B:两个Clear像素在中间
RCCB的优点是低光性能好,但缺点也很明显:颜色重建难度大。Clear像素没有颜色信息,需要从相邻的R和B像素“猜”出颜色。我做过一个RCCB项目,调试颜色矩阵花了整整两周。说白了,RCCB的ISP算法比Bayer复杂得多。
3.3 Lane速率与带宽计算
这是本章最实用的部分。你设计系统时,必须算清楚:Sensor输出的数据量有多大?MIPI Lane的速率够不够?
3.3.1 带宽计算公式
先给公式:
总数据率 = 分辨率 × 帧率 × 每像素bit数 × (1 + 消隐开销)
每Lane速率 = 总数据率 / Lane数
举个例子:
- 分辨率:1920 × 1080(1080p)
- 帧率:30fps
- 每像素bit数:10bit(RAW10)
- 消隐开销:约20%(HBlank + VBlank)
计算:
总数据率 = 1920 × 1080 × 30 × 10 × 1.2
= 746,496,000 bps
≈ 746 Mbps
如果用4条Lane,每条Lane的速率:
每Lane速率 = 746 Mbps / 4 = 186.5 Mbps
D-PHY的每个Lane最高可以跑到2.5 Gbps(D-PHY v2.0)。186.5 Mbps完全没问题。
经验之谈:我建议留30%的余量。比如计算出来需要746 Mbps,实际选型时按1 Gbps以上考虑。因为消隐开销可能比20%大,而且Sensor输出可能有抖动。
3.3.2 不同RAW格式的带宽对比
| 格式 | 每像素bit数 | 1080p@30fps带宽 | 4K@30fps带宽 |
|---|---|---|---|
| RAW8 | 8 | 597 Mbps | 2.39 Gbps |
| RAW10 | 10 | 746 Mbps | 2.99 Gbps |
| RAW12 | 12 | 896 Mbps | 3.58 Gbps |
| RAW14 | 14 | 1.04 Gbps | 4.18 Gbps |
你看,4K@30fps用RAW12就需要3.58 Gbps。如果用4条Lane,每条Lane要跑895 Mbps。D-PHY v1.2的Lane速率上限是1 Gbps,勉强够。但如果你用8条Lane,每条只要447.5 Mbps,更稳妥。
3.3.3 Lane数选择策略
我个人的习惯是:
- 2 Lane:适合720p及以下,或者低帧率场景
- 4 Lane:1080p到4K的主流选择
- 8 Lane:4K高帧率或8K场景
但要注意:Lane数越多,PCB布线越复杂。8条Lane的等长布线是个噩梦。我建议能用4条就别用8条,除非带宽实在不够。
3.4 知识结构图:MIPI CSI-2与RAW数据流
下面这张图展示了从Sensor输出到ISP接收的完整数据流。我把它画成流程图,方便你理解。
3.5 实际项目中的避坑指南
最后,分享几个我在项目中踩过的坑:
坑1:消隐时间不够
我曾经在一个项目中,Sensor输出的HBlank时间太短,导致ISP来不及处理上一行数据。结果图像出现“撕裂”。解决办法:在Sensor配置中增加HBlank的像素数,或者降低MIPI时钟频率。
坑2:Lane速率不匹配
Sensor和ISP的MIPI PHY必须支持相同的Lane速率。我遇到过Sensor支持2.5 Gbps,但ISP只支持1.5 Gbps。结果只能降速运行,带宽不够,被迫降低帧率。选型时一定要确认双方的PHY能力。
建议:调试MIPI时,先用示波器看Lane的眼图。眼图张开不够,说明信号质量有问题。常见原因:PCB走线不等长、阻抗不匹配、串扰过大。
嗯,这一章的内容就这些。MIPI CSI-2和RAW格式是ISP系统的基础,搞懂了这些,后面的ISP管线设计才能顺利推进。