文獻標識碼: 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)