專利名稱:一種NandFlash壞塊管理方法
技術(shù)領(lǐng)域:
本發(fā)明屬于存儲(chǔ)器領(lǐng)域,特別涉及一種NandFlash壞塊管理方法。
背景技術(shù):
NandFlash是Flash內(nèi)存的一種,其內(nèi)部采用非線性宏單元模式,為固態(tài)大容量?jī)?nèi)存的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案。NandFlash存儲(chǔ)器具有容量較大,改寫速度快等優(yōu)點(diǎn),適用于大量數(shù)據(jù)的存儲(chǔ),因而在業(yè)界得到了越來(lái)越廣泛的應(yīng)用,如嵌入式產(chǎn)品中包括數(shù)碼相機(jī)、MP3隨身聽(tīng)記憶卡、體積小巧的U盤等。NandFlash存在在初次使用時(shí)就存在壞塊的可能性,并且在使用過(guò)程中也會(huì)產(chǎn)生壞塊,目前采用建立映射表的方法管理NandFlash的壞塊。發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中發(fā)現(xiàn),現(xiàn)有技術(shù)中至少存在以下缺陷直接建立映 射表的方法占用內(nèi)存較大,且隨著NandFlash容量的增加占用的內(nèi)存容量也會(huì)成倍的增加。
發(fā)明內(nèi)容
本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的缺陷,提出一種NandFlash壞塊管理方法。本發(fā)明方法是通過(guò)下述技術(shù)方案實(shí)現(xiàn)的一種NandFlash壞塊管理方法,其基本實(shí)施過(guò)程如下步驟A、檢查初始?jí)膲K掃描標(biāo)志是否置位,是則執(zhí)行步驟B,否則進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待初始?jí)膲K掃描完成后將所述初始?jí)膲K掃描標(biāo)志置位,執(zhí)行步驟B ;步驟B :創(chuàng)建位圖表,將所述位圖表中的全部數(shù)據(jù)位的值置為第一預(yù)設(shè)值,讀取所述壞塊替換區(qū)中的記錄,根據(jù)所述記錄將所述位圖表中與各壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值進(jìn)行位圖標(biāo)記,待位圖標(biāo)記完成后等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C;步驟C :通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊,是則查找所述壞塊替換區(qū)中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的記錄,得到當(dāng)前塊的替換塊,對(duì)所述替換塊進(jìn)行操作,執(zhí)行步驟D,否則對(duì)當(dāng)前塊進(jìn)行操作,執(zhí)行步驟D ;步驟D :判斷操作過(guò)程中是否出現(xiàn)新壞塊,是則執(zhí)行步驟E,否則提示操作成功,進(jìn)程結(jié)束;步驟E :為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),將所述位圖表中與所述新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,對(duì)所述新壞塊的替換塊進(jìn)行操作,返回執(zhí)行步驟D。其中,所述創(chuàng)建位圖表具體為根據(jù)NandFlash中塊的數(shù)量創(chuàng)建位圖表,所述位圖表中的bit數(shù)為NandFlash中塊的數(shù)量的一倍或多倍。所述檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值之前包括判斷所述塊操作請(qǐng)求涉及的塊號(hào)是否合法;相應(yīng)地,若合法則檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,若不合法則提示塊號(hào)不合法,操作失?。黄渲?,若所述NandFlash中包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)合法,若所述NandFlash中不包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)不合法。所述進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待掃描完成后將所述初始?jí)膲K掃描標(biāo)志置位具體包括①定位到NandFlash的第一個(gè)塊; ②判斷當(dāng)前塊的OOB (Out of Band)區(qū)中是否有壞塊標(biāo)志,是則執(zhí)行③,否則執(zhí)行
步驟⑥;③檢查所述壞塊替換區(qū)是否已滿,是則提示壞塊替換區(qū)已滿,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C,否則執(zhí)行④;④判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行,否則提示無(wú)可用替換塊,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C ;⑤判斷當(dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行④,否則將當(dāng)前塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入所述壞塊替換區(qū),執(zhí)行⑥;⑥判斷是否還有未掃描的塊,是則定位到下一個(gè)塊,返回執(zhí)行②,否則掃描完成,將所述初始?jí)膲K掃描標(biāo)志置位;相應(yīng)地,步驟C替換為檢查所述NandFlash不可用標(biāo)志是否置位,是則提示NandFlash不可用,操作失敗,進(jìn)程結(jié)束,否則通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊,若是壞塊則查找所述壞塊替換區(qū)中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的記錄,得到當(dāng)前塊的替換塊,對(duì)所述替換塊進(jìn)行操作,執(zhí)行步驟D,若不是壞塊則對(duì)當(dāng)前塊進(jìn)行操作,執(zhí)行步驟D。所述通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊具體為檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,若是則所述塊操作請(qǐng)求涉及的塊不為壞塊,若不是則所述塊操作請(qǐng)求涉及的塊為壞塊。所述讀取所述壞塊替換區(qū)中的記錄,根據(jù)所述記錄將所述位圖表中與壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值進(jìn)行位圖標(biāo)記具體包括①判斷所述壞塊替換區(qū)是否有未掃描的記錄,是則執(zhí)行②,否則位圖標(biāo)記完成;③讀取當(dāng)前記錄中的壞塊塊號(hào),將所述位圖表中與所述壞塊塊號(hào)對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,執(zhí)行③;③判斷所述壞塊替換區(qū)中是否還有未掃描的記錄,是則將當(dāng)前記錄的下一記錄作為當(dāng)前記錄,返回執(zhí)行②,否則位圖標(biāo)記完成。
所述為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)具體包括①檢查所述壞塊替換區(qū)是否已滿,是則提示壞塊替換區(qū)已滿,操作失敗,否則執(zhí)行②;③判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行③,否則提示無(wú)可用替換塊,操作失敗;③判斷當(dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行②,否則將新壞塊塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入所述壞塊替換區(qū)。所述為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)之前包括判斷所述新壞塊是否為某壞塊的替換塊;相應(yīng)地,若是則為所述新壞塊尋找替換塊,并修改所述壞塊替換區(qū)中的相應(yīng)記錄,若不是則為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)?!?br>
所述為所述新壞塊尋找替換塊,并修改所述壞塊替換區(qū)中的相應(yīng)記錄具體包括①判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行②,否則提示無(wú)可用替換塊,操作失?。虎谂袛喈?dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行①,否則將所述壞塊替換區(qū)中與所述某壞塊對(duì)應(yīng)的記錄中的替換塊塊號(hào)更新為當(dāng)前可用替換塊塊號(hào)。本發(fā)明方法的有益效果在于智能化定位刻字區(qū)域,生產(chǎn)效率高,通用性較強(qiáng),對(duì)光環(huán)境也有較強(qiáng)的適應(yīng)性。
為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本法明實(shí)施例一提供的一種NandFlash壞塊管理的方法流程圖;圖2為本發(fā)明實(shí)施例二提供的一種NandFlash壞塊管理的方法中初始?jí)膲K掃描和位圖創(chuàng)建及標(biāo)記的方法流程圖;圖3為本發(fā)明實(shí)施例二提供的一種NandFlash壞塊管理的方法中塊操作以及位圖更新的方法流程圖;圖4為本發(fā)明實(shí)施例三提供的一種NandFlash壞塊管理的方法中塊操作以及位圖更新的方法流程圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。實(shí)施例一參見(jiàn)圖1,本發(fā)明實(shí)施例提供了一種NandFlash壞塊管理方法,所述方法具體包括步驟SI :檢查初始?jí)膲K掃描標(biāo)志是否置位,是則直接執(zhí)行步驟S3,否則執(zhí)行步驟S2 ;步驟S2 :進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待初始?jí)膲K掃描完成后將所述初始?jí)膲K掃描標(biāo)志置位;步驟S3 :創(chuàng)建位圖表,將所述位圖表中的全部數(shù)據(jù)位的值置為第一預(yù)設(shè)值,讀取所述壞塊替換區(qū)中的記錄,根據(jù)所述記錄將所述位圖表中與各壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值進(jìn)行位圖標(biāo)記,待位圖標(biāo)記完成后等待接收塊操作請(qǐng)求;其中,所述創(chuàng)建位圖表具體為根據(jù)NandFlash中塊的數(shù)量創(chuàng)建位圖表,優(yōu)選地,在本實(shí)施例中,所述位圖表中每個(gè)bit表示NandFlash中一個(gè)塊的狀態(tài),顯而易見(jiàn)的是用I個(gè)bit表示NandFlash中I個(gè)塊的狀態(tài)是最節(jié)省內(nèi)存空間的方案,本發(fā)明并不限定用于表示NandFlash中I個(gè)塊所采用的bit數(shù)。步驟S4 :當(dāng)接收到塊操作請(qǐng)求時(shí)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,是則執(zhí)行步驟S5,否則執(zhí)行步驟S6 ;優(yōu)選地,在本實(shí)施例中,當(dāng)接收到塊操作請(qǐng)求時(shí),在檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值之前還包括判斷所述塊操作請(qǐng)求涉及的塊號(hào)是否合法;相應(yīng)地,若合法則檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,若不合法則提示塊號(hào)不合法,操作失敗;其中,若所述NandFlash中包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)合法,若所述NandFlash中不包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)不合法。步驟S5 :對(duì)當(dāng)前塊進(jìn)行操作,執(zhí)行步驟S7 ;步驟S6 :查找所述壞塊替換區(qū)中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的記錄,得到當(dāng)前塊的替換塊,對(duì)所述替換塊進(jìn)行操作,執(zhí)行步驟S7 ;步驟S7 :判斷操作過(guò)程中是否出現(xiàn)新壞塊,是則執(zhí)行步驟S8,否則提示操作成功,進(jìn)程結(jié)束;步驟S8 :為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),將所述位圖表中與所述新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,對(duì)所述新壞塊的替換塊進(jìn)行操作,返回執(zhí)行步驟S7。具體地,在本實(shí)施例中,所述為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)之前還可以包括判斷所述新壞塊是否為某壞塊的替換塊;相應(yīng)地,若是則為所述新壞塊尋找替換塊,并修改所述壞塊替換區(qū)中的相應(yīng)記錄,若不是則為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)。實(shí)施例二本發(fā)明實(shí)施例提供了一種NandFlash壞塊管理方法,所述方法具體包括初始?jí)膲K掃描、位圖創(chuàng)建及標(biāo)記、塊操作以及位圖更新四個(gè)部分,本實(shí)施例分別將初始?jí)膲K掃描和位圖創(chuàng)建及標(biāo)記作為一個(gè)過(guò)程、將塊操作和位圖更新作為一個(gè)過(guò)程進(jìn)行闡述。參見(jiàn)圖2,初始化壞塊掃描和位圖創(chuàng)建及標(biāo)記過(guò)程包括以下步驟步驟101 檢查初始?jí)膲K掃描標(biāo)志是否置位,是則執(zhí)行步驟114,否則執(zhí)行步驟102 ;其中,所述初始?jí)膲K掃描標(biāo)志用于標(biāo)識(shí)初始?jí)膲K掃描是否完成,NandFlash出廠時(shí)初始掃描標(biāo)志處于復(fù)位狀態(tài),當(dāng)初始?jí)膲K掃描完成時(shí)置位。步驟102 :定位到NandFlash中的第一個(gè)塊;步驟103 :判斷當(dāng)前塊的OOB區(qū)中是否有壞塊標(biāo)志,是則執(zhí)行步驟104,否則執(zhí)行步驟 111 ;NandFlash每一頁(yè)大小為512+16 (或256+8、2048+64)字節(jié),其中512字節(jié)為存儲(chǔ)數(shù)據(jù)的區(qū)域,16字節(jié)稱為OOB (Out of Band)區(qū),通常在OOB區(qū)存放壞塊標(biāo)記以及簽名512字節(jié)的ECC校驗(yàn)碼等。步驟104 :檢查壞塊替換區(qū)是否已滿,是則執(zhí)行步驟105,否則執(zhí)行步驟106 ;
步驟105 :提示壞塊替換區(qū)已滿,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,執(zhí)行步驟201 ;其中,所述NandFlash不可用標(biāo)志用于標(biāo)識(shí)NandFlash是否可用,NandFlash出廠時(shí)NandFlash不可用標(biāo)志處于復(fù)位狀態(tài),當(dāng)檢測(cè)出NandFlash中壞塊過(guò)多時(shí)將其置位。步驟106 :判斷是否還有可用替換塊,是則執(zhí)行步驟108,否則執(zhí)行步驟107 ;通常NandFlash中用其7%到10%數(shù)量的塊作為替換塊。步驟107 :提示無(wú)可用替換塊,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,執(zhí)行步驟201 ;步驟108 :尋找當(dāng)前可用替換塊;步驟109 :判斷當(dāng)前可用替換塊的OOB區(qū)是否有壞塊標(biāo)志,是則返回執(zhí)行步驟106,否則執(zhí)行步驟110 ;步驟110 :將當(dāng)前塊塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入壞塊替換區(qū);具體地,壞塊替換區(qū)中的記錄的結(jié)構(gòu)可以為壞塊塊號(hào)(當(dāng)前塊塊號(hào)號(hào))替換塊塊號(hào),例如所述NandFlash的第3個(gè)塊為壞塊,其替換塊為所述NandFlash的第1000個(gè)塊,則壞塊替換區(qū)中關(guān)于所述NandFlash的第3個(gè)塊的記錄為0x0003 0x03E8。步驟111 :判斷NandFlash中是否還有未掃描的塊,是則執(zhí)行步驟112,否則執(zhí)行步驟 113 ;步驟112 :定位到當(dāng)前塊的下一個(gè)塊,返回執(zhí)行步驟103 ;步驟113 :置位初始?jí)膲K掃描標(biāo)志,執(zhí)行步驟114 ;步驟114 :根據(jù)NandFlash中塊的數(shù)量創(chuàng)建位圖表,并將位圖表中的全部數(shù)據(jù)位的值置為第一預(yù)設(shè)值;為占用盡量少的內(nèi)存空間,優(yōu)選地,在本實(shí)施例中,所述位圖表中每個(gè)bit表不一個(gè)塊的狀態(tài),即每個(gè)字節(jié)可以表示8個(gè)塊的狀態(tài),例如,若所述NandFlash共有1024個(gè)塊,則所述位圖表的大小為1024bit,即128字節(jié);所述第一預(yù)設(shè)值為與下文的第二預(yù)設(shè)值不相同的數(shù)值即可,具體地,在本實(shí)施例中,所述第一預(yù)設(shè)值為I,例如,位圖表中用于表不NandFlash中前8個(gè)塊(第O個(gè)塊至第7個(gè)塊)狀態(tài)的字節(jié)數(shù)據(jù),在本步驟中被置為1111 1111。步驟115 :判斷壞塊替換區(qū)中是否有未掃描的記錄,是則執(zhí)行步驟116,否則執(zhí)行步驟119 ;
步驟116 :讀取當(dāng)前記錄中的壞塊塊號(hào),將位圖表中對(duì)應(yīng)數(shù)據(jù)位的值置為第二預(yù)設(shè)值;具體地,所述第二預(yù)設(shè)值為與所述第一預(yù)設(shè)值不相同的數(shù)值即可,具體地,在本實(shí)施例中,所述第二預(yù)設(shè)值為0,例如,若當(dāng)前記錄為0x0003 0x03E8,則讀取到的壞塊塊號(hào)為0x0003,將位圖表中第4bit的值置為0,相應(yīng)地,位圖表中用于表示NandFlash中前8個(gè)塊(第O個(gè)塊至第7個(gè)塊)狀態(tài)的字節(jié)數(shù)據(jù)變?yōu)?110 1111。步驟117 :判斷壞塊替換區(qū)中是否還有未掃描的記錄,是則執(zhí)行步驟118,否則執(zhí)行步驟119 ;步驟118 :將當(dāng)前記錄的下一記錄作為當(dāng)前記錄,返回執(zhí)行步驟116 ;步驟119 :提示位圖標(biāo)記完成,等待接收塊操作請(qǐng)求,執(zhí)行步驟201 ;參見(jiàn)圖3,塊操作和位圖更新過(guò)程包括以下步驟 步驟201 :當(dāng)接收到塊操作請(qǐng)求時(shí)檢查NandFlash不可用標(biāo)志是否置位,是則提示NandFlash不可用,操作失敗,否則執(zhí)行步驟202 ;步驟202 :判斷所述塊操作請(qǐng)求涉及的塊號(hào)是否合法,是則執(zhí)行步驟204,否則執(zhí)行步驟203 ;具體地,若所述NandFlash中包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)合法,若所述NandFlash中不包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)不合法。步驟203 :提示塊號(hào)不合法,操作失?。徊襟E204:檢查位圖表中當(dāng)前塊對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,是則執(zhí)行步驟205,否則執(zhí)行步驟206 ;例如,若所述操作請(qǐng)求涉及的塊號(hào)為0x0003,則檢查位圖表中第I字節(jié)第4bit的值,具體地,在本實(shí)施例中為檢查位圖表中第I字節(jié)第4bit的值是否為I。步驟205 :對(duì)當(dāng)前塊進(jìn)行相應(yīng)操作,執(zhí)行步驟208 ;具體地,所述操作包括向當(dāng)前塊中寫入數(shù)據(jù)、擦除當(dāng)前塊中的數(shù)據(jù)等,在此不做限定。步驟206 :查找壞塊替換區(qū)中壞塊塊號(hào)為當(dāng)前塊塊號(hào)的記錄,讀取記錄中的替換塊塊號(hào);步驟207 :對(duì)替換塊進(jìn)行相應(yīng)操作;具體地,對(duì)替換塊進(jìn)行的操作即為原本要對(duì)當(dāng)前塊進(jìn)行的操作,在此不再贅述。步驟208:判斷執(zhí)行操作的過(guò)程中是否出現(xiàn)新壞塊,是則執(zhí)行步驟210,否則執(zhí)行步驟209 ;步驟209 :提示操作成功;步驟210 :判斷壞塊替換區(qū)是否已滿,是則執(zhí)行步驟211,否則執(zhí)行步驟212 ;步驟211 :提示壞塊替換區(qū)已滿,操作失?。徊襟E212 :判斷是否還有可用替換塊,是則執(zhí)行步驟214,否則執(zhí)行步驟213 ;步驟213 :提示無(wú)可用替換塊,操作失??;步驟214 :尋找當(dāng)前可用替換塊;步驟215 :判斷當(dāng)前可用替換塊的OOB區(qū)是否有壞塊標(biāo)志,是則返回執(zhí)行步驟212,否則執(zhí)行步驟216;
步驟216 :將新壞塊塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入壞塊替換區(qū);步驟217 :將位圖表中與新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值;步驟218 :返回當(dāng)前可用替換塊塊號(hào),返回執(zhí)行步驟207。實(shí)施例三本發(fā)明實(shí)施例提供了一種NandFlash壞塊管理方法,所述方法具體包括初始?jí)膲K掃描、位圖創(chuàng)建及標(biāo)記、塊操作以及位圖更新四個(gè)部分,本實(shí)施例分別將初始?jí)膲K掃描和位圖創(chuàng)建及標(biāo)記作為一個(gè)過(guò)程、將塊操作和位圖更新作為一個(gè)過(guò)程進(jìn)行闡述。初始?jí)膲K掃描和位圖創(chuàng)建及標(biāo)記過(guò)程與實(shí)施例二中方法相同,在此不再贅述;參見(jiàn)圖4,塊操作和位圖更新過(guò)程包括以下步驟 步驟301 :當(dāng)接收到塊操作請(qǐng)求時(shí)檢查NandFlash不可用標(biāo)志是否置位,是則提示NandFlash不可用,操作失敗,否則執(zhí)行步驟302 ;步驟302 :判斷所述塊操作請(qǐng)求涉及的塊號(hào)是否合法,是則執(zhí)行步驟304,否則執(zhí)行步驟303 ;具體地,若所述NandFlash中包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)合法,若所述NandFlash中不包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)不合法。步驟303 :提示塊號(hào)不合法,操作失敗;步驟304:檢查位圖表中當(dāng)前塊對(duì)應(yīng)數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,是則執(zhí)行步驟305,否則執(zhí)行步驟306 ;例如,若所述操作請(qǐng)求涉及的塊號(hào)為0x0013,則檢查位圖表中第20bit,即第3字節(jié)第4bit的值,具體地,在本實(shí)施例中為檢查位圖表中第20bit的值是否為I。步驟305 :對(duì)當(dāng)前塊進(jìn)行相應(yīng)操作,執(zhí)行步驟308 ;具體地,所述操作包括向當(dāng)前塊中寫入數(shù)據(jù)、擦除當(dāng)前塊中的數(shù)據(jù)等,在此不做限定。步驟306 :查找壞塊替換區(qū)中壞塊塊號(hào)為當(dāng)前塊塊號(hào)的記錄,讀取記錄中的替換塊塊號(hào);步驟307 :對(duì)替換塊進(jìn)行相應(yīng)操作;具體地,對(duì)替換塊進(jìn)行的操作即為原本要對(duì)當(dāng)前塊進(jìn)行的操作,在此不再贅述。步驟308:判斷執(zhí)行操作的過(guò)程中是否出現(xiàn)新壞塊,是則執(zhí)行步驟310,否則執(zhí)行步驟309 ;步驟309 :提示操作成功,進(jìn)程結(jié)束;步驟310:判斷出現(xiàn)的壞塊是否為某壞塊的替換塊,是則執(zhí)行步驟320,否則執(zhí)行步驟311 ;步驟311 :判斷壞塊替換區(qū)是否已滿,是則執(zhí)行步驟312,否則執(zhí)行步驟313 ;步驟312 :提示壞塊替換區(qū)已滿,操作失?。徊襟E313 :判斷是否還有可用替換塊,是則執(zhí)行步驟315,否則執(zhí)行步驟314 ;步驟314 :提示無(wú)可用替換塊,操作失?。徊襟E315 :尋找當(dāng)前可用替換塊;步驟316:判斷當(dāng)前可用替換塊的OOB區(qū)是否有壞塊標(biāo)志,是則返回執(zhí)行步驟313,否則執(zhí)行步驟317;
步驟317 :將當(dāng)前壞塊塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入壞塊替換區(qū);步驟318 :將位圖表中與新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值;步驟319 :返回當(dāng)前可用替換塊塊號(hào),返回執(zhí)行步驟307 ;步驟320 :判斷是否還有可用替換塊,是則執(zhí)行步驟322,否則執(zhí)行步驟321 ;步驟321 :提示無(wú)可用替換塊,操作失?。徊襟E322 :尋找當(dāng)前可用替換塊;步驟323 :判斷當(dāng)前可用替換塊的OOB區(qū)是否有壞塊標(biāo)志,是則返回執(zhí)行步驟320,否則執(zhí)行步驟324 ;
步驟324 :用當(dāng)前可用替換塊塊號(hào)替換壞塊替換區(qū)中替換塊塊號(hào)為新壞塊塊號(hào)的記錄中的替換塊塊號(hào);步驟325 :將位圖表中與新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,返回執(zhí)行步驟 319。本實(shí)施例提供的塊操作和位圖更新方法與實(shí)施例一中提供的方法間的區(qū)別在于實(shí)施例一中提供的方法在執(zhí)行操作過(guò)程中出現(xiàn)壞塊時(shí)無(wú)論出現(xiàn)的壞塊是否為某個(gè)塊的替換塊均根據(jù)當(dāng)前壞塊生成一條新的記錄,本實(shí)施例中提供的方法在執(zhí)行操作過(guò)程中出現(xiàn)的壞塊為某個(gè)塊的替換塊時(shí)不生成新的記錄,只將壞塊存儲(chǔ)區(qū)中所述某個(gè)塊相關(guān)的記錄中的替換塊塊號(hào)更新為新的可用替換塊塊號(hào),當(dāng)執(zhí)行操作過(guò)程中出現(xiàn)的壞塊不為某個(gè)塊的替換塊時(shí)才根據(jù)當(dāng)前壞塊生成新的記錄。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種NandFlash壞塊管理方法,其特征在于包括 步驟A、檢查初始?jí)膲K掃描標(biāo)志是否置位,是則執(zhí)行步驟B,否則進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待初始?jí)膲K掃描完成后將所述初始?jí)膲K掃描標(biāo)志置位,執(zhí)行步驟B ; 步驟B :創(chuàng)建位圖表,將所述位圖表中的全部數(shù)據(jù)位的值置為第一預(yù)設(shè)值,讀取所述壞塊替換區(qū)中的記錄,根據(jù)所述記錄將所述位圖表中與各壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值進(jìn)行位圖標(biāo)記,待位圖標(biāo)記完成后等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C ; 步驟C :通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊,是則查找所述壞塊替換區(qū)中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的記錄,得到當(dāng)前塊的替換塊,對(duì)所述替換塊進(jìn)行操作,執(zhí)行步驟D,否則對(duì)當(dāng)前塊進(jìn)行操作,執(zhí)行步驟D ; 步驟D :判斷操作過(guò)程中是否出現(xiàn)新壞塊,是則執(zhí)行步驟E,否則提示操作成功,進(jìn)程結(jié)束; 步驟E :為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),將所述位圖表中與所述新壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,對(duì)所述新壞塊的替換塊進(jìn)行操作,返回執(zhí)行步驟D。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述創(chuàng)建位圖表具體為 根據(jù)NandFlash中塊的數(shù)量創(chuàng)建位圖表,所述位圖表中的bit數(shù)為NandFlash中塊的數(shù)量的一倍或多倍。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值之前包括判斷所述塊操作請(qǐng)求涉及的塊號(hào)是否合法; 相應(yīng)地,若合法則檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,若不合法則提示塊號(hào)不合法,操作失??;其中,若所述NandFlash中包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)合法,若所述NandFlash中不包含所述操作請(qǐng)求涉及的塊號(hào)則所述塊號(hào)不合法。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待掃描完成后將所述初始?jí)膲K掃描標(biāo)志置位具體包括 ①定位到NandFlash的第一個(gè)塊; ②判斷當(dāng)前塊的OOB(Out of Band)區(qū)中是否有壞塊標(biāo)志,是則執(zhí)行③,否則執(zhí)行步驟⑥; ③檢查所述壞塊替換區(qū)是否已滿,是則提示壞塊替換區(qū)已滿,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C,否則執(zhí)行④; ④判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行⑤,否則提示無(wú)可用替換塊,將NandFlash不可用標(biāo)志置位,等待接收塊操作請(qǐng)求,當(dāng)接收到塊操作請(qǐng)求時(shí)執(zhí)行步驟C ; ⑤判斷當(dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行④,否則將當(dāng)前塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入所述壞塊替換區(qū),執(zhí)行⑥; ⑥判斷是否還有未掃描的塊,是則定位到下一個(gè)塊,返回執(zhí)行②,否則掃描完成,將所述初始?jí)膲K掃描標(biāo)志直位; 相應(yīng)地,步驟C替換為 檢查所述NandFlash不可用標(biāo)志是否置位,是則提示NandFlash不可用,操作失敗,進(jìn)程結(jié)束,否則通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊,若是壞塊則查找所述壞塊替換區(qū)中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的記錄,得到當(dāng)前塊的替換塊,對(duì)所述替換塊進(jìn)行操作,執(zhí)行步驟D,若不是壞塊則對(duì)當(dāng)前塊進(jìn)行操作,執(zhí)行步驟D。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述通過(guò)檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的標(biāo)記判斷所述塊操作請(qǐng)求涉及的塊是否為壞塊具體為 檢查所述位圖表中與所述塊操作請(qǐng)求涉及的塊號(hào)相對(duì)應(yīng)的數(shù)據(jù)位的值是否為第一預(yù)設(shè)值,若是則所述塊操作請(qǐng)求涉及的塊不為壞塊,若不是則所述塊操作請(qǐng)求涉及的塊為壞塊。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述讀取所述壞塊替換區(qū)中的記錄,根據(jù)所述記錄將所述位圖表中與壞塊對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值進(jìn)行位圖標(biāo)記具體包括 ①判斷所述壞塊替換區(qū)是否有未掃描的記錄,是則執(zhí)行②,否則位圖標(biāo)記完成; ②讀取當(dāng)前記錄中的壞塊塊號(hào),將所述位圖表中與所述壞塊塊號(hào)對(duì)應(yīng)的數(shù)據(jù)位的值置為第二預(yù)設(shè)值,執(zhí)行③; ③判斷所述壞塊替換區(qū)中是否還有未掃描的記錄,是則將當(dāng)前記錄的下一記錄作為當(dāng)前記錄,返回執(zhí)行②,否則位圖標(biāo)記完成。
7.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)具體包括 ①檢查所述壞塊替換區(qū)是否已滿,是則提示壞塊替換區(qū)已滿,操作失敗,否則執(zhí)行②; ②判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行③,否則提示無(wú)可用替換塊,操作失敗; ③判斷當(dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行②,否則將新壞塊塊號(hào)和當(dāng)前可用替換塊塊號(hào)作為一條記錄寫入所述壞塊替換區(qū)。
8.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)之前包括判斷所述新壞塊是否為某壞塊的替換塊; 相應(yīng)地,若是則為所述新壞塊尋找替換塊,并修改所述壞塊替換區(qū)中的相應(yīng)記錄,若不是則為所述新壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū)。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述為所述新壞塊尋找替換塊,并修改所述壞塊替換區(qū)中的相應(yīng)記錄具體包括 ①判斷是否還有可用替換塊,是則尋找當(dāng)前可用替換塊,執(zhí)行②,否則提示無(wú)可用替換塊,操作失??; ②判斷當(dāng)前可用替換塊的OOB區(qū)中是否有壞塊標(biāo)志,是則返回執(zhí)行①,否則將所述壞塊替換區(qū)中與所述某壞塊對(duì)應(yīng)的記錄中的替換塊塊號(hào)更新為當(dāng)前可用替換塊塊號(hào)。
全文摘要
本發(fā)明公開(kāi)一種NandFlash壞塊管理方法,屬于存儲(chǔ)器領(lǐng)域,具體包括進(jìn)行初始?jí)膲K掃描,為掃描得到的壞塊尋找替換塊,并生成相應(yīng)記錄寫入壞塊替換區(qū),待初始?jí)膲K掃描完成后創(chuàng)建位圖表,根據(jù)所述壞塊替換區(qū)中的記錄進(jìn)行位圖標(biāo)記,在操作過(guò)程中,當(dāng)接收到塊操作請(qǐng)求時(shí)根據(jù)位圖中的標(biāo)記判斷塊操作請(qǐng)求涉及的塊是否為壞塊,是則尋找其替換塊并對(duì)其替換塊進(jìn)行操作,否則對(duì)當(dāng)前塊進(jìn)行操作,若操作過(guò)程中出現(xiàn)壞塊,則添加或修改壞塊記錄中的記錄,并在位圖表中增加對(duì)新出現(xiàn)的壞塊進(jìn)行的標(biāo)記。其有益效果在于在占用內(nèi)存不大的情況下支持大容量NandFlash芯片并且提高NandFlash芯片的訪問(wèn)速度。
文檔編號(hào)G06F12/06GK102929795SQ20121042908
公開(kāi)日2013年2月13日 申請(qǐng)日期2012年10月31日 優(yōu)先權(quán)日2012年10月31日
發(fā)明者陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司