寫入數據,如果發生寫入數據失敗,從而會造成NAND閃存設備無法正常引導啟動。因此,索引文件的更新方式若采用BBT的擦除重寫的更新方式進行更新會存在重大缺陷。為此本發明在更新索引文件時提出三種方式,以在對BBT發生壞塊時進行壞塊處理時保證NAND閃存設備可以正常引導啟動。
[0050]由于BBT區的壞塊替換處理與數據區域或替換區域發生壞塊時的壞塊處理方法大致相同,其相同之處不在贅述,下面將著重對不同之處也即本發明實施例的索引文件的更新方式進行說明。
[0051]圖4至圖6為本發明實施例的BBT區發生壞塊時的三種壞塊替換處理示意圖及流程圖。
[0052]在初始化創建索引文件時,將索引文件的標識(flag)置為有效(通常用“O”表示有效)JfBBT區所在塊的地址寫入第一個索引條目(Item)索引文件中其他的條目均保持未使用時的狀態“OxFFFF”。
[0053]如圖4所示為本發明一實施例的索引文件更新示意圖。若使用替換區域中的替換塊替換BBT區所在的壞塊,還需對應地同步更新索引文件,也即在索引文件中有效條目的下一個Item增加替換后的BBT區所在塊的地址,其中該有效條目是指數據內容為“OxFFFF”的Item的前一個數據內容不為“OxFFFF”的Item。
[0054]具體地,請同時參考圖1,索引文件的第一個Item值為BBT所在塊的初始物理地址,也即為第二個塊Blockl,的物理地址“0x01”,當BBT區發生壞塊且BBT區的替換塊的地址為“n+1”時,更新索引文件,例如,可以采用NAND的隨機寫入函數功能將替換后的BBT區所在塊的地址“n+1”寫入有效條目的后一個條目。而若檢測發現塊n+1損壞時,查找另一替換塊,例如塊地址為“n+2”的替換塊,若地址為“n+2”的塊為好塊,則使用地址為“n+2”的替換塊替換BBT區所在的壞塊,將替換后的BBT區所在塊的地址“n+2”寫入有效條目的后一個條目。
[0055]如圖5所示為本發明一實施例的索引文件更新示意圖,其與圖4所示的實施例的索引文件更新方法大致相同,所不同的是,在索引文件中設計一個位索引表(bit map),該bitmap包括多個位(bit),且其中的bit數量大于或等于索引文件中的Item條目數量,每個bit表示一個索引位置,為“O”的最高bit為有效的索引bit,表示最新的索引文件的索引條目在索引文件的Item里面的偏移位置。在進行索引文件更新時使用NAND的隨機寫入函數功能在最新的Item的下一個位置增加新的索引文件的Item,并修改bit map中有效的索引bit的后一 bit為“O”即可,其中,有效的索引bit的后一 bit是指比有效的索引bit高一位的那一個bit,例如,若當前有效索引為bit5,貝U有效索引bit的后一 bit是指bit6。
[0056]具體地,在索引文件中設置一個bit map,bit map以bit為單位,共有n+1個bit,bitO表示最低位、bitn表示最高位,且bitCKbitlH.bitn的位次逐漸增高,其中n+1大于或等于BBT Index中的Item數,且bit0、bitl、bit2…依次對應BBT Index中的第一個Item、第二個Item、第三個Itenr..,初始時,bitmap中除第一個bit外的多個bit初始時均為“I”,且bit map中的每一位相應地對應索引文件中的相對于BBT區初始存儲地址的一個偏移位置,初始存儲地址存儲原始BBT區,第一個為bitO為“0”,與BBT區的原始地址相對應,表示原始BBT區存儲于初始存儲地址,沒有地址偏移,當該BBT區所在塊損壞后,將新的BBT區的塊地址存放到索引文件中存儲初始存儲地址的Item的下一個Item中,同時將bit map中代表該地址與初始地址偏移位置的bit寫為“0”,以此類推。因此,通過查找bit map中的最高bit為“O”所在位置可得到BBT區的塊地址相對于BBT區的初始存儲塊地址的偏移位置,該偏移位置表明了索引文件中的Item的偏移,為此,根據該偏移位置就可查找到對應的索引文件的Item,從而可通過該對應的Item得到當前的BBT區所在塊的地址。
[0057]如圖6所示為本發明一實施例的索引文件更新示意圖。在更新索引文件中的Item時采用亂序的形式進行Item的存儲,在這種處理方式下,BBT區每次替換時所選擇的塊地址都需要大于原BBT區的塊地址,在索引文件中更新Item時只需要查找未使用的Item,也即Item中的內容為“OxFFFF”的Item,并修改該Item為BBT區所在的最新的地址即可,可以使用例如NAND隨機寫入函數對該Item進行修改。在搜索最新有效索引條目時,只需要在Item中搜索除“OxFFFF”外數字最大的即為最新有效索引條目,該最新有效索引條目可表明最新的BBT區所在塊的地址。但本發明不以此為限,在搜索最新有效索引條目時,也可以在Item中搜索數字最小的值,這種情況下BBT區每次替換選擇的塊地址都需要小于原BBT區所存放的塊地址。
[0058]在各類使用NAND的產品中,特別是消費電子相關產品,由于用戶操作的隨意和程序異常的不可控性,整個系統在任何情況下均有可能出現斷電或者程序異常,如果這些異常發生在更新壞塊表,但還沒有完成更新時,將對壞塊表數據造成損壞,導致整個系統在下一次上電時由于找不到有效的壞塊表而產生崩潰。為了解決以上問題,本發明一實施例提出采用兩份壞塊表和兩份索引文件的方案。
[0059]本發明一實施例的壞塊替換處理方法米用兩份壞塊表,分別為原始壞塊表(OrigBBT)和備份壞塊表(Bak BBT),上述兩份表互為備份關系,分別存儲于原始BBT區和備份BBT區,原始BBT區和備份BBT區互為備份關系,在其中一張壞塊表發生損壞時,可以使用另一張壞塊表進行恢復并為NAND閃存設備提供有效的數據支持,且該原始壞塊表和備份壞塊表的結構和功能可與上文所述的壞塊表的結構和功能相同。對應地,分別為原始壞塊表和備份壞塊表建立兩份索引文件,該兩份索引文件分別為原始BBT區的原始索引文件(Orig BBT Index)和備份BBT區的備份索引文件(Bak BBTIndex),上述兩份索引文件均存儲于BlockO中,當BBT區所在的塊發生壞塊時,需要將BBT區所在的壞塊映射至替換區域中的好塊,并通過該原始索引文件和備份索引文件分別記錄BBT區和備份BBT區所在塊的地址。
[0060]圖7為本發明一實施例的NAND閃存設備結構示意圖,與圖1的NAND閃存設備的結構大致相同,其相同之處在此不再贅述,其不同之處在于,本發明一實施例的NAND閃存設備的設備具有兩個BBT區,分別為原始BBT區和備份BBT區,其中,原始壞塊表存儲于原始BBT區,備份壞塊表存儲于備份BBT區,且BlockO中存儲兩張索引文件,分別為原始索引文件和備份索引文件,但本發明并不以此為限,索引文件也可存儲于除BlockO之外的其他指定的塊中。其中,兩個BBT區不限于地址相鄰,原始BBT區和備份BBT區所在的塊不限于位于第二個快blockl和第三個塊block2,還可以位于其他未被占用的可用區域,且該原始BBT區和備份BBT區所在的塊不限于為一塊,根據實際應用情況,也可為多個塊。在發現原始BBT區和/或備份BBT區所在的塊發生壞損時,使用替換區域中的替換塊替換該壞塊,與此同時,需要同步對原始索引文件和備份索引文件進行更新,在更新其中一個索引文件時,應該先更新索引條目(Item),然后再更新其標識(flag),保證標識正確地反映BBT的有效性。
[0061]圖8為用于圖7的壞塊表和/或索引文件更新流程圖,壞塊表和/或索引文件的更新包括下述步驟:
[0062]S802:檢測所操作的塊是否為壞塊,以得到所述所操作的塊是否為壞塊的信息:。
[0063]其中,如果檢測到所操作的塊為好塊,則無需對所操作的塊進行替換,轉步驟S808。
[0064]S803:如果檢測到所操作的塊為壞塊,則檢測替換區域中的替換塊是否用完。
[0065]S804:若替換塊已經用完,則上報錯誤,彈出相應的報錯信息,替換操作失敗,轉步驟