2. Sensor硬件基础:CMOS图像传感器工作原理、关键参数与接口协议

做嵌入式图像开发,第一关就是搞懂Sensor本身。很多人一上来就调ISP,结果图像出问题,最后发现是Sensor配置错了。嗯,这活儿我干过不止一次。今天咱们就把CMOS传感器的基础掰开揉碎,讲清楚。

2.1 CMOS图像传感器工作原理

说白了,CMOS传感器就是个光电转换器。每个像素点(Pixel)就是一个光电二极管,光子打上去产生电子,电子再转成电压信号。我刚开始接触时觉得这东西很玄,其实核心就三步:

  1. 光电转换:光子撞击硅基,产生电子-空穴对
  2. 电荷积累:电子在像素的势阱里存起来,曝光时间越长,积累越多
  3. 读出转换:通过行选、列选,把每个像素的电压读出来,经过ADC变成数字值

这里有个关键点——卷帘快门(Rolling Shutter)。CMOS传感器不是所有像素同时曝光的,而是逐行扫描。我踩过这个坑:拍快速运动的物体时,图像会变形,这就是卷帘效应。你想想看,拍高速旋转的风扇,扇叶会变成弧形,就是这个原因。

核心概念:CMOS传感器每个像素包含一个放大器,可以独立读出。这跟CCD的全局传输不同,CMOS的优势是功耗低、速度快,但噪声控制相对复杂。

2.2 关键参数详解

调Sensor驱动时,这几个参数你必须烂熟于心。我每次拿到新Sensor,第一件事就是对着datasheet核对这几个值。

2.2.1 帧率(Frame Rate)

帧率就是一秒钟能出多少帧图像。单位fps(frames per second)。公式很简单:

帧率 = 1 / (一行时间 × 总行数)

一行时间 = 水平消隐 + 有效像素宽度。总行数 = 垂直消隐 + 有效行数。

我在项目中遇到过,客户要求30fps,但Sensor配置完只有25fps。查了半天,发现是垂直消隐(VBlank)设太大了。调小VBlank,帧率就上去了。但要注意,消隐太小会导致读出不稳定。

2.2.2 曝光(Exposure)

曝光时间决定了图像亮度。CMOS的曝光控制有两种方式:

  • 行曝光(Line-based):以行为单位设置曝光时间,适合卷帘快门
  • 帧曝光(Frame-based):整帧同时曝光,需要全局快门Sensor

曝光时间不能超过一帧的总时间。举个例子,30fps时一帧约33ms,曝光时间最大也就33ms。我曾经把曝光设到40ms,结果图像出现奇怪的条纹——因为曝光跨帧了。

避坑指南:曝光时间 + 读出时间 ≤ 帧周期。否则会出现帧率下降或图像撕裂。我曾经在调试夜视模式时忽略了这一点,折腾了两天才发现是曝光溢出。

2.2.3 增益(Gain)

增益就是放大信号。分两种:

  • 模拟增益(Analog Gain):在ADC之前放大,噪声相对小
  • 数字增益(Digital Gain):在ADC之后放大,会放大噪声

我个人习惯:优先用模拟增益,实在不够再补数字增益。增益每增加一倍,信噪比下降约6dB。你想想看,暗光下图像噪点多,就是因为增益拉太高了。

增益类型 放大位置 噪声影响 推荐场景
模拟增益 ADC前 低 暗光、低噪声需求
数字增益 ADC后 高 亮度微调、应急

2.2.4 分辨率(Resolution)

分辨率就是像素阵列的大小,比如1920×1080。但要注意,Sensor实际像素可能比输出分辨率大——因为有有效像素区和光学黑区(OB)。

OB区用于校准黑电平,不能用来成像。我见过有人把OB区的数据当成图像输出,结果画面边缘全是黑的。嗯,这其实是个低级错误,但新手容易犯。

2.3 接口协议:MIPI CSI-2 与 DVP

Sensor和SoC之间怎么传数据?主流就两种接口。我两种都调过,各有各的脾气。

2.3.1 MIPI CSI-2

MIPI CSI-2是目前的主流,差分信号传输,速度快、抗干扰强。核心特点:

  • 差分对(D-PHY):一对线传一个通道,速率可达2.5Gbps/lane
  • 多通道:1/2/4 lane可选,带宽叠加
  • 低功耗:有ULPS(超低功耗状态)模式

CSI-2的数据包结构分三层:

物理层(PHY)→ 通道管理层(Lane Management)→ 协议层(Protocol)
协议层又分:像素/字节打包 → 数据包(长包/短包)

我在调试MIPI时最常遇到的问题就是时钟校准。CSI-2的时钟和数据线需要对齐,如果PCB走线不等长,就会出现误码。有一次图像出现随机噪点,查了三天,最后发现是D0P和D0N走线差了5mm。

调试技巧:用示波器看MIPI眼图,眼图张开越大越好。如果眼图闭合,先检查端接电阻(100Ω差分匹配)和走线长度。

2.3.2 DVP(Digital Video Port)

DVP是并行接口,老Sensor还在用。一根线传一个bit,8/10/12位并行。特点:

  • 并行传输:数据线多(8~12根),PCB布线麻烦
  • 同步信号:VSYNC(帧同步)、HSYNC(行同步)、PCLK(像素时钟)
  • 速度瓶颈:一般不超过100MHz,分辨率高了扛不住

DVP调试相对简单,但容易受干扰。我遇到过VSYNC抖动导致图像错位,加了个上拉电阻就好了。说白了,DVP就是直来直去,MIPI则更讲究信号完整性。

对比项 MIPI CSI-2 DVP
信号类型 差分 单端
最大速率 2.5Gbps/lane ~100MHz
抗干扰 强 弱
布线复杂度 低(线少) 高(线多)
适用场景 高分辨率、高速 低分辨率、低成本

2.4 知识结构总览

下面这张图把本章的核心知识点串起来了。我画图时习惯把Sensor放在中间,左边是工作原理,右边是接口,上面是参数,下面是实际应用。这样一看就明白整个链路。

CMOS图像传感器知识结构图 CMOS图像传感器 光电转换 电荷积累 读出 + ADC MIPI CSI-2 DVP 帧率 曝光 增益 分辨率 Sensor驱动配置 → ISP协同 核心链路:光电转换 → 参数控制 → 接口传输 → ISP处理 每个环节都影响最终图像质量,驱动配置必须精准

好了,Sensor硬件基础就这些。记住:参数是死的,但配置是活的。拿到一块新Sensor,先看datasheet,再对着寄存器手册调参数。我每次都会先配好帧率和曝光,再调增益,最后检查接口时序。按这个顺序来,基本不会出大问题。