摄像头硬件基础:模组组成、传感器接口与 ISP 概念

做摄像头驱动,不能只盯着 V4L2 的 ioctl 看。你得先搞清楚硬件长什么样。我见过不少工程师,上来就啃 datasheet 里的寄存器,结果连 sensor 是并行还是 MIPI 都没搞清——调了半个月发现信号根本对不上。

这一章,咱们把摄像头模组的底裤扒开。从物理组成到接口类型,再到 ISP 到底干了啥,一次性说透。

2.1 摄像头模组拆解:一个盒子里的三样东西

一个完整的摄像头模组,说白了就三部分:镜头(Lens)、传感器(Sensor)、模组基板与连接器。驱动开发主要跟传感器打交道,但另外两个你也不能完全无视。

组件 作用 驱动关注点
镜头 聚光、成像到 sensor 表面 通常不直接管,但 V4L2 的焦距、光圈控制可能涉及
传感器 光电转换 → 模拟信号 → 数字信号 核心!寄存器配置、帧率、分辨率、输出格式
基板 + 连接器 供电、信号走线、物理接口 电源时序、时钟、复位、接口电平匹配
我的习惯:拿到一块新模组,先看连接器 pin 定义。电源有几路?IO 电压是 1.8V 还是 3.3V?MIPI 的 clock lane 有没有对地短路?这些基础检查能省掉后面一半的 debug 时间。

2.2 传感器接口:MIPI / DVP / USB,选哪个?

传感器和主控之间怎么传数据?目前主流就三种:MIPI CSI、DVP、USB。我按实际项目中出现频率排个序。

2.2.1 MIPI CSI(Mobile Industry Processor Interface - Camera Serial Interface)

这是现在手机、平板、嵌入式 Linux 开发板上的主流。差分串行传输,一对差分线就是一条 lane,通常用 1、2 或 4 条 data lane,外加一条 clock lane。

  • 优点:高速(单 lane 可达 1Gbps+)、抗干扰、线少
  • 缺点:协议复杂、需要 D-PHY 或 C-PHY 物理层、调试麻烦
  • 典型场景:OV5640、IMX219、AR0230 等主流 sensor
我曾经踩过的坑:MIPI 的 clock lane 和 data lane 必须等长布线,差 5mm 以上就可能丢包。有一次板子回来图像全是雪花,查了三天,最后发现 layout 工程师把 clock lane 绕了远路。从此我拿到原理图第一件事就是量 lane 长度。

2.2.2 DVP(Digital Video Port)

并行接口,数据线 8/10/12 位,加上行同步(HSYNC)、场同步(VSYNC)、像素时钟(PCLK)。

  • 优点:简单、寄存器少、调试直观
  • 缺点:线多(20+ 根)、速度上不去(一般 < 100MHz)、容易受干扰
  • 典型场景:老款 sensor、低分辨率(VGA/720p)、低成本方案

嗯,DVP 现在基本被 MIPI 取代了。但如果你维护的是老产品,或者做 FPGA 开发,还是会碰到。

2.2.3 USB 摄像头

这个大家最熟悉。UVC(USB Video Class)协议,免驱或标准驱动。内部其实也是 sensor + ISP + USB bridge。

  • 优点:即插即用、跨平台、开发量小
  • 缺点:延迟高、带宽受限(USB 2.0 理论 480Mbps,实际 200Mbps 左右)、不适合高帧率
  • 典型场景:PC 摄像头、工业检测、简单监控
接口对比速查:
特性MIPI CSIDVPUSB
最大带宽4 lane 约 4 Gbps约 800 MbpsUSB 3.0 约 5 Gbps
线数5-9 根20-30 根4 根(USB 2.0)
调试难度高低低
驱动复杂度高(需配 D-PHY)中低(UVC)

2.3 ISP 基础概念:传感器出来的数据不能直接用

传感器输出的 raw data,说白了就是每个像素点的电压值。这玩意儿直接显示出来,颜色不对、亮度不均、噪点一堆。为什么?因为 sensor 本身有物理缺陷:

  • 每个像素的光电响应不一致(PRNU)
  • 暗电流导致固定噪声(DSNU)
  • Bayer 排列需要去马赛克
  • 白平衡需要校正

ISP(Image Signal Processor)就是干这个的。它把 raw data 处理成人眼能看的 YUV 或 RGB。

2.3.1 ISP 处理流水线(Pipeline)

一个典型的 ISP 流程,我画了个图,你一看就明白:

ISP 处理流水线 Raw Data 输入 黑电平校正 去马赛克 白平衡 Gamma 校正 色彩空间转换 降噪 锐化 统计信息输出 YUV/RGB 输出 说明: ISP 流水线顺序可调,不同厂商(高通、MTK、海思)的 pipeline 有差异。 驱动开发中,你通常只需要配置 sensor 输出 raw,ISP 部分由硬件或 firmware 完成。

2.3.2 驱动开发者的 ISP 视角

你可能会问:ISP 不是硬件做的吗?跟我驱动有什么关系?

关系大了。我列几个你一定会碰到的点:

  • sensor 输出格式:是 raw(如 raw10、raw12)还是 YUV?如果是 raw,ISP 必须配套;如果是 YUV,说明 sensor 内部自带 ISP。
  • 增益控制:模拟增益、数字增益、曝光时间,这些寄存器你都得配。ISP 的 AEC/AGC 算法会通过 V4L2 的 control 接口来调。
  • 坏点校正:有些 sensor 内置 DPC(Defect Pixel Correction),需要你从 OTP 或 EEPROM 读坏点表写进去。
  • 帧同步:ISP 需要知道帧起始和结束,MIPI 的帧同步包、DVP 的 VSYNC 信号,驱动里要正确解析。
我个人的建议:调试阶段,先用 sensor 输出 raw data,然后用工具(比如 imx290 的 raw 转 bmp 脚本)看图像。如果 raw 图有竖条纹或偏色,大概率是 sensor 配置问题;如果 raw 图正常但最终 YUV 不对,那就是 ISP 参数没调好。分两步 debug,效率高很多。

2.4 本章小结

摄像头硬件基础,说白了就是三件事:模组里有什么、数据怎么传出来、传出来之后怎么处理。MIPI 是当前主流,DVP 是遗留方案,USB 是傻瓜方案。ISP 流水线虽然复杂,但驱动开发者只需要关注 sensor 输出 raw 的配置和 V4L2 control 接口的对接。