第二章 图像传感器与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,整个链路一目了然。

CMOS传感器 → RAW数据 → 接口协议 知识结构图 入射光线 CMOS传感器核心 光电二极管 → 传输门 → 浮置扩散 → 源极跟随器 卷帘快门 / 全局快门 | Bayer阵列 RAW数据格式 Bayer排列(RGGB/BGGR)| 位深(10/12/14bit) MIPI CSI-2 D-PHY | 1~4 lane | 2.5Gbps/lane LVDS 串行/解串 | 1~16 lane | 1.0Gbps/lane ISP接收端(解串/解包 → RAW数据输入) 核心链路:光线 → 像素感光 → RAW数据 → 接口传输 → 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,换了一颗更高频率的传感器才搞定。