ARTICLE DETAIL

资讯详情

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

CIS芯片测试全流程:从暗电流到坏点实战解析

CIS芯片测试全流程:从暗电流到坏点实战解析 CIS芯片测试这个词圈外人第一次听到多半会往网络设备上想其实在半导体行业里CIS是CMOS Image Sensor的缩写也就是图像传感器。手机摄像头、车载环视、安防监控、扫码枪、内窥镜只要涉及把光变成电信号再变成图的地方背后几乎都有一颗CIS。而芯片测试就是把这颗芯片从晶圆到成品的过程中用各种手段确认它看得见、看得准、看得稳的那一整套流程。这篇东西我打算按一个测试工程师的实际工作顺序来讲先搞清楚测什么再讲怎么搭台子然后是具体的测试项和实操细节最后是踩过的坑和排查思路。不管你是刚入行的测试新人还是做硬件、做驱动、做ISP算法的只要工作需要跟CIS打交道这篇应该都能给你省点摸索的时间。1. CIS测试到底在测什么先把对象和边界搞清楚很多新人上手第一件事就是跑去问测试程序怎么写其实更该先问的是这颗芯片到底有哪些量是可以测的。CIS跟普通的数字逻辑芯片不一样它一半是模拟、一半是数字、还掺着光学你拿纯数字的那套ATPG思路根本套不上去。它的输出不是一个0或1而是一帧一帧的像素阵列每一帧里每个像素都是一个十几位的数据。这就决定了一件事CIS测试的绝大部分工作量其实是在怎么把图像采回来、怎么把采回来的数据算成一个能判Pass/Fail的数。1.1 一个像素单元里藏着哪些可测的量主流的CIS像素是4T结构光电二极管PD负责把光子转成电子传输管TX把电荷搬到浮空扩散节点FD复位管RST负责把FD拉回参考电平源跟随器SF做缓冲选择管SEL决定这一行要不要输出。听起来简单但每一个管子都对应着一组可测参数。PD这块主要看量子效率、满阱容量、暗电流。满阱容量决定了这颗sensor能存多少电子直接绑死动态范围的上限暗电流是无光条件下自己冒出来的电子它跟温度强相关一般温度每升8到10摄氏度暗电流就翻一倍所以暗态测试对温控特别敏感。FD节点主要看转换增益单位是uV/e-它决定了同样的电子数能变成多大的电压摆幅。转换增益高弱光下读出噪声表现好但满阱容易被压小这是一个典型的工程折中。读出链路上要看读出噪声、列固定模式噪声、列放大器增益一致性。这些量在图像上表现出来的就是噪点、竖条纹、固定花纹。这些参数里有的是设计阶段仿真出来的有的是靠测试实测反推的。测试工程师真正关心的是哪些量能在产线上用比较低的成本、比较快的节拍测出来并且能真实反映良率。凡是测起来要几十分钟、还要上昂贵设备的通常都放在工程批或者抽检里做。1.2 测试的三个层级晶圆级、封装级、模组级CIS的测试一般分三层。第一层是晶圆级也叫CP或者WAT阶段用探针台压针卡直接扎在晶圆的pad上上方架一个光源。这一层的好处是便宜、早筛坏芯片在还没封装之前就扔掉能省下后面所有的封装和模组成本。难点是探针台加光源的机械结构很麻烦探针卡本身也会挡光所以很多厂在这一层只做电性能和一部分光学项比如暗电流、上电时序、寄存器读写、粗测响应。第二层是封装级芯片已经封成LGA、COB或者BGA插到测试座的DUT板上。这时候可以装镜头或者用图卡测的东西就全了坏点、shading、SNR、动态范围、色彩。这也是产线上最主要的一道关。第三层是模组级摄像头模组已经组装完成把镜头、音圈马达、滤光片都装好了。这一层测的是整机视角的效果重点在AF对焦、OIS防抖、镜头阴影、色彩还原。模组厂和整机厂做得多。之所以要分三层而不是一次测完核心原因是成本。往后的每一层材料和工时都在叠加。晶圆级测一次几分钱模组级测一次几块钱如果你把模组级的测试项全搬到晶圆级良率会低得没法看还测不准因为晶圆级根本没有镜头。所以分层测试本质上是一个成本与覆盖率的平衡问题。2. 测试方案选型测试机、探针台和光源怎么搭方案选型这件事看起来是硬件工程师的活但测试工程师一定要参与因为台子搭得不对后面程序写得再好也白搭。我见过太多项目程序调了两个月最后发现是光源均匀性不够导致的误判。2.1 测试机与采集链路怎么配CIS测试机的主流思路是通用ATE 专用采集板。通用ATE负责供电、数字控制、I2C/SPI寄存器读写、功耗测量、MIPI或者DVP接口的时序。采集板负责把高速图像数据抓下来存进内存。两者之间靠触发信号同步。为什么不用一台机器全干完因为CIS的输出数据率很高一颗几百万像素、30fps的sensorraw10格式下数据率轻松到几百Mbps通用ATE的数字通道跑这个速率要么不够要么贵得离谱。用一块FPGA做的专用采集板成本低得多还能在板上做实时统计比如边采边算行均值、列均值、坏点计数这样上位机就不用把整帧图像都搬回去算了节拍能压下来不少。供电这块要注意CIS一般要三路电模拟电、数字电、IO电有些还有单独像素电。上电顺序在很多datasheet里是有明确要求的通常要求模拟先上或者IO先上顺序错了会出现闩锁或者上电电流异常。产线上为了省时间会尝试简化上电时序能不能简化得拿数据说话不能凭感觉。2.2 光源和图卡系统的选择光源是CIS测试里最容易被低估的一环。常见的方案有三种积分球、平板LED光源、图卡加背光。积分球的好处是均匀性极好出光面照度均匀性可以做到正负1%以内而且亮度可以标定能直接溯源。缺点是贵、体积大、切换色温慢。产线上做定量测试比如灵敏度、SNR、暗电流积分球是首选。平板LED光源适合做快速切换的产线测试多个不同色温的LED混光可以做到几毫秒切换节拍上有优势。代价是均匀性和绝对亮度精度不如积分球需要定期用标准探头校。图卡用于做分辨率、色彩还原、几何畸变的测试常见的透射式分辨率卡、24色卡、灰阶卡。图卡测试对光源均匀性要求同样高因为不均匀会被误判成镜头shading。这里有个很实际的经验光源的色温和亮度必须能锁定并且记录。很多误判最后追根溯源都是某天光源的驱动电流漂了或者积分球的灯老化没换。测试系统里应该定时跑一颗Golden Sample监控它的输出值画出趋势图一旦漂了就报警。2.3 为什么不能只用纯电测替代图像测试有人会问能不能只测电性能不测图像答案是能测一部分但不能替代。电性能测试能覆盖的是上电电流、待机电流、寄存器读写是否正常、I2C通信是否OK、PLL能不能锁、MIPI输出有没有波形、内部LDO电压对不对。这些是芯片活着的证据。但电性能测不出这颗sensor对光的响应是不是线性的、有没有坏点、暗电流是不是超标、列放大器增益是不是一致、shading合不合规。因为在没有光的情况下这些量根本不存在。你只能给光才能测光学。所以实际产线是电测加光测组合。电测放在最前面做快速筛把连不上、上不了电、寄存器读不回来的直接干掉剩下的再进光测这样能省下一大笔光源和采集的时间成本。3. 核心测试项逐个拆从暗电流到坏点矫正这一部分我会把主要的测试项按暗态和亮态分开讲每个都给判定方式和实操注意点。参数阈值各家不一样我这里给的是量级参考具体以产品规格书为准。3.1 暗态测试暗电流、DSNU和暗噪暗态测试的核心是把光源完全关掉或者遮光罩盖严然后在全黑条件下采若干帧图像看像素输出的分布。暗电流的算法通常是先算出黑电平也就是全黑图像的中位数然后减去黑电平偏移再除以曝光时间。Dark_current(DN/s) (Mean_dark - BlackLevel) / ExposureTime这里要注意黑电平是芯片内部已经加过的一个偏置不同增益下黑电平不一样所以必须先读出来或者测出来。另外曝光时间要取实际值有些sensor支持长曝光寄存器里写的行数乘以行长才是真实曝光时间。暗信号非均匀性DSNU衡量的是全黑图像里各个像素之间暗电流的离散程度一般用标准差除以均值来表示。这个量超标的表现就是暗态下画面有明显的固定花纹。暗噪也叫时域噪声是同一像素在多次采样之间的波动通常用连续多帧同一位置像素值的标准差来算。暗噪直接决定动态范围的下限。实操上有一个坑暗态测试必须在温度稳定之后再做。芯片刚上电的时候结温还在往上爬暗电流一直在变这时候测出来的值全是漂的。经验做法是上电后等30秒到2分钟或者用温控台把芯片夹住温度稳定在正负0.5度以内再开始。3.2 亮态测试灵敏度、SNR、动态范围和线性度亮态测试要给出可标定的光照。灵敏度通常定义为单位曝光量下的输出响应单位可以是DN/(lux·s)。SNR的计算方式是用信号减去黑电平再除以噪声标准差然后取20倍log。SNR(dB) 20 * log10((Signal_mean - BlackLevel) / Noise_std)这个公式里信号和噪声必须是同一亮度点下采的。常见的做法是在若干个亮度点上分别采画出一条SNR曲线看它在哪个亮度点达到规格里要求的值。动态范围是全阱信号和暗噪的比值取20倍log。这里有个容易搞混的地方动态范围可以用片上ADC的位深来算理论值比如12bit理论是72dB但实际因为有暗噪和读出噪声实测值会低一些。规格书里写的是实测值不是理论值。线性度测的是输出和曝光量之间的关系偏离直线的程度。做法是固定光源扫曝光时间或者固定曝光时间扫光源亮度然后看拟合直线的残差。线性度差会导致自动曝光算法算出来的亮度不准画面忽明忽暗。这里补一个实操心得扫曝光时间做线性度比扫光源亮度更稳因为光源的调节本身有误差而且调亮度的过程中色温会漂。扫曝光时间只需要保证光源稳定不动重复性好得多。3.3 坏点、坏行、坏列的判定与ISP坏点矫正的关系坏点是CIS测试里最核心也最容易出争议的一项。所谓坏点就是输出值和周围像素明显不一致的点。分几种全黑点就是无论怎么给光输出都是黑的全亮点输出一直饱和还有闪烁点时好时坏。判定算法一般是这样的先扣黑电平然后对整帧求中位数或者用局部邻域中位数接着算偏离量超过阈值就判坏点。import numpy as np def find_defect_pixels(frame, black_level64, k_sigma5.0, abs_thr120.0): img frame.astype(np.float32) - black_level med np.median(img) diff np.abs(img - med) # 用MAD估计标准差比直接std更抗坏点污染 mad np.median(diff) sigma 1.4826 * mad thr max(k_sigma * sigma, abs_thr) mask diff thr return mask.sum(), mask这里说一下为什么用MAD而不是直接用std。因为坏点本身就会把std拉高你用一个被污染的标准差去判坏点阈值会虚高结果就是坏点判不出来。MAD对离群值不敏感更稳。这个细节很多现成的脚本里没写对。坏点判定完之后还有一个重要环节是分类。全黑点和全亮点在ISP里的处理策略不一样有些方案会用邻域中值替换有些会用同色邻域替换。测试报告里最好把坏点位置图和分类统计一起输出方便后端分析。说到ISP就不得不提坏点矫正DPC。测试和矫正完全是两件事测试是判这颗sensor裸出图有没有超标的坏点矫正是在出图链路里把已知的坏点用算法抹掉。产线上下线前通常会把坏点表烧进OTP里ISP开机读出来做定点矫正。这就引出一个很实际的判断一颗sensor坏点数超标到底判Fail还是判Pass如果坏点位置固定、数量在DPC能覆盖的范围内很多方案是判Pass然后烧表矫正。但如果是闪烁点也就是时变坏点DPC就无能为力了这种必须判Fail。所以在测试程序里判断坏点是不是时变比判断坏点数量更重要。常见的做法是采多帧看同一位置的坏点是不是每帧都出现。还有一点坏点判定的阈值设定要跟DPC的能力对齐。如果DPC最多能修100个点你测试阈值却卡在50个那就有50个可修的点被误判成Fail白白损失良率。这两个数字必须由系统、算法、测试三方一起定不能各定各的。3.4 色彩与光学性能黑电平、shading和色彩还原除了上面这些还有一组跟看起来好不好看相关的测试项。黑电平校准是看芯片在全黑条件下的输出是否稳定在目标值附近以及不同增益档位下的黑电平是否一致。黑电平不稳的话画面底色会发灰或者发紫。Lens shading和color shading测的是画面中心和四角的亮度和色彩差异。用均匀光源照满整个画面然后比较中心和四角的值。超标的表现是画面四角发暗或者发绿。白平衡和色彩还原一般用24色卡测算出各个色块的色差通常用Delta E表示。这个项目对光源的显色指数要求很高光源本身显色差测出来的色差没有意义。这部分的实操建议是色彩类测试对环境和工装的一致性极其敏感镜头装配的微小偏差、光源的角度偏差都会体现到结果上。所以这类测试项目通常放在模组级而且要做GRR量具重复性和再现性验证确认测试系统本身的波动小于规格公差的三分之一测试结论才有意义。4. 实操全流程复现从建程序到出报告前面讲的是测什么和为什么这一节讲怎么动手。我按实际写一个测试程序的顺序来。4.1 上电时序与寄存器初始化第一步永远是上电和初始化。CIS的初始化写序列通常有几百个寄存器来源是厂商提供的初始化文件一般是一个文本或者头文件。// 初始化序列示意具体地址必须以对应datasheet为准 i2c_write(0x30, 0x0103, 0x0001); // software reset delay_ms(10); i2c_write(0x30, 0x0300, 0x0004); // PLL 分频 i2c_write(0x30, 0x0301, 0x0004); i2c_write(0x30, 0x0340, 0x04B0); // 帧长 i2c_write(0x30, 0x0342, 0x0A20); // 行长 i2c_write(0x30, 0x0100, 0x0000); // stream off i2c_write(0x30, 0x0100, 0x0001); // stream on写序列里最容易出问题的是延时。有些寄存器写完需要等若干毫秒才能写下一个尤其是PLL和复位相关的。如果厂商给的初始化文件里没写延时你得自己试通常做法是在复位后、PLL配置后、stream on之前各加一个延时然后连续跑一千次上电看有没有偶发失败。还有一个坑是I2C地址。同一颗sensor在不同的模组上地址可能因为SID引脚接法不同而变化从0x30变成0x32或者0x36。测试程序最好把候选地址都扫一遍扫到能读回正确的chip id再继续不然一整批板子都测不了还找不到原因。4.2 采集通道使能与capture开关的配置capture cis开关在哪这个问题我猜搜的人多半是两种情况。第一种是测试程序里的采集任务开关。很多测试软件把图像采集抽象成一个capture任务里面有个使能位。这个开关一般在采集配置模块里命名通常是capture_enable、stream_capture或者trigger_mode。要找它最快的办法不是翻菜单而是看采集板卡的SDK文档因为开关的默认值通常在板卡初始化的时候被设成关闭你必须在启动采集线程之前把它打开否则线程会一直阻塞在等数据上现象就是程序卡死但没有任何报错。这是很典型的一个坑不报错但不动比报错更难查。第二种是EDA工具里同名的东西。做测试板或者DUT板原理图的时候如果用OrCAD Capture CIS那个CIS指的是Component Information System元件信息系统。它的开关在Options菜单下的CIS Configuration里或者在工程属性里有一个Enable CIS的勾选项。默认装完不一定开启需要连到元件数据库才能用。这两个CIS完全不是一回事搜索的时候容易被混在一起这里顺便说一下省得走弯路。回到正题采集通道的配置一般要设这几个东西接口类型MIPI还是DVP、lane数、数据格式RAW8/RAW10/RAW12、帧率、触发器模式自由跑还是外部触发。这里我强烈建议用外部触发。自由跑模式下你发命令让sensor出图然后采集板去抓两者之间没有硬同步抓到的帧可能是上一帧的残留尤其在切换曝光或者增益之后。用外部触发让采集板发一个同步信号给sensor抓的就是确定的那一帧数据干净得多。4.3 阈值设定与参数计算阈值设定是测试程序里最需要动脑子的部分。定高了良率虚低定低了坏品流出去。合理的做法是拿一批已知良品测出参数分布然后按均值加减若干倍标准差来定初版阈值再结合客户规格做收敛。以灵敏度为例假设测了30颗良品均值是1.85 DN/(lux·s)标准差0.06规格下限按3倍标准差算是1.67。但客户规格写的是1.60那实际阈值就取1.67比规格严一点留出测试系统本身的波动余量。这个余量留多少取决于你的测试系统GRR。如果系统重复性波动是正负2%那阈值至少要比规格留出3%到5%的余量否则同一颗芯片测两次可能一次Pass一次Fail。批量计算的时候别在测试程序里做复杂的图像处理效率太低。常规做法是采集板只做行统计和初步筛选把可疑区域的数据传回上位机上位机再做精细计算。这样单颗测试时间能从几秒压到几百毫秒。4.4 数据处理与报告输出报告这块我的建议是除了Pass/Fail把关键参数的实测值也一起输出并且带上测试条件。原因很简单出现批量异常的时候光看Pass/Fail看不出趋势有了数值才能画分布图才知道是整体偏移还是个别离群。报告里至少要包含芯片ID、批次、测试时间、温度、光源设定亮度、色温、曝光时间、增益、各个测试项的实测值、判定阈值、坏点数量和位置图。这里还有一个很实用的做法给每颗芯片存一份图像指纹也就是几个关键统计量组成的向量。后面如果客户反馈某批货有问题可以直接拿指纹库做对比快速定位是测试环节的问题还是客户端的问题。5. 踩坑实录常见问题排查速查这一节是我这些年攒下来的问题库按现象分类尽量给出可操作的排查顺序。5.1 图像全黑、全白或者满屏条纹图像全黑先别急着怀疑sensor。排查顺序是先确认光源是不是真的亮了拿手机拍一下出光面再确认曝光时间和增益是不是被设成了0然后看采集板的帧计数有没有在涨。如果帧计数在涨但还是黑的那就是数据链路问题重点查MIPI的lane映射和时钟极性。lane顺序接反的典型现象就是画面花屏或者条纹。图像全白常见原因是曝光时间设成了最大值或者增益被设到了最高档或者光源亮度远超预期。也有可能是黑电平没扣导致整体偏亮然后被裁到饱和。满屏竖条纹基本可以锁定是列电路的问题重点看列放大器的参考电压和列ADC的斜坡信号。如果条纹位置固定不动是固定模式噪声如果条纹会跳那是时序或者电源噪声。这里补充一个很容易忽略的点地线。CIS的模拟地和数字地如果处理不好地弹会把噪声耦合进像素输出表现就是随机的横条纹。产线测试治具上这个问题特别常见因为治具的地平面做得很随意。遇到偶发的横条纹先拿示波器看地线上的噪声比在软件里折腾快得多。5.2 坏点超标与误判坏点超标的时候第一步永远是确认判定算法本身没有问题。常见的误判来源有几个。一个是黑电平没扣干净。如果画面整体有梯度中位数判定会把一侧的像素全判成坏点数量一下子翻几倍。解决办法是用局部邻域中位数代替全图中位数。一个是光源不均匀。光源中心亮四角暗四角像素的偏离量就会偏大被误判成暗坏点。这种误判的特征是坏点集中在画面某一侧或者四个角画出来一看就知道。一个是曝光时间太短。曝光短了信号弱噪声占比大统计波动变大坏点阈值就会被噪声淹没或者反过来把正常噪声点判成坏点。排查顺序建议是先看坏点分布图如果呈现明显的区域聚集基本可以判定是系统问题不是芯片问题如果是随机散布再看多帧重复性确认是不是真实坏点。5.3 测试一致性和重复性差重复性差是产线上最头疼的问题因为它不会让你停线但会让良率数据变得不可信。排查的维度有几个。温度是最常见的尤其是暗态相关的项芯片温度波动1度暗电流能变10%以上。光源是第二个LED老化、驱动电流漂移、积分球内壁积灰都会让亮度慢慢变。第三个是治具接触探针或者插座的接触电阻变化会影响供电进而影响输出。第四个是sensor本身的随机性某些闪烁点在两次测试之间状态不同这种要单独归类。工程上的标准做法是做GRR同一批样品重复测多次算重复性和再现性要求总波动小于规格公差的30%。达不到就继续拆解是哪个维度贡献大。5.4 常见问题速查表现象最可能原因快速验证方法处理方式画面全黑但帧计数在涨采集lane映射或时钟极性错误换一版已知正常的配置对比校正lane顺序和极性画面全白曝光或增益顶格或黑电平未扣手动把曝光设成最小修正寄存器配置固定竖条纹列放大器或列ADC异常看条纹是否随增益变化检查列参考电压随机横条纹地噪声或电源纹波示波器看地线和电源加固地平面加去耦坏点集中在四角光源不均匀换积分球复测校准光源均匀性暗电流批次性偏高测试温度偏高或等待时间不足记录结温并延长稳定时间加温控固定等待时间同颗芯片两次结果差异大接触不良或闪烁坏点重插一次再测更换插座标记闪烁点初始化偶发失败写序列缺少延时连续上电一千次统计失效率补延时扫描I2C地址6. 做CIS测试工程师需要攒哪些底子最后聊点偏个人经验的东西。CIS测试这个岗位看起来是测试实际上是半个系统工程师。你需要懂的东西横跨好几个领域而这些东西学校里基本不会一起教。模拟电路得懂一点至少看到暗电流随温度变化的曲线知道该往结温和耗尽区那边想。数字接口得懂I2C、SPI、MIPI的时序要能看波形定位问题。图像处理得懂一点不然你看不懂坏点、shading、去马赛克这些概念也没法跟ISP那边对齐。光学得懂一点至少知道照度、色温、显色指数这些量怎么影响测试结果。脚本能力必须要有Python和数据处理是日常很多统计和可视化都得自己写。我个人觉得最关键的一项能力是能把一个现象拆成几个可验证的假设。测试现场的问题大部分不是靠知识直接命中的而是靠一步步排除。比如画面有条纹你得能列出三到五个可能原因然后按成本从低到高去验证先换一版配置再看电源波形再动工装最后才怀疑芯片。这个顺序错了可能要浪费好几天。另外一个建议是养成记录的习惯。测试条件、光源设定、温度、每批的实测分布这些数据攒上一年你会发现自己手里就有一份别人没有的资产。后面再遇到问题翻记录比问人快得多。我碰到过好几次批次异常最后都是从半年前的记录里找到线索的比如某天换了光源的驱动电源之后暗电流均值悄悄上移了一点点当时没在意后来才串起来。还有一点是关于和设计团队的沟通。测试判Fail的时候设计那边第一反应往往是是不是你测错了。这时候别急着争把测试条件下的原始图像、参数分布、重复测试结果一起甩过去让对方自己看。数据比嘴硬管用。反过来说你自己也要留一手测试程序里最好保留原始帧的导出功能哪怕产线上平时不开出问题的时候能一键导出来这个功能救过我不止一次。至于后面能往哪走我见过几条比较常见的路径一条是往测试开发深走做测试方案和测试机的深度定制一条是往产品工程走管良率和量产导入还有一条是往系统或者算法方向转做ISP tuning或者图像质量评估。这几条路都要求你对CIS的理解不止停留在会跑测试程序这一层得真正理解每个参数背后的物理意义和它对最终成像的影响。最后再分享一个小技巧。刚开始接触一颗新sensor的时候别急着写完整的测试程序先花半天时间用最笨的办法把它点亮手动写几个寄存器抓一帧图出来用Python存成PNG看一眼。哪怕画面是花的、颜色是错的只要能看到随光变化的亮度你就已经打通了从寄存器到图像的全链路。这个链路通了后面加什么测试项都是加法。我每次上手新芯片都是这么干的比啃几百页datasheet快得多。
返回列表