第二章 图像传感器与ISP接口:CMOS传感器工作原理、RAW数据格式、MIPI/LVDS接口协议
做ISP调优,第一件事不是调参数,而是搞懂你手里的传感器到底在干什么。我见过太多工程师拿着示波器抓波形,却说不清传感器输出的RAW数据长什么样。这一章,咱们就把CMOS传感器、RAW格式、MIPI和LVDS这几个硬骨头啃下来。
2.1 CMOS传感器工作原理
CMOS传感器,说白了就是一个巨大的像素阵列。每个像素就是一个光电二极管加一个放大器。光线照上去,光子转换成电子,电子再变成电压,最后被ADC量化成数字值。
我刚开始做安防时,总觉得传感器原理太基础,没必要深究。直到有一次,一个项目在低照度下画面全是横条纹,查了三天才发现是传感器读出时序和ISP的PCLK没对齐。嗯,从那以后我再也不敢跳过传感器手册的时序图了。
2.1.1 像素结构与感光过程
典型的CMOS像素结构包含以下几个部分:
- 光电二极管(PD):把光信号转成电荷
- 传输门(TG):控制电荷从PD转移到浮置扩散区
- 浮置扩散区(FD):临时存储电荷,并转换成电压
- 源极跟随器(SF):缓冲电压信号
- 行选择开关(RS):控制该行像素是否被读出
感光过程分四步:复位→曝光→传输→读出。你想想看,这其实和胶片相机很像,只是电子快门代替了机械快门。
关键指标:
- 满阱容量(FWC):像素能容纳的最大电子数,单位e⁻。安防传感器一般在10k~50k e⁻之间。
- 转换增益(CG):每个电子转换成多少微伏,单位μV/e⁻。高增益模式适合暗光,低增益模式适合亮光。
- 暗电流:没有光照时像素产生的漏电流,单位e⁻/s。温度每升高10°C,暗电流翻倍——这是安防相机夏天噪点多的根本原因。
2.1.2 卷帘快门与全局快门
安防监控里99%的CMOS传感器用的是卷帘快门(Rolling Shutter)。什么意思呢?就是像素行逐行曝光、逐行读出,不是所有像素同时曝光。
我曾经在调试一个高速球机时,发现抓拍快速移动的车辆时,车灯被拉成了斜线。这就是卷帘快门的典型问题——果冻效应。解决方案要么换全局快门传感器,要么在ISP里做运动补偿。
| 快门类型 | 曝光方式 | 优点 | 缺点 | 安防适用场景 |
|---|---|---|---|---|
| 卷帘快门 | 逐行曝光 | 像素密度高、成本低 | 果冻效应、运动畸变 | 普通监控、人脸抓拍(低速) |
| 全局快门 | 同时曝光 | 无果冻效应、适合高速 | 像素尺寸大、成本高 | 高速抓拍、车牌识别 |
2.2 RAW数据格式
传感器输出的原始数据叫RAW。它没经过任何处理,就是每个像素的原始亮度值。我习惯把RAW比作食材——你买回来的菜是什么样,RAW就是什么样。ISP调优就是厨师做菜的过程。
2.2.1 Bayer阵列与色彩滤波
单个像素只能感知亮度,分不清颜色。那怎么得到彩色图像呢?答案是在像素表面覆盖一层色彩滤波阵列(CFA),最常用的是Bayer阵列。
Bayer阵列的排列是:RG/GB。也就是一行是RGRGRG...,下一行是GBGBGB...。绿色像素占一半,红色和蓝色各占四分之一。为什么绿色多?因为人眼对绿色最敏感。
避坑指南:我曾经在选型时忽略了一个细节——不同厂家的Bayer排列顺序可能不同。有的用RGGB,有的用BGGR。如果ISP的Bayer解析顺序和传感器不匹配,出来的图像颜色会完全错乱。所以拿到新传感器,第一件事就是确认Bayer顺序。
2.2.2 RAW数据位深与存储
常见的RAW位深有10bit、12bit、14bit。安防监控里12bit最普遍。位深越大,动态范围越宽,但数据量也越大。
举个例子:一个200万像素(1920×1080)的传感器,输出12bit RAW,一帧的数据量是:
1920 × 1080 × 12bit = 24,883,200 bit ≈ 3.1 MB
如果帧率是30fps,每秒数据量就是93MB。这个数字你记着,后面讲MIPI带宽时会用到。
RAW数据在内存里怎么存?常见的有两种方式:
- 打包模式:12bit数据连续排列,每两个12bit占3个字节。节省空间,但处理时要做位操作。
- 对齐模式:每个12bit用16bit(2字节)存储,高4位补0。浪费空间,但CPU处理方便。
我个人习惯在调试阶段用对齐模式,方便看RAW数据。量产时再改成打包模式,节省带宽。
2.3 MIPI/LVDS接口协议
传感器把RAW数据准备好了,怎么传给ISP呢?目前安防领域主流就两种接口:MIPI和LVDS。
2.3.1 MIPI CSI-2接口
MIPI CSI-2是手机和安防相机最常用的接口。它用差分信号传输,抗干扰能力强,而且支持多通道(lane)并行传输。
MIPI的物理层叫D-PHY,包含以下几根线:
- 时钟线(CLK+ / CLK-):一对差分时钟
- 数据线(DATA0+ / DATA0- ... DATA3+ / DATA3-):1~4对差分数据线
MIPI的传输模式有两种:
- 高速模式(HS):传输数据时用,电压摆幅小(约200mV),速率高(最高2.5Gbps/lane)
- 低功耗模式(LP):传输控制命令时用,电压摆幅大(约1.2V),速率低
注意:MIPI的PCB走线要求很严格。差分对之间要等长,阻抗要控制在100Ω±10%。我见过一个项目,因为MIPI走线长了2mm,导致信号眼图闭合,图像出现随机花屏。后来重新Layout才解决。
2.3.2 LVDS接口
LVDS(低压差分信号)是更早的接口标准,现在主要用在一些高分辨率、高帧率的安防传感器上。它的原理和MIPI类似,也是差分传输,但协议更简单。
LVDS的典型配置:
- 每个通道包含一对差分数据线和一对差分时钟线
- 数据通过串行化(Serializer)把并行数据转成串行
- 接收端用解串器(Deserializer)恢复数据
我做过一个4K@60fps的项目,MIPI的带宽不够用,最后换成了LVDS接口,用了8对数据线才跑下来。
2.3.3 MIPI vs LVDS 对比
| 对比项 | MIPI CSI-2 | LVDS |
|---|---|---|
| 最大速率 | 2.5Gbps/lane(D-PHY) | 1.0Gbps/lane |
| 通道数 | 1~4 lane | 1~16 lane |
| 协议复杂度 | 较复杂(含包结构、ECC、CRC) | 简单(仅传输数据) |
| 抗干扰能力 | 强(差分+屏蔽) | 强(差分) |
| PCB布线难度 | 高(等长+阻抗控制) | 中 |
| 安防主流应用 | 1080P~4K@30fps | 4K@60fps以上 |
2.4 知识结构总览
下面这张图把本章的核心知识点串起来了。从光线进入传感器,到RAW数据输出,再到通过MIPI/LVDS传给ISP,整个链路一目了然。
2.5 实战中的常见问题
最后,分享几个我在项目中踩过的坑,希望能帮你少走弯路。
问题1:MIPI信号质量差导致图像闪烁
我曾经调试一个4路NVR,其中一路画面间歇性闪烁。用示波器抓MIPI信号,发现眼图有毛刺。原因是PCB上MIPI走线旁边有一根高频时钟线,产生了串扰。解决办法:重新Layout,把MIPI走线包地处理,问题解决。
问题2:RAW数据Bayer顺序搞错
有一次拿到新传感器,直接套用之前的ISP配置,结果图像颜色完全不对——草地是紫色的,天空是橙色的。查了半天,发现新传感器用的是BGGR排列,而ISP配置的是RGGB。改一个宏定义就搞定了。所以,拿到新传感器,第一件事就是确认Bayer顺序。
问题3:LVDS时钟频率计算错误
一个4K@60fps的项目,LVDS接口怎么调都不出图。后来发现是时钟频率算错了。公式很简单:PCLK = 水平像素 × 垂直像素 × 帧率 × 位深 / 通道数。但要注意,水平像素要算上消隐区(blanking),不能只算有效像素。加上消隐后,时钟频率从估算的600MHz变成了实际需要的720MHz,换了一颗更高频率的传感器才搞定。