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)

为什么绿色多?因为人眼对绿色最敏感。这个设计很巧妙,用最少的像素模拟了人眼的视觉特性。

Bayer 排列(2x2 单元):
R G
G B

每个 2x2 的单元里,有 1 个 R、2 个 G、1 个 B。

2.2.2 从 Raw 到彩色

Sensor 输出的就是这种 Bayer 模式的 Raw 数据。每个像素只有一个颜色值。要得到全彩图像,需要做 去马赛克(Demosaic) 算法,通过周围像素插值,计算出每个像素缺失的另外两个颜色值。

举个例子:一个红色像素,它没有 G 和 B 的信息。算法会看它周围的像素,估算出这个位置的 G 值和 B 值。这个过程很考验 ISP 的功力,处理不好就会出现伪色或拉链效应。

注意: 驱动开发中,你拿到的 Raw 数据格式一定要确认清楚。是 BGGR、RGGB、GBRG 还是 GRBG?顺序搞错了,图像颜色就全乱了。我曾经在调试一款 sensor 时,就因为 datasheet 写错了 Bayer 顺序,浪费了两天时间。

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:数据负载的字节数。
经验之谈: 调试 CSI-2 接口时,我习惯先用逻辑分析仪抓一下 Clock Lane 和 Data Lane 的波形。看看 HS 模式有没有正常进入,包首的 DT 对不对。很多时候,图像出不来,就是协议层握手没通过。

2.4 本章知识体系

下面这张图,把摄像头模组的数据流和关键知识点串起来了。你可以把它当作一个快速索引。

摄像头模组数据流与知识体系 Lens(镜头) Image Sensor Bayer 格式 ISP 光线聚焦 Raw 数据 MIPI CSI-2 D-PHY 传输 主控 SoC 协议解析 关键知识点 • 光电转换原理 • Bayer 排列与去马赛克 • CSI-2 长包/短包结构

从 Lens 到 Sensor,再到 ISP,最后通过 MIPI CSI-2 传给主控,这就是一条完整的图像数据链路。驱动开发,就是在这条链路的各个节点上,做好配置、控制和数据搬运。

核心要点回顾:
  • 摄像头模组 = Lens + Sensor + ISP,三者缺一不可
  • Bayer 格式是 Raw 数据的基础,驱动必须确认排列顺序
  • MIPI CSI-2 是传输标准,D-PHY 是物理层,协议层靠包结构通信