文献标识码: A
DOI:10.16157/j.issn.0258-7998.181928
中文引用格式: 苏伟,冯曦,周芝梅,等. 非易失性存储器数据掉电保护的硬件解决方案[J].电子技术应用,2019,45(2):20-22,26.
英文引用格式: Su Wei,Feng Xi,Zhou Zhimei,et al. Hardware sollution about power fail protective mechanism of non volatile memory[J]. Application of Electronic Technique,2019,45(2):20-22,26.
0 引言
非易失性存储器(NVM)具有数据掉电不丢的特性,因此安全芯片通常用NVM来存储应用程序、用户数据和系统文件等。
在安全芯片工作过程中,如果NVM正在进行擦除或编程操作时,因某种原因造成芯片突然掉电,NVM中的数据可能被误改。由于安全芯片的特殊应用,用户的关键信息,如密钥、余额等,都存储于NVM中,如果这些关键信息被误改,可能对用户造成巨大损失。为了保证用户信息安全,安全芯片对NVM采取了数据掉电保护机制,该机制能够保证安全芯片无论何时掉电,再上电时储于NVM中的数据都是可靠的。
以往对NVM的掉电保护都是由软件实现的,芯片需要执行几十条CPU指令才能完成一次数据备份和更新。考虑到软件执行的效率比较低,本文提出一种硬件实现方案。
1 硬件掉电保护机制
1.1 保护原理
如图1所示,以Flash为例,在NVM中取一个page word作为备份区,目标区域和备份区域的容量均为一个page word。假定目标区域中已有数据,现在要对其中一个page的数据进行改写,如将A改写为B。如果直接对目标区域进行改写,那么在改写过程中一旦掉电,很有可能原有数据已被破坏,但是新的数据还未完全写入,那么目标区域中的数据就是不可靠的,也就是说既不是原始数据也不是新数据,这个结果可能对用户产生比较严重的影响,例如余额被篡改等。为了防止芯片掉电时出现不可靠的数据,可以采用备份的方式对数据进行更新。
当CPU发出写Flash的操作后,硬件模块Flash controller将按照下面的步骤进行操作:
(1)将目标区域中的数据全部读出,将要改写的部分替换成新的数据再写入安全芯片的RAM中,如①所示;
(2)将RAM中的数据搬至备份区域,如②所示。当要更新的数据全部写入备份区,要对刚刚写入的数据进行完整性校验,校验正确则在备份页的最后一个地址写入表示正确的标志(特定的32位数),否则写入表示错误的标志(特定的32位数);
(3)对目标区域执行擦除操作,如③所示;
(4)用与步骤(2)相同的方法将RAM中的数据搬至目标区域,但是不需要设置完整性校验标志,如④所示;
(5)对备份区域执行擦除操作,如⑤所示。
上述操作过程中,芯片在任何时刻掉电,重新上电后软件首先读取备份区域的完整性校验标志,并根据标志的状态来判定当前数据是否有效。如果标志为擦除状态,则认为目标区域的数据无论是旧数据还是新数据均有效,否则需要重新执行上一次的擦写操作。
1.2 方案存在的问题
该方案可以对Flash数据起到有效的掉电护作用,但是芯片执行一次数据更新需要对Flash进行两次擦除+两次编程操作。众所周之,虽然Flash的编程时间仅为微秒级,但页擦除的时间比较长,大约需要2~5 ms(依据一次擦除的容量大小决定时间长短),那么一次数据更新操作至少需要4~10 ms,这个操作时间显然是比较长的,这对于性能要求比较高的应用是不能接受的。
2 乒乓式掉电保护机制
2.1 存储器分配原则
为了解决操作速度慢的问题,本节提出性能更高的乒乓式掉电数据保护机制。
如图2所示,在Flash中取两块同样大小的地址空间(仍假定每块为一个page word),这两块空间的对应关系是捆绑的。
以区域1和区域1′为例,虽然它们的物理地址不同,但它们对应的逻辑地址是相同的,也就是说CPU在对这块逻辑地址进行擦写时,不需要知道数据究竟写在了区域1还是区域1′,这完全是由Flash控制器来分配的,在这种操作下区域1和区域1′轮流作为备份区和目标区,也就是说当CPU要对Flash进行第一次更新时,区域1做备份区而区域1′做目标区,第二次更新时区域1′做备份区而区域1做目标区,以此类推。
2.2 乒乓式掉电保护原理
下面具体来看乒乓式掉电保护机制是如果实现掉电保护功能的。
如图3所示,区域1的最后两个word地址分别对应cnt1和flag1,其中cnt1表示区域1对应的逻辑地址被更新的次数,flag1表示区域1内除flag1以外的数据是否正确,若正确写入“32’haaaa”,若错误写入“32’hbbbb”。同样的,区域1′的最后两个word地址也对应了具有同样意义的cnt1′和flag1′。
假定区域1和区域1′的初始状态均为擦除状态,乒乓式掉电保护机制的具体操作步骤如下:
(1)有第一次写需求时,首先擦除区域1,然后将数据写入区域1,同时把cnt1更新为“1”,表示第1次写入数据。确认数据正确性后将校验结果写入flag1,否则不更新flag1;
(2)有第二次写需求时,首先擦除区域1′,然后将数据写入区域1′。接着读出cnt1,并将cnt1加1得到的值“2”写入cnt1′,表示第2次写入数据。确认数据正确后将校验结果写入flag2,否则不更新flag1′;
(3)有第三次写需求时,首先擦除区域1,然后将数据写入区域1。接着读出cnt1′,并将cnt1′加1得到的值“3”写入cnt1,表示第3次写入数据。确认数据正确性后将校验结果写入flag1,否则不更新flag1;
(4)以此类推,之后每一次有更新需求时,轮流擦写区域1和区域1′。
综上所述,可以看出正常情况下cnt1和cnt2永远相差“1”。每次要更新Flash时,都选取cnt值小的那块区域进行更新,更新后将原来的cnt值+2,得到新的值再写回,确认数据全部正确后再更新flag。
但是如果擦写时芯片突然掉电,上述的过程将被打乱。芯片再次上电时,首先分别读出两块存储器的目标页和对应备份页中的全部数据,重新计算flag和flag1,并与存储于两块存储器中的flag和flag1进行比对。如果flag1和flag1′比对都是一致的,则说明存储于两块存储器中的flag1和flag1′均正确,那么计数值大的(非擦除值32’hFFFF)那个区域就是最后被更新的数据;如果存在错误的flag,至多只能有一个是错误的,那么错误的flag对应的那块Flash一定是在更新时发生了掉电,并且掉电发生时正在更新flag又没更新完,所以导致flag是错误的状态。依据flag和cnt判断数据有效性如表1所示。
该方案中备份区和目标区是交替使用的,所以每次更新时只需要对一块区域都进行擦除和更新。那么完成一次数据只需要1次擦除+1次写,即2~5 ms,与原有方案相比效率提高了一倍。
3 结论
由硬件电路实现的乒乓式掉电保护机制,不但可以有效地防止掉电数据丢失的问题,而且对提高芯片性能有及大的帮助。
参考文献
[1] 黄河清.Flash文件系统中掉电保护的分析与实现[J].电脑编程技巧与维护,2013(6):90-92.
[2] 张金霞,陈思婕,乔彩婷.基于Flash的智能卡数据掉电保护机制设计[J].电子技术与软件工程,2015(14):216-218.
[3] 扶小飞,郑善贤.一种Flash文件系统的设计和实现[J].微计算机信息,2010(5):174-176.
[4] 王兵,陈军东.嵌入式系统掉电保护的一种设计方法[J].单片机与嵌入式系统应用,2005(11):28-30.
[5] 李宇.基于单片机系统可靠性的掉电保护的研究[J].电子质量,2004(7):53-55.
[6] 王朝辉,陆枫.一种高可靠性的单片机掉电保护设计[J].武汉科技大学学报(自然科学版),2006(4):401-403.
[7] 徐杰,唐甜,刘晓.一种嵌入式系统电源掉电保护方法[J].电子测试,2016(5):131-132.
[8] 陈粤初,窦振中.单片机应用系统设计与实践[M].北京:北京航空航天大学出版社,1993.
作者信息:
苏 伟1,2,冯 曦1,2,周芝梅1,2,胡 毅1,2,唐晓柯1,2
(1.北京智芯微电子科技有限公司 国家电网公司重点实验室电力芯片设计分析实验室,北京100192;
2.北京智芯微电子科技有限公司 北京市电力高可靠性集成电路设计工程技术研究中心,北京100192)