3. Camera子系统入门
在SA8155的Camera Display多媒体链路中,Camera子系统是整个数据通路的起点。无论是DMS驾驶员监控、AVM环视,还是前视ADAS感知,图像数据都要先经过Sensor光电转换、MIPI CSI-2串行传输、ISP处理,最终才能进入Display或编码环节。理解这一层的协议、时序与数据格式,是后续调试链路不通、图像异常、帧率不稳等问题的基本功。
一、Camera Sensor工作原理:从光子到数字码流
Camera Sensor的核心是CMOS图像传感器阵列。每个像素单元包含一个光电二极管和若干MOS管,负责将入射光子转换为电荷,再通过模拟前端放大、列并行ADC量化为数字值。Sensor内部通常包含像素阵列、行解码器、时序控制、模拟增益、ADC、PLL以及MIPI发送模块。
曝光与读出是Sensor工作的两个关键动作。卷帘快门(Rolling Shutter)逐行曝光、逐行读出,行与行之间存在时间差,高速运动场景会产生果冻效应;全局快门(Global Shutter)所有像素同时曝光,成本更高,多用于工业与DMS。SA8155平台常见车载Sensor多为卷帘快门,因此运动补偿与曝光同步需要在系统层考虑。
Sensor输出前还会经过黑电平校正、镜头阴影校正、坏点校正等基础处理,但真正的RAW域处理(去马赛克、白平衡、色彩矩阵、Gamma)通常交给SA8155的ISP完成。Sensor侧主要完成光电转换与数据打包,因此配置重点在于曝光、增益、帧率、输出格式与MIPI时序。
二、MIPI CSI-2协议基础:差分串行图像通道
MIPI CSI-2是Camera与SoC之间最主流的串行图像接口。它采用D-PHY物理层,包含一对差分时钟Lane和多对差分数据Lane。SA8155的CSI接口通常支持4 Lane配置,每Lane速率可达2.5Gbps以上,足以承载多路高分辨率Sensor。
CSI-2协议分为物理层、协议层和应用层。物理层负责差分信号传输与时钟恢复;协议层定义数据包格式,包括短包(帧同步、行同步、通用命令)和长包(图像数据)。每个长包由包头、有效载荷和包尾组成,包头中包含虚拟通道号(Virtual Channel)和数据类型(Data Type),这正是多路Sensor复用同一CSI控制器的基础。
虚拟通道VC允许最多4路数据流在同一物理Lane上传输,SoC侧根据VC将数据分发到不同Camera节点。数据类型DT则标识RAW8、RAW10、RAW12、YUV422等格式。调试时若VC或DT配置错误,常见现象是链路有信号但无图像,或图像错位、花屏。
Lane数:1/2/4 Lane
每Lane速率:1.5Gbps~2.5Gbps
虚拟通道:VC0~VC3
数据类型:RAW8/RAW10/RAW12/YUV422-8bit
包结构:短包(帧起始/帧结束/行起始/行结束)+ 长包(图像行数据)
三、RAW与YUV数据格式:ISP前后的分界
RAW数据是Sensor直接输出的Bayer格式,每个像素只包含R、G、B中的一个分量,常见排列为RGGB、BGGR、GRBG、GBRG。RAW保留了最完整的原始信息,动态范围大,但必须经过ISP去马赛克才能得到全彩图像。SA8155的ISP支持RAW10、RAW12、RAW14等位宽,位宽越高,暗部细节和动态范围越好,但带宽压力也越大。
YUV数据是ISP处理后的输出,常见格式为YUYV422、UYVY、NV12、NV21。YUV将亮度Y与色度UV分离,更符合人眼特性,也便于压缩和显示。NV12在Android Camera HAL中非常常见,其排列为Y平面后跟交错UV平面。若应用层拿到的是NV21而按NV12解析,颜色会明显偏绿或偏紫。
| 格式 | 典型位宽 | 输出阶段 | 特点 | 常见问题 |
|---|---|---|---|---|
| RAW10 | 10bit | Sensor输出 | 带宽适中,动态范围较好 | Bayer顺序错导致偏色 |
| RAW12 | 12bit | Sensor输出 | 暗部细节好,带宽高 | MIPI速率不足导致丢帧 |
| YUYV422 | 8bit | ISP输出 | 兼容性好,带宽较高 | UV顺序错导致偏色 |
| NV12 | 8bit | ISP/编码前 | Android常用,便于编码 | 与NV21混淆导致颜色异常 |
四、I2C控制接口与上电时序
Camera Sensor的控制通道通常是I2C,SoC通过I2C读写Sensor内部寄存器,完成曝光、增益、帧率、输出格式、MIPI Lane数等配置。SA8155平台上一路I2C总线可能挂多个Camera,因此需要确认从机地址、总线编号和上拉电阻。I2C通信失败时,先查供电、再查地址、最后查时序。
上电时序是Camera点亮的关键。典型顺序为:AVDD先上电,再上DVDD,最后上DOVDD;复位信号RESET释放后,MCLK必须稳定提供;随后通过I2C写入初始化寄存器序列;最后启动MIPI输出。若MCLK早于电源稳定,或RESET释放过早,Sensor可能无法正常初始化。
典型Camera上电时序:
1. AVDD 2.8V 上电
2. DVDD 1.2V 上电
3. DOVDD 1.8V 上电
4. 延时 1ms
5. RESET 拉高释放
6. MCLK 24MHz 稳定输出
7. I2C 写入初始化寄存器
8. 配置MIPI Lane与输出格式
9. 启动流传输
五、案例与复盘:链路不通的排查路径
某项目前视Camera在SA8155上无法出图。排查发现:I2C可以读到Sensor ID,说明控制通道正常;但MIPI无数据。进一步检查发现Sensor初始化序列中MIPI Lane数配置为2 Lane,而硬件实际连接为4 Lane,导致数据无法对齐。修正寄存器后图像恢复。这个案例说明,I2C通不代表图像通,MIPI配置必须与硬件一致。
另一个常见误区是忽略虚拟通道。多路Camera共用CSI控制器时,若两路Sensor都配置为VC0,SoC侧会收到冲突数据,表现为图像交错或随机花屏。正确做法是为每路分配独立VC,并在设备树中正确描述。
1. 只查I2C不查MIPI,忽略Lane数与速率匹配。
2. RAW Bayer顺序与ISP配置不一致,导致颜色异常。
3. NV12与NV21混淆,显示偏色。
4. 上电时序中RESET释放过早,Sensor初始化失败。
5. 多路Camera未分配独立虚拟通道,数据冲突。
掌握Sensor工作原理、MIPI CSI-2协议、RAW/YUV格式、I2C控制与上电时序,就具备了Camera子系统调试的基本坐标系。后续无论是接入ISP、配置Camera HAL,还是分析帧率与带宽瓶颈,都可以回到这几个核心点上定位问题。