專利名稱:在Nand閃存中生成動態(tài)分區(qū)信息的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實施例涉及計算機(jī)領(lǐng)域,更具體地,涉及在Nand閃存中生成動態(tài)分區(qū)信息的方法和裝置。
背景技術(shù):
Nand閃存是一種能夠進(jìn)行讀寫、擦除的存儲介質(zhì),其容量大、擦寫速度快,且具有價格低廉等優(yōu)勢,被廣泛應(yīng)用在機(jī)頂盒、數(shù)碼相機(jī)、手機(jī)、平板電腦等其他電子產(chǎn)品上,用來存放程序、參數(shù)、媒體數(shù)據(jù)等。而大多數(shù)產(chǎn)品采用的操作系統(tǒng)中,通過抽象設(shè)備訪問層,提供了一種例如MTD (MemoryTechnology Device,內(nèi)存技術(shù)設(shè)備)的系統(tǒng),MTD為該操作系統(tǒng)提供了針對閃存訪問的統(tǒng)一、抽象的接口。
對MTD設(shè)備的使用過程來說,進(jìn)行分區(qū)是其中一個重要的步驟。所謂分區(qū),就是在閃存上劃分多個區(qū)域,劃分后的區(qū)域簡稱為分區(qū),每一個分區(qū)都有固定的物理的起始地址和分區(qū)大小,其中分區(qū)大小通常由每個分區(qū)所包括的塊(block)的數(shù)量決定,每個塊的大小為默認(rèn)值。分區(qū)的起始地址和塊數(shù)量在本文中也稱為分區(qū)信息。這些分區(qū)信息是系統(tǒng)在啟動和運(yùn)行過程,閃存上讀取數(shù)據(jù)和掛載文件系統(tǒng)等操作的重要參數(shù)。盡管Nand閃存容量大、價格便宜,但是本身Nand閃存存在一個固有缺陷出廠時就存在壞塊,而且這些壞塊隨機(jī)分布。Nand閃存是以塊為單位進(jìn)行管理的。按照本領(lǐng)域的經(jīng)驗,壞塊占整個Nand閃存的塊數(shù)的比例小于一定值都是可以接收的,該定值例如為2%。因此,很可能在同一分區(qū)內(nèi)會連續(xù)出現(xiàn)多個壞塊。正是由于這個缺陷,給使用中帶來一定的可靠性問題,尤其是對于系統(tǒng)中可能出現(xiàn)的大小較小的分區(qū)影響較大。比如用來保存一些參數(shù)數(shù)據(jù)的分區(qū),其大小可能才共占2 4個block,當(dāng)出現(xiàn)連續(xù)多個壞塊時,該分區(qū)將無法正常寫入?yún)?shù),系統(tǒng)啟動時則也無法讀出參數(shù)。為此,現(xiàn)有技術(shù)中通過為Nand閃存的每個分區(qū)預(yù)留若干塊以解決遇到壞塊時引起的問題。分區(qū)信息的塊數(shù)量中包括預(yù)留的塊數(shù)量。當(dāng)該Nand閃存的壞塊數(shù)量較少時,則預(yù)留的塊中較多沒有用到,而現(xiàn)有技術(shù)中分區(qū)信息無法更改,造成了資源浪費(fèi)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實施例提供一種在Nand閃存中生成動態(tài)分區(qū)信息的方法和裝置,以解決為規(guī)避存儲介質(zhì)存在壞塊隨機(jī)分布的特性而為分區(qū)預(yù)留較多數(shù)量的塊而引起的資源浪費(fèi)的問題。第一方面,提供了一種在Nand閃存中生成動態(tài)分區(qū)信息的方法,包括解析原始分區(qū)信息,原始分區(qū)信息包括命名的η個分區(qū)和每個分區(qū)的原始塊數(shù)量,其中η為正整數(shù);根據(jù)η個分區(qū)的原始塊數(shù)量和η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為η個分區(qū)生成動態(tài)分區(qū)信息,動態(tài)分區(qū)信息包括η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;將動態(tài)分區(qū)信息存儲到指定區(qū)域。在第一種可能的實現(xiàn)方式中,將η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中i e U,n};當(dāng)檢測到當(dāng)前塊的狀態(tài)為好,則將好塊數(shù)量加I ;且當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞,則將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>第i個分區(qū)的原始塊數(shù)量時,將好塊數(shù)量與壞塊數(shù)量的和作為第i個分區(qū)的動態(tài)塊數(shù)量,且通過第i個分區(qū)的動態(tài)起始地址和第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址。結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,第i+Ι個分區(qū)的動態(tài)起始地址=第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小。結(jié)合第一方面或第一方面的上述可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,當(dāng)檢測到當(dāng)前塊的狀態(tài)為好時,則擦除當(dāng)前塊并寫入數(shù)據(jù);或當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞時,則跳過當(dāng)前塊且不寫入數(shù)據(jù)。 結(jié)合第一方面或第一方面的上述可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,在解析原始分區(qū)信息前,生成原始分區(qū)信息。結(jié)合第一方面或第一方面的上述可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,在解析原始分區(qū)信息前,還在Nand閃存的第一個分區(qū)的第一個塊中寫入引導(dǎo)程序。第二方面,提供了一種在Nand閃存中生成分區(qū)信息的裝置,包括解析單元、第一生成單元和存儲單元解析單元,用于解析原始分區(qū)信息并發(fā)送到第一生成單元,原始分區(qū)信息包括命名的η個分區(qū)和每個分區(qū)的原始塊數(shù)量,其中η為正整數(shù);第一生成單元,用于根據(jù)解析單元解析的η個分區(qū)的原始塊數(shù)量和η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為η個分區(qū)生成動態(tài)分區(qū)信息并發(fā)送到存儲單元,動態(tài)分區(qū)信息包括η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;存儲單元,用于將第一生成單元生成的動態(tài)分區(qū)信息存儲到指定區(qū)域。在第一種可能的實現(xiàn)方式中,第一生成單元包括檢測模塊、計數(shù)模塊和確定模塊檢測模塊,用于將η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中i e {I, η};當(dāng)檢測模塊檢測到當(dāng)前塊的狀態(tài)為好,則計數(shù)模塊將好塊數(shù)量加I ;且當(dāng)檢測模塊檢測到當(dāng)前塊的狀態(tài)為壞,則計數(shù)模塊將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>第i個分區(qū)的原始塊數(shù)量時,確定模塊將好塊數(shù)量與壞塊數(shù)量的和作為第i個分區(qū)的動態(tài)塊數(shù)量,且通過第i個分區(qū)的動態(tài)起始地址和第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址。結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,確定模塊具體用于下述公式以確定動態(tài)起始地址第i+ι個分區(qū)的動態(tài)起始地址=第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小。結(jié)合第二方面或第二方面的上述可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,裝置還包括擦除單元和燒寫單元當(dāng)檢測模塊檢測到當(dāng)前塊的狀態(tài)為好時,則擦除單元用于擦除當(dāng)前塊且燒寫單元在當(dāng)前塊中寫入數(shù)據(jù);或當(dāng)檢測模塊檢測到當(dāng)前塊的狀態(tài)為壞時,則擦除單元用于跳過當(dāng)前塊且燒寫單元在當(dāng)前塊不寫入數(shù)據(jù)。結(jié)合第二方面或第二方面的上述可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,裝置還包括第二生成單元第二生成單元,用于在解析原始分區(qū)信息前,生成原始分區(qū)信肩、O
結(jié)合第二方面或第二方面的上述可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,裝置還包括燒寫單元燒寫單元,用于在解析原始分區(qū)信息前,在Nand閃存的第一個分區(qū)的第一個塊中寫入引導(dǎo)程序。通過上述技術(shù)方案解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是現(xiàn)有技術(shù)中一種在Nand閃存中生成分區(qū)信息的方法的示意圖。圖2是現(xiàn)有技術(shù)另一種在Nand閃存中生成分區(qū)信息的方法的示意圖。圖3是現(xiàn)有技術(shù)的又一種在Nand閃存中生成分區(qū)信息的方法的示意圖。圖4是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的方法的示意流程圖。圖5是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的方法的示意流程圖。圖6是本發(fā)明實施例的生成分區(qū)信息的方法的示意原理圖。圖7是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的裝置的示意框圖。圖8是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的另一裝置的示意框圖。圖9是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的另一裝置的示意框圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。圖1是現(xiàn)有技術(shù)中一種在Nand閃存中生成分區(qū)信息的方法的示意圖。圖1中示意了 4個分區(qū),第一分區(qū)11、第二分區(qū)12、第三分區(qū)13和第四分區(qū)14,分別用于存儲引導(dǎo)(boot)程序、系統(tǒng)核心(Linux Kernel)程序、根文件系統(tǒng)(Root file System)和參數(shù)數(shù)據(jù)(Parameters Data)。為說明方便,此處各分區(qū)以序號命名,但其中分區(qū)的命名可以采用其他方式,例如第一分區(qū)11也可以命名為引導(dǎo)分區(qū)、第四分區(qū)14也可以命名為參數(shù)分區(qū)等。一塊Nand閃存包括若干塊。塊大小為出廠缺省值。以下將一個分區(qū)中包括的塊數(shù)量簡稱為塊數(shù)量。此處,假設(shè)I個塊大小為128K字節(jié)。各分區(qū)的起始地址和大小如圖1所示,分別為第一分區(qū)11的起始地址為0X0,大小為512K字節(jié),塊數(shù)量為2 ;第二分區(qū)121的起始地址為O X 80000,大小為4M字節(jié),塊數(shù)量為31250 ;第三分區(qū)13的起始地址為O X 480000,大小為40M字節(jié),塊數(shù)量為312500 ;第四分區(qū)14的起始地址為O X 2C80000,大小為512K字節(jié),塊數(shù)量為2。第一分區(qū)的起始地址是已知的,可選地,可以從0X0開始;當(dāng)然,也可以從指定地址開始。這樣,一個分區(qū)的塊數(shù)量X塊大小加上起始地址得到的字節(jié)數(shù)就是下一個分區(qū)的起始地址。本文中的分區(qū)信息至少包括分區(qū)的命名和塊數(shù)量。通常情況,系統(tǒng)上電復(fù)位后,會啟動第一分區(qū)11的引導(dǎo)程序,然后引導(dǎo)程序會從第二分區(qū)12中讀取系統(tǒng)核心程序并運(yùn)行,接著系統(tǒng)核心程序會根據(jù)分區(qū)信息,將第三分區(qū)13掛載引導(dǎo)文件系統(tǒng),并啟動相關(guān)應(yīng)用,最后將第四分區(qū)14掛載,讀取相關(guān)的參數(shù)數(shù)據(jù)。由此可見,分區(qū)信息對系統(tǒng)的啟動和運(yùn)行至關(guān)重要。一種現(xiàn)有技術(shù),參考圖2,不考慮Nand閃存的壞塊隨機(jī)分布的特性,僅僅根據(jù)分區(qū) 實際用到的塊數(shù)量,以及考慮到為防止分區(qū)在使用過程中可能出現(xiàn)壞塊而預(yù)留的塊數(shù)量,而進(jìn)行分區(qū)。圖2是現(xiàn)有技術(shù)另一種在Nand閃存中生成分區(qū)信息的方法的示意圖。其中,圖2中示出第一分區(qū)21、第二分區(qū)22和第三分區(qū)23,以第二分區(qū)22為例進(jìn)行說明。第二分區(qū)22,也可以稱為參數(shù)分區(qū),用于存儲參數(shù)數(shù)據(jù)(Parameter Data)。通常情況下,參數(shù)分區(qū)的數(shù)據(jù)量比較小,假設(shè)只占2個塊(共2X 128K字節(jié)=256K字節(jié))??紤]使用過程,可能會因為長時間的擦寫產(chǎn)生壞塊,因此,規(guī)劃參數(shù)分區(qū)時,多預(yù)留兩個2個,這樣參數(shù)分區(qū)一共是4個塊。由于該分區(qū)的方法中沒有考慮到Nand閃存的壞塊的隨機(jī)分布的特性,其缺陷非常明顯。以第二分區(qū)22為例,如果該分區(qū)的4個塊剛好都是壞塊,那么就意味著該分區(qū)將無法寫入數(shù)據(jù),系統(tǒng)啟動時,將無法正確讀寫數(shù)據(jù),導(dǎo)致系統(tǒng)異常。而現(xiàn)有技術(shù)中,分區(qū)信息是不能更改的,那么就意味著這塊Nand閃存將無法使用,只能作為不良品。但實際上這塊Nand閃存是符合要求的,只不過出場時的壞塊剛好集中到該分區(qū)而已。因此,按照圖2的現(xiàn)有技術(shù)分區(qū),實際上會造成物料的浪費(fèi)。另一種現(xiàn)有技術(shù),參考圖3,在分區(qū)時,充分考慮Nand閃存的壞塊隨機(jī)分布的特性。即在規(guī)劃分區(qū)時,除了考慮正常的數(shù)據(jù)存儲區(qū)域外,還要考慮因為壞塊的隨機(jī)分布特性,而為每個分區(qū)預(yù)留一定數(shù)量的塊;按照本領(lǐng)域通用的做法,最可靠的是為每個分區(qū)預(yù)留Nand閃存總塊數(shù)的2%,以容量為512Μ字節(jié)的Nand閃存來說,需要為每個分區(qū)至少預(yù)留80個塊。圖3是現(xiàn)有技術(shù)的又一種在Nand閃存中生成分區(qū)信息的方法的示意圖。圖3中示意性包括了六個分區(qū),第一分區(qū)31至第六分區(qū)36,其中每個分區(qū)中包括的預(yù)留區(qū)域分別為 31Α 至 36Α。如果分區(qū)較多,例如有較多的分區(qū)用于存儲參數(shù)數(shù)據(jù),按照圖3的技術(shù)方案,必須要為每個分區(qū)至少都預(yù)留80個塊,每個塊大小為128Κ字節(jié),假設(shè)如圖3示例有6個分區(qū),那么系統(tǒng)中的預(yù)留區(qū)域共有6Χ80Χ128Κ = 60Μ字節(jié)。這意味著為了歸避Nand閃存壞塊隨機(jī)分布的特性帶來的風(fēng)險,而導(dǎo)致系統(tǒng)中會有更多的塊被作為預(yù)留區(qū)。但是在實際應(yīng)用中,大部分情況下,壞塊并沒有那么多,而且也不會恰好都分布在參數(shù)分區(qū)。從實際出發(fā),像參數(shù)分區(qū)本身很小,只需預(yù)留較少數(shù)量的塊即可。圖3所示的分區(qū)方法會造成較多數(shù)量的塊被浪費(fèi)掉。為了避免上述現(xiàn)有技術(shù)中的各種資源浪費(fèi),本發(fā)明實施例提供了一種在Nand閃存中生成動態(tài)分區(qū)信息的方法和裝置,可以動態(tài)地調(diào)整分區(qū),生成新的分區(qū)信息。圖4是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的方法40的示意流程圖,包括以下內(nèi)容。
S41,解析原始分區(qū)信息,原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù)。在Nand閃存中燒寫數(shù)據(jù)時,都會參考一個原始分區(qū)信息。原始分區(qū)信息可以從其他設(shè)備處獲取,也可以由執(zhí)行本方法40的裝置生成。從原始分區(qū)信息中,可以得知Nand閃存被劃分成η個分區(qū),η個分區(qū)的名字,以及每個分區(qū)所包括的原始塊數(shù)量。η個分區(qū)中的第一個分區(qū)的原始起始地址已知,因此通過每個分區(qū)所包括的原始塊數(shù)量可以確定每個分區(qū)的原始大小和原始起始地址。需要提取原始分區(qū)信息中的信息,例如分區(qū)的順序、每個分區(qū)所包括的原始塊數(shù)量等。S42,根據(jù)η個分區(qū)的原始塊數(shù)量和η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為η個分區(qū)生成動態(tài)分區(qū)信息,動態(tài)分區(qū)信息包括η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量。本發(fā)明實施例中考慮到Nand閃存的壞塊是可以檢測到的。通過在構(gòu)造分區(qū)的時候,能夠根據(jù)分區(qū)時每個分區(qū)的原始大小,對每個分區(qū)內(nèi)的塊做狀態(tài)檢查,主動跳過壞塊, 使得分區(qū)中好塊數(shù)量能滿足每個分區(qū)的原始大小,從而動態(tài)地調(diào)整分區(qū),生成新的分區(qū)信息即動態(tài)分區(qū)信息。S43,將所述動態(tài)分區(qū)信息存儲到指定區(qū)域。生成上述動態(tài)分區(qū)信息后,需存儲該動態(tài)分區(qū)信息,可以存儲到指定區(qū)域。系統(tǒng)啟動后,將讀取該動態(tài)分區(qū)信息,進(jìn)行數(shù)據(jù)操作,包括讀取或運(yùn)行核心程序、掛載文件系統(tǒng)、讀取參數(shù)等操作。在系統(tǒng)核心程序啟動后,還要根據(jù)該分區(qū)進(jìn)行文件系統(tǒng)的掛載等操作。因此,對該分區(qū)信息的保存至關(guān)重要。可選的,如果可以確定以后對上述動態(tài)分區(qū)信息不做更改,可以進(jìn)行一次性編程(OTP, once time program)保護(hù)。本發(fā)明實施例解決了因存儲介質(zhì)存在壞塊隨機(jī)分布的特性,為歸避該問題而為分區(qū)預(yù)留較多的塊而引起的資源浪費(fèi)問題,也包括未考慮該特性而進(jìn)行分區(qū)導(dǎo)致的可靠性問題,通過解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。圖5是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的方法50的示意流程圖,包括以下內(nèi)容。可選的,本發(fā)明實施例的方法可以應(yīng)用在生產(chǎn)Nand閃存的過程中。在工廠生產(chǎn)加工時,通常需要對Nand閃存進(jìn)行燒片處理。在一個實施例中,通過本發(fā)明實施例的方法,首先要先規(guī)劃出原始分區(qū)信息,然后將原始分區(qū)信息傳遞給燒片機(jī),燒片機(jī)解析該原始分區(qū)信息后,動態(tài)計算各個分區(qū)的塊數(shù)量,依次創(chuàng)建新的分區(qū)并擦除和燒錄數(shù)據(jù),并將產(chǎn)生的新的分區(qū)信息作為動態(tài)分區(qū)信息存儲到事先規(guī)劃好的地方,舉例來說,可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中。其中Nand閃存的屬性區(qū)是獨立于主存儲區(qū)的一塊特殊的儲存區(qū)域,用于存放Nand閃存的配置信息,用戶使用Nand閃存進(jìn)行數(shù)據(jù)的擦寫不會影響屬性區(qū)中的內(nèi)容。可選的,作為一種實施方式,也可以將動態(tài)分區(qū)信息存儲到與Nand閃存結(jié)合使用的Nor閃存中。Nor閃存同樣能夠進(jìn)行讀寫、擦除,其特點是讀取速度塊,可靠性好,但容量小,擦寫速度慢,且價格昂貴。Nor閃存沒有Nand閃存固有的存在壞塊隨機(jī)分布的特性,因此,兩種閃存可以結(jié)合使用為用戶提供更可靠的存儲功能。在該實施方法中,Nor閃存可以用來存儲Nand閃存的引導(dǎo)程序或動態(tài)分區(qū)信息,從而避免由于Nand閃存中的壞塊隨機(jī)分布特性導(dǎo)致無法工作的問題。在本領(lǐng)域的技術(shù)中,會確保出廠時Nand閃存的第一個塊是好塊。因此,通常也會將引導(dǎo)程序存儲在第一個塊的指定區(qū)域中??蛇x的,在本發(fā)明的另一個實施例中,如果對Nand閃存的數(shù)據(jù)的燒錄采用的是以下方法先燒寫引導(dǎo)程序,然后由引導(dǎo)程序統(tǒng)一進(jìn)行燒寫數(shù)據(jù)到Nand閃存中,則引導(dǎo)程序中的應(yīng)用過程同樣可以使用本發(fā)明實施例的方法。首先使引導(dǎo)程序獲取到原始分區(qū)信息,包括但不限于實現(xiàn)原始分區(qū)信息到引導(dǎo)程序中,或通過串口或網(wǎng)絡(luò)讀取原始分區(qū)信息,弓丨導(dǎo)程序解析該原始分區(qū)信息,然后讀取燒錄數(shù)據(jù),動態(tài)計算各個分區(qū)的塊數(shù)量,并擦除和燒寫數(shù)據(jù)到Nand閃存,最后將新生成的分區(qū)信息作為動態(tài)分區(qū)信息存儲到事先規(guī)劃好的地方,舉例來說,可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中,或者還可以存儲到與Nand閃存結(jié)合使用的Nor閃存。 S51,生成原始分區(qū)信息。原始分區(qū)信息中定義了 Nand閃存中需要順序生成的η個分區(qū),每個分區(qū)的名字和每個分區(qū)中包括的塊數(shù)量。其中,第i個分區(qū)為η個分區(qū)中的一個,η為正整數(shù),i e {l,n}。通過每個分區(qū)中包括的塊數(shù)量,以及塊大小的缺省值,可以確定每個分區(qū)的大小??蛇x的,作為一種實現(xiàn)方式,可以由實施本發(fā)明實施例方法的裝置生成原始分區(qū)信息。原始分區(qū)信息包括多個分區(qū),可以通過分區(qū)表的形式呈現(xiàn)。分區(qū)表中的信息包括每個分區(qū)的名字,可以任意命名,以及每個分區(qū)包括的原始塊數(shù)量。作為一種實現(xiàn)方法,原始分區(qū)表的表項信息可以抽象為如下表示
typedef struct {
char PartName[50];/*分區(qū)的名字*./
unsigned int ulLogBlockNum; /*分區(qū)中的塊數(shù),包括實際使用到
的塊數(shù),和為預(yù)防擦寫過程產(chǎn)生壞塊而預(yù)留的塊數(shù)*/
]LogPartInfor,,S52,獲取原始分區(qū)信息。S52為S51的可替代方式。可選的,也可以由其他設(shè)備生成原始分區(qū)信息,通過本發(fā)明實施例的裝置實現(xiàn)原始分區(qū)信息到引導(dǎo)程序中,或通過串口或網(wǎng)絡(luò)從其他設(shè)備處讀取原始分區(qū)信息。S53,解析每一個分區(qū)的原始分區(qū)信息。首先從第一個分區(qū)開始順序確定每一個分區(qū)的原始起始地址和原始塊數(shù)量。舉例來說,首先指定第一分區(qū)的原始起始地址為0X0,假設(shè)I個塊大小為128K字節(jié),原始塊數(shù)量為2。從第一分區(qū)開始,逐塊檢測,根據(jù)塊狀態(tài)的好與壞,存儲新的也就是動態(tài)塊數(shù)量,以及新的即動態(tài)起始地址。其中,第一分區(qū)的原始起始地址和動態(tài)起始地址相同。接下來,依次檢測每一個分區(qū)內(nèi)的塊狀態(tài),直至檢測完最后一個分區(qū)。S54,檢測塊的狀態(tài),是否是好塊。如果是好塊,即S54的“是”,則執(zhí)行S55。S55,擦除并燒錄數(shù)據(jù),將好塊數(shù)量加I。如果是壞塊,即S54的“否”,則執(zhí)行S56S56,跳過該壞塊,將壞塊數(shù)量加I。 跳過(skip)該壞塊,不做任何例如擦除或燒寫的處理。S57,確定好塊數(shù)量是否大于等于原始塊數(shù)量。在該分區(qū)中,如果好塊數(shù)量>原始塊數(shù)量,即S57的“是”,則執(zhí)行S58。S58,存儲生成的動態(tài)分區(qū)信息。將好塊數(shù)量與壞塊數(shù)量的和作為該分區(qū)的動態(tài)塊數(shù)量,將該分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量作為該分區(qū)的動態(tài)分區(qū)信息。且通過該分區(qū)的動態(tài)起始地址和該分區(qū)的動態(tài)塊數(shù)量確定下一個分區(qū)的動態(tài)起始地址。將所有分區(qū)的動態(tài)分區(qū)信息統(tǒng)一存儲在事先規(guī)劃好的地方,例如可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中,或者還可以存儲到與Nand閃存結(jié)合使用的Nor閃存。其中,第一分區(qū)的原始起始地址和動態(tài)起始地址相同。根據(jù)塊狀態(tài)的檢測,各分區(qū)的原始塊數(shù)量和動態(tài)塊數(shù)量可能是相同的也可能是不同的;第一個分區(qū)后的分區(qū)的原始起始地址和動態(tài)起始地址可能是相同的也可能是不同的。其中,第i+Ι個分區(qū)的動態(tài)起始地址=所述第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小。動態(tài)分區(qū)信息的表項信息,可抽象為如下表示
typedef struct {
char PartName[50];/* 分區(qū)的名字 */
unsigned int ulPhyPartAddr; /*物理分區(qū)的起始地址*/
unsigned int ulPhyBlockNum; /*物理分區(qū)的塊數(shù),包括好塊和壞塊
數(shù)*/
} PhyPartInfor,圖6是本發(fā)明實施例的生成分區(qū)信息的方法的示意原理圖。舉例來說,參考圖6,原始分區(qū)信息中第二分區(qū)61的原始塊數(shù)量為4,即需要有4個好塊62。如果通過塊狀態(tài)檢測、確定在保證第二分區(qū)61內(nèi)至少包括4個好塊62前,檢測出3個壞塊63,則重新確定的第二分區(qū)的動態(tài)塊數(shù)量為好塊數(shù)量與壞塊數(shù)量之和,等于7。當(dāng)重新確定了第二分區(qū)的動態(tài)塊數(shù)量后,第三分區(qū)的動態(tài)起始地址從第二分區(qū)結(jié)尾開始,也就是第三分區(qū)的動態(tài)起始地址=第二分區(qū)的動態(tài)起始地址+第二分區(qū)的動態(tài)塊數(shù)量X塊大小。在該分區(qū)中,如果好塊數(shù)量<原始塊數(shù)量,即S57的“否”,則執(zhí)行S59。
S59,檢測下一個塊的狀態(tài)。本發(fā)明實施例通過獲取并解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。由于本發(fā)明實施例是動態(tài)產(chǎn)生分區(qū)信息,系統(tǒng)啟動后才進(jìn)行讀取該分區(qū)信息,進(jìn)行數(shù)據(jù)讀取和分區(qū)掛載等。因此,只要有需要重新生成分區(qū)的時候,都可以采用該方法,因此,可選的,也適用于以下情況。在本發(fā)明一個實施例中,如果在后續(xù)使用過程中,由于Nand閃存的塊在多次擦寫并超過壽命后,會變成壞塊,最終會導(dǎo)致因分區(qū)上的好塊數(shù)量不足,而無法使用該分區(qū),從而造成整個系統(tǒng)無法使用。但基于Nand閃存大容量的特點,還有足夠的空 間使用,因此只需要通過重新調(diào)整分區(qū)即可正常工作。由此,通過本發(fā)明實施例,可以改變傳統(tǒng)的靜態(tài)分區(qū),避免了分區(qū)所在的壞塊較多時導(dǎo)致分區(qū)無法使用,或者預(yù)留的塊數(shù)量過多造成分區(qū)浪費(fèi)等問題。在本發(fā)明另一個實施例中,如果生成的分區(qū)信息不幸遭到破壞,需要通過引導(dǎo)程序進(jìn)行升級系統(tǒng)時,需要進(jìn)行重新分區(qū)。由此,通過本發(fā)明實施例,可以改變傳統(tǒng)的靜態(tài)分區(qū),避免了分區(qū)信息丟失時導(dǎo)致Nand閃存無法正常使用,或者預(yù)留的塊數(shù)量過多造成分區(qū)浪費(fèi)等問題。以上兩種情況,都可采用本發(fā)明實施例的方法,例如方法40或50,生成動態(tài)分區(qū)信息。圖7是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的裝置70的示意框圖。裝置70包括解析單元71、第一生成單元72和存儲單元73。解析單元71解析原始分區(qū)信息并發(fā)送到所述第一生成單元,所述原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù)。第一生成單元72根據(jù)所述解析單元解析的所述η個分區(qū)的原始塊數(shù)量和所述η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息并發(fā)送到所述存儲單元,所述動態(tài)分區(qū)信息包括所述η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量。存儲單元73將所述第一生成單元生成的所述動態(tài)分區(qū)信息存儲到指定區(qū)域。存儲單元73將所有分區(qū)的動態(tài)分區(qū)信息統(tǒng)一存儲在事先規(guī)劃好的地方,例如可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中,或者還可以存儲到與Nand閃存結(jié)合使用的Nor閃存。本發(fā)明實施例的裝置解決了因存儲介質(zhì)存在壞塊隨機(jī)分布的特性,為歸避該問題而為分區(qū)預(yù)留較多的塊而引起的資源浪費(fèi)問題,也包括未考慮該特性而進(jìn)行分區(qū)導(dǎo)致的可靠性問題,通過解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。圖8是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的另一裝置80的示意框圖。裝置80包括解析單元81、第一生成單元82、存儲單元83、擦除單元84、燒寫單元85、以及第二生成單元85或獲取單元87。裝置80的獲取單元81、第一生成單元82和存儲單元83與裝置70的獲取單元71第一生成單元72和存儲單元73相同或相似。不同在于,裝置80的第一生成單元82可以包括檢測模塊821、計數(shù)模塊822和確定模塊823,裝置80還可以包括擦除單元84和燒寫單元85,以及第二生成單元86或獲取單元87。解析單元81解析原始分區(qū)信息并發(fā)送到所述第一生成單元,所述原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù)。第一生成單元82根據(jù)所述解析單元解析的所述η個分區(qū)的原始塊數(shù)量和所述η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息并發(fā)送到所述存儲單元,所述動態(tài)分區(qū)信息包括所述η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量。 存儲單元83將所述第一生成單元生成的所述動態(tài)分區(qū)信息存儲到指定區(qū)域。存儲單元83將所有分區(qū)的動態(tài)分區(qū)信息統(tǒng)一存儲在事先規(guī)劃好的地方,例如可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中,或者還可以存儲到與Nand閃存結(jié)合使用的Nor閃存??蛇x的,作為不同的實施例,檢測模塊821將所述η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中i e {I, η};當(dāng)所述檢測模塊821檢測到當(dāng)前塊的狀態(tài)為好,則所述計數(shù)模塊822將好塊數(shù)量加I ;且當(dāng)所述檢測模塊821檢測到當(dāng)前塊的狀態(tài)為壞,則所述計數(shù)模塊822將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>所述第i個分區(qū)的原始塊數(shù)量時,所述確定模塊823將好塊數(shù)量與壞塊數(shù)量的和作為所述第i個分區(qū)的動態(tài)塊數(shù)量,且通過所述第i個分區(qū)的動態(tài)起始地址和所述第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址。其中,確定模塊823具體通過下述公式以確定動態(tài)起始地址。第i+Ι個分區(qū)的動態(tài)起始地址=所述第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小??蛇x的,作為不同的實施例,當(dāng)所述檢測模塊821檢測到當(dāng)前塊的狀態(tài)為好時,則所述擦除單元84用于擦除所述當(dāng)前塊且所述燒寫單元85在所述當(dāng)前塊中寫入數(shù)據(jù);或當(dāng)所述檢測模塊821檢測到當(dāng)前塊的狀態(tài)為壞時,則所述擦除單元84跳過所述當(dāng)前塊且所述燒寫單元85在所述當(dāng)前塊不寫入數(shù)據(jù)??蛇x的,作為不同的實施例,裝置80還可以包括第二生成單元86。第二生成單元86生成原始分區(qū)信息。或者,可選的,裝置80還可以包括獲取單元87,獲取單元87可以從其他設(shè)備獲取所生成的原始分區(qū)信息。裝置80可以生成或獲取原始分區(qū)信息后,通過解析原始分區(qū)信息后,生成動態(tài)分區(qū)信息和燒錄數(shù)據(jù)??蛇x的,作為不同的實施例,燒寫單元85可以在解析原始分區(qū)信息前,在Nand閃存的第一分區(qū)的第一個塊中寫入引導(dǎo)程序。這樣,裝置80先燒寫好引導(dǎo)程序,然后由引導(dǎo)程序統(tǒng)一進(jìn)行燒寫數(shù)據(jù)到Nand閃存中,則引導(dǎo)程序中的應(yīng)用過程可以使用本發(fā)明實施例的方法40或50。本發(fā)明實施例的裝置解決了因存儲介質(zhì)存在壞塊隨機(jī)分布的特性,為歸避該問題而為分區(qū)預(yù)留較多的塊而引起的資源浪費(fèi)問題,也包括未考慮該特性而進(jìn)行分區(qū)導(dǎo)致的可靠性問題,通過獲取并解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。此外,本發(fā)明實施例裝置改變了傳統(tǒng)的靜態(tài)分區(qū),避免了分區(qū)所在的壞塊較多時導(dǎo)致分區(qū)無法使用、還避免了分區(qū)信息丟失時導(dǎo)致Nand閃存無法正常使用。圖9是本發(fā)明實施例的在Nand閃存中生成動態(tài)分區(qū)信息的另一裝置90的示意框圖。裝置90包括處理器91和存儲器92。存儲器92可以是包括RAM和ROM、或任何固定的存儲介質(zhì)、或可移動的存儲介質(zhì),用于存儲可以執(zhí)行本發(fā)明實施例的程序或本發(fā)明實施例中待處理的數(shù)據(jù)。處理器91用于執(zhí)行存儲器92存儲的本發(fā)明實施例的程序。處理器91可以是通用處理器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。可以實現(xiàn)或者執(zhí)行本發(fā)明 實施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結(jié)合本發(fā)明實施例所公開的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲器,閃存、只讀存儲器,可編程只讀存儲器或者電可擦寫可編程存儲器、寄存器等本領(lǐng)域成熟的存儲介質(zhì)中。該存儲介質(zhì)位于存儲器92,處理器91讀取存儲器92中的信息,結(jié)合其硬件完成上述方法的步驟。其中,處理器91解析原始分區(qū)信息,所述原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù);根據(jù)解析的所述η個分區(qū)的原始塊數(shù)量和所述η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息,所述動態(tài)分區(qū)信息包括所述η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;將生成的所述動態(tài)分區(qū)信息存儲到指定區(qū)域。其中,處理器91將所有分區(qū)的動態(tài)分區(qū)信息統(tǒng)一存儲在事先規(guī)劃好的地方,例如可以存儲到Nand閃存的第一個塊的指定區(qū)域中,或者也可以存儲到Nand閃存的屬性區(qū)中,或者還可以存儲到與Nand閃存結(jié)合使用的Nor閃存??蛇x的,作為不同的實施例,處理器91將所述η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中ie {I,η};當(dāng)檢測到當(dāng)前塊的狀態(tài)為好,則將好塊數(shù)量加I ;且當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞,則將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>所述第i個分區(qū)的原始塊數(shù)量時,將好塊數(shù)量與壞塊數(shù)量的和作為所述第i個分區(qū)的動態(tài)塊數(shù)量,且通過所述第i個分區(qū)的動態(tài)起始地址和所述第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址??蛇x的,作為不同的實施例,處理器91根據(jù)以下公式確定動態(tài)起始地址第i+Ι個分區(qū)的動態(tài)起始地址=所述第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小??蛇x的,作為不同的實施例,處理器91當(dāng)檢測到當(dāng)前塊的狀態(tài)為好時,則擦除所述當(dāng)前塊并寫入數(shù)據(jù);或當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞時,則跳過所述當(dāng)前塊且不寫入數(shù)據(jù)??蛇x的,作為不同的實施例,處理器91生成所述原始分區(qū)信息??蛇x的,作為不同的實施例,處理器91在所述解析原始分區(qū)信息前,還在所述Nand閃存的第一個分區(qū)的第一個塊中寫入引導(dǎo)程序。本發(fā)明實施例解決了因存儲介質(zhì)存在壞塊隨機(jī)分布的特性,為歸避該問題而為分區(qū)預(yù)留較多的塊而引起的資源浪費(fèi)問題,也包括未考慮該特性而進(jìn)行分區(qū)導(dǎo)致的可靠性問題,通過解析原始分區(qū)信息,針對每個分區(qū)中的每個塊進(jìn)行好壞檢測,重新統(tǒng)計每個分區(qū)中塊的數(shù)量以及起始地址,生成動態(tài)分區(qū)信息,從而可以動態(tài)改變分區(qū)信息,節(jié)省了存儲介質(zhì)的塊資源,提高了存儲介質(zhì)的利用率。本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機(jī)軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述,僅為本發(fā)明的具體實施方式
,但本發(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.一種在Nand閃存中生成分區(qū)信息的方法,其特征在于,包括解析原始分區(qū)信息,所述原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù);根據(jù)所述η個分區(qū)的原始塊數(shù)量和所述η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息,所述動態(tài)分區(qū)信息包括所述η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;將所述動態(tài)分區(qū)信息存儲到指定區(qū)域。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述η個分區(qū)的原始塊數(shù)量和所述η 個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息,所述動態(tài)分區(qū)信息包括η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量,包括將所述η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第 I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中i e {I, η};當(dāng)檢測到當(dāng)前塊的狀態(tài)為好,則將好塊數(shù)量加I ;且當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞,則將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>所述第i個分區(qū)的原始塊數(shù)量時,將好塊數(shù)量與壞塊數(shù)量的和作為所述第i個分區(qū)的動態(tài)塊數(shù)量,且通過所述第i個分區(qū)的動態(tài)起始地址和所述第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述通過所述第i個分區(qū)的動態(tài)起始地址和所述第i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址,包括第i+Ι個分區(qū)的動態(tài)起始地址=所述第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小。
4.根據(jù)權(quán)利要求1至3任一項所述的方法,其特征在于,所述方法還包括當(dāng)檢測到當(dāng)前塊的狀態(tài)為好時,則擦除所述當(dāng)前塊并寫入數(shù)據(jù);或當(dāng)檢測到當(dāng)前塊的狀態(tài)為壞時,則跳過所述當(dāng)前塊且不寫入數(shù)據(jù)。
5.根據(jù)權(quán)利要求1至4任一項所述的方法,其特征在于,在所述解析原始分區(qū)信息前, 所述方法還包括生成所述原始分區(qū)信息。
6.根據(jù)權(quán)利要求1至4任一項所述的方法,其特征在于,在所述解析原始分區(qū)信息前, 所述方法還包括在所述Nand閃存的第一個分區(qū)的第一個塊中寫入引導(dǎo)程序。
7.—種在Nand閃存中生成分區(qū)信息的裝置,其特征在于,包括解析單元、第一生成單元和存儲單元所述解析單元,用于解析原始分區(qū)信息并發(fā)送到所述第一生成單元,所述原始分區(qū)信息包括命名的η個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中η為正整數(shù);所述第一生成單元,用于根據(jù)所述解析單元解析的所述η個分區(qū)的原始塊數(shù)量和所述 η個分區(qū)的第I個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為所述η個分區(qū)生成動態(tài)分區(qū)信息并發(fā)送到所述存儲單元,所述動態(tài)分區(qū)信息包括所述η個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;所述存儲單元,用于將所述第一生成單元生成的所述動態(tài)分區(qū)信息存儲到指定區(qū)域。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一生成單元包括檢測模塊、計數(shù)模塊和確定模塊所述檢測模塊,用于將所述η個分區(qū)的第I個分區(qū)的原始起始地址作為第I個分區(qū)的動態(tài)起始地址,從第I個分區(qū)開始直到第η個分區(qū)為止,依次檢測第i個分區(qū)中的各個塊的狀態(tài),其中i e U,η};當(dāng)所述檢測模塊檢測到當(dāng)前塊的狀態(tài)為好,則所述計數(shù)模塊將好塊數(shù)量加I ;且當(dāng)所述檢測模塊檢測到當(dāng)前塊的狀態(tài)為壞,則所述計數(shù)模塊將壞塊數(shù)量加I ;且當(dāng)好塊數(shù)量>所述第i個分區(qū)的原始塊數(shù)量時,所述確定模塊將好塊數(shù)量與壞塊數(shù)量的和作為所述第i個分區(qū)的動態(tài)塊數(shù)量,且通過所述第i個分區(qū)的動態(tài)起始地址和所述第 i個分區(qū)的動態(tài)塊數(shù)量確定第i+Ι個分區(qū)的動態(tài)起始地址。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述確定模塊具體用于下述公式以確定動態(tài)起始地址第i+Ι個分區(qū)的動態(tài)起始地址=所述第i個分區(qū)的動態(tài)起始地址+第i個分區(qū)的動態(tài)塊數(shù)量X塊大小。
10.根據(jù)權(quán)利要求7至9任一項所述的裝置,其特征在于,所述裝置還包括擦除單元和燒寫單元當(dāng)所述檢測模塊檢測到當(dāng)前塊的狀態(tài)為好時,則所述擦除單元用于擦除所述當(dāng)前塊且所述燒寫單元在所述當(dāng)前塊中寫入數(shù)據(jù);或當(dāng)所述檢測模塊檢測到當(dāng)前塊的狀態(tài)為壞時,則所述擦除單元用于跳過所述當(dāng)前塊且所述燒寫單元在所述當(dāng)前塊不寫入數(shù)據(jù)。
11.根據(jù)權(quán)利要求7至10任一項所述的裝置,其特征在于,所述裝置還包括第二生成單元所述第二生成單元,用于在所述解析原始分區(qū)信息前,生成所述原始分區(qū)信息。
12.根據(jù)權(quán)利要求7至10任一項所述的裝置,其特征在于,所述裝置還包括燒寫單元 所述燒寫單元,用于在解析原始分區(qū)信息前,在所述Nand閃存的第一個分區(qū)的第一個塊中寫入引導(dǎo)程序。
全文摘要
本發(fā)明實施例提供了一種Nand閃存中生成分區(qū)信息的方法和裝置。方法包括解析原始分區(qū)信息,原始分區(qū)信息包括命名的n個分區(qū)和每個所述分區(qū)的原始塊數(shù)量,其中n為正整數(shù);根據(jù)n個分區(qū)的原始塊數(shù)量和n個分區(qū)的第1個分區(qū)的原始起始地址,通過順序檢測各分區(qū)的塊的狀態(tài),為n個分區(qū)生成動態(tài)分區(qū)信息,動態(tài)分區(qū)信息包括n個分區(qū)的動態(tài)起始地址和動態(tài)塊數(shù)量;將動態(tài)分區(qū)信息存儲到指定區(qū)域。對應(yīng)該方法還包括裝置。上述技術(shù)方案解決了因存儲介質(zhì)存在壞塊隨機(jī)分布的特性,為歸避該問題而為分區(qū)預(yù)留較多的塊而引起的資源浪費(fèi)問題,也包括未考慮該特性而進(jìn)行分區(qū)導(dǎo)致的可靠性問題,節(jié)省了塊資源,提高了存儲介質(zhì)的利用率。
文檔編號G06F12/06GK102999436SQ20121049515
公開日2013年3月27日 申請日期2012年11月28日 優(yōu)先權(quán)日2012年11月28日
發(fā)明者秦紹天 申請人:華為終端有限公司