一、嵌入式摄像头概述:从镜头到像素
做嵌入式摄像头接入,第一件事不是翻 datasheet,而是搞清楚摄像头模组里到底装了些什么。我刚开始接触这个领域时,总觉得摄像头就是个黑盒子——供电、给时钟、出来数据就完事了。结果第一次调 MIPI 接口时,图像全是花屏,折腾了两天才发现是 sensor 的初始化序列少配了一组寄存器。
说白了,摄像头模组就是把「光信号」变成「电信号」,再变成「数字信号」的一套硬件组合。咱们一个一个拆开看。
1.1 摄像头模组三大件
一个典型的嵌入式摄像头模组,核心就三个部分:镜头(Lens)、传感器(Sensor)、图像信号处理器(ISP)。有些低端模组把 ISP 省了,数据直接 raw 输出,让主控芯片去处理——嗯,这种方案我踩过坑,后面会讲。
核心链路: 光线 → 镜头聚焦 → Sensor 光电转换 → ISP 图像处理 → 数字输出
镜头(Lens)
镜头负责把外界的光线汇聚到 sensor 的感光面上。参数上主要看焦距、光圈、视场角(FOV)。我个人习惯先看 FOV——做安防摄像头用广角,做扫码枪用窄角,选错了画面畸变会让你后期算法很难受。
传感器(Sensor)
这是模组的心脏。常见的有 CMOS 和 CCD 两种,嵌入式领域几乎全是 CMOS,便宜、功耗低、集成度高。Sensor 的核心指标是像素尺寸和量子效率。像素尺寸越大,弱光下表现越好——我在做一款室内监控产品时,换了 3.0μm 像素的 sensor,夜视效果比原来 1.4μm 的好了一大截。
ISP(图像信号处理器)
ISP 负责把 sensor 输出的 raw 数据变成人眼看着舒服的图像。包括:自动白平衡(AWB)、自动曝光(AE)、去噪、锐化、色彩校正。有些模组把 ISP 集成在 sensor 内部(比如 OV5640),有些需要主控芯片的 ISP 模块来处理(比如海思、瑞芯微的方案)。
我的经验: 如果主控芯片算力有限,尽量选内置 ISP 的模组。我之前用一颗不带 ISP 的 sensor 接在低端 MCU 上,结果软件做白平衡做到崩溃,最后换了模组才解决问题。
1.2 常见接口:DVP、MIPI、USB
接口决定了摄像头怎么跟主控芯片通信。选接口时,我一般先看分辨率、帧率和传输距离。下面这张表是我自己整理的对比,你直接拿去用:
| 接口类型 | 最大带宽 | 适用分辨率 | 传输距离 | 引脚数 | 典型场景 |
|---|---|---|---|---|---|
| DVP | ~96 Mbps(8bit@12MHz) | VGA ~ 720p | 短(<10cm) | 20+ | 低端 MCU、老平台 |
| MIPI CSI-2 | 1 Gbps+ per lane | 720p ~ 4K | 中(<30cm) | 4~10 | 手机、AI 开发板 |
| USB | USB 2.0: 480 Mbps USB 3.0: 5 Gbps |
720p ~ 4K | 长(<5m) | 4 | PC 摄像头、工业相机 |
DVP(Digital Video Port)
DVP 是并行接口,数据线 8~12 根,加上行同步、场同步、像素时钟,总共 20 多根线。布线时很容易串扰,频率一高就出问题。我记得有一次画板子,DVP 数据线没等长,结果图像边缘全是噪点——后来加了一级 FIFO 才稳住。
适用场景: 分辨率不高(VGA~720p)、主控是低端 MCU 或 FPGA、对成本敏感的项目。
MIPI CSI-2
MIPI 是差分串行接口,一对差分线就能传一路数据,支持多 lane 扩展。现在主流嵌入式平台(树莓派、Jetson、瑞芯微、全志)都标配 MIPI CSI 接口。MIPI 的物理层叫 D-PHY,信号质量好,抗干扰强。
但 MIPI 的调试比 DVP 麻烦——需要配 PLL、配 lane 数、配时钟极性。我调第一款 MIPI 摄像头时,画面一直偏绿,查了两天才发现是 CSI 的 data lane 映射顺序配反了。
避坑指南: 我曾经在量产阶段发现 MIPI 信号眼图不过关,原因是 FPC 排线太长(超过 20cm)且没做阻抗匹配。后来把排线控制在 15cm 以内,并加了地线隔离,问题才解决。MIPI 走线一定要按 100Ω 差分阻抗来设计。
USB
USB 摄像头最大的好处是即插即用,UVC 协议是标准化的,Linux 下直接 v4l2 就能操作。但 USB 的延迟比 MIPI 大,不适合对实时性要求高的场景(比如无人机图传)。
我做过一个 USB 摄像头接入的项目,帧率死活上不去,后来发现是 USB 控制器在 bulk 传输模式下没开双缓冲——开了之后帧率直接翻倍。
1.3 分辨率与帧率:一对冤家
分辨率是图像的宽×高像素数,帧率是每秒传输的图像帧数。两者共同决定了数据带宽需求。
带宽计算公式:
带宽 = 分辨率(宽 × 高) × 帧率 × 像素位深
举个例子:1080p(1920×1080)、30fps、RGB565(16bit)
带宽 = 1920 × 1080 × 30 × 16 = 995,328,000 bps ≈ 950 Mbps
这个带宽已经接近单 lane MIPI 的极限了。所以高分辨率和高帧率往往不能兼得——你想想看,4K@60fps 的 raw 数据带宽接近 12 Gbps,普通嵌入式平台根本扛不住。
实际经验: 做产品时不要只看 sensor 标称的最大分辨率。我测过一款号称支持 4K@30fps 的模组,实际在嵌入式平台上只能跑到 4K@15fps,因为主控的 ISP 带宽不够。一定要在目标平台上实测帧率。
1.4 知识结构图:摄像头模组全景
下面这张图把摄像头模组的组成、接口、关键参数串起来了。你可以把它当作选型时的检查清单:
1.5 本章小结
这一章咱们把摄像头模组的基本构成捋了一遍。记住三个核心点:
- 模组三件套: 镜头、Sensor、ISP,缺哪个都会影响最终图像质量
- 接口选型: DVP 适合低分辨率低成本,MIPI 是主流高性能方案,USB 胜在通用性
- 带宽约束: 分辨率、帧率、位深三者相乘,不能超过接口和主控的极限