從Nand特性談其燒錄關(guān)鍵點(diǎn)
為什么燒錄Nand Flash經(jīng)常失敗?為什么燒錄成功了,一部分Nand芯片貼板之后系統卻運行不起來(lái)?…,等等,問(wèn)了那么多為什么,那我反問(wèn)一個(gè)問(wèn)題:你了解Nand Flash的特性及其燒錄關(guān)鍵點(diǎn)嗎?
本文引用地址:http://dyxdggzs.com/article/201606/292408.htm

一、Nand flash的特性
1、位翻轉
在 NAND 閃存是通過(guò)對存儲單元(Cell)進(jìn)行充電來(lái)完成數據存儲的,存儲單元的閾值電壓就對應著(zhù)數據值。當讀取的時(shí)候,通過(guò)將它的閾值電壓與參考點(diǎn)對比來(lái)獲得其數據值。對SLC 而言,就只有兩種狀態(tài)和一個(gè)參考點(diǎn)。而對于2-Bits 的MLC 而言,它有4 種狀態(tài)和三個(gè)參考點(diǎn)。TLC就更多狀態(tài)和參考點(diǎn)。當讀出的數據值與編程時(shí)數據值對應的閾值電壓不相匹配時(shí),表明數據發(fā)生了位翻轉,就帶來(lái)了可靠性問(wèn)題。導致位翻轉的最常見(jiàn)原因是“編程干擾”導致的閾值電壓漂移。
2、存儲結構
Nand 閃存由多個(gè)Block組成,每一個(gè)Block又由多個(gè)Page組成,Page的大小一般為512+16Bytes 、2K+64Bytes以及4096+128Bytes,Page是讀取和編程的基本單位,而擦除的基本單位是Block。
NAND Flash的頁(yè),包含主區(Main Area)和備用區(Spare Area)兩個(gè)域,“主區”也常稱(chēng)作數據區,備用區是保留區域,一般用來(lái)標記壞塊(bad block)和存放ECC的值,當然有些文件系統使用備用區記錄擦除次數、文件組織數據等。

圖1.1 為頁(yè)大小為2048+64的閃存存儲結構
3、壞塊及ECC
位翻轉的發(fā)生是隨機的,且比特誤碼的數量會(huì )隨著(zhù)擦寫(xiě)次數的增加而增加。但是只要比特誤碼的數量在ECC 能夠糾正的范圍內,數據的完整性就始終有保障。在有些點(diǎn),每頁(yè)的比特誤碼有可能很接近ECC 所能糾正的極限,NAND 的控制系統必須嚴防比特誤碼超過(guò)可糾錯的范圍,否則,就可能造成數據丟失或者系統無(wú)法正常工作。因此,這些塊必須要標記為壞塊。壞塊永遠不應該再用來(lái)存儲數據。由于壞塊的產(chǎn)生是不可避免的,NAND 制造商在對裸片測試時(shí)會(huì )選擇對某些塊進(jìn)行壞塊標記,而不是放棄整個(gè)裸片,所以大多數NAND 在出廠(chǎng)時(shí)就已經(jīng)存在標記為壞塊的塊。如果一個(gè)NAND 的塊被標記為壞塊,那么NAND 的容量就永久性的減小了。
二、Nand系統裸片量產(chǎn)燒錄的關(guān)鍵點(diǎn)
由于Nand flash芯片的特性,以其作為存儲介質(zhì)時(shí)必須對這些特性進(jìn)行恰當處理,這樣系統才能正常運行。系統設定各分區數據在Nand芯片的存儲布局,并且在存儲驅動(dòng)層對Nand進(jìn)行位糾錯、壞塊管理等處理,這些信息需要系統/驅動(dòng)工程師明確。
研發(fā)階段或小批量生產(chǎn)階段,常采用在板燒錄的方式,原理是將boot通過(guò)串口下載到內存跑起來(lái),由boot從SD卡或網(wǎng)絡(luò )將內核鏡像、文件系統鏡像等數據燒錄到Nand flash芯片。
為了提高生產(chǎn)效率或別的方面考慮,會(huì )使用燒錄器對Nand flash裸片進(jìn)行量產(chǎn)燒錄,由于燒錄器廠(chǎng)家并不知道存儲驅動(dòng)層對Nand各種特性的處理方式,所以不加正確配置就進(jìn)行燒錄的話(huà),往往出現以下情況:1. 燒錄失敗,經(jīng)常是校驗通不過(guò);2. 燒錄通過(guò),但是部分芯片貼板之后系統運行不起來(lái),或者運行起來(lái)某些模塊出現一些錯誤與異常。這些大多不是燒錄器本身的問(wèn)題,而是裸片燒錄Nand系統時(shí)幾個(gè)重要的關(guān)鍵點(diǎn)沒(méi)有處理好,或者說(shuō)沒(méi)有和目標系統相關(guān)處理一致。這些關(guān)鍵點(diǎn)包括:
1) 壞塊處理策略
2) 分區(Partition)
3) 糾錯碼(Error Correction Codes,ECC)
當然,影響燒錄的還有其他因素,比如備用區的使用情況、未用好快的格式化以及動(dòng)態(tài)元數據等,但我們這里只討論上面幾個(gè)比較普遍的因素。
1、壞塊處理策略
壞塊一般是根據芯片的壞塊標記位置進(jìn)行識別的,而壞塊處理策略定義了在遇到壞塊時(shí)算法應該如何處理。策略算法負責將本來(lái)應該寫(xiě)到壞塊的內容寫(xiě)到其它可選的好塊中。最常用的壞塊處理策略是跳過(guò)壞塊,其他典型的還有帶BBT的跳過(guò)壞塊及預留塊區等。
跳過(guò)壞塊的處理策略是最基本最常用的壞塊替換策略。當燒錄中遇到壞塊時(shí),算法簡(jiǎn)單地跳過(guò)壞塊,而將數據寫(xiě)入下一個(gè)好塊。它會(huì )造成物理數據和邏輯數據的位置偏移,這通常需要分區來(lái)解決這個(gè)問(wèn)題。
2、分區(Partition)
采用類(lèi)跳過(guò)壞塊的處理策略的Nand系統,常常會(huì )把存儲區分成若干個(gè)不同的物理區域,這就是我們說(shuō)的分區,概念上很像電腦硬盤(pán)的分區。使用分區使得你有能力確保你的數據可以存到預先指定的物理塊區內,即便在這之前發(fā)現了一些壞塊。這對一些底層軟件組件比如啟動(dòng)引導程序和某些必須很容易定位的文件系統驅動(dòng)程序來(lái)說(shuō),是非常有幫助的。
當使用跳過(guò)壞塊的替換策略時(shí),壞塊會(huì )導致數據順移到下一個(gè)好塊。如果設置了分區,就可以指導燒錄器確定數據的邊界,確保數據文件不會(huì )侵占鄰近的分區。
圖2.2.1就是典型的嵌入式Linux系統的分區情況。

圖2.2.1 典型的嵌入式Linux系統分區情況
3、糾錯碼(Error Correction Codes,ECC)
針對不同工藝、容量的NAND存儲系統采用適當的ECC算法是應該的,要保證系統的可靠性,甚至是必須的。ECC糾錯碼一般存放在備用區中,對一整頁(yè)或將頁(yè)分成若干節的數據進(jìn)行計算而得。數據燒錄之前需要準備好ECC(硬件ECC除外),如果是純數據則需要使用ECC算法來(lái)生成。Nand裸片量產(chǎn)中,知道ECC算法的糾錯能力(糾錯位數)是很重要的,因為要保證生產(chǎn)效率,燒錄器如果采用ECC來(lái)進(jìn)行校驗數據是不實(shí)際的,而通過(guò)簡(jiǎn)單數據比對就可以知道數據的位翻轉個(gè)數,如果翻轉個(gè)數范圍在ECC算法的糾錯范圍之內,則認為校驗應該是通過(guò)的。
三、燒錄定制
對于以上關(guān)鍵點(diǎn)或其它特殊部分,如果燒錄器軟件沒(méi)有支持的相應的方案,需要聯(lián)系原廠(chǎng)進(jìn)行相關(guān)算法的定制,比如壞塊處理方案、ECC方案等。
評論