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