2. Sensor系统架构与数据通路
理解一颗 CMOS 图像传感器的时序与寄存器,前提是先看清它的内部数据是怎么从光子一路走到输出接口的。寄存器配置的本质,是在这条通路上设置各级模块的工作参数与使能状态;时序配置的本质,则是让各级模块在正确的时钟域里按正确的节拍交接数据。本节把这条通路拆成像素阵列、模拟前端、ADC、数字处理与 ISP 接口、输出格式、时钟域六个环节,逐级说明它们各自承担什么、寄存器通常控制什么、以及数据在跨级时如何被同步。
像素阵列:光电转换与行选通
像素阵列是二维的光电转换矩阵,通常以 width × height 的有效像素加四周的 dummy/optical black 像素构成。以一颗 1920×1080 的 1/2.9" 传感器为例,有效阵列 1920 列 × 1080 行,另加若干光学黑行用于暗电平校正。阵列按行访问:行译码器根据 row_addr 选通一行像素,该行像素的电荷经源极跟随器读出到列总线。因此阵列的读出速率由行时间 t_row 决定,而 t_row 又由行消隐、列 ADC 转换时间、增益稳定时间共同约束。寄存器层面,阵列相关配置通常包括读出窗口起点 x_start/y_start、窗口尺寸 x_size/y_size、镜像翻转 mirror/flip、以及 binning/skipping 模式。这些参数直接改变后续所有模块需要处理的数据量,是整条通路的第一级约束。
模拟前端:增益、黑电平与相关双采样
像素输出的模拟电压非常微弱,且叠加了复位噪声与固定模式噪声。模拟前端(AFE)承担三项工作:相关双采样(CDS)、增益放大、黑电平钳位。CDS 通过先后采样复位电平与信号电平并作差,抑制复位噪声和 1/f 噪声;增益级通常分为模拟增益 again 与数字增益 dgain,模拟增益在 ADC 之前放大信号,能改善信噪比,数字增益在 ADC 之后放大,只放大已量化的数据。黑电平钳位把光学黑像素的均值作为参考,扣除暗电流引起的偏置。寄存器上常见 again(如 0~72 dB,步进 0.3 dB 或 1/32 dB)、dgain、blc_target、blc_enable 等字段。需要注意:模拟增益过大时输出会接近 ADC 满量程而饱和,因此 again 与曝光时间需要联合调节。
ADC:列并行转换与量化位宽
现代传感器普遍采用列并行 ADC,每一列或每几列共享一个 ADC,整行同时转换,从而在低时钟频率下获得高行率。ADC 位宽常见 10 bit、12 bit,部分产品支持 14 bit。位宽决定了理论动态范围上限,例如 12 bit 对应约 72 dB 的量化动态范围。ADC 的转换时间必须小于行时间,否则行率无法提升。寄存器中与 ADC 相关的配置包括 adc_bit_mode、adc_bias、adc_clk_div 等。当从 12 bit 切到 10 bit 时,同一行时间下可支持更高帧率,但暗部量化台阶变粗,这是分辨率与帧率的典型折中。
数字处理与 ISP 接口
ADC 输出的原始数据(RAW)进入数字前端,依次经过缺陷像素校正(DPC)、镜头阴影校正(LSC)、黑电平数字校正、以及可选的 RAW 压缩。之后数据被送往 ISP 接口。这里的“ISP 接口”有两种含义:一是传感器内部集成的 ISP,直接输出 YUV/RGB;二是传感器只输出 RAW,由外部 SoC 的 ISP 处理。寄存器上通过 isp_enable、output_mode 区分。若走外部 ISP,传感器侧只需保证 RAW 数据、行有效信号、帧有效信号、像素时钟四者对齐;若走内部 ISP,还需配置白平衡、去马赛克、伽马、色彩矩阵等模块,这些模块会引入额外的流水线延迟,影响帧有效信号的起始位置。
输出格式与接口类型
输出格式决定了数据如何被封装和发送。常见格式包括 RAW8/RAW10/RAW12、YUV422、RGB888。接口类型主要有并行 DVP、MIPI CSI-2、以及部分产品的 LVDS。MIPI CSI-2 以数据包形式传输,包含长包(图像行)和短包(帧同步、行同步、嵌入式数据)。寄存器中 mipi_lane_num、mipi_data_type、mipi_lane_rate 决定链路参数。以 1920×1080@30fps、RAW10 为例,每帧有效数据约 1920×1080×10/8 ≈ 2.59 MB,加消隐后按 2.8 MB 估算,30 fps 对应约 84 MB/s,若用 2 lane MIPI,每 lane 约 42 MB/s,即约 336 Mbps/lane,远低于常见 1 Gbps/lane 上限,说明该配置下链路余量充足。若切到 60 fps 或 4 lane 变 2 lane,就需要重新核算。
时钟域划分与跨域同步
整条通路涉及多个时钟域:像素阵列与行译码工作在行时钟域,ADC 工作在列时钟域,数字处理与输出接口工作在像素时钟或 MIPI 高速时钟域。跨域交接必须用异步 FIFO 或握手信号,否则会出现亚稳态和行撕裂。寄存器配置中,pll_mult、pll_div、pclk_div、mipi_clk_div 决定各时钟频率。一个常见约束是:MIPI 高速时钟必须与像素时钟保持整数或半整数关系,否则行消隐无法稳定对齐。调试时若出现图像横向错位或帧率不稳,应优先检查 PLL 锁定状态与各时钟分频比是否与数据率匹配。
从架构到寄存器:配置顺序建议
把上述通路映射到实际配置流程,通常遵循“先时钟、后阵列、再模拟、最后接口”的顺序。第一步配置 PLL,使 pclk 与 mipi_clk 稳定锁定;第二步设置读出窗口与 binning,确定数据量;第三步设置 again/dgain 与 blc,保证模拟链路工作点正确;第四步设置 ADC 位宽与输出格式;第五步使能 MIPI lane 与数据包类型。若顺序颠倒,例如先开 MIPI 再配 PLL,链路可能因时钟未锁定而进入错误状态,需要软复位才能恢复。调试时可用示波器观察 pclk、vsync、hsync 三者的相位关系,若 hsync 在 vsync 有效期间出现异常脉冲,往往说明行消隐寄存器与时钟分频不匹配。