ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Sensor AE调试核心:Gain映射与寄存器配置详解

Sensor AE调试核心:Gain映射与寄存器配置详解 做Sensor调试这几年我踩过最多的坑不是在ISP调参上反而是在很多人觉得没什么好调的Gain上。尤其是AE跑起来之后曝光明明在变亮度曲线却忽高忽低或者低照度下噪点突然爆炸最后查下来问题基本都出在sensor驱动里Gain的映射方式上。这篇文章我想用SC230AI、OV08A10、IMX335这三颗sensor做例子把Sensor AE调试里Gain相关的寄存器配置、Datasheet阅读思路和三种典型配置模式一次讲透。适合正在做平台驱动适配、ISP调试或者3A算法集成的朋友尤其是RV1126B这类带独立ISP的硬件平台上Sensor驱动里的Gain映射写对了AE工作就成功了一大半。1. 曝光三角形与Gain在AE链路中扮演的角色1.1 AE不是调亮这么简单曝光、增益、帧率的博弈自动曝光AE的目标很朴素——让画面亮度收敛到目标值但实现这条路的约束条件一点都不朴素。一个完整的曝光三角形由曝光时间shutter、增益Gain和光圈光圈或通光量组成。在嵌入式平台上光圈通常是固定的所以真正参与实时调节的只有曝光时间和增益两个变量帧率又反过来限制曝光时间的上限最终形成一个三角约束。很多刚开始接触AE调试的人容易把Gain理解成把画面调亮的一个系数这个理解不能算错但它忽略了一个关键点Gain的调整不是无代价的。增益本质上是对信号进行放大信号放大的同时噪声也被放大了。曝光时间是直接增加光子收集量信噪比是实打实地提升而增益只是把已经收集到的信号变大放大器自身的噪声、ADC的量化噪声都会跟着一起放大。所以AE策略里通常有个优先级先调曝光时间曝光时间不够了再动Gain。在AE算法内部这个优先级会转化成两条曲线一条是曝光时间从最小值爬到最大值的曲线另一条是Gain从1x爬到上限的曲线。曝光时间爬到上限之后Gain才开始启动这是绝大多数平台默认的AE策略。但具体到三颗sensor上Gain能爬多高、爬多快、每一步爬多少完全取决于寄存器里Gain的表示方式和驱动映射写得对不对。1.2 从AE Target到Sensor寄存器一条容易断的链路AE算法计算出来的是一个抽象的目标亮度对应到具体硬件上要经过一条完整的链路才能变成sensor寄存器里的值。这条链路大致是这样的AE算法基于当前帧的统计信息亮度、直方图等计算出目标曝光量和目标增益。平台ISP层的3A框架把这个目标增益拆分成sensor增益和ISP增益两部分。Sensor驱动里的set_gain接口拿到目标增益后按照该sensor的Gain寄存器格式换算成具体的寄存器值。换算后的寄存器值通过I2C写入sensor下一帧开始生效。这条链路里最容易出问题的就是第3步。不同sensor厂商对Gain寄存器有完全不同的设计哲学有的用一个寄存器放总增益有的把模拟增益和数字增益拆成两个寄存器有的支持DAG双转换增益需要在高低增益档位之间切换。如果驱动里对这个映射关系理解不到位AE算法猜得再准也没用寄存器写进去的增益和算法期望的增益根本对不上。我之前调一颗sensor时发现AE收敛后画面亮度总是偏暗半档抓I2C波形看了寄存器值又对着Datasheet的增益表核对了好几遍最后发现是驱动里把增益的换算公式写反了。sensor要求的是寄存器值 目标增益 × 128驱动里写成了目标增益 寄存器值 × 128这种低级错误只要有一次就能让你排查一整天。所以理解Gain的寄存器表示方式不是驱动工程师一个人的事做ISP调试的也要能看懂。1.3 为什么三种Gain模式会成为调试分水岭说三种Gain配置模式其实可以从两个维度理解。一个维度是sensor硬件本身的增益类型模拟增益、数字增益、双转换增益DAG/DCG。另一个维度是AE策略层的配置方式纯模拟增益模式、模拟数字混合模式、DAG自动切换模式。这两个维度在实际调试中是交叉的。例如OV08A10在Datasheet里把模拟增益和数字增益分开硬件上支持双转换增益IMX335同样有类似的高/低转换增益设计SC230AI也提供了对应的寄存器来配置增益模式。三颗sensor虽然都是CMOS图像传感器但在Gain寄存器的计算方式、步进精度和增益范围上差异很大直接套用同一套驱动代码通常跑不出好的效果。这篇文章后续的内容就围绕这两个维度展开先把三种增益类型的原理说清楚再逐颗拆解三颗sensor的Datasheet增益信息最后落到寄存器计算和AE调试实操上。2. 模拟增益、数字增益与组合增益本质与取舍2.1 模拟增益在像素域放大代价是调节精度模拟增益发生在像素信号被ADC数字化之前是对光电子转换出来的电压信号进行放大。它本质上是一个可编程的放大器PGA或者通过改变像素复位电平来实现好处是信号在放大过程中还没有经过ADC量化所以不会放大ADC的量化噪声信噪比表现相对好。但模拟增益有个先天限制放大倍数不能无限做高。首先是像素内晶体管的电压摆幅有限增益太高容易使信号接近饱和电压导致高光区域提前削波其次是模拟放大器的线性度会随着增益升高而变差增益越高输出和输入之间的线性关系就越难保证这对AE算法的线性假设是个考验。所以绝大多数sensor的模拟增益范围通常在1x到8x之间超过这个范围就需要数字增益上场。模拟增益的寄存器表示方式很多样。有的sensor用一个线性寄存器表示如寄存器值除以一个固定系数就是实际增益有的sensor用指数方式表示比如每增加1表示增益提升0.1倍还有的用查表方式寄存器值和实际增益不是简单的数学关系必须对着Datasheet的增益表一个个查。OV08A10这类sensor还会把模拟增益拆分成整数部分 小数部分分别存到不同寄存器位里换算起来要格外小心。2.2 数字增益灵活但噪声跟着放大数字增益是在ADC完成数字化之后对数字信号直接做乘法。从AE策略的角度看数字增益最大的优点是灵活精度高、范围大、线性度好不会受到模拟电路非线性失真的影响。很多sensor的数字增益范围能做到1x到16x甚至更高而且步进可以做到非常精细。但数字增益的问题也很明确它放大的信号里已经包含了ADC量化噪声和读出噪声。之前模拟增益没有放大的那部分量化噪声在数字增益阶段一个不落全被放大了。这就是为什么低照度场景下如果AE策略让数字增益顶得太高画面上会出现明显的噪点和banding。理论上说相同总增益下模拟增益占比越高画质越好数字增益占比越高噪声越明显。在寄存器层面数字增益的表示通常比模拟增益简单一些。很多sensor直接用12bit或16bit的固定点数表示比如OV08A10的数字增益寄存器组高位是整数部分低位是小数部分。有些sensor的数字增益还分色通道R/G/B分别调节这主要是为了做白平衡AE调试时一般只看全增益的总放大倍数。2.3 组合增益DAG/DCG硅片上的双档位设计双转换增益Dual Conversion GainDAG有些厂商叫DCG是近几年sensor设计里非常流行的一个特性。它的原理可以理解成给像素准备了两套不同的电荷转电压的转换系数高转换增益HCG模式下同样数量的光电子能转换出更高的电压等效于提高了灵敏度但满阱容量会相应变小低转换增益LCG模式下转换增益低一些灵敏度降低但满阱容量大高光不容易饱和。这颗sensor会自动根据光照条件把像素切换到不同的转换增益档位或者在AE的控制下切换。这个特性在低照度场景下特别有用当光线很暗时信号弱、噪声占比高切到高转换增益模式可以等效提升信噪比因为读出噪声在转换后所占的比例变小了当光线很强时切回低转换增益模式避免高光饱和。DAG/DCG的寄存器配置是AE调试里最容易出问题的地方因为它多了一个切换档位的动作。切换的阈值在哪里、切换之后Gain的映射关系是否要重新对齐、切换瞬间画面亮度会不会突跳这些都是在驱动和AE算法层面要处理的。SC230AI、OV08A10、IMX335都有类似的特性但各家的寄存器命名和切换逻辑差异很大后面我会逐一说明。2.4 三种模式各自的信噪比曲线把三种增益模式拉到信噪比维度看它们的表现差异可以画成一条趋势曲线实际调试时通过改变亮度环境测出来的曲线也基本符合这个规律配置模式低增益区间高增益区间主要噪声来源适用场景纯模拟增益信噪比最优信号接近模拟饱和区后线性度下降噪声上升光子散粒噪声光照充足或轻度低照模拟数字混合中低增益区间信噪比较好数字增益放大ADC量化噪声噪声明显读出噪声、ADC量化噪声常规AE策略默认选择DAG/DCG自动切换高转换增益档信噪比显著提升切换不当会产生亮度和噪声突变切换点抖动、档位切换噪声低照场景、HDR场景这里想强调一个经验在低照度场景下如果你听到sensor厂商提到这颗sensor在低增益下噪声表现好或者支持低噪声模式通常指的就是DAG/DCG里的高转换增益档。AE调试时一定要考虑总增益相同的情况下不同档位下的信噪比差异是不同的逻辑上不能简单地把Gain当作一个无量纲系数来处理。3. Datasheet里的增益信息怎么看SC230AI/OV08A10/IMX335横向拆解3.1 SC230AI思特威的增益表与DAG寄存器SC230AI是思特威一颗200万像素级别的CMOS sensor常见于安防、车载等场景。思特威这颗sensor的Datasheet风格和SONY、OV不太一样它的Gain相关寄存器需要仔细看里面附带的增益表而不是单纯套公式就能算出来。SC230AI的增益寄存器结构是模拟增益寄存器 数字增益寄存器分离的。模拟增益寄存器控制像素输出级的放大倍数寄存器值和实际增益之间是一张映射表不是简单的线性关系。比如寄存器值从0x00到0x0F对应的可能是1x到8x的模拟增益但中间每一步的增幅并不均匀。数字增益寄存器则相对直接按照Datasheet里的固定点数格式换算即可。这颗sensor的DAG配置要点在于它的增益表和DAG档位是联动的切到高转换增益档位之后模拟增益寄存器的映射关系可能会变同样的寄存器值在不同档位下对应的实际增益不同。驱动里如果只是简单套用一套换算公式DAG切换之后就会出现亮度跳变。处理这类sensor时我习惯把Datasheet里的增益表预先做成一张查找表放到驱动里而不是在运行的时候现算。3.2 OV08A10豪威的Real Gain与Fix Gain拆分OV08A10是豪威的一颗800万像素sensor常见于前摄、行车记录仪等场景。这颗sensor的Datasheet在Gain部分写得比较规整它把增益分成了Real Gain真实增益和Fix Gain固定增益两部分这个Real Fix的概念值得展开说明。Real Gain是可以通过寄存器实时调节的那部分增益Fix Gain是sensor内部已经固定存在的、不可调节的增益。在AE调试的时候重点关注Real Gain即可但计算总增益时要把Fix Gain也加进去否则算出来的曝光量和实际画面亮度对不上。OV08A10的Real Gain寄存器同样分模拟增益和数字增益两组模拟增益部分通常有步进精度限制数字增益部分用固定点数格式表示。OV08A10在低照度下的表现和DAG配置关系很大。它的高转换增益档位默认是开启的AE策略需要决定在什么亮度水平下切换。OV的Datasheet里一般会给出一条增益-曝光-亮度的推荐配置曲线但实际平台的AE策略不一定完全照着推荐来需要根据整机效果做调整。这颗sensor的调试难点在于平衡模拟增益和数字增益的分配如果让数字增益过早参与低照度噪点会偏多如果模拟增益顶得太高又可能出现高光区域发紫、线性度变差的现象。3.3 IMX335索尼的PGA/数字增益与平滑切换IMX335是索尼一颗500万像素sensor在车载、安防领域用得非常多。索尼的Datasheet文档风格比较偏硬件工程师Gain相关的寄存器描述里会明确区分PGA可编程增益放大器和数字增益并且对每个寄存器的位域定义写得很清晰。索尼sensor的增益计算方式通常和增益倍数以dB为单位这个思路有关。也就是说寄存器值每变化一个步长对应的增益变化是固定的dB数而不是固定的小数倍数。这个特点在AE调试时要注意AE算法内部通常以线性增益倍数来计算曝光量但寄存器寻址时用的是dB域或者sensor自定义的step。驱动里必须做一次线性域到sensor域的换算并且在换算过程中保持浮点精度足够不然长时间AE收敛后会出现亮度偏移。IMX335也有DAG/DCG特性它的切换逻辑通常通过专门的寄存器位来控制而且索尼会在Datasheet里给出HCG/LCG模式下对应的满阱容量、转换增益、噪声等参数对照表。调试这颗sensor时DAG切换点的处理尤其重要索尼sensor的切换如果处理不好画面会出现非常明显的亮度断层——不是渐进的那种是一帧之内跳变的。我建议在驱动里预留一组可配置的切换阈值方便在现场针对不同场景做微调。3.4 把三家寄存器统一成线性增益的映射表三颗sensor的增益信息虽然看起来五花八门但本质上都是在做同一件事把AE算法的一个目标增益值变成sensor能执行的寄存器值。调试的第一步就是给每颗sensor建立一张线性增益到寄存器值的映射表这个表是后续所有AE调试的基础。Sensor增益寄存器结构模拟增益表示数字增益表示DAG/DCG支持SC230AI模拟/数字分离查表映射不均匀步进固定点数格式支持切换后映射表变化OV08A10Real Gain Fix Gain整数小数位域拆分12bit/16bit固定点数支持默认开启HCGIMX335PGA 数字增益dB域步进dB域或固定点数支持切换阈值可配置这个映射表建好之后我通常会在驱动里加上一个调试节点直接读取当前寄存器值并且实时换算成线性增益输出到日志里。这样在3A调试工具里看到AE报出的gain值能和sensor寄存器里的值一一对上排查问题会快很多。建映射表的时候有一个原则尽量读Datasheet的增益曲线图来校验公式而不是只看寄存器描述。寄存器描述告诉你的是格式是什么增益曲线图告诉你的才是实际对应的增益是多少。有的sensor受到工艺偏差影响实际的增益曲线和Datasheet的标称曲线有偏差这种情况下可以现场标定一版修正系数进去不要硬套公式。4. 寄存器计算链路AE算法怎么算出要写入的Gain值4.1 AE算法的增益模型线性值而非寄存器值几乎所有的AE算法在内部计算时用的都是线性增益值而不是sensor的寄存器值。原因是线性值才有可比性一颗sensor的模拟增益3x和数字增益3x在线性值下都是3x但它们在寄存器里的表示完全不同。AE算法不关心这些差异它只关心当前总增益是几倍然后根据曝光统计结果决定下一步增益往哪个方向调、调多少。所以在驱动和算法之间要约定一个统一的接口线性增益值。RV1126B这类平台的3A框架里sensor驱动需要实现set_gain接口参数一般是浮点或者定点数表示的线性增益。sensor驱动内部再把线性增益换算成寄存器值。有些平台的3A框架还会约定一个gain表示精度比如以1/1024为一个单位来表示线性增益换算时要注意单位对齐不然会出现一个固定偏差。这里有一个常见的坑AE算法里的总增益指的是模拟增益和数字增益的乘积比如模拟3x 数字2x算法看到的是总增益6x。但sensor驱动在把6x拆分成模拟和数字两部分时如果拆分策略不对就会影响画质。这个问题引出了下一小节要说的分配合比。4.2 分配合比模拟/数字/ISP Gain三路协同很多平台在AE链路里其实有三路增益可以参与sensor模拟增益、sensor数字增益、ISP数字增益。理论上这三路都是增益可以达到相同的总放大倍数但实际效果差别很大。从信噪比角度排序模拟增益优先 sensor数字增益次之 ISP数字增益最后。因为模拟增益在ADC之前放大sensor数字增益在ADC之后但在RAW数据输出之前ISP数字增益则在传感器数据进入ISP之后、去噪和颜色处理之前或之后放大噪声的权重不同。所以一个合理的分配合比策略是先把模拟增益推到合理上限再启用sensor数字增益最后才用ISP增益兜底。但这个策略不是绝对的。有些平台的3A框架为了简化处理会把ISP增益和sensor增益分开计算sensor增益负责大范围粗调ISP增益负责细调。例如sensor增益步进精度不够每步0.5dB之类AE收敛到目标亮度后总差一点点达不到这时用ISP增益做微调是最合适的。SC230AI这种查表式模拟增益步进不均匀配合ISP增益做细调就非常有必要。分配合比还有一个约束是寄存器的分辨率。有些sensor的数字增益寄存器只有12bit表示的精度有限如果AE算法要求0.1dB级别的调节单靠sensor数字增益做不到需要考虑用ISP增益补充。反过来如果ISP增益太大又可能把前面sensor输出的噪声一起放大。所以一个成熟的AE策略分配合比应该是动态调整的而不是固定死一个比例。4.3 步长与阻尼防止gain步进导致画面闪烁AE调试里经常会碰到一个现象画面亮度看起来在呼吸忽亮忽暗或者在某一个亮度范围内来回震荡。这时候很多人会去调AE算法的PID参数但如果增益的寄存器步进设置不合理PID调得再好也没用。sensor增益的步进精度直接决定了AE的收敛精度。假如sensor的模拟增益每步是0.5dB那AE算法在调节时相邻两档之间的亮度差异可能超过目标误差范围画面就会在某个亮度附近来回跳。解决思路有两个一是传感器增益步进本身不支持的精度用ISP增益来补二是AE算法里做阻尼也就是每次调节的幅度不要超过一档或者对调节方向做滞回处理。还有一个与步长相关的细节是不同增益区间的步进可能不一样。比如低增益区间模拟增益每步0.125dB高增益区间变成0.25dB。AE算法如果不知道这个变化可能在低增益区间收敛得好好的一到高增益区间就开始震荡。这个信息要提前从Datasheet里读出来配置到AE算法的增益曲线表里而不是靠实测一点点试。4.4 切换点防抖DAG/DCG切换时如何处理DAG/DCG切换是AE调试中最容易忽略的环节。很多sensor在HCG和LCG之间切换时理论上说同一寄存器值对应的实际增益是连续衔接的厂商在设计时会做校准但实际切换瞬间总会有微小的偏差这个偏差在画面上表现为亮度的一个小跳变。如果AE算法没有处理长时间曝光后还可能因为切换点附近增益跳变幅度大导致画面在切换点附近来回抖动。处理切换点防抖我常用的做法是在驱动里把HCG/LCG的目标切换亮度做成可配置的默认值参考Datasheet推荐实测后微调。AE算法在切换点附近做一个滞回区间。比如从LCG切到HCG的阈值是亮度值20从HCG切回LCG的阈值设在22避免在边界上来回切换。切换瞬间sensor的曝光和增益不要同时跳变。先让增益切换到目标档位对应值再调整曝光时间错开两步减少画面跳变的幅度。SC230AI在DAG切换时需要注意映射表变化的问题。它的驱动代码里切换前后要重新计算一次寄存器值不能沿用切换前的换算结果。OV08A10的DAG默认开启如果AE算法里没有DAG概念只是简单地把增益往上加实际画质可能反而不如关闭DAG时的表现。IMX335由于像素本身尺寸和转换增益配合比较好切换时相对平滑但切换阈值同样要根据实际场景调整。5. 实测案例同一个AE Target三种sensor的调试差异5.1 低照度场景数字增益上限与降噪策略在低照度下测试三颗sensor你会发现它们的表现差异比Datasheet参数表上写的还要明显。SC230AI在模拟增益范围内的噪声控制不错但它的增益查表在高增益区间的调节粒度比较粗AE收敛后亮度容易在目标值附近小幅波动需要配合ISP增益细调。OV08A10在低照度下如果开启HCG噪点抑制效果明显但前提是AE策略要在这个场景下主动把sensor切到HCG档位否则还是走默认的LCG路径低照表现就平庸了。IMX335的低照表现通常更稳但索尼的sensor在高数字增益下容易出现横纹或者banding这个和PCB供电布局相关需要硬件配合。低照度调试时我会重点看三个数据sensor当前增益档位HCG还是LCG、数字增益占总增益的比例、ISP增益的大小。经验值上数字增益和ISP增益的合计占比不要超过总增益的1/4不然噪点会明显变重。这不是一个严格的公式但用这个标准去筛一遍各颗sensor的AE分配合比能快速定位大部分低照噪点问题。5.2 强光切换场景DAG切换瞬间的亮度突跳强光场景下DAG从HCG切回LCG的瞬间如果处理不好画面会突然暗一下或者亮一下。这个现象在车载场景尤其致命因为隧道出入口恰好就是DAG切换的高发区驾驶员对画面亮度突变的敏感度非常高。我实测的时候发现OV08A10的DAG切换突跳和切换前所处增益值有关。如果切换前增益正好处在HCG档位的边缘切换后LCG档位的起始增益和HCG末段增益之间会出现一个空洞画面瞬时偏暗。解决办法是把切换点往低增益方向偏移让HCG的末段增益和LCG的起始增益有一定重叠区间。IMX335的切换突跳通常更小但它的切换阈值如果设得不合适在黄昏这种亮度持续缓慢下落的场景里HEG/LCG会交替切换多次画面像在呼吸。SC230AI的DAG切换相对特殊因为模拟增益查表和DAG档位是联动的切换瞬间如果驱动没有同步更新映射表寄存器里的值虽然变了实际增益却没有按预期变化。我建议在驱动里把DAG切换做成一个原子操作先更新增益映射表再写DAG档位寄存器最后再写增益寄存器避免中间态。5.3 50Hz/60Hz光源下的gain平滑策略在荧光灯、LED灯这些交流电光源下AE调试要考虑防闪烁Anti-Flicker策略。这个策略通常限制曝光时间必须是光源周期的整数倍50Hz对应10ms周期60Hz对应8.33ms周期避免画面出现明暗条纹。Gain在这个场景下也参与防闪烁当环境亮度变化导致曝光时间需要跳变时比如从1/60跳到1/120AE算法会先用增益补偿这个跳变带来的亮度变化然后逐步把增益调回去这个过程叫曝光时间切换的增益补偿。如果这个补偿过程的步进太大画面就会出现一次明显的闪烁如果补偿太慢又会出现亮度拖影。三颗sensor在这个场景下的差异主要在于增益步进精度步进精度高的sensor如IMX335补偿过程更平滑SC230AI因为查表步进不均匀补偿值需要做插值否则跳变感会比较强。5.4 一版通用调参顺序的复盘我整理了一份适用于这三颗sensor的通用AE调参顺序算是给自己复盘用的备忘录也分享出来供参考第一优先确认sensor驱动里Gain映射和Datasheet一致用I2C读取寄存器并换算成线性增益和3A工具里报出的gain值做交叉校验。第二优先根据datasheet的增益范围和步进配置AE算法的增益曲线表标注出DAG切换点。第三优先设置模拟增益和数字增益的分配策略先模拟后数字控制数字增益上限。第四优先调整AE收敛速度的PID参数确保在DAG切换点附近不会震荡。第五优先做低照度、强光切换、防闪烁三个场景的专项测试记录三颗sensor的表现差异按场景微调对应的配置参数。这套顺序看起来平淡无奇但实际执行中每一步都可能卡住。我见过有同事在第二步就卡了整整一天原因是sensor Datasheet里的增益表是dB域的他直接拿线性值和寄存器值去对应怎么都对不上。我的建议是遇到Mapping对不上的情况先把两边的值都换算成dB域比较同一增益水平下寄存器值是否单调、是否连续再回推线性域的映射关系。6. 调试工具链与常见问题排查6.1 必备工具I2C读写、寄存器dump、PQ工具Sensor AE调试工具准备到位能省一半的排查时间。我日常调试至少会准备四样东西I2C读写工具、寄存器实时dump工具、串口日志输出、平台自带的3A调试工具RV1126B上一般是PQ Tools或者RKPQ。I2C读写工具用来单独读/写sensor寄存器验证某个寄存器值对画面亮度的影响。寄存器实时dump功能对于查DAG切换这类偶发问题特别有用可以把每帧的寄存器值记录下来在问题出现的帧上看寄存器有没有异常跳变。串口日志则用来输出驱动层的增益换算日志加一行当前线性增益6.5x模拟寄存器0x12数字寄存器0x200之类的打印排查效率能提升一个量级。还有一个很多人会忽略的工具示波器或者逻辑分析仪用来抓I2C波形。当怀疑是寄存器写入失败导致画面异常时光看驱动日志常常找不到问题因为驱动日志只告诉你已经去写了有没有写成功是要靠抓波形确认的。6.2 gain写进去了但画面没变排查清单I2C时序上看到寄存器值在变但画面亮度就是不动——这是Sensor调试群里出现频率最高的问题之一。针对这个问题我整理了一个排查清单序号检查点说明1寄存器地址是否按Datasheet索引对了部分sensor的Gain寄存器在分页bank下需要先切页2寄存器写入是否真的落到了正确sensor同一条I2C总线上挂了多颗sensor时容易写错地址3写入时序是否满足sensor要求有些寄存器需要在帧消隐期写入才会生效4寄存器值换算是否正确最常见的坑目标增益和寄存器值的计算关系搞反5当前模式是HCG还是LCG同一寄存器值在不同档位下实际增益不同6曝光时间是否被其他限制卡死如果曝光时间本身已达上限增益改了亮度变化会被算法补偿掉大多数情况下问题出在第1项和第4项。分页寄存器这个坑我在SC230AI上踩过Datasheet的寄存器序列表格很长如果不先看页选择寄存器的说明很容易在错误的页上写正确的地址结果就是写了个寂寞。换算关系搞反这个事在OV08A10上也常见它的Real Gain寄存器位域有镜像值和实际值两套概念搞混之后算出来的增益值完全不对。6.3 同一寄存器值不同sensor亮度不同的误区最后想聊一个容易让新人困惑的问题为什么同一个寄存器值写进SC230AI和IMX335之后画面的亮度表现完全不一样这个问题如果没想透会让人误以为哪颗sensor坏了或者驱动写错了。答案很简单寄存器值是地址字节的组合本身没有物理意义它必须和sensor的具体模拟电路设计、转换增益、ADC满量程等参数配合起来才能对应到一个实际的增益倍数。SC230AI的寄存器值0x10在查表后可能是1.5x增益而OV08A10的0x10可能对应的是2.0x增益。所以在做多sensor平台适配时驱动里的set_gain接口必须以线性增益作为对外接口寄存器换算完全封装在sensor驱动内部这样才能保证AE算法层的代码不需要因为sensor不同而做修改。这个原则在RV1126B平台上体现得尤其明显平台sensor驱动框架里的set_gain接口统一接收线性增益值各sensor驱动自己完成线性值到寄存器值的换算。只要这颗sensor的驱动换算关系准确平台3A和ISP层的代码就不用动sensor切换的成本就控制在了驱动适配这一层。能把这件事想明白Sensor AE调试的主线就不会跑偏。
返回列表