陈维蛇
陕西长岭电子科技有限责任公司,陕西宝鸡, 721006
摘要:FLASH器件因其突出的优点在嵌入式系统中广泛使用,但所有FLASH都受数据丢失困扰,数据丢失造成的产品故障现象通常不易复现,难以排查。本文通过对FLASH数据丢失的现象和原因进行分析,提供几种降低数据丢失引起产品故障的措施。为FLASH的设计和使用,提供提高数据安全性的方法。
关键词:数据丢失现象;数据丢失原因;降低数据丢失引起产品故障的措施
1概述
FLASH存储器作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢失等优点,成为嵌入式系统中主要的数据和程序载体。当前比较主流的两种闪存芯片结构类型为:NOR FLASH和NAND FLASH,这两类芯片都是非易失存储器。NAND FLASH具有容量大,擦写速度快的特点,适用于大容量数据存储,使用前需要写入驱动。NOR FLASH具有可靠性高、随机读取速度快、程序可以直接在芯片内执行的优势,在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用。
所有的FLASH器件都受数据丢失(也称为数据翻转)的困扰。当FLASH用于存储操作系统、配置文件、执行程序等敏感信息时,发生数据丢失会引起产品严重故障。在本人参与的某项目中,使用ATMEL公司的AT49BV802AT型NOR FLASH作为DSP程序存储器,发生了由于FLASH数据丢失造成产品故障的问题。本文以AT49BV802AT为参考,对NOR FLASH的存储机制、访问方式、故障模式、解决措施等进行分析论述。
2存储机制
NOR FLASH使用浮栅场效应管作为基本存储单元来存储数据。浮栅场效应管共有4个端电极,分别为源极、漏极、控制栅极和浮置栅极,前3个端电极的作用与普通MOSFET是一样的,区别仅在于浮栅,FLASH利用浮栅是否存储电荷来表征数字“0”和“1”。当向浮栅注入电荷后,D和S之间存在导电沟道,从D极读到“0”;当浮栅中没有电荷时,D和S间没有导电沟道,从D极读到“1”。
FLASH中,常用的向浮栅注入电荷的技术有两种:热电子注入(hot electron injection)和F-N隧道效应(Fowler Nordheim tunneling)。
NOR FLASH通过热电子注入方式向浮栅注入电荷(这种方法的电荷注入效率较低,因此NOR FLASH的写速率较低),写操作就是向浮栅注入电荷的过程。由于浮栅层在电气上是受绝缘层独立的,所以进入的电子会被困在里面,在一般的条件下电荷经过多年都不会逸散,存储单元上的逻辑值保持长久稳定。
FLASH芯片内部由浮栅型MOS管进行数据管理,通常只有写入(编程)和擦除指令会对FLASH内部数据进行改变:擦除时MOS管先注入电子,将存储阵列从1变0,随后再释放电子,将存储阵列从0变1;写入时MOS管对需要改变的地址位注入电子,从而使该地址位的数据从1变为0。
3访问操作
NOR FLASH具有独立并行的控制总线、地址总线和数据总线。通过这些总线,能够实现对FLASH的擦除、编程和读等访问操作。控制总线一般包含复位、片选使能、写使能、输出使能(或称为读使能)和字节/字选择等。
擦除操作是将存储单元数据变为1,擦除操作按照规定的指令周期序列完成,分为扇区擦除和芯片擦除,不能以位、字节或字为单位进行擦除操作。每个扇区可重复擦写次数一般不少于10万次。AT49BV802AT的擦除、编程和读访问操作指令周期序列如图1所示。
.png)
图3 AT49BV802AT编程操作时序图
NOR FLASH由于具有独立并行的地址总线和数据总线,可以实现完全随机的读取。上电后自动进入读模式,在片选有效和输出使能有效而写使能禁止时,数据总线输出为地址线相应的存储单元数据。在片选无效或输出使能禁止时,数据总线输出为高阻状态。
AT49BV802AT读操作时序要求如图4所示。
图4 AT49BV802AT读操作时序图
4数据丢失现象及原因分析
由于擦除操作是从存储单元上挪走电荷,使存储单元逻辑值为“1”,只能按扇区擦除或整片擦除,不能只擦除1位、1字节或一个字。编程操作以字节或字为单位进行,向需要改变的存储单元注入电荷,使该存储单元逻辑值为“0”,且不能再通过编程将其值变为“1”。因此认为数据丢失现象中,发生少数bit“0”到“1”的改变,是由器件损坏或器件制造时的工艺缺陷导致的;而“1”到“0”变化的可能原因主要有:①用户代码对FLASH的误操作;②FLASH编程过程中掉电;③FLASH编程过程中发生硬件复位;④单粒子翻转。
(a) “0”变“1”的数据丢失现象
FLASH存储单元浮栅中存储的电荷量决定了存储单元的阈值电压,而存储单元的阈值电压决定了存储单元存储数据是“0”还是“1”。如果器件损坏或存在缺陷,个别存储单元注入的电荷量不足或漏电流过大,随着时间推移,存储单元电荷减少,电压下降,则存储在该单元上的逻辑“0”可能变为逻辑“1”。若重新进行擦除和编程操作,则对该存储单元重新注入了电荷,读取数据将与写入值一致,可以使用,但其数据保持时间缩短。
(b) “1”变“0”的数据丢失现象
①用户代码对FLASH的误操作
由于用户代码设计缺陷,在程序运行中对FLASH某些存储单元进行了随机的编程操作,或对FLASH的访问操作不满足时序要求,导致FLASH存储内容发生改变,相较于预期的存储内容,发生了数据丢失现象。
②FLASH编程过程中掉电
控制器件与FLASH通过控制线、数据总线和地址总线连接。设备断电瞬间,这些总线在一段时间内处于不稳定状态,此时若正在对FLASH执行编程操作,则FLASH有一定概率识别出错误的地址信息,而将数据写入错误的地址中,导致该地址存储单元数据丢失。
③FLASH编程过程中发生硬件复位
AT49BV802AT手册中明确写道“If a hardware reset happens during programming,the data at the location being programmed will be corrupted.”即若在编程过程中发生硬件复位,则正在编程位置的数据有可能被损坏。也就是在编程过程中发生硬件复位,可能会造成该存储单元数据丢失。
④单粒子翻转
单粒子翻转是指单个高能粒子作用于半导体器件,引发器件的逻辑状态发生异常变化。单粒子翻转是空间辐射造成的多种单粒子效应中最常见和最典型的一种,主要发生在数据存储和指令相关器件中。单粒子翻转造成的器件错误属“软错误”,即通过系统复位、重新加电或重新写入能够恢复到正常状态。
5降低数据丢失造成产品故障的措施
所有FLASH都受数据丢失困扰,数据丢失会引起产品故障,因此在设计中采取措施降低数据丢失造成产品故障很有必要。
上述数据丢失现象和原因中,用户代码对FLASH的误操作引起的数据丢失,为设计缺陷,故障容易复现,通过更改设计即可消除。
由器件制造时的工艺缺陷导致的“0”变“1”,FLASH编程过程中掉电、FLASH编程过程中发生硬件复位或单粒子翻转导致的“1”变“0”等数据丢失现象,属于偶发性故障,要进行预防或消除很困难。但可以采取一些措施来降低数据丢失引起产品故障的概率,常用的措施有:三模冗余、纠错码和周期性更新存储内容。
三模冗余简称TMR,是常用的一种容错设计技术。采用三个相同的存储器模块,分别接收三个相同的输入,产生的输出送至数据表决模块,数据表决模块以多数相同的输出作为系统的正确输出。三个存储器模块中只要不同时出现两个相同的错误,就能掩蔽掉故障模块的错误,保证系统正确的输出。由于三个存储器互相独立,两个模块同时出现错误是极小概率事件,因此可以大大降低数据丢失造成产品故障的概率。
纠错码也称为ECC,是一种能够实现错误检查和纠正的技术,可使用特定的编码和解码规则,检测和纠正存储器中的故障。纠错码的基本原理是在信息编码序列上附加冗余编码,然后进行存储和传输,这些冗余编码与信息编码之间存在某种确定的相互关联。接收方可以通过校验冗余编码与信息编码之间的关联,实现故障故障隔离或者利用编码算法将其纠正。对于需要加载存储器内容的设备,使用ECC编码,能够在读取存储单元的内容时发现差错并将其纠正。一般采用既能检错又能纠错的编码方法,如循环冗余校验CRC和海明码,采用这两种编码方案在确定码长的情况下,一般至少能够纠正一位错误。
周期性更新存储内容,即周期性的给存储单元重新灌装存储内容。通过擦除和重新写入存储器,掩蔽存储器数据丢失问题,大幅降低数据丢失引起的产品故障概率。此方法无需冗余的附加硬件逻辑资源,仅需适当增加自适应的周期性刷新操作。
在本人参与的项目中,对于FLASH存储内容发生“0”到“1”变化的现象,采用代码校验维护功能降低数据丢失造成产品故障的概率。在该项目中,FLASH为DSP的程序存储器,将程序代码在FLASH中双备份存储,分为主区和备份区。产品上电后,DSP启动,加载FLASH主区存储内容到DSP RAM中运行,程序运行中进行代码完好性校验,流程如下:
a)若主区代码校验正确,则擦除备份区代码,并将主区代码重新写入备
份区,再对备份区代码进行CRC32校验。备份区代码校验错误,再次擦除备份区并重新写入,最多可进行两次擦写。
备份程序区重新写入校验正确或超过2次校验失败,均进入主循环。
b)若主区代码校验错误,对备份区代码进行CRC32校验。备份区校验错
误,报出相应故障码,并进入主循环。备份区校验正确,则擦除主区并将备份区重新写入主区,再对主区进行CRC32校验。主区校验错误,则再次擦写主区并校验,最多可擦写2次。超过2次仍校验错误,报出相应故障码,进入主循环。校验正确,则对DSP复位,从FLASH中重新加载代码并校验。
采用代码校验维护功能,每次上电,在主区完整性校验正确的情况下,使用主区内容对备份区进行更新,实现备份区内容的周期性刷新,屏蔽掉数据丢失问题,增强数据保存能力。在主区完整性校验错误,备份区完整性校验正确的情况下,使用备份区内容对主区进行更新维护,通过DSP重启和代码重新加载,消除因FLASH数据丢失造成的产品故障。在主区和备份区同时发生数据丢失时,该方法无能为力。但主区和备份区为FLASH中相互独立的扇区,同时故障的概率极低,总结已经发生的故障现象,未出现任意两个扇区同时发生数据丢失的情况,因此采用代码校验维护功能,能够有效大幅降低因数据丢失造成的产品故障的概率。
6结束语
本文以AT49BV802AT型FLASH在应用中出现数据丢失造成产品故障为参考,分析存储器发生数据丢失的现象及产生原因,给出几种常用有效的降低数据丢失造成产品故障的措施。为因FLASH数据丢失造成的产品故障,提供分析方法和解决措施,也为FLASH的设计使用,提供提高数据安全性的方法。
参考文献:Arie Tal.NAND和NOR flash技术设计师在使用闪存时需要慎重选择[J].今日电子,2002,4,1:12-13。