詳解從Nand特性談其燒錄關(guān)鍵點(diǎn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
為什么燒錄Nand Flash經(jīng)常失敗?為什么燒錄成功了,一部分Nand芯片貼板之后系統(tǒng)卻運(yùn)行不起來?…,等等,問了那么多為什么,那我反問一個(gè)問題:你了解Nand Flash的特性及其燒錄關(guān)鍵點(diǎn)嗎?
一、Nand flash的特性
1、位翻轉(zhuǎn)
在 NAND 閃存是通過對(duì)存儲(chǔ)單元(Cell)進(jìn)行充電來完成數(shù)據(jù)存儲(chǔ)的,存儲(chǔ)單元的閾值電壓就對(duì)應(yīng)著數(shù)據(jù)值。當(dāng)讀取的時(shí)候,通過將它的閾值電壓與參考點(diǎn)對(duì)比來獲得其數(shù)據(jù)值。對(duì)SLC 而言,就只有兩種狀態(tài)和一個(gè)參考點(diǎn)。而對(duì)于2-Bits 的MLC 而言,它有4 種狀態(tài)和三個(gè)參考點(diǎn)。TLC就更多狀態(tài)和參考點(diǎn)。當(dāng)讀出的數(shù)據(jù)值與編程時(shí)數(shù)據(jù)值對(duì)應(yīng)的閾值電壓不相匹配時(shí),表明數(shù)據(jù)發(fā)生了位翻轉(zhuǎn),就帶來了可靠性問題。導(dǎo)致位翻轉(zhuǎn)的最常見原因是“編程干擾”導(dǎo)致的閾值電壓漂移。
2、存儲(chǔ)結(jié)構(gòu)
Nand 閃存由多個(gè)Block組成,每一個(gè)Block又由多個(gè)Page組成,Page的大小一般為512+16Bytes 、2K+64Bytes以及4096+128Bytes,Page是讀取和編程的基本單位,而擦除的基本單位是Block。
NAND Flash的頁,包含主區(qū)(Main Area)和備用區(qū)(Spare Area)兩個(gè)域,“主區(qū)”也常稱作數(shù)據(jù)區(qū),備用區(qū)是保留區(qū)域,一般用來標(biāo)記壞塊(bad block)和存放ECC的值,當(dāng)然有些文件系統(tǒng)使用備用區(qū)記錄擦除次數(shù)、文件組織數(shù)據(jù)等。
圖1.1 為頁大小為2048+64的閃存存儲(chǔ)結(jié)構(gòu)
3、壞塊及ECC
位翻轉(zhuǎn)的發(fā)生是隨機(jī)的,且比特誤碼的數(shù)量會(huì)隨著擦寫次數(shù)的增加而增加。但是只要比特誤碼的數(shù)量在ECC 能夠糾正的范圍內(nèi),數(shù)據(jù)的完整性就始終有保障。在有些點(diǎn),每頁的比特誤碼有可能很接近ECC 所能糾正的極限,NAND 的控制系統(tǒng)必須嚴(yán)防比特誤碼超過可糾錯(cuò)的范圍,否則,就可能造成數(shù)據(jù)丟失或者系統(tǒng)無法正常工作。因此,這些塊必須要標(biāo)記為壞塊。壞塊永遠(yuǎn)不應(yīng)該再用來存儲(chǔ)數(shù)據(jù)。由于壞塊的產(chǎn)生是不可避免的,NAND 制造商在對(duì)裸片測試時(shí)會(huì)選擇對(duì)某些塊進(jìn)行壞塊標(biāo)記,而不是放棄整個(gè)裸片,所以大多數(shù)NAND 在出廠時(shí)就已經(jīng)存在標(biāo)記為壞塊的塊。如果一個(gè)NAND 的塊被標(biāo)記為壞塊,那么NAND 的容量就永久性的減小了。
二、Nand系統(tǒng)裸片量產(chǎn)燒錄的關(guān)鍵點(diǎn)
由于Nand flash芯片的特性,以其作為存儲(chǔ)介質(zhì)時(shí)必須對(duì)這些特性進(jìn)行恰當(dāng)處理,這樣系統(tǒng)才能正常運(yùn)行。系統(tǒng)設(shè)定各分區(qū)數(shù)據(jù)在Nand芯片的存儲(chǔ)布局,并且在存儲(chǔ)驅(qū)動(dòng)層對(duì)Nand進(jìn)行位糾錯(cuò)、壞塊管理等處理,這些信息需要系統(tǒng)/驅(qū)動(dòng)工程師明確。
研發(fā)階段或小批量生產(chǎn)階段,常采用在板燒錄的方式,原理是將boot通過串口下載到內(nèi)存跑起來,由boot從SD卡或網(wǎng)絡(luò)將內(nèi)核鏡像、文件系統(tǒng)鏡像等數(shù)據(jù)燒錄到Nand flash芯片。
為了提高生產(chǎn)效率或別的方面考慮,會(huì)使用燒錄器對(duì)Nand flash裸片進(jìn)行量產(chǎn)燒錄,由于燒錄器廠家并不知道存儲(chǔ)驅(qū)動(dòng)層對(duì)Nand各種特性的處理方式,所以不加正確配置就進(jìn)行燒錄的話,往往出現(xiàn)以下情況:1. 燒錄失敗,經(jīng)常是校驗(yàn)通不過;2. 燒錄通過,但是部分芯片貼板之后系統(tǒng)運(yùn)行不起來,或者運(yùn)行起來某些模塊出現(xiàn)一些錯(cuò)誤與異常。這些大多不是燒錄器本身的問題,而是裸片燒錄Nand系統(tǒng)時(shí)幾個(gè)重要的關(guān)鍵點(diǎn)沒有處理好,或者說沒有和目標(biāo)系統(tǒng)相關(guān)處理一致。這些
關(guān)鍵點(diǎn)包括:
1) 壞塊處理策略
2) 分區(qū)(Partition)
3) 糾錯(cuò)碼(Error Correction Codes,ECC)
當(dāng)然,影響燒錄的還有其他因素,比如備用區(qū)的使用情況、未用好快的格式化以及動(dòng)態(tài)元數(shù)據(jù)等,但我們這里只討論上面幾個(gè)比較普遍的因素。
1、壞塊處理策略
壞塊一般是根據(jù)芯片的壞塊標(biāo)記位置進(jìn)行識(shí)別的,而壞塊處理策略定義了在遇到壞塊時(shí)算法應(yīng)該如何處理。策略算法負(fù)責(zé)將本來應(yīng)該寫到壞塊的內(nèi)容寫到其它可選的好塊中。最常用的壞塊處理策略是跳過壞塊,其他典型的還有帶BBT的跳過壞塊及預(yù)留塊區(qū)等。
跳過壞塊的處理策略是最基本最常用的壞塊替換策略。當(dāng)燒錄中遇到壞塊時(shí),算法簡單地跳過壞塊,而將數(shù)據(jù)寫入下一個(gè)好塊。它會(huì)造成物理數(shù)據(jù)和邏輯數(shù)據(jù)的位置偏移,這通常需要分區(qū)來解決這個(gè)問題。
2、分區(qū)(Partition)
采用類跳過壞塊的處理策略的Nand系統(tǒng),常常會(huì)把存儲(chǔ)區(qū)分成若干個(gè)不同的物理區(qū)域,這就是我們說的分區(qū),概念上很像電腦硬盤的分區(qū)。使用分區(qū)使得你有能力確保你的數(shù)據(jù)可以存到預(yù)先指定的物理塊區(qū)內(nèi),即便在這之前發(fā)現(xiàn)了一些壞塊。這對(duì)一些底層軟件組件比如啟動(dòng)引導(dǎo)程序和某些必須很容易定位的文件系統(tǒng)驅(qū)動(dòng)程序來說,是非常有幫助的。
當(dāng)使用跳過壞塊的替換策略時(shí),壞塊會(huì)導(dǎo)致數(shù)據(jù)順移到下一個(gè)好塊。如果設(shè)置了分區(qū),就可以指導(dǎo)燒錄器確定數(shù)據(jù)的邊界,確保數(shù)據(jù)文件不會(huì)侵占鄰近的分區(qū)。
圖2.2.1就是典型的嵌入式Linux系統(tǒng)的分區(qū)情況。
圖2.2.1 典型的嵌入式Linux系統(tǒng)分區(qū)情況
3、糾錯(cuò)碼(Error Correction Codes,ECC)
針對(duì)不同工藝、容量的NAND存儲(chǔ)系統(tǒng)采用適當(dāng)?shù)腅CC算法是應(yīng)該的,要保證系統(tǒng)的可靠性,甚至是必須的。ECC糾錯(cuò)碼一般存放在備用區(qū)中,對(duì)一整頁或?qū)㈨摲殖扇舾晒?jié)的數(shù)據(jù)進(jìn)行計(jì)算而得。數(shù)據(jù)燒錄之前需要準(zhǔn)備好ECC(硬件ECC除外),如果是純數(shù)據(jù)則需要使用ECC算法來生成。Nand裸片量產(chǎn)中,知道ECC算法的糾錯(cuò)能力(糾錯(cuò)位數(shù))是很重要的,因?yàn)橐WC生產(chǎn)效率,燒錄器如果采用ECC來進(jìn)行校驗(yàn)數(shù)據(jù)是不實(shí)際的,而通過簡單數(shù)據(jù)比對(duì)就可以知道數(shù)據(jù)的位翻轉(zhuǎn)個(gè)數(shù),如果翻轉(zhuǎn)個(gè)數(shù)范圍在ECC算法的糾錯(cuò)范圍之內(nèi),則認(rèn)為校驗(yàn)應(yīng)該是通過的。
三、燒錄定制
對(duì)于以上關(guān)鍵點(diǎn)或其它特殊部分,如果燒錄器軟件沒有支持的相應(yīng)的方案,需要聯(lián)系原廠進(jìn)行相關(guān)算法的定制,比如壞塊處理方案、ECC方案等。[!--empirenews.page--]