北京智芯微電子科技有限公司 王 赟 成 嵩 杜鵬程 胡曉波 魏 斌 崔炳榮
目前市場上通用的Nor Flash存儲器,每個擦寫單元的循環(huán)擦除/編程壽命一般在10萬次左右,超過該壽命后Nor Flash將工作在不穩(wěn)定狀態(tài),甚至造成信息數(shù)據(jù)讀寫失效。本文詳細闡述了一種基于熱點區(qū)域地址映射的Nor Flash動態(tài)損耗均衡方法。該方法通過設(shè)計特定的Nor Flash硬件結(jié)構(gòu),結(jié)合扇區(qū)內(nèi)地址映射的方式,可以有效提升flash熱點區(qū)域的擦寫壽命。
Intel于1988年首先開發(fā)出Nor Flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。Nor Flash的傳輸效率很高,在小容量時具有很高的成本效益,更加安全可靠,不容易出現(xiàn)數(shù)據(jù)故障,因此被廣泛應(yīng)用于安全芯片、智能卡芯片、esim等領(lǐng)域。
由于Flash在更新數(shù)據(jù)時,必須要先對其需要更新的區(qū)域進行擦除操作,而Flash的每一塊區(qū)域的擦除次數(shù)是有上限的。如果在使用過程中,對某塊區(qū)域的擦寫比其他區(qū)域頻繁的話,這塊區(qū)域就會提前壞掉,從而縮短了整片F(xiàn)lash的壽命。但是,如果講Flash的擦寫操作能夠均勻分布在不同的區(qū)域,使每個區(qū)域的擦寫次數(shù)相近,就可以大大延長Flash的使用壽命,這種技術(shù)被稱為Flash的損耗均衡。
當(dāng)前對于Flash的損耗均衡,大部分都是基于Nand Flash,對于Nor Flash研究相對較少。但是在安全芯片、智能卡領(lǐng)域,通常會集成一塊片上Nor Flash用于存放程序和數(shù)據(jù),存儲的內(nèi)容也需要頻繁更新,此時對于Nor Flash的損耗均衡功能非常必要。
為了有效的管理Flash存儲器,通常會在文件系統(tǒng)層和Flash之間實現(xiàn)Flash轉(zhuǎn)換層(Flash Translation Layer(FTL)),F(xiàn)TL通常實現(xiàn)三部分功能,即損耗均衡、地址映射、以及垃圾回收。
常見的損耗均衡算法分為動態(tài)損耗均衡和靜態(tài)損耗均衡兩大類。Flash中有一些數(shù)據(jù)會被頻繁地更新,被稱為熱數(shù)據(jù)或熱點。靜態(tài)損耗均衡是指通過將存儲熱點數(shù)據(jù)的存儲區(qū)與其他非熱點存儲數(shù)據(jù)進行搬移互換,達到損耗均衡的目的。目前有許多靜態(tài)均衡損耗算法的研究,比如隨機游走算法、循環(huán)位圖算法等。但是,數(shù)據(jù)搬移和交換會造成性能和資源上的額外開銷。動態(tài)損耗均衡是指,再每次更新數(shù)據(jù)時,選取擦寫次數(shù)最少的空閑存儲區(qū)域,這樣就避免了冷熱數(shù)據(jù)的搬移和交換,時間和資源開銷相對較小。
地址映射主要通過維護地址映射表來實現(xiàn)軟件層的虛擬地址到Flash物理地址之間的轉(zhuǎn)換。
垃圾回收是指,對于存放無效數(shù)據(jù)的空間,需要將其擦除,使之稱為可用的空間。對于該功能,也需要設(shè)計相應(yīng)的回收策略,如貪心算法、差分進化算法等。
本文提出了一種基于熱點區(qū)域地址映射的Nor Flash動態(tài)損耗均衡算法,在該算法中,將整個Flash區(qū)域劃分成若干個損耗均衡的基本單元,在每個基本單元里,通過動態(tài)損耗均衡的方式,每次數(shù)據(jù)更新都從基本單元中選取擦寫次數(shù)最少的存儲區(qū)域?qū)懭胄碌臄?shù)據(jù),從而是熱點數(shù)據(jù)更新次數(shù)均勻地分布在不同的存儲區(qū)域,達到提高Flash壽命的目的。
常見的Flash均衡方案中,通常將整個存儲區(qū)域進行均衡,從整個存儲空間中劃分出部分存儲單元作為存儲管理單元,用于記錄物理存儲單元與邏輯存儲單元的映射關(guān)系。并且同時劃分出一塊區(qū)域做為統(tǒng)計區(qū),用于記錄數(shù)據(jù)存儲單元擦寫次數(shù)。這樣不但占用用戶可用的正常存儲區(qū)域,而且,統(tǒng)計區(qū)和存儲管理區(qū)的擦寫會比較頻繁,成為flash壽命的瓶頸。
本方法通過軟硬件結(jié)合的方式,將一個扇區(qū)(sector)做為基本的擦寫均衡映射單元,在一個sector內(nèi)部的所有數(shù)據(jù)頁在擦寫和修改時會輪流存儲數(shù)據(jù),而不再對固定存儲單元存儲內(nèi)容,并通過硬件額外的存儲器設(shè)計進行映射關(guān)系和其他信息的記錄的維護。
圖1 Flash結(jié)構(gòu)劃分示意圖1
同時該方法支持原子操作,即一次數(shù)據(jù)更新操作執(zhí)行的結(jié)果,或者是數(shù)據(jù)更新成功,或者是數(shù)據(jù)未更新,仍然未原始數(shù)據(jù),不會出現(xiàn)舊數(shù)據(jù)被刪除而新數(shù)據(jù)未寫入的情況。
本方法中,F(xiàn)lash硬件存儲器結(jié)構(gòu)需要按照如下方式進行設(shè)計和劃分(圖1):
(1)Word:32bit,F(xiàn)lash寫操作的最小單元;
(2)Block:大小為4個words,每個page有32個data block;
(3)Page:大小為512字節(jié)+16字節(jié)(32個data block + 1個mapblock),page是Flash擦除操作的最小單元;
(4)Mapblock:page中額外增加的用于存放page信息的存儲單元;
(5)Sector:包含logic_page_setor個page+1個spare page;
(6)Spare Page:Sector中物理頁數(shù)會
比邏輯頁數(shù)額外多出的一個page,多出的這個page稱為spare page,spare page在方案中用于數(shù)據(jù)擦寫時的頁輪換及原子操作。
(1)Erasing:將flash cell狀態(tài)變?yōu)椤?”的操作稱為Erase,Erase的最小操作粒度為page;
(2)Writing:將已經(jīng)Erase的flash cell變成“0”的操作稱為Write,Write的最小操作粒度為word;
(3)Flash數(shù)據(jù)區(qū)支持word寫,Mapblock區(qū)支持bit寫操作。
2.3.1 字段定義
(1)MAPADDR:6bits,存儲該物理頁在對應(yīng)的sector內(nèi)的邏輯頁號;
(2)MAPSTMP:2bits,時間戳,用于區(qū)分兩個頁的邏輯頁號相同時,數(shù)據(jù)的新舊;
(3)CNT:3bytes,該物理頁的擦除次數(shù);
(4)ECC:6bits,以上三個字段的ECC校驗和;
(5)PDE:2bits,F(xiàn)lash頁寫操作(數(shù)據(jù))完成標志;
(6)PIE:2bits,F(xiàn)lash頁寫操作(管理信息)完成標志;
(7)PLS:3bits,page生命周期狀態(tài)字段。
2.3.2 字段取值定義(表1)
在進行數(shù)據(jù)更新操作時,首先需要找到當(dāng)前擦寫次數(shù)最少的一個page,然后將新的數(shù)據(jù)寫入到找到的page中,最后再將舊數(shù)據(jù)page擦除,使之稱為一個新的可用page。
圖2 數(shù)據(jù)更新流程
2.4.1 數(shù)據(jù)更新流程圖(圖2)
表1 標志字段取值定義
2.4.2 數(shù)據(jù)更新流程說明
(1)通過mapblock中的CNT字段,查找擦除次數(shù)最少對空白頁(erased page),默認情況下,空白頁CNT字段(擦除次數(shù))和PLS字段均已寫入合法值。
(2)寫數(shù)據(jù):
■ PLS:寫入100;
■數(shù)據(jù)區(qū):寫入目標數(shù)據(jù);
■ PDE:寫入00。
(3)寫page管理信息:
■ MAPADDR:寫入;
■ MAPSTMP:寫入(舊頁MAPSTMP基礎(chǔ)上+1,01->10>11->01),擦除后的初始值為‘11’,軟件可通過讀出取反的方式取值(如物理初始值為‘11’,軟件讀出后認為是‘00’);
■ ECC:寫入;
■ PIE:寫入00;
表2 掉電標志及對應(yīng)操作
■ PLS:寫入000。
(4)擦除舊page:
■擦除舊page數(shù)據(jù)區(qū)及管理信息;
■舊page將原來的CNT值+1,寫入CNT;
■舊頁page的PLS寫入110。
如果在flash擦寫過程中產(chǎn)生干擾或者掉電,則可以通過以下標志位信息和步驟進行掉電恢復(fù)操作(表2)。
(1)芯片上電引導(dǎo)時,統(tǒng)計整個sector中,所有page已擦寫次數(shù)總和(sector_pages_erase_cnt);
(2)每次擦寫操作時,在更新page擦寫次數(shù)(CNT)等同時,對sector_pages_erase_cnt+1;
(3)每次擦寫操作完成時,判斷sector_pages_erase_cnt是否達到某個閾值的整數(shù)倍(如1024、4096等)如果是,啟動page refresh;
(4)Page refresh操作:
■ 在所有有效數(shù)據(jù)頁中找出擦寫次數(shù)最小的頁A;
■ 在所有空閑頁中找到擦寫次數(shù)最多的頁B;
■ 將A的數(shù)據(jù)更新到B中,并擦除A,將A變成空閑頁。
假設(shè)在n個熱點的情況下,則每個熱點的Endurance能力都相等,與熱點的擦寫順序無關(guān),沒有不均勻的情況。
平均壽命符合下述公式:
EHS=105×(logic_page_setor+1)/n
圖3 EHS示意圖1
假設(shè)每個物理頁最大擦寫次數(shù)為10萬次:
每個Sector中邏輯頁數(shù)為16時,熱點壽命特性如圖3所示。
每個Sector中邏輯頁數(shù)為8時,熱點壽命特性如圖4所示。
圖中橫軸為熱點個數(shù),豎軸單位為萬次。對一個固定Page進行頻繁寫操作,稱為一個熱點。EHS(Endurance of Hot Spot)表明在當(dāng)前熱點數(shù)量下,每個熱點平均的Endurance。
圖4 EHS示意圖2
結(jié)束語:本文設(shè)計了一種基于Nor Flash的sector內(nèi)page輪流擦寫、并且支持原子操作的方法。并分析得出了Nor Flash熱點區(qū)域壽命提高的效果。與常見的flash均衡方法相比,該方案的映射和均衡范圍可以調(diào)節(jié),不用占用額外的用戶數(shù)據(jù)區(qū)存儲映射表等維護信息,而且可以通過參數(shù)的調(diào)節(jié)(logic_page_setor)達到不同的擦寫壽命要求,同時支持了原子操作功能。雖然較其他文獻提出方法顯著提升了功能和靈活性,但在sector內(nèi)部邏輯page數(shù)較少時,spare page相對于邏輯page比例占用還是略高,仍存在改進空間。