掌握ECC/壞區(qū)塊管理眉角 NAND Flash嵌入式應用效能增
NAND Flash記憶體在出廠時是允許部分晶片含有壞區(qū)塊,或者好的區(qū)塊中含有一些錯誤位元,因此在實際應用時,須搭配使用控制器,透過硬體與軟體進行壞區(qū)塊管理,以及利用錯誤更正編碼(ECC)演算法修正錯誤位元,方能提升嵌入式系統(tǒng)儲存效能。
本文引用地址:http://butianyuan.cn/article/284148.htmNAND型快閃記憶體(NAND Flash) IC的技術(shù)演進快速,平均每1∼2年就前進一個制程世代來降低成本,在售價大幅下降情況下,愈來愈多嵌入式系統(tǒng),例如:藍光播放器、電視、數(shù)位相機、印表機等應用均采用NAND低成本的優(yōu)勢,取代原本使用的NOR型快閃記憶體(以下簡稱NOR),來因應大容量記憶體的需求并且降低成本。然而品質(zhì)考量是否有被兼顧,讓產(chǎn)品可以達到高品質(zhì),是值得探討的。
本文將先簡介NAND與NOR的基本結(jié)構(gòu)與使用觀念,接著針對NAND的使用上常見問題或使用規(guī)格,提出討論,進而提醒使用者在應用上應該注意事項,避免衍生不必要困擾,加速上市的時程。
NAND與NOR型快閃記憶體特性
快閃記憶體(Flash)是電子抹除式可程式唯讀記憶體(EEPROM)的衍生產(chǎn)品,但是Flash和EEPROM的主要差異在于,EEPROM是以位元組(Byte)為資料抹除單位,抹除速度相當緩慢。
Flash則使用較大區(qū)塊(例128K Bytes)為抹除單位,因此在寫入大量資料時有顯著的速度優(yōu)勢,而被命名為Flash。Flash依記憶單元陣列(Memory Cell Array)架構(gòu)及操作方式又可分為NOR和NAND二種型式:
.NOR:
可隨機存取(Random Access)并且速度快,多使用于儲存程式碼。記憶單元陣列架構(gòu)為并聯(lián)模式,可比擬為集合式透天房社區(qū),占用土地面積大,但是訪客可以很快地隨機訪問任何一戶房子。在應用方面,NOR具備穩(wěn)定的品質(zhì)特性,大多是以儲存程式碼為主,特別是開機時的程式碼(Boot Code)。
.NAND:
以頁面式(Page Read)順序存取,隨機存取速度慢,多用于大量數(shù)據(jù)資料存取,例如:影像和音樂儲存記憶卡、固態(tài)硬碟等。記憶單元陣列架構(gòu)為串聯(lián)模式,可比擬為一棟高層集合式公寓,好處是可以在一小塊土地住很多人,缺點是訪客一定要透過一樓門口往上依續(xù)找到某戶房子。NAND應用以資料(Data)儲存為主。
最早期NAND技術(shù)是SLC(Single-Level Cell),原理是在一個記憶單元中存放一個位元(Bit)的資料,直到MLC(Multi-Level Cell)技術(shù)接棒后,演進為一個記憶單元存放兩個位元。
TLC(Triple-Level Cell)技術(shù)是MLC技術(shù)的延伸,于2009年正式問世,一個記憶單元可存放三個位元,成本進一步大幅降低,但存取速度較慢。至于NOR目前以SLC為主流,因為其設計較MLC簡單且可靠度較佳,NOR的MLC技術(shù)難度高且可靠度較差,市場投入廠商較少。
快閃記憶體基本使用觀念
快閃記憶體中儲存的資料為二進位格式,內(nèi)含0與1兩種態(tài)位(State),在Flash為空白未寫入狀態(tài)的時候,資料邏輯態(tài)位為1,寫入(Program)資料后資料態(tài)位變?yōu)?,但無法將0直接寫成1,必須下達抹除指令(Erase Command)進行抹除才可將該位址資料態(tài)自0改寫成1。但是資料抹除必須是以區(qū)塊(Block或Sector)為最小單位,而不是以位元組為單位,也無法Partial Erase。
因此,F(xiàn)lash無法像EEPROM以Byte進行抹除,必須有Erase Before Write的重要觀念。然而Flash的寫入抹除有次數(shù)限制,例如NOR一般大約為十萬次(100K),NAND則大約為數(shù)千到數(shù)萬次(視制程技術(shù)而有差別),制造商會在Datasheet上注明這個Program/Erase Cycling Endurance規(guī)格。
使用者必須避免或減少每次更新寫入小范圍資料(例:數(shù)Bytes)就抹除整個區(qū)塊,應該等到該區(qū)塊資料寫入累積達到一定容量后再抹除,以免某些區(qū)塊在產(chǎn)品使用年限內(nèi)就已經(jīng)超過最高的寫入抹除次數(shù)規(guī)格。而Flash IC一般出廠時整個記憶體均為空白(例:FFh),第一次的使用,可以不須抹除就可寫入資料,之后的寫入則必須Erase Before Write。
相較于NOR,在低成本的背景下,NAND是一種不完美(Imperfect)的記憶體,出廠時是允許部份的晶片(Chip)就含有壞區(qū)塊(Bad or Invalid Block),或者好的區(qū)塊(Good or Valid Block)中也含有一些錯誤位元(Error Bit)。
以上兩點是與NOR Perfect記憶體要求的最大不同。因此NAND使用一定要搭配控制器(Controller),透過Hardware(H/W)與Software(S/W)進行壞區(qū)塊管理(Bad Block Management),以及利用錯誤更正編碼(ECC)修正錯誤位元。
然而,部份使用者未能查覺這兩個基本的先天使用限制,仍然依照NOR或EEPROM的使用習慣進行產(chǎn)品設計,于是導致嵌入式系統(tǒng)在設計驗證、生產(chǎn)、甚至于是在終端客戶發(fā)現(xiàn)問題。在早期NAND多用于儲存應用(例USB-drive、Memory card等),這種使用模式也與嵌入式系統(tǒng)應用有一些差別。
壞區(qū)塊產(chǎn)生原因與管理
NAND中若出廠含有壞區(qū)塊,制造商會在壞區(qū)塊的Spare Area(Spare Column)或Data Area(Main Array)指定的位址寫入非FFh的資料(例00h),通常為每個區(qū)塊的第一個Page(或第二個Page或最后一個Page)的第一個Byte含有非FFh的資料,則該區(qū)塊為壞區(qū)塊,用以識別出廠時的好區(qū)塊與壞區(qū)塊,這就是所謂的壞區(qū)塊標示(Bad或Invalid Block Mark)。見圖1,如果深色區(qū)域其中含非FFh資料,則該區(qū)塊為壞區(qū)塊。
圖1 常見的NAND壞區(qū)塊標示位址
使用者在使用的最初階段,須先進行整顆晶片的壞區(qū)塊掃描(Scan),建立每顆晶片的壞區(qū)塊清單(Bad Block Table)。如果使用NOR的概念,直接執(zhí)行壞區(qū)塊的抹除(Erase),則該壞區(qū)塊的壞區(qū)塊標示將會被同步抹除,因而永久性地遺失壞區(qū)塊標示,造成后續(xù)使用時誤用了壞區(qū)塊,導致應用的問題。因此,在進行任何區(qū)塊的抹除或?qū)懭胫?,必須先參照Bad Block Table或確定是否為壞區(qū)塊。
造成壞區(qū)塊的原因通常是因為無法寫入資料、無法抹除資料、錯誤位元數(shù)超過規(guī)格、無法符合AC/DC參數(shù)規(guī)格、可靠度不良、或在某個溫度下無法正常讀寫等問題而被標示為壞區(qū)塊。
晶片制造商在出廠測試時,均會依嚴格測試條件進行篩選(Screen),進而標示出壞區(qū)塊(通常每顆晶片壞區(qū)塊比例小于2%),并保留一定Margin,使得產(chǎn)品即使累積的寫入抹除次數(shù)到了最高限制次數(shù),晶片內(nèi)壞區(qū)塊總數(shù)仍符合2%規(guī)格。
例如表1中,2Gb NAND總共含有兩千零四十八個區(qū)塊,至少會有兩千零八個好區(qū)塊,表示其中可能最多含有四十個壞區(qū)塊。為了避免使用到壞區(qū)塊而造成問題,使用者不可只依靠自行抹除壞區(qū)塊后的功能測試,來判斷那些區(qū)塊是壞區(qū)塊。應該完全依照制造商出廠時的壞區(qū)塊標示,避免使用壞區(qū)塊,因為壞區(qū)塊可能含有潛在的功能偏差或可靠度問題。
除此之外,對于出廠時為好的區(qū)塊,若在使用時發(fā)現(xiàn)其功能異常,也要進行壞區(qū)塊退役(Retirement)的管理。唯一保證的是,出廠時每顆晶片的Block 0均為好區(qū)塊,以方便使用者建立開機所需的程式碼或參數(shù)設定,可儲存于Block 0。而各區(qū)塊之間是完全獨立,寫入抹除功能不會互相影響Data(NAND的最小抹除單位為一個區(qū)塊)。
針對使用者可能誤抹除壞區(qū)塊,而導致壞區(qū)塊標示遺失的問題,已有NAND制造商在晶片加入了防止被抹除的設計,即使是對壞區(qū)塊誤做了抹除,出廠時的壞區(qū)塊標示仍然不會消失。但是對于出廠后因老化產(chǎn)生的壞區(qū)塊,仍然會因誤做了抹除而永久性地遺失了壞區(qū)塊標示。
分區(qū)劃分在嵌入式系統(tǒng)使用上是必要的,用以區(qū)分不同屬性的程式碼(Code)或資料(Data),例如某個分區(qū)是Boot Lader區(qū),某區(qū)是Data Logging區(qū),某區(qū)是User Data區(qū),或者定義File Size大小。
區(qū)分不同屬性程式碼 分區(qū)劃分不可或缺
NAND可能含有壞區(qū)塊,各分區(qū)必須保留足夠的記憶空間。因為如果壞區(qū)塊集中在某些分區(qū),使得該分區(qū)的記憶容量空間太小而無法滿足運作所需,將導致系統(tǒng)故障。因此在分區(qū)時,必須確保各分區(qū)記憶容量不會太小,建議使用者在每一個分區(qū)必須先行預測估算可能的壞區(qū)塊數(shù)目,保留足夠的運作空間。但這個保留區(qū)塊數(shù)量也牽涉到NAND常見的制程缺陷。
例如:圖2為典型的NAND金屬線制程缺陷種類,其中之一的缺陷為位元線接觸井短路或串連線接觸井斷路(Bit-Line Contacts Short或String Contact Open),當發(fā)生以上這種缺陷時,會有兩條位元線短路或一條位元線斷路,造成某個Chunk(例:512Bytes)有兩個或一個Error Bit,若在高品質(zhì)要求的規(guī)格下,可能因為有含有較高的Bit Error Rate而將這連續(xù)兩個區(qū)塊均標示為壞區(qū)塊。
圖2 典型的NAND陣列金屬線制程缺陷種類
又或像圖3中,假設Block 1~4為某個Boot Loader File的分區(qū),可能含兩個壞區(qū)塊,使用者必須考量當四個區(qū)塊中剩下兩個區(qū)塊或更少區(qū)塊時可否正常運作。尤其是對于低容量的NAND,因為總記憶容量以及區(qū)塊數(shù)較少,在使用彈性較小情況下,更需注意最小File Size或Partition的使用限制。以下為實際使用案例說明:
圖3 分區(qū)劃分示意圖,若某一分區(qū)中含較高的壞區(qū)塊比例
(a)Partition table 1(表2):
標準與正確的使用NAND,每個分區(qū)均保留足夠空間來容許壞區(qū)塊。
(b)Partition table 2(表3):
雖然是正確的設定且允許壞區(qū)塊的發(fā)生,但容許率不足,可能造成量產(chǎn)良率不穩(wěn)定。
如同本文前面段落,Partition 2~6只允許一個壞區(qū)塊是不夠的,建議每個分區(qū)至少有4% x Partition Size加兩個Block(4舍5入),之所以使用4%是為了保護系統(tǒng),預留一定的Guardband,如果因為容量有限,使用者可與制造商討論如何預留。
例如若Partion-8含有兩百個Block,至少需允許十個壞區(qū)塊。本案例中,為1Gb NAND的應用,扣除己經(jīng)劃分指定的Block以后,至少還有超過四百個Block未使用,如果能夠適當?shù)姆峙溥@些Block到各個Partition,可以讓NAND天生的壞區(qū)塊特性獲得充分解決。
未正確啟動錯誤修正碼將產(chǎn)生三種狀況
NAND的好區(qū)塊中也可能含有錯誤位元,必須利用ECC來修正資料,目前大多數(shù)系統(tǒng)均使用主晶片(SoC/ASIC/Controller)提供的H/W來完成,以獲取較好的效能,特別是系統(tǒng)須要處理較高的ECC Bit數(shù)時。而不同的半導體制程技術(shù)、產(chǎn)品設計、產(chǎn)品測試、以及制程控制都可能影響NAND出廠時所含的錯誤位元。
各NAND制造商均會依產(chǎn)品能力,訂定所需的錯誤修正碼位元數(shù)(Required ECC Bit)。通常以SLC技術(shù)來說,在4xnm以上(≥40奈米)制程技術(shù),約需至少一個ECC Bit(每528Bytes=512Bytes Data+16 Bytes Parity),在3xnm(30∼39奈米)制程技術(shù),約需四個ECC Bit(每528Bytes),在2xnm(20∼29奈米)制程技術(shù),約需至少八個ECC Bit(每528Bytes)。
然而因4xnm以上制程技術(shù)寬限度(Margin)較大,在出廠狀態(tài)下含有的Error Bit數(shù)量較少(平均Bit Error Rate約1x10-8),所以可能大部份區(qū)塊是完全沒有Error Bit。若未能正確使用會有以下情況:
1.開機載入程式時F/W未啟動ECC,導致載入的程式含有錯誤資料,系統(tǒng)無法如預期操作,進而造成產(chǎn)品故障。這部份可能對于只需要1-Bit ECC規(guī)格的NAND影響較低,但對于先進制程NAND(需要較多Bits ECC)的影響就不容忽略。
2.在燒錄器(Programmer)寫入資料到NAND時,由于沒有搭配Controller,因此未啟動ECC,使得某些含Error Bit的晶片在燒錄時被判定為壞品,造成不必要的良率損失。
3.使用者未能體認不同NAND產(chǎn)品所需ECC Bit數(shù)本來就可能不同,如果某個微控制器(Micro-controller)只有修正1-Bit Error能力,但是采用了需要4-Bit ECC的NAND,產(chǎn)品很容易產(chǎn)生資料錯誤,而無法正常運作。
因此,以使用者必須嚴格確實遵守NAND Datasheet中規(guī)定的ECC Bit數(shù),啟動錯誤修正碼,否則可能造成資料錯誤或產(chǎn)品故障。就是因為NAND制程技術(shù)進步很快,在2012∼2014年制程轉(zhuǎn)換從4xnm、3xnm、2xnm進展到1xnm,所以所需的ECC Bit數(shù)也大不相同。
如果使用者仍然以4xnm以上的經(jīng)驗及觀念進行產(chǎn)品設計,而不是完全依照Datasheet規(guī)定,將無法發(fā)揮NAND的優(yōu)點,也就經(jīng)常發(fā)生使用者對ECC使用不正確而造成的問題。建議使用者如果有特別需要,應該與NAND制造了解及澄清。
采用特殊ECC演算法須注意資料保護/修正
AND中含有的錯誤位元,可能含有Data 1(Erased State),同時也含有Data 0 (Programmed State)的Error Bit。因此,不管是Data 1或是0,都要以ECC修正錯誤。
對SLC NAND來說通常Data 1的Error來自于寫入或讀取的干擾,造成NAND內(nèi)某個記憶單元的儲存電荷增加(Charge Gain),使得資料錯誤;Data 0的Error則可能是制程缺陷使得某個記憶單元固定態(tài)位在Data1(Stuck-at-1),或者因為長期資料保存,使得記憶單元中電荷泄漏(Charge Loss)造成資料錯誤。
通常產(chǎn)品在寫入資料時,一并也會編碼(Encode)寫入ECC Code到同一Page的Spare Column上,所以Data 0都能得到資料保護。另外針對空白資料(Blank Data,F(xiàn)Fh)的Page因為該Page的Spare Column上即使沒有寫進ECC Code,通常也會得到ECC保護而修正錯誤位元。
然而,部份使用者采用的ECC演算法較特殊,例如采用Data Polarity Inversion。對于空白資料的Page,如果沒有對應寫入ECC Code,User Data并不會得到ECC保護,修正資料中的錯誤位元。因此,使用者如果使用特殊的演算法,須特別注意不同資料需要修正和保護的資料內(nèi)容。
未能考慮寫入干擾之限制
NOP(Number of Program)是NAND的重要規(guī)格之一(NOR沒有此限制,經(jīng)常被忽略),通常制造商會標示NOP的最高限制,表示每個Page部份寫入資料(Partial Program)的次數(shù)上限,例如:SLC NAND通常NOP為4∼8次,MLC和TLC NAND通常NOP規(guī)格為1,也就是說不允許分次寫入資料到同一個Page中。
使用者必須依照NOP規(guī)格,以不超過NOP的次數(shù)規(guī)格之下,進行Page Program,例如NOP=4表示每個Page最多可多四次寫入資料(Erase之后此規(guī)格Reset)。使用者必須注意NOP規(guī)格,不可進行超過NOP次數(shù)的Partial Page Program,以免因?qū)懭敫蓴_而造成太多Error Bits進而可能超過最高ECC可以修正的能力。
Randomization Scheme減少區(qū)塊資料不平均
因為NAND通常是將三十二個Flash Cell以串聯(lián)方式連結(jié)起來,當讀取其中某個Cell時,其他位于同一串聯(lián)(String)的Cells,就當作是Pass Gate。然而Cell在寫入資料后,因為儲存電子多,其臨限電壓(Threshold Voltage)升高,導通電流相對會降低,因此該串String的bit-line電流下降明顯。如果某一個String中大部份的Cells均為Data 0,該String的電流下降就更明顯。
當電流下降到低于資料讀取判斷的電流值時,讀取的資料就會產(chǎn)生錯誤問題。部份使用者因為對資料邏輯的定義,對于空(Void)的資料均填入Data 0,如此當某一個Block中絕大部份Bit都是Data 0的情況下,某些String就可能產(chǎn)生讀取Data 1錯誤的問題。因此最理想的資料是使用者能平均分配Data 1與0的比率,避免過多的0出現(xiàn)在同一個String。
但這也不是代表完全不能有部份的String含有較多的Data 0,而是愈多的String中含有較多的Data 0,愈容易使Read Error,就容易超過ECC可以修補的Bit Error上限。目前己有Randomization Scheme技術(shù)可以將高重復性的使用者資料配合位址加以亂數(shù)化,減少相同資料接續(xù)寫進同一Block的情況。
例如表4(a)中,資料看起來每個位址的資料都是相當?shù)仉s亂,然而在Column 0與Column 1(相當于Flash內(nèi)部的Bit-line或String)中,可以發(fā)現(xiàn)其中的IO6與IO3各都有連續(xù)四個0;另外Row2(相當于Flash內(nèi)部的Word-line)的IO6均含有0,可能造成較高Bit Error Rate,因此使用者應注意這種可能性。
表4(b)中,某個Block中絕大部份Bit都是Data 0,除了Row 0之外其他Row的資料均為0。此時讀取Row0的Data 1容易發(fā)生錯誤。
至于表4(c)是另一種極端,在同一個Block中除了Row0有資料之外,其他Row均為空白(FFh),短期的使用不太會有問題,也就是偶而有一次是這種Pattern是不會有問題。
但是如果將這個Block長期只有寫入Row0(例:該Block只做Parameter儲存用),其他Row的資料均為空白,則對可靠度可能有不良影響,這是因為每次這個Block只有Row0有寫入資料,其他Row的資料均為空白,Row0的老化會比其他Row來得嚴重一些,造成同一個Block中老化速度極度分布不均,最后可能會影響data0與1態(tài)位的Sensing Margin。
不適當之驗證方法
隨著NAND半導體制程微縮使得成本下降的同時,品質(zhì)和可靠的寬容度也大幅下降,因為在僅存非常微小的設計和操作空間之下,NAND的使用限制日漸復雜,尤其是MLC和TLC更是復雜,需要晶片制造商和使用者之間有非常緊密的溝通,以下列舉常見的不正確驗證方法與使用限制:
(1)單純比較RBER
某些使用者評估NAND的方法是單純地比較絕對的RBER(Raw Bit Error Rate,未經(jīng)過ECC修正前的Bit Error Rate),做為產(chǎn)品能力及品質(zhì)的比較,可能會以過于嚴格的標準去認定NAND能力,有失客觀性也不必要,因為不同制程世代的NAND,RBER差異相當大,所需的ECC修正Bit數(shù)也大不相同。
例如4xnm的RBER比3xnm低,但是經(jīng)過4-Bit ECC修正后,可能3xnm的UBER (Uncorrectable Bit Error Rate,經(jīng)過ECC修正后的Bit Error Rate)比4xnm經(jīng)過1-Bit ECC修正后的UBER更低。因此使用者應該根據(jù)應用的需求,考慮UBER,才不會限制了使用先進產(chǎn)品的機會。正確啟動主晶片對應到NAND的ECC Bit,可以確保NAND的使用品質(zhì)。(注:SSD可接受的UBER為≥1×10-15)
(2)依照特定位址順序?qū)懭胫甘?/p>
針對先進制程產(chǎn)品(例2xnm MLC & TLC)寫入資料順序須依指示,而非傳統(tǒng)上依Logical Sequence自0,1,2..60, 61,62,63..依續(xù)寫入,而是有特定的位址順序。
(3)寫入資料需是Random Pattern
進行寫入抹除耐久性(Endurance)與資料保存壽命(Data Retention Lifetime)實驗的寫入資料必須是Random Pattern(才可以模擬一般真實使用情況)而不是使用像F0F0h或0F0Fh等重復性的資料,否則某些Cell可能被過度Stress將會使Bit Error Rate上升或資料保存壽命Lifetime下降。
(4)須模擬10年壽命內(nèi)分散式進行
寫入抹除實驗必須模擬在10年壽命內(nèi)分散式(Distributed)的進行,而不是在短時期內(nèi),很快地做完額定的最高寫入抹除規(guī)格;此外,如果短時間內(nèi)頻繁進行寫入抹除,得到的可靠度數(shù)據(jù)通常會比較差,其原因在于寫入抹除過程中所快速產(chǎn)生的老化無法在短時間內(nèi)被釋放或回復,因此而累積了過多的老化。所以相關(guān)的驗證方法,必須能對應到系統(tǒng)的實際工作行為模式。
JEDEC固態(tài)技術(shù)協(xié)會定義了相關(guān)驗證標準,制造商大多是依據(jù)這個工業(yè)標準所定義的方法、程序、溫度、和時間等條件進行各種實驗評估,使用者也應參照JEDEC標準做為NAND驗證條件,否則經(jīng)常會過度Stress而突增困擾。
(5)依JEDEC條件評估
資料保存驗證也和前項類似,進行資料保存實驗前所做的寫入抹除實驗須依JEDEC或依制造商提供的溫度和各種實驗條件進行評估,實務上常有使用者先以常溫快速進行寫入抹除實驗(例如一周內(nèi)完成100k Program/Erase Cycling),再接著進行高溫烘烤實驗,評估資料保存壽命。
這種方式會嚴重低估了資料保存壽命。因為大多數(shù)情況下,所需的資料保存壽命是兩次寫入抹除之間的時間,如果很頻繁地進行寫入抹除,實際上所需的資料保存壽命是較短的。一般來說寫入抹除和資料靜止不變更的溫度通常是接近的,如果做寫入抹除在常溫,卻以高溫做資料保存測試是過度的Stress,導致實驗程序與實際User Mode的偏差。JEDEC驗證標準建議在高溫進行寫入抹除循環(huán)測試,接著以高溫做資料保存測試,才符合現(xiàn)實應用。
NAND已經(jīng)廣泛運用在嵌入式系統(tǒng),然而由常見的NAND使用問題,可見使用NAND必須注意的要點及限制比起NOR多很多,而且隨著制程演進限制更多。使用者若不能正確使用NAND,幸運的情況在設計驗證階段就發(fā)現(xiàn)問題,如果一直到量產(chǎn)出貨后才發(fā)現(xiàn)問題,可能造成相常嚴重的后果,因此必須非常小心謹慎,如果有任何疑問應與制造商仔細溝通了解NAND的使用特性與規(guī)格。
評論