被廣泛應(yīng)用于手機(jī)、平板等數(shù)碼設(shè)備中的Nand Flash由于工藝原因無(wú)法避免壞塊的存在,但是我們可以憑借高科技變廢為寶,將“壞塊”進(jìn)行有效的利用,從而滿足我們的應(yīng)用需求,讓壞塊不“壞”。
要想變廢為寶,有效利用壞塊。我們首先要弄明白什么是“壞塊”,做到知己知彼,才能為我所用。壞塊的特點(diǎn)是當(dāng)編程或者擦除這個(gè)塊時(shí),不能將某些位拉高,從而造成編程和塊擦除操作時(shí)的錯(cuò)誤,這種錯(cuò)誤可以通過(guò)狀態(tài)寄存器的值反映出來(lái)。這些無(wú)效塊無(wú)法確定編程時(shí)的狀態(tài),就是大家常說(shuō)的“壞塊”。那么這些“壞塊”是怎么產(chǎn)生的呢?
圖1 壞塊示意圖
由于工藝上的問(wèn)題,Nand Flash中不可避免的會(huì)出現(xiàn)出廠壞塊(出廠時(shí)允許存在2%數(shù)量的壞塊),同時(shí)在Nand Flash的使用過(guò)程中也會(huì)產(chǎn)生新的壞塊。Nand Flash每個(gè)塊的最大擦除次數(shù)大約為100萬(wàn)次,如果超過(guò)這個(gè)次數(shù),也會(huì)變成壞塊。除了上述情況之外,壞塊的產(chǎn)生原因還有很多,比如存儲(chǔ)單元錯(cuò)誤、地址線錯(cuò)誤等……
那么重點(diǎn)來(lái)了,既然不能完全地消除“壞塊”,那么我們可以選擇將它利用起來(lái),實(shí)現(xiàn)一些特殊且必要的功能。為什么說(shuō)能將壞塊“變廢為寶”呢?除了上文中介紹的幾種類型的壞塊,我們?cè)谝恍┨厥馇闆r下需要人為地將Nand Flash芯片的某些塊標(biāo)記為壞塊。比如某塊非常不穩(wěn)定以致超出了系統(tǒng)ECC的糾錯(cuò)范圍,這個(gè)時(shí)候需要將此塊標(biāo)記為壞塊;或者我們想驗(yàn)證燒寫方案的壞塊處理部分是否正確時(shí),也需要制作出一些壞塊以供測(cè)試驗(yàn)證;還有為了滿足某類系統(tǒng)的特性,需要制作指定的壞塊,比如我們一開始提到的UBI文件系統(tǒng)。這些特殊情況需要我們有目的性的設(shè)置指定壞塊,滿足相應(yīng)的需求。
清楚了什么是壞塊以及壞塊是怎么產(chǎn)生的,那么我們下面來(lái)看看怎么人為地設(shè)置壞塊,讓壞塊為我們所用,達(dá)到“變廢為寶”的目的
首先,我們要知道什么是芯片的“壞塊標(biāo)記位”(英文簡(jiǎn)稱BI)。對(duì)于不同的器件,壞塊標(biāo)志位不盡相同。通常對(duì)于512字節(jié)/頁(yè)的NandFlash芯片,壞塊標(biāo)記位在第0、1頁(yè)(或別的頁(yè))備用區(qū)的第5個(gè)字節(jié),對(duì)于2K字節(jié)/頁(yè)的芯片壞塊標(biāo)記位置在第0個(gè)字節(jié)。
圖2 壞塊標(biāo)記位
那么從原理上來(lái)說(shuō),我們只需要在芯片某塊的BI位置按照芯片手冊(cè)上的規(guī)定寫入特定的數(shù)值,就可以將該塊標(biāo)記為壞塊。大部分芯片的壞塊標(biāo)記值為“非0xff”即被認(rèn)為是壞塊,然而有些芯片是“0x00”才被認(rèn)為是壞塊,而且壞塊標(biāo)記所在頁(yè)也是變化的,所以為了統(tǒng)一,我們使用一個(gè)通用有效的方法:將整塊寫數(shù)值0x00。致遠(yuǎn)電子自主研發(fā)的6000F-PLUS編程器及配套的SmartPRO III軟件,可以很方便的完成壞塊的標(biāo)記。