2. Sensor硬件基础:CMOS图像传感器工作原理、关键参数与接口协议
做嵌入式图像开发,第一关就是搞懂Sensor本身。很多人一上来就调ISP,结果图像出问题,最后发现是Sensor配置错了。嗯,这活儿我干过不止一次。今天咱们就把CMOS传感器的基础掰开揉碎,讲清楚。
2.1 CMOS图像传感器工作原理
说白了,CMOS传感器就是个光电转换器。每个像素点(Pixel)就是一个光电二极管,光子打上去产生电子,电子再转成电压信号。我刚开始接触时觉得这东西很玄,其实核心就三步:
- 光电转换:光子撞击硅基,产生电子-空穴对
- 电荷积累:电子在像素的势阱里存起来,曝光时间越长,积累越多
- 读出转换:通过行选、列选,把每个像素的电压读出来,经过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放在中间,左边是工作原理,右边是接口,上面是参数,下面是实际应用。这样一看就明白整个链路。
好了,Sensor硬件基础就这些。记住:参数是死的,但配置是活的。拿到一块新Sensor,先看datasheet,再对着寄存器手册调参数。我每次都会先配好帧率和曝光,再调增益,最后检查接口时序。按这个顺序来,基本不会出大问题。