发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[APM32F4]

FLASH篇_应用层失效分析方法

[复制链接]
1001|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]
0、前言
FLASH一般不会坏,一旦故障你的程序就有几率出现大bug。本篇文章有2个目的:
1)为新手介绍学习FLASH编程的思路和要点。
2)介绍常见的FLASH失效情况和分析方法。
更新时间:2024.12.29

1、基础框架认知
一般情况下,程序代码就是存储在FLASH,所以FLASH的重要性不言而喻。那么学习FLASH编程该如何入手呢?
芯片手册关于FLASH的介绍是很多的,我整理了你最需要了解的要点框架。你在手册中找到并理解了下面内容,就可以做到心里有数了。

FLASH的存储单位换算
bit是存储中最小的单位。8个bit可组成1个字节(Byte,8bit),存放在一个地址内。
4个Byte,组成一个字(Word,32bit)。这里还有个半字概念HalfWord,即16bit,由2个地址组成。
等量替换:1Word = 4Byte = 32bit,1个地址8bit,半字16bit。

2、常见失效类型
FLASH的失效,按功能分为3个类型:擦失效、写失效、读失效。
我想先讲下我对FLASH擦写本质的理解。FLASH常见默认状态为全1,即被擦后的状态。你想对某一页进行写操作,需要先将这一页擦除才能正常执行写操作,否则会报错。写操作便是将1变为0,写1相当没有操作保持原来的1。

2.1 擦失效
擦失效是指在进行FLASH擦除时出现异常错误。
该类失效较为容易分析,一般可分为页擦失效和片擦失效,使用不同擦除方式即可确认。

2.2 写失效
写失效是指在进行FLASH写入时出现异常错误。
常见写失效可以按时失效数据、失效地址和失效时间分为3类:

多地址失效时,请观察地址之间是否存在规律。如果出现规律,大概率会以一个字线地址范围的失效,比如256字节为一个周期,或者512个字节为一个周期。

2.3 读失效
读失效是指在进行FLASH读取时出现异常错误。
失效现象3种:
1)写操作后短暂正常,之后读失效;
2)写操作后短暂失效,之后读正常;
3)写操作后持续读失效
筛查方法:写完之后加延时读取判断

3、失效检测方法
3.1 FLASH漏电不稳定情况
FLASH漏电不稳定的情况,表现为持续读取状态下,数据一直在变,数据无法稳定。
对那一整页写200次0xFF,再写5次0x00,看失效是否会稳定下来

3.2 FLASH出现串扰的检测
1)检测失效阶段。对全地址遍历写00~FF,读判断是在擦写读的哪个阶段串扰产生,并且失效数据是什么。遍历00~FF会更全面,复现几率比55AA方式大。
2)检测失效范围。使用失效数据,将测试地址范围用二分法不断缩小筛选,读判断有无串扰产生。
3)检测失效关联性。在最小条件范围内,再度遍历对全地址遍历写00~FF,根据所有失效数据,判断串扰关联性。

3.3 棋盘反棋盘测试
棋盘反棋盘是FLASH比较常规的一种快捷验证方式。
1)地址线范围:首先需要确认测试芯片的FLASH结构是以多少字节共用一条地址线,例如512字节共用一条地址线。
2)布置棋盘:将同一地址线的地址,以“1010”的方式写入。然后下一地址线的地址,以互补的“0101”方式写入。如此反复,相邻地址线间就组成了“1”和“0”的棋盘分布。
3)交叉测试:将“1010”与“0101”互换,交叉测试。


3.4 选项字配置排查
芯片刚买到时,选项字默认情况:FFFF5AA5 55AA956A
如果编程阶段(烧录工具、程序编程)误触发了选项字配置,会变成这个情况:FFFF5AA5 FFFFFFFF

4、FLASH失效案例
4.1 案例1_地址的bit2无法写1
失效现象:
如果0x08011EA2的bit2写0,0x08011EA2-0x08011EA3这两个地址测试正常。
如果0x08011EA2的bit2写1,0x08011EA2-0x08011EA3触发写失效。
此处是采用FLASH 16bit写方式,因此0x08011EA3应该只是被影响了。
分析结果:FA物理实验查看SG的oxide weak point。这个bit写1时,SG到BL的压差最大,因为本身SG漏电,会导致加到SG上的VNN pump变低,所以整条WL都写不上去。当这个bit写0时,SG到BL的压差反而比较小,所以VNN pump不会掉太多,就能写的上。


4.2 案例2_相邻寄存器连带置1
测试分析:
1)GPIOC的时钟使能位(RCC_AHB1ENR_bit2)置1后,短暂引起多处相邻寄存器的bit2置1(读错误),其中包括RCC_CFGR_bit2。
2)如果在失效期间进行获取系统频率值,由于错误的计算,会判定系统频率值为HSI的频率值,也就是16000000,同时也就造成串口2的时钟源PCLK1的频率值错误。
3)串口2初始化配置时需要用到APB1的频率值进行波特率计算(BRR),因此配置错误,造成通信异常。
4)需特别说明的是,此处的频率值只是一个变量数值概念,并非系统的真实频率。该失效不对实际频率产生影响,只对赋值运算造成错误。
分析依据:GPIOC的时钟使能位置1后引起多处寄存器的bit2置1,导致系统频率值赋值的计算过程错误。



debug情况:SWS[1:0]从10b变为11b


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2025-01-09
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2025-1-9 15:55 回复TA
理论结合实际案例,列出几种定位FLASH失效位置的方法。案例分析让理论更加容易理解,很不错的方式。 
沙发
lemonboard| | 2024-12-30 23:09 | 只看该作者
能把Flash干到失效,是不是也挺难的啊

使用特权

评论回复
板凳
一个人破|  楼主 | 2024-12-31 09:09 | 只看该作者
lemonboard 发表于 2024-12-30 23:09
能把Flash干到失效,是不是也挺难的啊

是的,flash确实很难失效。W量级,并且die是晶圆边沿的才有可能出现几颗

使用特权

评论回复
地板
lemonboard| | 2024-12-31 23:12 | 只看该作者
太高深了。
虽然我也做芯片研发,但这么实战的经验还没有。
向大佬学习了

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

121

帖子

0

粉丝