第二讲:相机硬件架构深度解析
大家好,欢迎来到第二讲。
上一讲我们聊了智能相机的整体轮廓。今天,咱们把镜头拉近,看看相机内部到底是怎么工作的。说白了,就是拆开相机,看看里面那些核心部件是怎么协同作战的。
我个人习惯,做驱动开发前,一定要先把硬件吃透。你想想看,连传感器怎么输出数据都不清楚,怎么写驱动?那不是瞎写嘛。好,咱们开始。
2.1 镜头:相机的眼睛
镜头这东西,看起来就是个玻璃片,其实门道很深。它负责把外界的光线汇聚到传感器上。
关键参数有哪些?
- 焦距:决定了视野范围。焦距越短,看得越宽(广角);焦距越长,看得越远(长焦)。
- 光圈:控制进光量。光圈越大(F值越小),进光越多,暗光下表现好,但景深浅。
- 视场角(FOV):镜头能看到的范围。做安防相机时,FOV 90度以上才够用。
2.2 图像传感器:CCD vs CMOS
传感器是相机的「视网膜」。光信号在这里变成电信号。目前主流就两种:CCD和CMOS。
| 对比项 | CCD | CMOS |
|---|---|---|
| 工作原理 | 电荷逐行转移,统一输出 | 每个像素独立放大、输出 |
| 噪声 | 低,画质干净 | 相对高,但技术进步已缩小差距 |
| 功耗 | 高(需要多路电压) | 低(单电压供电) |
| 速度 | 慢(串行读出) | 快(并行读出,支持高帧率) |
| 成本 | 高 | 低 |
| 典型应用 | 工业相机、天文摄影 | 手机、监控、消费电子 |
现在消费级市场,CMOS基本一统天下了。为什么?便宜、省电、速度快。我早期做工业相机时,客户非要CCD,说画质好。后来CMOS技术进步了,比如索尼的IMX系列,动态范围做得非常好,客户也就慢慢接受了。
2.3 ISP:图像信号处理器
传感器出来的原始数据叫RAW图,说白了就是一堆没处理的数字。ISP就是负责把这些RAW图变成我们肉眼看着舒服的图像。
ISP干了哪些活?
- 坏点校正:传感器总有坏点,ISP得把它们抹掉。
- 黑电平校正:去掉暗电流带来的偏置。
- 去马赛克:Bayer阵列每个像素只有一种颜色,ISP要插值算出全彩。
- 白平衡:让白色在不同光源下看起来都是白的。
- 降噪:减少噪点,但别把细节磨没了。
- 锐化:让边缘更清晰。
ISP可以集成在传感器内部(比如一些手机摄像头模组),也可以独立成芯片(比如安霸、海思的方案),或者用CPU/GPU软件实现。我个人习惯,做嵌入式产品,尽量用硬件ISP,省CPU资源。
2.4 接口:MIPI / USB / GigE
传感器处理完数据,怎么传给主控?这就靠接口了。不同的接口,决定了你的驱动怎么写。
2.4.1 MIPI CSI(相机串行接口)
这是嵌入式领域最常用的接口。手机、树莓派、RK平台都用它。
- 特点:差分信号,高速(每通道可达几Gbps),功耗低。
- 物理层:通常2-4对数据线 + 1对时钟线。
- 驱动要点:需要配置MIPI D-PHY的电压、摆率、LP/HS模式切换。
我刚开始调MIPI时,经常遇到图像花屏。后来发现是时钟相位没对准。嗯,MIPI的调试,示波器是必备工具。
2.4.2 USB(UVC协议)
USB摄像头大家最熟悉了。即插即用,靠的是UVC(USB Video Class)标准协议。
- 特点:通用性强,Windows/Linux/macOS都支持。
- 驱动要点:Linux下用V4L2框架,枚举设备、设置格式、启动流。
- 局限:带宽有限(USB 2.0约480Mbps),高分辨率高帧率吃力。
2.4.3 GigE Vision(千兆以太网)
工业相机的主流接口。传输距离远(100米),带宽高(1Gbps)。
- 特点:基于UDP协议,支持多相机同步。
- 驱动要点:需要实现GVCP(控制协议)和GVSP(流协议)。
- 坑点:网络丢包会导致图像损坏,需要做重传机制。
我记得有一次调试GigE相机,图像总是有撕裂。查了半天,发现是网卡的巨型帧(Jumbo Frame)没开启。开启后,大包传输效率提升,问题消失。
2.5 整体数据流
咱们把整个链路串起来:
光线 → 镜头 → 传感器(RAW) → ISP(处理) → 接口(MIPI/USB/GigE) → 主控(内存) → 显示/存储
驱动开发的核心,就是打通这条链路。每个环节都有对应的驱动模块:
- 传感器驱动:初始化、配置帧率/分辨率、控制曝光/增益。
- ISP驱动:加载固件、配置参数、获取处理后的图像。
- 接口驱动:MIPI D-PHY配置、USB UVC协议栈、GigE网络协议栈。
下一讲,我们会深入传感器驱动,手把手教你初始化一个OV5640。到时候,咱们直接上代码。
好,今天就到这儿。有问题欢迎交流。