本帖最后由 onemoren 于 2025-7-9 17:55 编辑
#申请原创#
一个烧录失败案件让你更了解APM32芯片的烧录机制 烧录失效就是FLASH有问题吗? 最近从产线上交一片烧录报错的APM32芯片(量产10K以上遇到1片,难得)。表象是FLASH失效,实则分析下来竟然是SRAM失效。看我记录的分析过程: 1)烧录失效现象 ● 测试方法:使用JFLASH烧录BIN文件,观察现象。 ● 测试结果:烧录bin文件出现校验报错,并报出错误产生的FLASH地址。 2)对比FLASH内容 ● 测试方法:出现异常时回读FLASH内容,与原始文档对比,观察现象。 ● 测试结果:回读FLASH内容,与原始文档对比,发现存在部分位置FLASH数据从0->1现象,如48->4A,B1->B3,CD->CF等等。 3)FLASH读写测试 ● 测试方法:在SRAM中运行FLASH全片擦写读测试,观察现象。 ● 测试结果:测试多组图形,尝试片擦/页擦等不同的方式,都未发现异常。FLASH应该没有问题。 4)SRAM读写测试 ● 测试方法:jflash烧录时数据是通过SRAM的程序和缓存搬入FLASH内部的。故在测试FLASH未发现异常的情况下,可继续测试SRAM看是否正常。 ● 测试结果:使用96M主频,循环测试SRAM 3369次时发现异常。对比数据,确认SRAM地址0x200008FF的bit1位置从0变1:00000000 -> 00000010 5)降低主频测试 ● 测试方法:96M主频情况下,复现异常几率较低。考虑到烧录bin文件时实际是8M主频驱动,故尝试降低SRAM测试的主频,观察现象。 ● 测试结果:使用8M主频,测试1次即可发现SRAM异常,地址仍是0x200008FF。可能机理:SRAM存储单元类似RS触发器,有两个稳态。如果读的时候存在漏电,读的时间短,来不及误翻转。如果读得慢些,可能漏电会引起状态翻转,导致读出错。 6)失效地址读写 ● 测试方法:针对失效地址,做针对性读写验证,观察现象。 ● 测试结果:写入0x00后,前几次读取均正常0x00,多读几次后,数据位发生翻转,读取值异常0x02 7)总结 经分析,确认这片烧录失效的芯片是SRAM存在异常:地址0x200008FF的bit1位置有几率发生从0变1的读异常。SRAM异常会导致芯片程序运行异常和烧录异常(烧录时需在SRAM中运行搬运程序和缓存FLASH数据)。 这个烧录失败案件让你更了解MCU芯片的烧录机制,当遇到烧录工具烧录校验不过,并报出校验错误地址(通常为FLASH区地址)时,真正失效的地方,可能是FLASH,也可能是SRAM,都需要排查。 |