2. 摄像头硬件基础
做摄像头驱动,不能只盯着 V4L2 的 ioctl 看。你得先搞清楚硬件长什么样。我见过不少工程师,上来就啃 datasheet 里的寄存器,结果连 sensor 是并行还是 MIPI 都没搞清——调了半个月发现信号根本对不上。
这一章,咱们把摄像头模组的底裤扒开。从物理组成到接口类型,再到 ISP 到底干了啥,一次性说透。
2.1 摄像头模组拆解:一个盒子里的三样东西
一个完整的摄像头模组,说白了就三部分:镜头(Lens)、传感器(Sensor)、模组基板与连接器。驱动开发主要跟传感器打交道,但另外两个你也不能完全无视。
| 组件 | 作用 | 驱动关注点 |
|---|---|---|
| 镜头 | 聚光、成像到 sensor 表面 | 通常不直接管,但 V4L2 的焦距、光圈控制可能涉及 |
| 传感器 | 光电转换 → 模拟信号 → 数字信号 | 核心!寄存器配置、帧率、分辨率、输出格式 |
| 基板 + 连接器 | 供电、信号走线、物理接口 | 电源时序、时钟、复位、接口电平匹配 |
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
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 CSI | DVP | USB |
| 最大带宽 | 4 lane 约 4 Gbps | 约 800 Mbps | USB 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 流程,我画了个图,你一看就明白:
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 信号,驱动里要正确解析。
2.4 本章小结
摄像头硬件基础,说白了就是三件事:模组里有什么、数据怎么传出来、传出来之后怎么处理。MIPI 是当前主流,DVP 是遗留方案,USB 是傻瓜方案。ISP 流水线虽然复杂,但驱动开发者只需要关注 sensor 输出 raw 的配置和 V4L2 control 接口的对接。