我司一款产品被市场退货返修,经测试发现产品开机运行一段时间(可能几分钟,或几小时,时间不定)后出现死机,检查硬件电路没有发现异常点,更换MCU后发现问题跟随MCU走,定位问题出在MCU上。在线调试发现,死机时程序进入硬件中断错误,后来对MCU内部SRAM进行反复写入/读取固定值测试发现,其中一个地址的一个Bit值固定为1,无法写0。MCU内部的SRAM出现一个或几个比特(Bit)失效是一个典型的可靠性问题,其原因可以归结为几大类。 简单来说,SRAM比特失效的核心原因是存储该比特值的电路(通常是由6个晶体管组成的6T单元)的稳定性或完整性被破坏,导致无法正确写入或保持数据。 以下是详细的根本原因分析,从制造到应用环节逐一说明: 1. 制造缺陷(先天性问题)这类问题源于芯片制造过程中的瑕疵,通常在芯片出厂前的测试中会被大部分筛出,但仍有极低概率流入市场。颗粒污染:制造过程中微小的尘埃颗粒落在晶圆上,可能导致晶体管栅氧层破损、金属线短路或断路。 光刻异常:光刻工艺出现偏差,导致晶体管沟道长度、宽度等关键尺寸不达标,或金属连线过细/过粗。 接触孔/通孔问题:连接不同层金属的“孔”没有完全刻蚀或填充,造成接触电阻过高或完全断路。 掺杂不均:硅晶圆中掺入的杂质浓度不均匀,导致晶体管阈值电压(Vth)偏离设计值,使其变得过于“迟钝”或“敏感”。 特点:这类失效是永久性的、不可恢复的。一旦出现,特定的bit永远出错。 2. 物理损坏(后天性、永久性)MCU在使用过程中受到外部物理应力而损坏。静电放电(ESD):操作或安装过程中,人体或工具的静电击穿SRAM单元中极其脆弱的栅氧化层,造成永久的氧化层击穿,形成短路或漏电路径。 电气过应力(EOS):电源电压异常(如浪涌、电压过高)、电流过大(如短路),导致内部金属连线熔断或晶体管烧毁。 latch-up(闩锁效应):由于噪声或电流扰动,触发了CMOS工艺芯片固有的寄生晶闸管结构,导致电源和地之间形成大电流通路,从而烧毁电路。 特点:同样是永久性损坏,通常与不当操作或恶劣的电气环境有关。 3. 硅材料的固有失效机制(随时间推移)即使制造完美,芯片在长期使用后也会因物理化学效应而“衰老”。经时介质击穿(TDDB):栅氧化层在长期电场应力下,会逐渐产生缺陷,最终导致绝缘层被击穿。这是一个累积效应。 热载流子注入(HCI):高速运动的载流子(电子或空穴)在强电场下获得足够能量,注入并 trapped在栅氧化层中,逐渐改变晶体管的阈值电压,最终导致性能退化或功能失效。 负偏压温度不稳定性(NBTI):主要影响PMOS晶体管。在负偏压和较高温度下,器件的阈值电压会逐渐漂移(绝对值变大),导致晶体管开关变慢,严重时会使SRAM单元无法翻转。 特点:属于 wear-out(磨损)机制,与时间、温度、工作电压强相关。是产品寿命的决定性因素。 4. 环境与外部因素(随机性、瞬时性或永久性)α粒子/宇宙中子轰击:封装材料中的微量放射性杂质(如铀、钍)会释放α粒子,大气中的宇宙射线会产生高能中子。这些粒子撞击SRAM存储单元,可能引发电子空穴对,改变电容上的电荷,从而导致软错误(Soft Error)。 软错误的特点:非破坏性的、随机的、瞬态的。只需重新写入正确数据即可恢复,不会对硬件造成永久伤害。但发生在关键数据上可能导致程序跑飞。 极端温度: 高温:会加剧上述TDDB、HCI、NBTI等老化效应,同时 leakage电流(漏电流)会显著增加,可能破坏SRAM单元的静态工作点。 低温:可能导致晶体管开关速度变慢,时序错乱。对于依赖漏电流维持数据的超低功耗SRAM,低温下漏电减小反而可能是好事,但极端低温会带来其他未知问题。 5. 设计边际不足(系统性问题)稳定性不足:SRAM单元在设计时,需要平衡读写速度和稳定性。如果设计边际(Design Margin)不足(如读静态噪声容限(SNM)或写容限(WM)不够),在工艺角(Process Corner)波动、电压降低或温度变化时,原本正常的单元可能变得不稳定,从而发生随机性错误。 如何诊断和区分?1. 是否为永久性错误?o 测试:在恒定电压和温度下,反复向特定地址的固定bit写入0和1,并回读。 o 结论:如果每次都在同一个bit位置出错,极有可能是硬错误(Hard Fault),即上述的制造缺陷或物理损坏。 o 如果错误是随机出现在不同位置,则可能是软错误(Soft Error) 或稳定性问题。 2. 电压/温度相关性测试? o 测试:改变核心电压(Vcore)或环境温度,观察错误行为。 o 结论:如果错误在低压或高温/低温下出现,而在标称条件下正常,则很可能是设计边际不足或老化效应(如NBTI)导致的稳定性问题。 总结与应对策略
对于几个bit的失效,首先要判断是硬错误还是软错误。如果是硬错误,基本意味着该MCU不可靠,需要更换。如果是软错误,则可以通过ECC(Error Correction Code)、定期刷新数据、看门狗 和程序流程中的校验等系统级手段来容错,提高系统整体可靠性。 |