上一篇文章我們介紹了NAND Flash和NOR Flash的區別,從結構及原理上看,NOR Flash這種類(lèi)似ROM的結構方式,使得他編程簡(jiǎn)單,所以使用的工程師也很多,要不是成本太高,NAND Flash根本無(wú)法生存。
NAND Flash由于價(jià)格低廉,存儲容量大,越來(lái)越受到消費者的喜愛(ài),特別是需要存儲大量數據的消費者。那NAND Flash的編程又要注意哪些呢?
定義分區的實(shí)質(zhì)是定義數據會(huì )如何寫(xiě)入NAND Flash,不同內容的數據寫(xiě)到對應的地址中。一般用戶(hù)會(huì )有多個(gè)區,比如boot、kernel、fs、user等分區。
分區的描述:分區的地址范圍(起始塊、結束塊),鏡像文件大?。↖mage Size)。
分區的數據存儲:鏡像文件是從分區的起始塊開(kāi)始存放,如果分區中有壞塊,將使用壞塊處理策略替換壞塊,直到鏡像文件結束,如果分區中不夠好塊存放鏡像文件,則燒錄失敗。
如下圖是跳過(guò)壞塊的鏡像文件分區燒寫(xiě)示意圖:
ECC 存在于NAND 每頁(yè)的備用區(Spare Area)中,它允許外部系統發(fā)現主區的數據是否有誤。在大多數情況下,ECC 算法可以糾正誤碼,NandFlash在使用中也可能會(huì )出現壞塊,所以ECC是非常有必要的。
不同的用戶(hù)會(huì )可能會(huì )使用不同的ECC算法,一般來(lái)說(shuō)ECC算法由處理器供應商提供,如果編程器軟件中無(wú)這個(gè)ECC算法,則需要用戶(hù)提供ECC算法源代碼。
如果用戶(hù)不使用調入文件,而是使用讀母片的方式燒錄,并且無(wú)動(dòng)態(tài)數據,則可以不考慮ECC算法,因為母片中的備用區已計算好ECC,直接將母片的備用區拷貝至其他芯片即可。
壞塊處理策略定義了在遇到壞塊時(shí)算法應該如何處理,基本的壞塊處理策略有:跳過(guò)壞塊、替換表(預留塊區Reserve BlockArea,RBA)等等。
硬拷貝其實(shí)就是遇到壞塊什么都不處理,不管好塊還是壞塊直接燒寫(xiě),即使校驗數據不一致也不報錯;
跳過(guò)壞塊就是遇到壞塊跳到下一個(gè)好塊燒;
就是預留一些塊作為保留塊,是用于替換壞塊用,當遇到壞塊時(shí),在保留區中選一個(gè)塊來(lái)替換,將原來(lái)寫(xiě)到壞塊的數據寫(xiě)到替換塊中。
其實(shí)就是使用跳過(guò)壞塊,然后在Nand閃存指定位置寫(xiě)入一個(gè)壞塊表(Bad block table),下圖是BBT的結構圖。