文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.181928
中文引用格式: 蘇偉,,馮曦,周芝梅,,等. 非易失性存儲(chǔ)器數(shù)據(jù)掉電保護(hù)的硬件解決方案[J].電子技術(shù)應(yīng)用,,2019,45(2):20-22,,26.
英文引用格式: Su Wei,,F(xiàn)eng 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 引言
非易失性存儲(chǔ)器(NVM)具有數(shù)據(jù)掉電不丟的特性,因此安全芯片通常用NVM來(lái)存儲(chǔ)應(yīng)用程序,、用戶數(shù)據(jù)和系統(tǒng)文件等,。
在安全芯片工作過(guò)程中,如果NVM正在進(jìn)行擦除或編程操作時(shí),,因某種原因造成芯片突然掉電,NVM中的數(shù)據(jù)可能被誤改,。由于安全芯片的特殊應(yīng)用,,用戶的關(guān)鍵信息,如密鑰,、余額等,,都存儲(chǔ)于NVM中,如果這些關(guān)鍵信息被誤改,,可能對(duì)用戶造成巨大損失,。為了保證用戶信息安全,安全芯片對(duì)NVM采取了數(shù)據(jù)掉電保護(hù)機(jī)制,,該機(jī)制能夠保證安全芯片無(wú)論何時(shí)掉電,,再上電時(shí)儲(chǔ)于NVM中的數(shù)據(jù)都是可靠的。
以往對(duì)NVM的掉電保護(hù)都是由軟件實(shí)現(xiàn)的,,芯片需要執(zhí)行幾十條CPU指令才能完成一次數(shù)據(jù)備份和更新,。考慮到軟件執(zhí)行的效率比較低,,本文提出一種硬件實(shí)現(xiàn)方案,。
1 硬件掉電保護(hù)機(jī)制
1.1 保護(hù)原理
如圖1所示,以Flash為例,在NVM中取一個(gè)page word作為備份區(qū),,目標(biāo)區(qū)域和備份區(qū)域的容量均為一個(gè)page word,。假定目標(biāo)區(qū)域中已有數(shù)據(jù),現(xiàn)在要對(duì)其中一個(gè)page的數(shù)據(jù)進(jìn)行改寫(xiě),,如將A改寫(xiě)為B,。如果直接對(duì)目標(biāo)區(qū)域進(jìn)行改寫(xiě),那么在改寫(xiě)過(guò)程中一旦掉電,,很有可能原有數(shù)據(jù)已被破壞,,但是新的數(shù)據(jù)還未完全寫(xiě)入,那么目標(biāo)區(qū)域中的數(shù)據(jù)就是不可靠的,,也就是說(shuō)既不是原始數(shù)據(jù)也不是新數(shù)據(jù),,這個(gè)結(jié)果可能對(duì)用戶產(chǎn)生比較嚴(yán)重的影響,例如余額被篡改等,。為了防止芯片掉電時(shí)出現(xiàn)不可靠的數(shù)據(jù),,可以采用備份的方式對(duì)數(shù)據(jù)進(jìn)行更新。
當(dāng)CPU發(fā)出寫(xiě)Flash的操作后,,硬件模塊Flash controller將按照下面的步驟進(jìn)行操作:
(1)將目標(biāo)區(qū)域中的數(shù)據(jù)全部讀出,,將要改寫(xiě)的部分替換成新的數(shù)據(jù)再寫(xiě)入安全芯片的RAM中,如①所示,;
(2)將RAM中的數(shù)據(jù)搬至備份區(qū)域,,如②所示。當(dāng)要更新的數(shù)據(jù)全部寫(xiě)入備份區(qū),,要對(duì)剛剛寫(xiě)入的數(shù)據(jù)進(jìn)行完整性校驗(yàn),,校驗(yàn)正確則在備份頁(yè)的最后一個(gè)地址寫(xiě)入表示正確的標(biāo)志(特定的32位數(shù)),否則寫(xiě)入表示錯(cuò)誤的標(biāo)志(特定的32位數(shù)),;
(3)對(duì)目標(biāo)區(qū)域執(zhí)行擦除操作,,如③所示;
(4)用與步驟(2)相同的方法將RAM中的數(shù)據(jù)搬至目標(biāo)區(qū)域,,但是不需要設(shè)置完整性校驗(yàn)標(biāo)志,,如④所示;
(5)對(duì)備份區(qū)域執(zhí)行擦除操作,,如⑤所示,。
上述操作過(guò)程中,芯片在任何時(shí)刻掉電,,重新上電后軟件首先讀取備份區(qū)域的完整性校驗(yàn)標(biāo)志,,并根據(jù)標(biāo)志的狀態(tài)來(lái)判定當(dāng)前數(shù)據(jù)是否有效。如果標(biāo)志為擦除狀態(tài),,則認(rèn)為目標(biāo)區(qū)域的數(shù)據(jù)無(wú)論是舊數(shù)據(jù)還是新數(shù)據(jù)均有效,,否則需要重新執(zhí)行上一次的擦寫(xiě)操作,。
1.2 方案存在的問(wèn)題
該方案可以對(duì)Flash數(shù)據(jù)起到有效的掉電護(hù)作用,但是芯片執(zhí)行一次數(shù)據(jù)更新需要對(duì)Flash進(jìn)行兩次擦除+兩次編程操作,。眾所周之,,雖然Flash的編程時(shí)間僅為微秒級(jí),但頁(yè)擦除的時(shí)間比較長(zhǎng),,大約需要2~5 ms(依據(jù)一次擦除的容量大小決定時(shí)間長(zhǎng)短),,那么一次數(shù)據(jù)更新操作至少需要4~10 ms,這個(gè)操作時(shí)間顯然是比較長(zhǎng)的,,這對(duì)于性能要求比較高的應(yīng)用是不能接受的,。
2 乒乓式掉電保護(hù)機(jī)制
2.1 存儲(chǔ)器分配原則
為了解決操作速度慢的問(wèn)題,本節(jié)提出性能更高的乒乓式掉電數(shù)據(jù)保護(hù)機(jī)制,。
如圖2所示,,在Flash中取兩塊同樣大小的地址空間(仍假定每塊為一個(gè)page word),這兩塊空間的對(duì)應(yīng)關(guān)系是捆綁的,。
以區(qū)域1和區(qū)域1′為例,,雖然它們的物理地址不同,但它們對(duì)應(yīng)的邏輯地址是相同的,,也就是說(shuō)CPU在對(duì)這塊邏輯地址進(jìn)行擦寫(xiě)時(shí),,不需要知道數(shù)據(jù)究竟寫(xiě)在了區(qū)域1還是區(qū)域1′,這完全是由Flash控制器來(lái)分配的,,在這種操作下區(qū)域1和區(qū)域1′輪流作為備份區(qū)和目標(biāo)區(qū),,也就是說(shuō)當(dāng)CPU要對(duì)Flash進(jìn)行第一次更新時(shí),區(qū)域1做備份區(qū)而區(qū)域1′做目標(biāo)區(qū),,第二次更新時(shí)區(qū)域1′做備份區(qū)而區(qū)域1做目標(biāo)區(qū),,以此類推。
2.2 乒乓式掉電保護(hù)原理
下面具體來(lái)看乒乓式掉電保護(hù)機(jī)制是如果實(shí)現(xiàn)掉電保護(hù)功能的,。
如圖3所示,區(qū)域1的最后兩個(gè)word地址分別對(duì)應(yīng)cnt1和flag1,,其中cnt1表示區(qū)域1對(duì)應(yīng)的邏輯地址被更新的次數(shù),,flag1表示區(qū)域1內(nèi)除flag1以外的數(shù)據(jù)是否正確,若正確寫(xiě)入“32’haaaa”,,若錯(cuò)誤寫(xiě)入“32’hbbbb”,。同樣的,區(qū)域1′的最后兩個(gè)word地址也對(duì)應(yīng)了具有同樣意義的cnt1′和flag1′,。
假定區(qū)域1和區(qū)域1′的初始狀態(tài)均為擦除狀態(tài),,乒乓式掉電保護(hù)機(jī)制的具體操作步驟如下:
(1)有第一次寫(xiě)需求時(shí),首先擦除區(qū)域1,,然后將數(shù)據(jù)寫(xiě)入?yún)^(qū)域1,,同時(shí)把cnt1更新為“1”,,表示第1次寫(xiě)入數(shù)據(jù)。確認(rèn)數(shù)據(jù)正確性后將校驗(yàn)結(jié)果寫(xiě)入flag1,,否則不更新flag1,;
(2)有第二次寫(xiě)需求時(shí),首先擦除區(qū)域1′,,然后將數(shù)據(jù)寫(xiě)入?yún)^(qū)域1′,。接著讀出cnt1,并將cnt1加1得到的值“2”寫(xiě)入cnt1′,,表示第2次寫(xiě)入數(shù)據(jù),。確認(rèn)數(shù)據(jù)正確后將校驗(yàn)結(jié)果寫(xiě)入flag2,否則不更新flag1′,;
(3)有第三次寫(xiě)需求時(shí),,首先擦除區(qū)域1,然后將數(shù)據(jù)寫(xiě)入?yún)^(qū)域1,。接著讀出cnt1′,,并將cnt1′加1得到的值“3”寫(xiě)入cnt1,表示第3次寫(xiě)入數(shù)據(jù),。確認(rèn)數(shù)據(jù)正確性后將校驗(yàn)結(jié)果寫(xiě)入flag1,,否則不更新flag1;
(4)以此類推,,之后每一次有更新需求時(shí),,輪流擦寫(xiě)區(qū)域1和區(qū)域1′。
綜上所述,,可以看出正常情況下cnt1和cnt2永遠(yuǎn)相差“1”,。每次要更新Flash時(shí),都選取cnt值小的那塊區(qū)域進(jìn)行更新,,更新后將原來(lái)的cnt值+2,,得到新的值再寫(xiě)回,確認(rèn)數(shù)據(jù)全部正確后再更新flag,。
但是如果擦寫(xiě)時(shí)芯片突然掉電,,上述的過(guò)程將被打亂。芯片再次上電時(shí),,首先分別讀出兩塊存儲(chǔ)器的目標(biāo)頁(yè)和對(duì)應(yīng)備份頁(yè)中的全部數(shù)據(jù),,重新計(jì)算flag和flag1,并與存儲(chǔ)于兩塊存儲(chǔ)器中的flag和flag1進(jìn)行比對(duì),。如果flag1和flag1′比對(duì)都是一致的,,則說(shuō)明存儲(chǔ)于兩塊存儲(chǔ)器中的flag1和flag1′均正確,那么計(jì)數(shù)值大的(非擦除值32’hFFFF)那個(gè)區(qū)域就是最后被更新的數(shù)據(jù),;如果存在錯(cuò)誤的flag,,至多只能有一個(gè)是錯(cuò)誤的,,那么錯(cuò)誤的flag對(duì)應(yīng)的那塊Flash一定是在更新時(shí)發(fā)生了掉電,并且掉電發(fā)生時(shí)正在更新flag又沒(méi)更新完,,所以導(dǎo)致flag是錯(cuò)誤的狀態(tài),。依據(jù)flag和cnt判斷數(shù)據(jù)有效性如表1所示。
該方案中備份區(qū)和目標(biāo)區(qū)是交替使用的,,所以每次更新時(shí)只需要對(duì)一塊區(qū)域都進(jìn)行擦除和更新,。那么完成一次數(shù)據(jù)只需要1次擦除+1次寫(xiě),即2~5 ms,,與原有方案相比效率提高了一倍,。
3 結(jié)論
由硬件電路實(shí)現(xiàn)的乒乓式掉電保護(hù)機(jī)制,不但可以有效地防止掉電數(shù)據(jù)丟失的問(wèn)題,,而且對(duì)提高芯片性能有及大的幫助,。
參考文獻(xiàn)
[1] 黃河清.Flash文件系統(tǒng)中掉電保護(hù)的分析與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2013(6):90-92.
[2] 張金霞,,陳思婕,,喬彩婷.基于Flash的智能卡數(shù)據(jù)掉電保護(hù)機(jī)制設(shè)計(jì)[J].電子技術(shù)與軟件工程,2015(14):216-218.
[3] 扶小飛,,鄭善賢.一種Flash文件系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,,2010(5):174-176.
[4] 王兵,陳軍東.嵌入式系統(tǒng)掉電保護(hù)的一種設(shè)計(jì)方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,,2005(11):28-30.
[5] 李宇.基于單片機(jī)系統(tǒng)可靠性的掉電保護(hù)的研究[J].電子質(zhì)量,,2004(7):53-55.
[6] 王朝輝,陸楓.一種高可靠性的單片機(jī)掉電保護(hù)設(shè)計(jì)[J].武漢科技大學(xué)學(xué)報(bào)(自然科學(xué)版),,2006(4):401-403.
[7] 徐杰,,唐甜,劉曉.一種嵌入式系統(tǒng)電源掉電保護(hù)方法[J].電子測(cè)試,,2016(5):131-132.
[8] 陳粵初,,竇振中.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,1993.
作者信息:
蘇 偉1,,2,,馮 曦1,2,,周芝梅1,,2,,胡 毅1,,2,唐曉柯1,,2
(1.北京智芯微電子科技有限公司 國(guó)家電網(wǎng)公司重點(diǎn)實(shí)驗(yàn)室電力芯片設(shè)計(jì)分析實(shí)驗(yàn)室,,北京100192,;
2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計(jì)工程技術(shù)研究中心,北京100192)