2、Sensor 接口与数据采集:驱动配置、MIPI/LVDS 调试与 RAW 图解析
各位好,欢迎来到第二章。上一章我们聊了 ISP 的整体架构,今天咱们把镜头往前推,看看 ISP 的第一道关卡——Sensor 接口与数据采集。
说白了,Sensor 就是 ISP 的眼睛。它把光信号转成电信号,再通过物理接口把数据喂给 ISP。这个环节要是出了问题,后面算法调得再好也是白搭。我见过不少团队,花几个月调 3A 算法,结果发现是 Sensor 配置错了,RAW 图数据格式压根不对——嗯,这种坑咱们得提前避开。
2.1 Sensor 驱动配置:让 Sensor 先“活”起来
拿到一块新的 Sensor 模组,第一件事不是看图像,而是让它能正常输出数据。驱动配置通常包括这几步:
- 上电时序:AVDD、DVDD、IOVDD 谁先谁后,delay 多少毫秒,差一点都不行。
- 时钟配置:MCLK 主时钟频率,PLL 倍频参数,输出像素时钟。
- 寄存器初始化:通过 I2C/SPI 写入 Sensor 内部寄存器,设置工作模式。
- 输出格式选择:RAW10、RAW12、RAW16?Bayer 排列是 RGGB 还是 BGGR?
- 帧率与分辨率:VTS/HTS 寄存器控制帧长和行长,决定最终帧率。
2.2 MIPI/LVDS 接口调试:物理层的“握手”
驱动配好了,Sensor 开始输出数据。但数据能不能被 ISP 正确接收,取决于物理接口的调试。目前主流接口就两种:MIPI CSI-2 和 LVDS。
| 对比项 | MIPI CSI-2 | LVDS |
|---|---|---|
| 信号类型 | 差分对,D-PHY/C-PHY | 差分对,低压差分信号 |
| 最大速率 | D-PHY 4.5Gbps/lane | 通常 1Gbps/lane 以内 |
| 协议层 | 内嵌同步码、ECC、CRC | 通常需要外部同步信号 |
| 调试难度 | 中等,需关注 skew 和 LP/HS 切换 | 较低,但抗干扰能力弱 |
| 常见场景 | 手机、平板、车载摄像头 | 工业相机、安防、大分辨率 Sensor |
调试 MIPI 接口时,我最常遇到的问题是 lane 错位 和 时钟相位不对。你想想看,Sensor 送出来的数据是 4 lane,但 ISP 接收端 lane 顺序没对上,图像就会像万花筒一样乱掉。
2.3 RAW 图数据格式解析:读懂 Sensor 的“语言”
接口通了,数据进来了。但进来的是一串二进制数,怎么把它变成我们能理解的图像?这就涉及到 RAW 图格式解析。
RAW 图本质上就是 Sensor 每个像素的原始电压值,没有经过任何处理。常见的格式有:
- RAW8:每个像素 8bit,范围 0-255,常用于低端 Sensor。
- RAW10:每个像素 10bit,但存储时通常用 16bit 对齐,或者 5 个字节存 4 个像素。
- RAW12:每个像素 12bit,常见于高动态范围 Sensor。
- RAW16:每个像素 16bit,用于高精度工业相机。
这里有个关键点:Bayer 排列。Sensor 的每个像素只能感知一种颜色(R、G 或 B),它们按照固定的模式排列。最常见的模式是 RGGB,也就是第一行 R、G、R、G...,第二行 G、B、G、B...
1. Bayer 排列模式(RGGB/GRBG/BGGR/GBRG)
2. 每个像素的位深(8/10/12/16)
3. 数据存储顺序(高位在前还是低位在前)
举个例子,假设你拿到一个 RAW10 格式的数据,Sensor 输出的是 RGGB 排列。数据以 16bit 对齐存储,每个像素占 2 个字节,但只有低 10 位有效。如果你直接按 16bit 读取,图像会偏暗——因为高 6 位全是 0。正确的做法是右移 6 位,或者直接取低 10 位。
// RAW10 数据解析示例(16bit 对齐)
uint16_t raw_data = read_sensor_data(); // 读取 16bit
uint16_t pixel_value = raw_data & 0x03FF; // 取低 10 位
// 或者右移 6 位,得到 0-1023 范围
uint16_t pixel_value_shifted = raw_data >> 6;
2.4 知识体系总览
下面这张图总结了本章的核心流程。从 Sensor 驱动配置开始,到物理接口调试,再到 RAW 数据解析,每一步都是环环相扣的。
2.5 实战中的常见问题与排查思路
在实际项目中,Sensor 接口调试往往是最耗时的环节。我整理了几个高频问题,供大家参考:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 无图像输出 | 上电时序不对、时钟未稳定、I2C 通信失败 | 示波器量电源和时钟,打印 Sensor ID |
| 图像花屏 | MIPI lane 顺序错、时钟相位偏移、数据位宽不匹配 | 检查 lane mapping,调整 D-PHY 的 skew 参数 |
| 图像偏色 | Bayer 排列解析错误、RAW 位深取错 | 确认 Sensor 手册中的 Bayer 模式,检查移位操作 |
| 帧率不稳定 | VTS/HTS 配置错误、DMA 带宽不足 | 计算理论帧率,对比实际帧率,检查 DMA 中断 |
2.6 本章小结
Sensor 接口与数据采集,是 ISP 流水线的第一道关卡。驱动配置让 Sensor 活起来,MIPI/LVDS 调试让数据传过来,RAW 格式解析让数据读得懂。这三步走稳了,后面的 ISP 算法才能有米下锅。