基于硬件和固件相结合的掉电保护策略的应用
摘 要 : 提出一种基于硬件和固件相结合的掉电保护策略在固态电子盘模块中的应用方案。主要以电源检测为掉电保护策略的启动中心,续流模块(储能单元)和固态电子盘模块主控器(内嵌高性能CPU)为硬件平台。主控器的固件基于FPGA内嵌PowerPC软核平台用于控制NandFlash数据的存储。通过电源检测监控系统电源的电压或电流产生物理激励信号,将整个固态电子盘模块的供电切换到续流模块,同时启动主控器动态调整NandFlash的读写策略,保证掉电瞬间能够最大程度地保护固态电子盘模块存储单元文件系统的完整性和一致性。测试结果表明,该应用方案具有较高的可靠性。
0 引言
嵌入式系统的应用环境恶劣,电源电压不稳定,突发性断电以及非法插拔都容易对NandFlash中的文件系统造成灾难性的影响[1]。为了管理复杂的存储硬件,同时提供可靠高效的存储环境,出现了基于固态电子盘模块(SSD)的主控器和NandFlash的掉电保护机制,有效地减少了上述原因对固态电子盘模块中文件系统一致性和完整性的破坏。
为了提高SSD的读写性能,大部分SSD控制器通过内部集成RAM或外部扩展RAM的方式增加缓存,每次主机需要存储数据到SSD中时,都先写到SSD的缓存中,SSD控制器再将缓存中的数据写入到NandFlash中。因此,在电源没有任何保护措施的情况下,如果SSD突然掉电(即外部供电在突发意外情况下发生浪涌或断电),将会造成缓存中的数据完全丢失,轻则丢失数据,重则导致SSD中文件系统崩溃,主机无法识别SSD。
本文提出了一种增加掉电监控和保护的硬件单元,并可以动态调整SSD主控器的固件的工作模式,这种设计方法在掉电瞬间,能够最大程度地保护SSD存储单元的文件系统的完整性和一致性。
1 系统设计
闪存(NandFlash)的管理(读写的策略、坏块的管理以及损耗均衡)针对嵌入式系统的应用特点,进行特别的优化,在掉电瞬间,减少主控器的能量需求,尽可能满足NandFlash的写操作,但是过低的功耗会限制固态盘在电源稳定状态下的性能。考虑到整个固态盘的稳定性,主控器的NandFlash的管理策略需要动态调整[2]。因此,要实现完整的掉电保护策略,需要结合完整的电源状态监控机制和动态调整SSD主控器的固件运行模式,才能达到有意义的掉电保护。根据以上原理设计了SSD的系统架构,如图1所示。
SSD系统架构主要由SSD控制器、扩展RAM(原理样机使用的DDRII)、NandFlash阵列(存储体的组织形式为SLC)、高速数据接口(原理样机使用的IDE接口)、电源检测功能单元电路和续流功能单元电路(储能电路)组成。
掉电保护增加了两部分功能:
(1)掉电保护硬件部分:包含电源检测模块和续流模块,电源检测模块用于检测系统的供电电源,当其电压过低或输出电流过小时,向SSD控制器产生中断,同时启动续流功能电路单元(储能电源模块),给SSD提供足够长时间的续航能力,保证主机给SSD的最后一帧数据能够顺利写入NandFlash中,并更新文件系统列表,保持SSD中文件系统的完整性和一致性;
(2)掉电保护固件部分:SSD主控制器接收到电源检测模块的中断后,动态调整工作模式,将主机当前发送的“写数据”直接搬家到NandFlash,同时启动多通道控制模式,将缓存DDR2中的数据写到NandFlash中,两部分的最后一帧数据写入NandFlash后,产生选通信号通知续流模块关闭。
1.1 掉电保护各功能单元电路设计
硬件电路由电源检测模块、续流模块和SSD主控器组成。
1.1.1 电源检测模块
电源检测模块采用掉电复位电路,监控系统供电电源的电压和电流,当系统的输入电压低于4.75 V或系统的输入电流小于1.35 A时,表明系统电源掉电,电源检测模块产生复位“低”信号,触动续流模块工作,同时动态调整固态电子盘模块主控器的工作模式。
(1)启动续流模块工作,将固态电子盘模块的供电电源由系统电源供电切换到续流模块供电,保证主控器、存储体NandFlash以及相关电路的工作稳定性;
(2)触发固态电子盘模块主控器的外部中断,主控器调整NandFlash的“写策略”。
1.1.2 续流模块
续流模块设计原理图如图2所示。其本质上是一个储能再利用电路,使用法拉电容充当储能元件。在SSD正常工作时,依靠系统电源完成充电操作。而当系统电源发生故障或者非正常断电时,储能电路释放电能,暂时维持SSD主控器、存储体NandFlash和相关的旁路电路的正常工作,尽量保证主机的最后一帧数据顺利存入到NandFlash中,并更新完成SSD中的文件系统列表。
将供电模块(电压转换器)切换到由法拉电容供电,需要两个条件:
(1)系统掉电(电源监控芯片)输出低电平或者输出电流低于判决门限值;
(2)选通信号为高电平,此时逻辑开关(电压监控)输出低电平。
以上两个条件都可将系统电源VCC切换到由法拉电容供电。
具体设计中,在进行重要数据操作之前,先通过固件将选通信号置为高。如果在操作过程中突然掉电,则电源监控输出低电平,此时硬件自动切换到由法拉电容供电;如果没有掉电,电源监控电压输出为高电平,系统还是由5 V电源供电。在重要数据操作完成之后,固件控制将选通信号置为低,或门输出高电平,切断法拉电容供电的可能。这样可避免法拉电容的无谓供电,减少充放电的次数,从而提高可靠性以及延长法拉电容的使用寿命[3]。
1.1.3 SSD主控器的工作模式设计
SSD主控器的功能组成框图如图3所示。
(1)SSD主控器的正常工作模式
在系统电源稳定供电的正常情况下,SSD进入正常工作模式,SSD主控器的工作内容:
①将文件系统列表存储在SSD主控器外扩RAM(DDRII缓存)中,方便SSD主控器能够迅速地查找和更新文件列表;
②因为数据写入DDRII的速度比直接写入NandFlash的速度快,为了不耽误接收主机“写数据”的时间,SSD主控器以“段页混合管理的形式”将DDRII中的数据以NandFlash的“页”模式组织,通知NandFlash控制器能够准确地进行整块的数据搬家到NandFlash阵列指定区域中,减少NandFlash控制器的固件开销,提高数据快速写入能力。这样的方式,能够大大提高主机数据写入的速度,同时也伴随着功耗的增加。
(2)SSD主控器的应急工作模式
在系统电源正常供电,SSD正常运行时,SSD主控器的内嵌CPU不创建掉电保护进程,减少了内存占用资源,简化任务管理、调度。当电源检测电路产生激励信号时,触发CPU立即创建掉电保护进程,进入就绪态,同时赋予最高的优先级,抢占CPU控制权,进而达到最强的实时性[4]。
SSD主控器接收到电源检测电路发送的电源异常中断后,动态调整SSD主控器上的运行固件,进入应急模式进程,进行以下操作:
①SSD主控器给主机上报SSD工作不稳定警告,发送中断(禁止“读操作”)给主机,将DDRII中的文件列表搬家并更新到NandFlash的指定区域。
②SSD主控器将主机当前需要完成存储的“写数据”,直接写入到SSD主控器的数据缓冲区(片内RAM)中,减少DDRII的功耗开销,同时进入“页映射”模式,通知内部集成的NandFlash控制器将缓冲区数据直接写入NandFlash阵列的指定数据区域后,再发送中断(禁止“写操作”)给主机。
③与②步骤同步,SSD主控器开启多通道传输控制模式,将DDRII(扩展RAM)中的暂存数据写入NandFlash中,如果与②步骤有冲突的数据区,则动态调整文件系统列表,将数据重新写入其他空闲块,并同时更新NandFlash中文件列表,如果与②步更新文件有冲突的,则将DDRII中的待写入数据放弃。
④完成②和③两个步骤,SSD控制器发送选通信号,通知续流模块电路停止供电,减少续流模块电路的功耗开销。
综上所述,整个SSD主控器的工作模式就是将主控器的工作模式分为了电源稳定的正常状态工作模式和电源不稳定时的应急状态工作模式[5],SSD控制器的固件进程流程如图4所示。
2 系统验证
将掉电时间控制在1 ms~10 ms之间,写入数据为10 MB,DDR2中待搬家数据为20 MB。在此虚拟环境中,测试续流模块启动时间、主控器上报中断“读操作”时间和SSD主控器发出续流模块关闭时间,观察这三个关键时间的关系并验证该SSD重新正常启动后,文件系统是否未破坏。
通过图5的采样图形可以看出,以SSD系统电源5 V为触发条件,掉电保护策略启动:
(1)续流模块的5 V的供电启动时间比系统电源5 V掉电时间提前了10 ns;
(2)系统电源5 V掉电时,主控器发回“关闭读操作”中断;
(3)续流模块持续供电100 ms后,保证数据记录完成,SSD主控器发出续流模块“关闭”信号后,续流模块输出的5 V电源关闭。
经过重新启动该SSD,重新读写SSD正常,证明该机制有效。
3 结束语
本文针对嵌入式SSD的应用环境中的掉电时间和文件系统保护两个重要指标进行测试,给出了测试结果,证明了该硬件和固件相结合的掉电保护策略能够保证SSD在嵌入式领域中的应用具有高效性和健壮性,但也随之带来了SSD的硬件成本和固件开发的难度。
参考文献
[1] 胡一飞,徐中伟,谢世环.NAND Flash上均匀损耗与掉电恢复在线测试[J].单片机与嵌入式系统应用,2007(3):5-8.
[2] 沈建华,罗悦怿.基于NAND Flash的FFS设计与实现[J].计算机应用与软件,2005(6):89-90.
[3] 王久文.低电压超大容量电容器的发展综述[J].世界电子元器件,1997(8):24-25.
[4] 徐连军.双CPU冗余通信控制系统的研究与实现[D].西安:西安电子科技大学,2011.
[5] 袁积德,黄文君,陆卫军.高性能集散控制系统主控制器设计[J].计算机工程,2012(5):215-218.
非易失性存储器数据掉电保护的硬件解决方案
非易失性存储器(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)
相关问答
nandflash 彻底断电数据会丢失吗?NANDFlash在彻底断电后,数据可能会丢失。NANDFlash是一种非易失性存储技术,但它仍然需要电源来维持数据的存储。当NANDFlash处于断电状态时,数据仍...
avr中eeprom干什么用?FLASH一个静态的只读存储器,单片机本身无法修改自己EEPROM是指5V或3.3V可擦写存储器,可以由单片机本身编程写入一般用来做掉电保护,也可以由烧程器写入...
flash 擦,写时 掉电 ,会出现什么结果?我们要写flash,首先得把flash正在操作的扇区全部擦成1,在写实际数据.如果这时候掉电,很有可能刚把扇区全擦成1了,导致该扇区数据丢失.我现在正好遇到这个问...
IQoo有没有 保护 电池功能?iQoo作为一款智能手机,拥有多种保护电池的功能。首先,iQoo手机配备了智能省电模式,该模式可以根据用户的使用习惯和需求,自动调整手机的性能和功耗,以延长...
什么是系统 保护 ? - 婷小囡 的回答 - 懂得系统保护是定期创建和2113保存计算机系统5261文件和设置的相关信息的功能4102。系统保护也保存已1653修改文件的以前版本。它将这些文件保存在还原...
什么是系统 保护 ? - 9ja44EwM 的回答 - 懂得系统保护是定2113期创建和保存计算机系统文件和5261设置的相关信息的4102功能。系统保护也1653保存已修改文件的以前版本。它将这些文件保存在还原...
stm32pvd 掉电 储存怎么有时候行有时不行?要有足够的电容。。然后在稳压前级就有个直接检测电源掉电的,一般是用个大电阻降压后直接接个光耦,然后光耦输出,接到STM32同时设置为外部中断,当收到此中断...
上海虹润贸易结算热能记录仪上有哪些功能?虹润专业生产NHR-6600R系列液晶流量(热能)积算记录仪,3.5英寸液晶显示器,仪表具有贸易结算功能,可设置小流量补足、停电补足、以及流量付费功能,解决供需双...虹...
flash 模组是什么?Flash模组是一种集成了闪存存储器的模块。闪存是一种非易失性存储器,可以在断电后保持数据的存储。Flash模组通常用于嵌入式系统和电子设备中,用于存储程序代...
三星也被告了,ZeniMax是不是耍流氓?从2016年开始,闪存芯片一直处于缺货状态,伴随着缺货,闪存价格从第二季度一直上涨到2015年年初水平。在当下缺货、涨价的背景下,华为在P10里同时使用了UFS2.1...