本發(fā)明涉及存儲介質(zhì)技術(shù)領(lǐng)域,尤其涉及nandflash的數(shù)據(jù)處理方法、裝置和一種nandflash。
背景技術(shù):
現(xiàn)有nandflash(nand型閃存)存儲針對nandflash特性采用了ftl(flashtranslationlayer,閃存轉(zhuǎn)換層)方法,其一般包括以下處理機(jī)制:
1)建立壞nandflash塊表;
2)建立nandflash塊映射表;
3)建立nandflash頁映射表;
4)采用平衡磨損算法提高整體使用壽命;
5)垃圾回收機(jī)制;
6)重讀機(jī)制。
通過上述系列復(fù)雜的算法保證整體使用壽命和快速使用存儲數(shù)據(jù)。
然而,當(dāng)nandflash用來存儲一些數(shù)據(jù)量少(例如少于nandflash的一個(gè)物理頁)且又不經(jīng)常寫的數(shù)據(jù)時(shí),采用上述復(fù)雜的處理機(jī)制不僅增加額外的存儲負(fù)擔(dān),降低了數(shù)據(jù)的存取處理速度,而且減少了nandflash的使用壽命。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了nandflash的數(shù)據(jù)處理方法、裝置和一種nandflash,能夠快速完成nandflash對少量數(shù)據(jù)的存取處理操作,大大減輕nandflash處理少量數(shù)據(jù)時(shí)的存儲負(fù)擔(dān),延長nandflash的使用壽命。
第一方面,提供了一種nandflash的數(shù)據(jù)處理方法,應(yīng)用于在所述nandflash中指定的nandflash塊;
所述nandflash的數(shù)據(jù)處理方法包括:
獲取待寫入數(shù)據(jù);
若所述待寫入數(shù)據(jù)的數(shù)據(jù)量小于預(yù)設(shè)閾值,則根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
建立分配給所述待寫入數(shù)據(jù)的邏輯號與最新可用物理號之間的映射關(guān)系,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
將建立的所述映射關(guān)系添加至所述映射表中,生成新的映射表;
根據(jù)所述新的映射表和所述待寫入數(shù)據(jù)生成新的數(shù)據(jù)包;
將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
第二方面,提供了一種nandflash的數(shù)據(jù)處理方法,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理方法包括:
獲取待讀取數(shù)據(jù)包的讀取指令;
根據(jù)所述讀取指令確定所述待讀取數(shù)據(jù)包的邏輯號;
根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
根據(jù)所述邏輯號和所述映射表確定所述待讀取數(shù)據(jù)包的物理號;
讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包。
第三方面,提供了一種nandflash的數(shù)據(jù)處理方法,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理方法包括:
獲取待修改數(shù)據(jù)包的修改指令以及待修改的數(shù)據(jù);
根據(jù)所述修改指令確定所述待修改數(shù)據(jù)包的邏輯號;
根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
根據(jù)所述邏輯號和所述映射表確定所述待修改數(shù)據(jù)包的物理號;
讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包;
將所述映射表中所述邏輯號對應(yīng)的物理號更新為最新可用物理號,得到新的映射表,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
采用所述待修改的數(shù)據(jù)修改讀取的所述數(shù)據(jù)包中的數(shù)據(jù);
根據(jù)修改后的數(shù)據(jù)和所述新的映射表生成新的數(shù)據(jù)包;
將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
第四方面,提供了一種nandflash的數(shù)據(jù)處理方法,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理方法包括:
獲取待刪除數(shù)據(jù)包的刪除指令;
根據(jù)所述刪除指令確定所述待刪除數(shù)據(jù)包的邏輯號;
根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
從所述映射表中刪除所述邏輯號與對應(yīng)的物理號之間的映射關(guān)系,得到新的映射表;
根據(jù)所述新的映射表生成新的數(shù)據(jù)包;
將所述新的數(shù)據(jù)包寫入最新可用物理號對應(yīng)的物理頁內(nèi),所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號。
第五方面,提供了一種基于上述的nandflash的數(shù)據(jù)處理方法的nandflash塊處理方法,所述nandflash中設(shè)有由兩個(gè)以上指定的nandflash塊組成的塊循環(huán)池;
在根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包之前,所述nandflash塊處理方法還包括:
判斷所述當(dāng)前nandflash塊是否已滿;
若所述當(dāng)前nandflash塊未滿,則執(zhí)行根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包的步驟;
若所述當(dāng)前nandflash塊已滿,則執(zhí)行換塊操作,然后執(zhí)行根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包的步驟;
所述換塊操作具體包括以下步驟:
擦除所述塊循環(huán)池中的下一個(gè)nandflash塊;
根據(jù)最新數(shù)據(jù)包索引號讀取所述當(dāng)前nandflash塊的最新數(shù)據(jù)包;
獲取所述最新數(shù)據(jù)包中的映射表;
初始化第一邏輯號的值;
通過調(diào)整所述第一邏輯號的值依據(jù)所述映射表依次讀取所述當(dāng)前nandflash塊中的各個(gè)數(shù)據(jù)包,并將讀取到的所述各個(gè)數(shù)據(jù)包依次寫入所述下一個(gè)nandflash塊,直到所述當(dāng)前nandflash塊中的各個(gè)數(shù)據(jù)包均寫入至所述下一個(gè)nandflash塊;
將所述下一個(gè)nandflash塊確定為當(dāng)前nandflash塊。
第六方面,提供了一種nandflash的數(shù)據(jù)處理裝置,應(yīng)用于在所述nandflash中指定的nandflash塊;
所述nandflash的數(shù)據(jù)處理裝置包括:
寫入數(shù)據(jù)獲取模塊,用于獲取待寫入數(shù)據(jù);
第一最新數(shù)據(jù)包讀取模塊,用于若所述待寫入數(shù)據(jù)的數(shù)據(jù)量小于預(yù)設(shè)閾值,則根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第一映射表獲取模塊,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
映射關(guān)系建立模塊,用于建立分配給所述待寫入數(shù)據(jù)的邏輯號與最新可用物理號之間的映射關(guān)系,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
第一新映射表生成模塊,用于將建立的所述映射關(guān)系添加至所述映射表中,生成新的映射表;
第一新數(shù)據(jù)包生成模塊,用于根據(jù)所述新的映射表和所述待寫入數(shù)據(jù)生成新的數(shù)據(jù)包;
第一寫入模塊,用于將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
第七方面,提供了一種nandflash的數(shù)據(jù)處理裝置,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理裝置包括:
讀取指令獲取模塊,用于獲取待讀取數(shù)據(jù)包的讀取指令;
第一包號確定模塊,用于根據(jù)所述讀取指令確定所述待讀取數(shù)據(jù)包的邏輯號;
第二最新數(shù)據(jù)包讀取模塊,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第二映射表獲取模塊,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第一物理號確定模塊,用于根據(jù)所述邏輯號和所述映射表確定所述待讀取數(shù)據(jù)包的物理號;
第一數(shù)據(jù)包讀取單元,用于讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包。
第八方面,提供了一種nandflash的數(shù)據(jù)處理裝置,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理裝置包括:
修改指令獲取模塊,用于獲取待修改數(shù)據(jù)包的修改指令以及待修改的數(shù)據(jù);
第二包號確定模塊,用于根據(jù)所述修改指令確定所述待修改數(shù)據(jù)包的邏輯號;
第三最新數(shù)據(jù)包讀取模塊,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第三映射表獲取模塊,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第二物理號確定模塊,用于根據(jù)所述邏輯號和所述映射表確定所述待修改數(shù)據(jù)包的物理號;
第二數(shù)據(jù)包讀取單元,用于讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包;
第二新映射表生成模塊,用于將所述映射表中所述邏輯號對應(yīng)的物理號更新為最新可用物理號,得到新的映射表,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
數(shù)據(jù)修改模塊,用于采用所述待修改的數(shù)據(jù)修改讀取的所述數(shù)據(jù)包中的數(shù)據(jù);
第二新數(shù)據(jù)包生成模塊,用于根據(jù)修改后的數(shù)據(jù)和所述新的映射表生成新的數(shù)據(jù)包;
第二寫入模塊,用于將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
第九方面,提供了一種nandflash的數(shù)據(jù)處理裝置,應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包;
所述nandflash的數(shù)據(jù)處理裝置包括:
刪除指令獲取模塊,用于獲取待刪除數(shù)據(jù)包的刪除指令;
第三包號確定模塊,用于根據(jù)所述刪除指令確定所述待刪除數(shù)據(jù)包的邏輯號;
第四最新數(shù)據(jù)包讀取模塊,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第四映射表獲取模塊,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第三新映射表生成模塊,用于從所述映射表中刪除所述邏輯號與對應(yīng)的物理號之間的映射關(guān)系,得到新的映射表;
第三新數(shù)據(jù)包生成模塊,用于根據(jù)所述新的映射表生成新的數(shù)據(jù)包;
第三寫入模塊,用于將所述新的數(shù)據(jù)包寫入最新可用物理號對應(yīng)的物理頁內(nèi),所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號。
第十方面,提供了一種nandflash,包括上述的nandflash的數(shù)據(jù)處理裝置。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
本發(fā)明實(shí)施例中,通過將少量的數(shù)據(jù)打包成預(yù)設(shè)的數(shù)據(jù)包格式,并在數(shù)據(jù)包中建立邏輯號與物理號之間的映射關(guān)系,可以快速完成nandflash對少量數(shù)據(jù)的存取處理操作,大大減輕了nandflash處理少量數(shù)據(jù)時(shí)的存儲負(fù)擔(dān),延長nandflash的使用壽命。
附圖說明
圖1為本發(fā)明實(shí)施例中數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例中最新數(shù)據(jù)包索引號獲取過程的流程圖;
圖3為本發(fā)明實(shí)施例中數(shù)據(jù)包的寫入過程的流程圖;
圖4為本發(fā)明實(shí)施例中換塊操作過程的流程圖;
圖5為本發(fā)明實(shí)施例中數(shù)據(jù)包的讀取過程的流程圖;
圖6為本發(fā)明實(shí)施例中數(shù)據(jù)包的修改過程的流程圖;
圖7為本發(fā)明實(shí)施例中數(shù)據(jù)包的刪除過程的流程圖;
圖8為本發(fā)明實(shí)施例中nandflash的數(shù)據(jù)處理裝置實(shí)施例二的結(jié)構(gòu)圖;
圖9為本發(fā)明實(shí)施例中nandflash的數(shù)據(jù)處理裝置實(shí)施例三的結(jié)構(gòu)圖;
圖10為本發(fā)明實(shí)施例中nandflash的數(shù)據(jù)處理裝置實(shí)施例四的結(jié)構(gòu)圖;
圖11為本發(fā)明實(shí)施例中nandflash的數(shù)據(jù)處理裝置實(shí)施例五的結(jié)構(gòu)圖;
圖12為本發(fā)明實(shí)施例中nandflash塊處理裝置實(shí)施例六的結(jié)構(gòu)圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了nandflash的數(shù)據(jù)處理方法、裝置和一種nandflash,用于解決現(xiàn)有nandflash在存儲少量數(shù)據(jù)時(shí)容易增加額外的存儲負(fù)擔(dān),降低存取處理速度的問題。
為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點(diǎn)能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,下面所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而非全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一:
本實(shí)施例提供了一種nandflash的數(shù)據(jù)處理方法是針對nandflash特性的一種簡易存儲方法。該方法主要采用邏輯號和物理號的一級映射法,是一種以數(shù)據(jù)包為單元進(jìn)行nandflash頁讀、nandflash頁寫、nandflash頁編輯以及整個(gè)nandflash塊擦除的簡易存儲方法。
首先,在實(shí)施例一中,為便于描述,使用如下述語進(jìn)行描述:
nandflash:一種非易失的存儲器件;
kbyte:1024字節(jié);
nandflash頁:nandflash的一種存儲單位,一個(gè)nandflash頁的大小可以是4kbyte、8kbyte、16kbyte,等等;
nandflash塊:nandflash的一種存儲單位,包含有幾十個(gè)nandflash頁到幾百個(gè)nandflash頁不等;
少量數(shù)據(jù):指少于一個(gè)nandflash頁的數(shù)據(jù);
預(yù)設(shè)格式的數(shù)據(jù)包:如圖1所示,由包頭和少量數(shù)據(jù)組成,如果數(shù)據(jù)包少于一個(gè)物理頁的數(shù)據(jù),可以為數(shù)據(jù)包填充隨機(jī)數(shù)。所述包頭可以由包標(biāo)識碼、邏輯號到物理號的映射表、包信息、用戶信息組成。其中,對于本實(shí)施例中的數(shù)據(jù)包來說,映射表是必須的,而少量數(shù)據(jù)、包信息、用戶信息等可以根據(jù)實(shí)際使用需要選擇性加入;
邏輯號:數(shù)據(jù)包存取的編號。當(dāng)上位機(jī)需要讀nandflash中的數(shù)據(jù)包時(shí),上位機(jī)下發(fā)的讀指令中包括有該數(shù)據(jù)包對應(yīng)的邏輯號;
物理號:實(shí)際存儲數(shù)據(jù)包的物理頁的序號,即nandflash物理頁在nandflash塊內(nèi)的序號;
最新數(shù)據(jù)包索引號:指的是存儲最新寫入的數(shù)據(jù)包的物理頁的物理號;
不經(jīng)常寫的數(shù)據(jù):在寫入后很少修改的數(shù)據(jù);
最大物理號:不超過nandflash塊內(nèi)的物理頁總數(shù)的設(shè)定數(shù);
ftl:nandflash轉(zhuǎn)換層;
包標(biāo)識碼:具有一定規(guī)則的一串?dāng)?shù)據(jù),用以獲取最新數(shù)據(jù)包索引號。該包標(biāo)識碼主要用于判別nandflash頁是否已經(jīng)被使用,進(jìn)而確定最新數(shù)據(jù)包索引號。關(guān)于上述的邏輯號到物理號的映射法,該邏輯號和物理號都是從0開始順序編排的自然數(shù)序列,建立邏輯號映射到物理號的映射關(guān)系,則可以生成對應(yīng)的映射表,即邏輯號到物理號的映射表。這種映射方法是一種一級映射方法,映射表的更新就是指邏輯號對物理號的映射關(guān)系的更新。
在本實(shí)施例中,nandflash的寫是以頁為單位的,每個(gè)nandflash頁具有幾kbyte至十幾kbyte的存儲空間,在存儲少量數(shù)據(jù)時(shí),完全可以做到一次性存取。針對這個(gè)特點(diǎn),本實(shí)施例提供的nandflash數(shù)據(jù)處理方法具有以下特點(diǎn):
1)建立數(shù)據(jù)包;
2)采用兩個(gè)以上的nandflash塊建立塊循環(huán)池,在必要時(shí)進(jìn)行數(shù)據(jù)包的換塊操作;
3)最新寫入的數(shù)據(jù)包記錄有最新的映射表;
4)在存取數(shù)據(jù)操作前,通過判斷是否有包標(biāo)識碼以獲取最新數(shù)據(jù)包索引號,繼而根據(jù)最新數(shù)據(jù)包索引號獲取最新的映射表,根據(jù)邏輯號在獲取的最新的映射表中找到其對應(yīng)的物理號,最后通過物理號可以實(shí)現(xiàn)數(shù)據(jù)包的存?。?/p>
5)在一個(gè)nandflash塊用于存儲至最大物理號所對應(yīng)的物理頁已被使用后,則使用塊循環(huán)塊池中的下一個(gè)nandflash塊;
6)映射表的更新發(fā)生在數(shù)據(jù)包的寫、修改和刪除等操作。
下面將對本實(shí)施例提供的nandflash的數(shù)據(jù)處理方法中關(guān)于數(shù)據(jù)包的寫、讀、修改、刪除等操作進(jìn)行詳細(xì)描述。
需要說明的是,為便于描述,在下述內(nèi)容中,package_index表示最新數(shù)據(jù)包索引號,max_phy_number表示最大物理號,phy_num表示物理號,ln_ind表示邏輯號,tb_size表示映射表的大小。
最新數(shù)據(jù)包索引號的獲取:
由于在對數(shù)據(jù)包進(jìn)行寫、讀、修改、刪除等操作時(shí),大多需要獲取當(dāng)前的nandflash塊中的最新數(shù)據(jù)包索引號,因此本實(shí)施例先介紹該“最新數(shù)據(jù)包索引號”的獲取過程,如圖2所示,可以包括以下步驟:
201、初始化最新數(shù)據(jù)包索引號的值,package_index=max_phy_number,phy_num=0;
202、判斷phy_num是否小于max_phy_number,若是,則執(zhí)行步驟203,若否,則結(jié)束;
203、讀取phy_num物理頁下的數(shù)據(jù)包;
204、判斷讀取的數(shù)據(jù)包中是否具有包標(biāo)識碼,若是,則執(zhí)行步驟205,若否,則執(zhí)行步驟206;
205、phy_num=phy_num+1,并返回執(zhí)行步驟202;
206、若phy_num大于0,則package_index=phy_num-1;若phy_num不大于0,則package_index=0;然后結(jié)束。
對于上述步驟201~206,通過對當(dāng)前nandflash塊中物理號從0開始遍歷,直到物理號對應(yīng)讀取到的數(shù)據(jù)包不具有包標(biāo)識碼,則表明當(dāng)前物理號的物理頁中未寫入數(shù)據(jù)包。從而可知前一個(gè)物理號(phy_num-1)則為最新寫入數(shù)據(jù)包的物理號,也即得到了最新寫入數(shù)據(jù)包的索引號package_index。特別地,當(dāng)phy_num=0時(shí),讀取的數(shù)據(jù)包也不具有包標(biāo)識碼,則表明當(dāng)前的nandflash塊為一個(gè)“新”塊,因此確定package_index=0。
數(shù)據(jù)包的寫操作:
當(dāng)需要寫入數(shù)據(jù)時(shí),首先需要判斷該數(shù)據(jù)是否屬于少量數(shù)據(jù),也即是否適合采用本實(shí)施例提供的nandflash的數(shù)據(jù)處理方法,若是,則進(jìn)行數(shù)據(jù)包的寫操作。如圖3所示,數(shù)據(jù)包的寫入過程可以包括如下步驟:
301、獲取需要寫入nandflash的待寫入數(shù)據(jù);
302、判斷所述待寫入數(shù)據(jù)的數(shù)據(jù)量是否小于預(yù)設(shè)閾值,若是,則執(zhí)行步驟303,若否,則采用一般存儲方法對待寫入數(shù)據(jù)進(jìn)行寫入操作;
303、根據(jù)package_index讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包;
304、獲取讀取的最新數(shù)據(jù)包中的映射表;
305、判斷是否package_index=0且讀取的最新數(shù)據(jù)包中不具有包標(biāo)識碼,若是,則執(zhí)行步驟306,若否,則執(zhí)行步驟307;
306、將所述package_index確定為新的數(shù)據(jù)包的物理號,并將分配的邏輯號與所述新的數(shù)據(jù)包的物理號的映射關(guān)系添加至所述映射表的表尾,生成新的映射表,然后執(zhí)行步驟308;
307、將package_index+1確定為新的數(shù)據(jù)包的物理號,并將分配的邏輯號與所述新的數(shù)據(jù)包的物理號的映射關(guān)系添加至所述映射表的表尾,生成新的映射表;
308、根據(jù)所述待寫入數(shù)據(jù)、所述新的映射表、包信息、用戶信息生成所述新的數(shù)據(jù)包;
309、將所述新的數(shù)據(jù)包寫入至其物理號對應(yīng)的物理頁內(nèi),數(shù)據(jù)包寫入完成。
對于上述步驟302,上述的“預(yù)設(shè)閾值”可以是1個(gè)nandflash頁的數(shù)據(jù),一個(gè)nandflash頁的大小可以是4kbyte、8kbyte、16kbyte等??梢岳斫獾氖?,本實(shí)施例提供的nandflash的數(shù)據(jù)處理方法更適合用于處理少量數(shù)據(jù)。因此,當(dāng)待寫入數(shù)據(jù)不小于預(yù)設(shè)閾值時(shí),可以認(rèn)為當(dāng)前待寫入數(shù)據(jù)并非少量數(shù)據(jù),從而可以采用一般存儲方法進(jìn)行寫入處理。這里說的一般存儲方法是指現(xiàn)有技術(shù)中的關(guān)于nandflash的數(shù)據(jù)存儲方法,例如ftl方法。
對于步驟303,package_index的獲取方法在上述內(nèi)容中已經(jīng)進(jìn)行了詳細(xì)描述,此處不再贅述。
對于步驟305,可以理解的是,當(dāng)package_index=0且讀取的最新數(shù)據(jù)包中不具有包標(biāo)識碼時(shí),表明當(dāng)前的nandflash塊為新塊,未存在寫入的數(shù)據(jù)包,因此在創(chuàng)建數(shù)據(jù)包時(shí)執(zhí)行步驟306。
對于步驟306,package_index對應(yīng)的物理頁不具有包標(biāo)識碼,說明該物理頁是空的,因此,該package_index即為最新可用物理號,直接將該package_index確定為新的數(shù)據(jù)包的物理號,建立該新的數(shù)據(jù)包的物理號與分配的邏輯號之間的映射關(guān)系,將該映射關(guān)系記錄到映射表中??梢岳斫獾氖牵魺o映射表,則可以創(chuàng)建一個(gè)新的映射表。
對于步驟306,需要說明的是,所述分配的邏輯號可以由nandflash為該新的數(shù)據(jù)包自動分配,也可以通過要求寫入所述待寫入數(shù)據(jù)的指令或請求進(jìn)行確定、分配,本實(shí)施例對此不作限定。
對于步驟307,當(dāng)當(dāng)前的nandflash塊并非新塊時(shí),由于package_index對應(yīng)的物理頁已被數(shù)據(jù)占用,因此為新的數(shù)據(jù)包分配物理頁時(shí),應(yīng)該選取package_index+1位置的物理頁,即package_index+1為最新可用物理號。
對于步驟308,本實(shí)施例中,該包信息和用戶信息可以根據(jù)待寫入數(shù)據(jù)的來源確定,也可以由獲取到的所述最新數(shù)據(jù)包中的包信息和用戶信息更新得來,或者可以采用默認(rèn)的方式寫入這兩個(gè)信息,對此,本實(shí)施例不作限定。
對于步驟309,在將新的數(shù)據(jù)包寫入至其物理號對應(yīng)的物理頁之后,為便于下一次的處理操作,還可以設(shè)置package_index=package_index+1。
需要說明的是,在步驟303之前,還可以判斷當(dāng)前nandflash塊的package_index是否等于max_phy_number,若是,則表明當(dāng)前nandflash塊已滿,需要執(zhí)行換塊操作,將塊循環(huán)池中的下一個(gè)nandflash塊確定為當(dāng)前nandflash塊,然后繼續(xù)執(zhí)行步驟303;若否,則執(zhí)行步驟303。
為便于理解,下面將對換塊操作進(jìn)行詳細(xì)描述。本實(shí)施例中,在nandflash塊的使用過程中,會產(chǎn)生無效的物理頁,例如將原先存儲有數(shù)據(jù)包的物理頁中的數(shù)據(jù)包刪除,而這些無效的物理頁會占用nandflash塊的存儲空間,因此,無效的物理頁會越來越多,直到nandflash塊已滿(即package_index=max_phy_number),此時(shí),則進(jìn)行塊循環(huán)池的換塊操作,將當(dāng)前nandflash塊的所有數(shù)據(jù)搬移至下一個(gè)nandflash塊。如圖4所示,換塊操作的過程可以包括以下步驟:
401、擦除塊循環(huán)池中的下一個(gè)nandflash塊,所述下一個(gè)nandflash塊的phy_num=0;
402、根據(jù)package_index讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,并獲取所述最新數(shù)據(jù)包的映射表;
403、初始化邏輯號ln_ind的值;
404、判斷l(xiāng)n_ind是否小于tb_size,若是,則執(zhí)行步驟405,若否,則執(zhí)行步驟408;
405、根據(jù)所述映射表獲取ln_ind對應(yīng)的物理號,并根據(jù)獲取到的物理號讀取數(shù)據(jù)包;
406、將讀取到的數(shù)據(jù)包的映射表中所述ln_ind對應(yīng)的物理號更換為所述下一個(gè)nandflash塊的phy_num;
407、將讀取到的所述數(shù)據(jù)包寫入phy_num對應(yīng)的物理頁內(nèi),phy_num=phy_num+1,ln_ind=ln_ind+1,然后返回步驟404;
408、package_index=phy_num,確定所述下一個(gè)nandflash塊為當(dāng)前nandflash塊,換塊操作完成,結(jié)束。
對于上述步驟401~408,先將下一個(gè)nandflash塊的數(shù)據(jù)擦除,從而可以清除該下一個(gè)nandflash塊中原有的無效物理頁,使得其成為一個(gè)新塊。然后將根據(jù)最新數(shù)據(jù)包的映射表將當(dāng)前nandflash塊中的所有有效數(shù)據(jù)包逐一寫入至下一個(gè)nandflash塊中,并分別修改各個(gè)數(shù)據(jù)包的映射關(guān)系。完成數(shù)據(jù)的搬遷之后,則可以將下一個(gè)nandflash塊確定為當(dāng)前nandflash塊,完成本次換塊操作。
數(shù)據(jù)包的讀操作:
本實(shí)施例中,對于已寫入nandflash塊中的數(shù)據(jù)包,可以根據(jù)上位機(jī)下發(fā)的讀指令進(jìn)行讀取,如圖5所示,具體包括以下步驟:
501、獲取待讀取數(shù)據(jù)包的讀取指令;
502、根據(jù)所述讀取指令確定所述待讀取數(shù)據(jù)包的邏輯號;
503、根據(jù)package_index讀取當(dāng)前nandflash塊中的最新數(shù)據(jù)包,并獲取所述最新數(shù)據(jù)包中的映射表;
504、根據(jù)所述邏輯號和所述映射表確定所述待讀取數(shù)據(jù)包的物理號;
505、讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包。
對于上述步驟501,該讀取指令可以由與nandflash連接的上位機(jī)發(fā)出。
對于步驟502,可以理解的是,該讀取指令中可以包含有該邏輯號,也可以包含有用于確定該邏輯號的數(shù)據(jù)包信息,然后根據(jù)數(shù)據(jù)包信息確定該邏輯號,對此不作限定。
對于步驟504,根據(jù)映射表中的映射關(guān)系,可以確定與該邏輯號對應(yīng)的該待讀取數(shù)據(jù)包的物理號??梢岳斫獾氖?,由于本實(shí)施例中數(shù)據(jù)包的寫入機(jī)制,最新數(shù)據(jù)包中的映射表包含有當(dāng)前nandflash塊中所有數(shù)據(jù)包的邏輯號和物理號的映射關(guān)系。
對于步驟505,在確定出物理號之后,可以直接根據(jù)該物理號讀取到所需的數(shù)據(jù)包,也即該待讀取數(shù)據(jù)包。然后可以將該數(shù)據(jù)包發(fā)送至發(fā)出該讀取指令的上位機(jī)或者其它設(shè)備上。
數(shù)據(jù)包的修改操作:
當(dāng)需要修改數(shù)據(jù)包中的數(shù)據(jù)時(shí),上位機(jī)或其它設(shè)備可以通過下發(fā)修改指令使得當(dāng)前nandflash塊執(zhí)行修改操作。如圖6所示,數(shù)據(jù)包的修改過程可以包括以下步驟:
601、獲取待修改數(shù)據(jù)包的修改指令以及待修改的數(shù)據(jù);
602、根據(jù)所述修改指令確定所述待修改數(shù)據(jù)包的邏輯號;
603、根據(jù)package_index讀取當(dāng)前nandflash塊中的最新數(shù)據(jù)包,并獲取所述最新數(shù)據(jù)包中的映射表;
604、根據(jù)所述邏輯號和所述映射表確定所述待修改數(shù)據(jù)包的物理號;
605、讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包;
606、將package_index+1更新為所述映射表中所述邏輯號對應(yīng)的物理號,得到新的映射表;
607、采用所述待修改的數(shù)據(jù)修改讀取的所述數(shù)據(jù)包中的數(shù)據(jù);
608、根據(jù)修改后的數(shù)據(jù)、所述新的映射表、包信息以及用戶信息生成新的數(shù)據(jù)包;
609、將所述新的數(shù)據(jù)包寫入至其物理號對應(yīng)的物理頁內(nèi),數(shù)據(jù)包修改完成。
對于步驟601,該修改指令可以由與nandflash連接的上位機(jī)發(fā)出。并且,在獲取修改指令的同時(shí),可以獲取到數(shù)據(jù)包待修改的數(shù)據(jù),也即需要更新的數(shù)據(jù)。
對于步驟602,可以理解的是,該修改指令中可以包含有該邏輯號,也可以包含有用于確定該邏輯號的數(shù)據(jù)包信息,然后根據(jù)數(shù)據(jù)包信息確定該邏輯號,對此不作限定。
對于步驟604,根據(jù)映射表中的映射關(guān)系,可以確定與該邏輯號對應(yīng)的該待修改數(shù)據(jù)包的物理號??梢岳斫獾氖?,由于本實(shí)施例中數(shù)據(jù)包的寫入機(jī)制,最新數(shù)據(jù)包中的映射表包含有當(dāng)前nandflash塊中所有數(shù)據(jù)包的邏輯號和物理號的映射關(guān)系。
對于步驟605,在確定出物理號之后,可以直接根據(jù)該物理號讀取到所需的數(shù)據(jù)包,也即該待修改數(shù)據(jù)包。
對于步驟606,在本實(shí)施例中,在修改數(shù)據(jù)包時(shí),并非在原物理頁上直接進(jìn)行數(shù)據(jù)的修改,而是將更新后的數(shù)據(jù)以寫入的方式寫入至空的物理頁中。因此,將package_index+1作為該數(shù)據(jù)包的物理號,相當(dāng)于為修改后的數(shù)據(jù)包分配最新的物理頁。
對于步驟607,在讀取待修改的數(shù)據(jù)包之后,使用待修改的數(shù)據(jù)修改該數(shù)據(jù)包中的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的更新。
對于步驟608,根據(jù)修改后的數(shù)據(jù)和新的映射表,以及包信息、用戶信息生成新的數(shù)據(jù)包。其中,該包信息和用戶信息可以根據(jù)修改指令來確定,也可以由讀取到的待修改數(shù)據(jù)包中的包信息和用戶信息更新得來,或者可以采用默認(rèn)的方式寫入這兩個(gè)信息,對此,本實(shí)施例不作限定。
對于步驟609,在生成新的數(shù)據(jù)包,也即修改后的數(shù)據(jù)包之后,可以將所述新的數(shù)據(jù)包寫入至其物理號對應(yīng)的物理頁內(nèi),也即package_index+1對應(yīng)的物理頁內(nèi),數(shù)據(jù)包修改完成。
需要說明的是,在步驟603之前,還可以判斷當(dāng)前nandflash塊的package_index是否等于max_phy_number,若是,則表明當(dāng)前nandflash塊已滿,需要執(zhí)行換塊操作,將塊循環(huán)池中的下一個(gè)nandflash塊確定為當(dāng)前nandflash塊,然后再執(zhí)行步驟603;若否,則執(zhí)行步驟603。
由上述步驟601~609可知,對數(shù)據(jù)包進(jìn)行修改之后,由于修改前的數(shù)據(jù)包占用的物理頁被“放棄”,修改后的數(shù)據(jù)包重新寫入最新的物理頁中,從而會導(dǎo)致當(dāng)前的nandflash塊增加一個(gè)無效頁(即被“放棄”的物理頁)。
數(shù)據(jù)包的刪除操作:
當(dāng)需要刪除數(shù)據(jù)包時(shí),上位機(jī)或其它設(shè)備可以通過下發(fā)刪除指令使得當(dāng)前nandflash塊執(zhí)行刪除操作。如圖7所示,數(shù)據(jù)包的刪除過程可以包括以下步驟:
701、獲取待刪除數(shù)據(jù)包的刪除指令;
702、根據(jù)所述刪除指令確定所述待刪除數(shù)據(jù)包的邏輯號;
703、根據(jù)package_index讀取當(dāng)前nandflash塊中的最新數(shù)據(jù)包,并獲取所述最新數(shù)據(jù)包中的映射表;
704、從所述映射表中刪除所述邏輯號與對應(yīng)的物理號之間的映射關(guān)系,得到新的映射表;
705、根據(jù)所述新的映射表和包信息生成新的數(shù)據(jù)包;
706、將所述新的數(shù)據(jù)包寫入至package_index+1對應(yīng)的物理頁內(nèi),數(shù)據(jù)包刪除完成。
對于步驟701,該刪除指令可以由與nandflash連接的上位機(jī)發(fā)出。
對于步驟702,可以理解的是,該刪除指令中可以包含有該邏輯號,也可以包含有用于確定該邏輯號的數(shù)據(jù)包信息,然后根據(jù)數(shù)據(jù)包信息確定該邏輯號,對此不作限定。
對于步驟704,可以理解的是,在刪除nandflash塊中的數(shù)據(jù)包時(shí),只需要刪除該數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系即可,因?yàn)楫?dāng)映射關(guān)系刪除后,對于nandflash以外的設(shè)備來說,已刪除的數(shù)據(jù)包是不可知的。而由于當(dāng)前nandflash塊中所有數(shù)據(jù)包的確定均通過最新數(shù)據(jù)包中的映射表來查詢,因此需要刪除了該映射關(guān)系后,生成新的映射表并執(zhí)行步驟705,生成一個(gè)新的數(shù)據(jù)包。
對于步驟705,可知,生成的新的數(shù)據(jù)包里面不具有可用的有效數(shù)據(jù),其作用在于記錄新的映射表,并讓該新的映射表在需要時(shí)可被讀取到。
對于步驟706,在生成新的數(shù)據(jù)包之后,將該新的數(shù)據(jù)包寫入到最新的物理頁中,也即package_index+1對應(yīng)的物理頁內(nèi),數(shù)據(jù)包刪除操作完成。
需要說明的是,在步驟703之前,還可以判斷當(dāng)前nandflash塊的package_index是否等于max_phy_number,若是,則表明當(dāng)前nandflash塊已滿,需要執(zhí)行換塊操作,將塊循環(huán)池中的下一個(gè)nandflash塊確定為當(dāng)前nandflash塊,然后再執(zhí)行步驟703;若否,則執(zhí)行步驟703。
由上述步驟701~706可知,對數(shù)據(jù)包進(jìn)行刪除之后,由于刪除前的數(shù)據(jù)包占用的物理頁被“放棄”,刪除后生成的記錄新的映射表的數(shù)據(jù)包寫入最新的物理頁中,從而會導(dǎo)致當(dāng)前的nandflash塊增加一個(gè)無效頁(即被“放棄”的物理頁)。
可見,本實(shí)施例中,隨著對數(shù)據(jù)包的修改操作和刪除操作的增多,當(dāng)前nandflash塊中的無效頁會越來越多,最后導(dǎo)致nandflash塊已滿,從而需要執(zhí)行換塊操作。而由于換塊操作時(shí)將下一個(gè)nandflash塊進(jìn)行擦除處理,因此,即便將當(dāng)前nandflash塊的所有有效數(shù)據(jù)包搬移至下一個(gè)nandflash塊中,該換塊操作也是有意義的,相當(dāng)于把下一個(gè)nandflash塊中的無效頁清理掉。
需要說明的是,在本實(shí)施例中,可以在nandflash上執(zhí)行上述的寫、讀、修改、刪除、換塊等操作,可以只單獨(dú)執(zhí)行其中的某一個(gè)或多個(gè)操作,例如對某個(gè)nandflash執(zhí)行寫操作,再執(zhí)行修改操作、刪除操作。應(yīng)當(dāng)可以理解的是,在nandflash上可以執(zhí)行上述寫、讀、修改、刪除、換塊等操作的任意組合,以及這些操作之間的執(zhí)行次序均沒有限定。
實(shí)施例二:
本實(shí)施例還提供一種nandflash的數(shù)據(jù)處理裝置,其應(yīng)用于在所述nandflash中指定的nandflash塊,主要進(jìn)行nandflash塊的數(shù)據(jù)寫入處理。如圖8所示,所述nandflash的數(shù)據(jù)處理裝置包括:
寫入數(shù)據(jù)獲取模塊801,用于獲取待寫入數(shù)據(jù);
第一最新數(shù)據(jù)包讀取模塊802,用于若所述待寫入數(shù)據(jù)的數(shù)據(jù)量小于預(yù)設(shè)閾值,則根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第一映射表獲取模塊803,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
映射關(guān)系建立模塊804,用于建立分配給所述待寫入數(shù)據(jù)的邏輯號與最新可用物理號之間的映射關(guān)系,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
第一新映射表生成模塊805,用于將建立的所述映射關(guān)系添加至所述映射表中,生成新的映射表;
第一新數(shù)據(jù)包生成模塊806,用于根據(jù)所述新的映射表和所述待寫入數(shù)據(jù)生成新的數(shù)據(jù)包;
第一寫入模塊807,用于將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
實(shí)施例三:
本實(shí)施例還提供一種nandflash的數(shù)據(jù)處理裝置,其應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包。該nandflash的數(shù)據(jù)處理裝置主要進(jìn)行nandflash塊的數(shù)據(jù)讀取處理。如圖9所示,所述nandflash的數(shù)據(jù)處理裝置包括:
讀取指令獲取模塊901,用于獲取待讀取數(shù)據(jù)包的讀取指令;
第一包號確定模塊902,用于根據(jù)所述讀取指令確定所述待讀取數(shù)據(jù)包的邏輯號;
第二最新數(shù)據(jù)包讀取模塊903,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第二映射表獲取模塊904,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第一物理號確定模塊905,用于根據(jù)所述邏輯號和所述映射表確定所述待讀取數(shù)據(jù)包的物理號;
第一數(shù)據(jù)包讀取單元906,用于讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包。
實(shí)施例四:
本實(shí)施例還提供一種nandflash的數(shù)據(jù)處理裝置,其應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包。該nandflash的數(shù)據(jù)處理裝置主要進(jìn)行nandflash塊的數(shù)據(jù)修改處理。如圖10所示,所述nandflash的數(shù)據(jù)處理裝置包括:
修改指令獲取模塊1001,用于獲取待修改數(shù)據(jù)包的修改指令以及待修改的數(shù)據(jù);
第二包號確定模塊1002,用于根據(jù)所述修改指令確定所述待修改數(shù)據(jù)包的邏輯號;
第三最新數(shù)據(jù)包讀取模塊1003,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第三映射表獲取模塊1004,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第二物理號確定模塊1005,用于根據(jù)所述邏輯號和所述映射表確定所述待修改數(shù)據(jù)包的物理號;
第二數(shù)據(jù)包讀取單元1006,用于讀取確定的所述物理號對應(yīng)物理頁中的數(shù)據(jù)包;
第二新映射表生成模塊1007,用于將所述映射表中所述邏輯號對應(yīng)的物理號更新為最新可用物理號,得到新的映射表,所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號;
數(shù)據(jù)修改模塊1008,用于采用所述待修改的數(shù)據(jù)修改讀取的所述數(shù)據(jù)包中的數(shù)據(jù);
第二新數(shù)據(jù)包生成模塊1009,用于根據(jù)修改后的數(shù)據(jù)和所述新的映射表生成新的數(shù)據(jù)包;
第二寫入模塊1010,用于將所述新的數(shù)據(jù)包寫入所述最新可用物理號對應(yīng)的物理頁內(nèi)。
實(shí)施例五:
本實(shí)施例還提供一種nandflash的數(shù)據(jù)處理裝置,其應(yīng)用于在所述nandflash中指定的nandflash塊,所述nandflash塊中存儲有預(yù)設(shè)格式的數(shù)據(jù)包。該nandflash的數(shù)據(jù)處理裝置主要進(jìn)行nandflash塊的數(shù)據(jù)讀取處理。如圖11所示,所述nandflash的數(shù)據(jù)處理裝置包括:
刪除指令獲取模塊111,用于獲取待刪除數(shù)據(jù)包的刪除指令;
第三包號確定模塊112,用于根據(jù)所述刪除指令確定所述待刪除數(shù)據(jù)包的邏輯號;
第四最新數(shù)據(jù)包讀取模塊113,用于根據(jù)最新數(shù)據(jù)包索引號讀取當(dāng)前nandflash塊的最新數(shù)據(jù)包,所述最新數(shù)據(jù)包索引號為所述當(dāng)前nandflash塊中存儲最新寫入的數(shù)據(jù)包的物理頁對應(yīng)的物理號;
第四映射表獲取模塊114,用于獲取所述最新數(shù)據(jù)包中的映射表,所述映射表記錄有所述當(dāng)前nandflash塊中存儲的各個(gè)數(shù)據(jù)包的邏輯號與物理號之間的映射關(guān)系;
第三新映射表生成模塊115,用于從所述映射表中刪除所述邏輯號與對應(yīng)的物理號之間的映射關(guān)系,得到新的映射表;
第三新數(shù)據(jù)包生成模塊116,用于根據(jù)所述新的映射表生成新的數(shù)據(jù)包;
第三寫入模塊117,用于將所述新的數(shù)據(jù)包寫入最新可用物理號對應(yīng)的物理頁內(nèi),所述最新可用物理號為所述當(dāng)前nandflash塊中最新的可用物理頁對應(yīng)的物理號。
實(shí)施例六:
本實(shí)施例還提供一種在上述圖8、圖10或圖11對應(yīng)實(shí)施例中描述的任意一種nandflash的數(shù)據(jù)處理裝置的基礎(chǔ)上進(jìn)一步改進(jìn)的nandflash塊處理裝置。在實(shí)施例六描述的nandflash塊處理裝置中,所述nandflash中設(shè)有由兩個(gè)以上指定的nandflash塊組成的塊循環(huán)池。如圖12所示,該nandflash塊處理裝置還包括:
滿載判斷模塊121,用于判斷所述當(dāng)前nandflash塊是否已滿;
第一觸發(fā)模塊122,用于若所述滿載判斷模塊121的判斷結(jié)果為否,則觸發(fā)上述的第一最新數(shù)據(jù)包讀取模塊802、第三最新數(shù)據(jù)包讀取模塊1003或第四最新數(shù)據(jù)包讀取模塊113;
第二觸發(fā)模塊123,用于若所述滿載判斷模塊121的判斷結(jié)果為是,則觸發(fā)換塊模塊124,然后觸發(fā)上述的第一最新數(shù)據(jù)包讀取模塊802、第三最新數(shù)據(jù)包讀取模塊1003或第四最新數(shù)據(jù)包讀取模塊113;
所述換塊模塊124具體可以包括以下單元:
塊擦除單元1241,用于擦除所述塊循環(huán)池中的下一個(gè)nandflash塊;
最新數(shù)據(jù)包讀取單元1242,用于根據(jù)最新數(shù)據(jù)包索引號讀取所述當(dāng)前nandflash塊的最新數(shù)據(jù)包;
映射表獲取單元1243,用于獲取所述最新數(shù)據(jù)包中的映射表;
初始化單元1244,用于初始化第一邏輯號的值;
數(shù)據(jù)包搬移單元1245,用于通過調(diào)整所述第一邏輯號的值依據(jù)所述映射表依次讀取所述當(dāng)前nandflash塊中的各個(gè)數(shù)據(jù)包,并將讀取到的所述各個(gè)數(shù)據(jù)包依次寫入所述下一個(gè)nandflash塊,直到所述當(dāng)前nandflash塊中的各個(gè)數(shù)據(jù)包均寫入至所述下一個(gè)nandflash塊;
當(dāng)前塊確定單元1246,用于將所述下一個(gè)nandflash塊確定為當(dāng)前nandflash塊。
實(shí)施例七:
本實(shí)施例還提供一種nandflash,其包括圖8至圖11對應(yīng)實(shí)施例中描述的任意一種nandflash的數(shù)據(jù)處理裝置,和/或,包括圖12對應(yīng)實(shí)施例中描述的任意一種nandflash塊處理裝置。特別地,該nandflash也可以包括上述圖8至圖12對應(yīng)實(shí)施例中描述的所有形式的nandflash的數(shù)據(jù)處理裝置和nandflash塊處理裝置。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲在一個(gè)計(jì)算機(jī)可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機(jī)存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。