2、摄像头硬件基础:从镜头到数据流
做 Camera 驱动,不懂硬件,就像修车不看发动机。我见过不少软件工程师,拿着 datasheet 调寄存器,调了半天图像出不来,最后发现是 sensor 电源没供上。嗯,这章我们就来把摄像头模组的底子打牢。
2.1 摄像头模组三大件:Lens、Sensor、ISP
一个完整的摄像头模组,说白了就三个核心部件。我习惯把它们比作「眼睛、视网膜、视觉皮层」。
| 组件 | 英文 | 类比 | 核心作用 |
|---|---|---|---|
| 镜头 | Lens | 眼睛的晶状体 | 聚焦光线,决定视场角和景深 |
| 图像传感器 | Image Sensor | 视网膜 | 光电转换,将光信号转为电信号 |
| 图像信号处理器 | ISP | 视觉皮层 | 处理原始数据,输出高质量图像 |
2.1.1 Lens(镜头)
镜头负责把外界的光线汇聚到 sensor 表面。参数很多,但做驱动开发你主要关注两个:焦距和光圈。焦距决定了你能看多远、视角多宽;光圈影响进光量和景深。
2.1.2 Image Sensor(图像传感器)
这是模组的心脏。目前主流是 CMOS 传感器。它的核心任务就是「光电转换」。每个像素点(Pixel)就是一个感光单元,把光子转换成电子,再通过 ADC(模数转换器)变成数字信号。
你想想看,一个 500 万像素的 sensor,就有 500 万个这样的感光单元。它们怎么排列?这就引出了下一个关键概念——Bayer 格式。
2.1.3 ISP(图像信号处理器)
Sensor 出来的原始数据(Raw Data)是不能直接给人看的。它需要 ISP 来处理。ISP 可以集成在 sensor 内部,也可以是独立的芯片,或者用 CPU/GPU 来做。
ISP 干的活包括:坏点校正、黑电平校正、去马赛克、白平衡、自动曝光、降噪等等。我刚开始做驱动时,以为 ISP 就是调调亮度,后来才发现,一个优秀的 ISP 算法,能把 100 块的 sensor 拍出 500 块的效果。
2.2 感光原理与 Bayer 格式
2.2.1 感光原理
每个像素只能感知光的强度,不能区分颜色。那彩色图像怎么来的?答案是「滤光片」。在 sensor 的每个像素上,覆盖一层微小的滤光片,只允许特定波长的光通过。
最常见的滤光阵列就是 Bayer 格式。它由 Bryce Bayer 在 1976 年发明。模式是:
- 50% 绿色(G)
- 25% 红色(R)
- 25% 蓝色(B)
为什么绿色多?因为人眼对绿色最敏感。这个设计很巧妙,用最少的像素模拟了人眼的视觉特性。
R G
G B
每个 2x2 的单元里,有 1 个 R、2 个 G、1 个 B。
2.2.2 从 Raw 到彩色
Sensor 输出的就是这种 Bayer 模式的 Raw 数据。每个像素只有一个颜色值。要得到全彩图像,需要做 去马赛克(Demosaic) 算法,通过周围像素插值,计算出每个像素缺失的另外两个颜色值。
举个例子:一个红色像素,它没有 G 和 B 的信息。算法会看它周围的像素,估算出这个位置的 G 值和 B 值。这个过程很考验 ISP 的功力,处理不好就会出现伪色或拉链效应。
2.3 MIPI CSI-2 接口协议入门
Sensor 处理完数据,怎么传给主控芯片?目前移动端和嵌入式领域,MIPI CSI-2 是的主流。MIPI 是 Mobile Industry Processor Interface 的缩写,CSI 是 Camera Serial Interface。
2.3.1 物理层:D-PHY
CSI-2 的物理层通常使用 MIPI D-PHY。它采用差分信号传输,抗干扰能力强。一组传输线包括:
- Clock Lane(时钟通道):1 对差分线,提供同步时钟
- Data Lane(数据通道):1~4 对差分线,传输数据
每个 Lane 可以工作在 High Speed(HS) 模式和 Low Power(LP) 模式。HS 模式传输数据,速度快;LP 模式用于控制信号,功耗低。
| 模式 | 电压摆幅 | 速率 | 用途 |
|---|---|---|---|
| HS(高速) | 约 200mV | 最高 2.5 Gbps/Lane | 传输图像数据 |
| LP(低功耗) | 1.2V | 约 10 Mbps | 控制信号、总线状态切换 |
2.3.2 协议层:数据包格式
CSI-2 的数据传输以「包」为单位。分为两种:
- 长包(Long Packet):传输大量数据,如图像像素
- 短包(Short Packet):传输控制信息,如帧同步、行同步
一个长包的结构如下:
+----------------+----------------+------------------+------------------+
| 包首 (PH) | 数据负载 | 包尾 (PF) | 可选的 CRC |
| 4 字节 | 可变长度 | 2 字节 | 2 字节 |
+----------------+----------------+------------------+------------------+
包首包含:数据类型(Data Type,DT)、虚拟通道(Virtual Channel,VC)、字计数(Word Count,WC)。
- DT:告诉接收方这是什么数据。比如 0x2B 是 Raw8 数据,0x1E 是 YUV422 数据。
- VC:支持最多 4 个虚拟通道,可以复用同一组物理 Lane 传输多路数据。
- WC:数据负载的字节数。
2.4 本章知识体系
下面这张图,把摄像头模组的数据流和关键知识点串起来了。你可以把它当作一个快速索引。
从 Lens 到 Sensor,再到 ISP,最后通过 MIPI CSI-2 传给主控,这就是一条完整的图像数据链路。驱动开发,就是在这条链路的各个节点上,做好配置、控制和数据搬运。
- 摄像头模组 = Lens + Sensor + ISP,三者缺一不可
- Bayer 格式是 Raw 数据的基础,驱动必须确认排列顺序
- MIPI CSI-2 是传输标准,D-PHY 是物理层,协议层靠包结构通信