亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

將2048字節(jié)頁的NandFlash模擬成硬盤的方法和裝置的制作方法

文檔序號:6469845閱讀:315來源:國知局

專利名稱::將2048字節(jié)頁的NandFlash模擬成硬盤的方法和裝置的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及通信
技術(shù)領(lǐng)域
,尤其涉及一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法和裝置。
背景技術(shù)
:嵌入式系統(tǒng)中廣泛的采用Flash(閃存)來存儲程序和數(shù)據(jù)。Flash具有系統(tǒng)掉電后仍可保留內(nèi)部信息及可擦寫等功能特點(diǎn)。目前廣泛使用的Flash主要有NorFlash和NandFlash兩種。與NorFlash相比,NandFlash具有很好的性價比,更適合于在嵌入式系統(tǒng)中存儲數(shù)據(jù)。目前,F(xiàn)lash文件系統(tǒng)的種類主要包才舌JFFS2(JoumalingFlashFileSystem,日志閃存文件系統(tǒng)版本2)和YAFFS(YetAnotherFlashFileSystem,—種專為NandFlash設(shè)計的日志文件系統(tǒng))等Flash文件系統(tǒng)。^f旦是,某些應(yīng)用需要在NandFlash上運(yùn)行傳統(tǒng)的磁盤文件系統(tǒng),如FAT16(FAT16/32是DOS/Windows操作系統(tǒng)上的一種磁盤文件系統(tǒng))、FAT32、EXT2(EXT2/3是Linux操作系統(tǒng)上的磁盤文件系統(tǒng))和EXT3等。NandFlash的內(nèi)部存儲單元的結(jié)構(gòu)是塊頁結(jié)構(gòu),一般情況下每個塊(Block)由64個頁(Page)組成,NandFlash以塊為單位進(jìn)行擦除,以頁為單位進(jìn)行讀寫。根據(jù)頁大小的不同,NandFlash又分為兩種,即512字節(jié)頁和2048字節(jié)頁;2048字節(jié)頁的NandFlash又稱大頁NandFlash,由于具備存Y渚量大等特點(diǎn)因此將逐漸成為使用趨勢。512字節(jié)頁與2048字節(jié)頁的NandFlash相比最大的不同點(diǎn)在于,512字節(jié)頁的NandFlash支持對塊內(nèi)的頁隨機(jī)寫,而2048字節(jié)頁的NandFlash在塊內(nèi)只能對頁進(jìn)行順序的寫操作。例如,設(shè)Block0為空閑塊,現(xiàn)有PageO和Page1需要寫入,對于512字節(jié)頁的NandFlash,對PageO和Pagel的寫順序沒有要求;而對于2048字節(jié)頁的NandFlash來說,必須先寫入Page0,再寫入Pagel。其次,盡管NandFlash上的每Bit只允許寫一次,但是512字節(jié)頁的NandFlash可以將同一頁分成多個部分進(jìn)行寫操作,而目前2048字節(jié)頁的NandFlash最多只允許對同一頁進(jìn)行8次寫操作。目前,F(xiàn)lash文件系統(tǒng)(如YAFFS和JFFS2)很好的支持2048字節(jié)頁的NandFlash這個特點(diǎn),而傳統(tǒng)》茲盤文件系統(tǒng)只支持對扇區(qū)進(jìn)行隨機(jī)寫。由于512字節(jié)頁NandFlash支持對塊內(nèi)頁的隨機(jī)寫,所以目前大部分的系統(tǒng)都支持將512字節(jié)頁的NandFlash模擬為硬盤,如Linux操作系統(tǒng)中MTD(MemoryTechnologyDevice,存儲技術(shù)設(shè)備)子系統(tǒng)的NFTL(NandFlashTranslationLayer,NandFlash轉(zhuǎn)換層)模塊?,F(xiàn)有技術(shù)中,由于2048字節(jié)頁的NandFlash不支持塊內(nèi)頁的隨機(jī)寫,同時頁大小也與磁盤文件系統(tǒng)的扇區(qū)大小512字節(jié)不相等,所以目前還沒有系統(tǒng)能夠?qū)?048字節(jié)頁的NandFlash模擬為硬盤。
發(fā)明內(nèi)容本發(fā)明提供一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法和裝置,用于實(shí)現(xiàn)將2048字節(jié)頁的NandFlash才莫擬成石更盤。本發(fā)明提供一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法,包括接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀操作或?qū)懖僮?;根?jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述-茲盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作、或塊內(nèi)頁的順序?qū)懖僮?;其中,所?12字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊。其中,所述512字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到包括將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且在每一個512字節(jié)頁后面存儲所述512字節(jié)頁對應(yīng)的OOB信息;或?qū)?048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且4個512字節(jié)頁連續(xù)放置,所述4個512字節(jié)頁之前或之后存儲依次存儲每一個512字節(jié)頁對應(yīng)的OQB信息。其中,所述每個512字節(jié)頁的OOB信息包括所述512字節(jié)頁中512字節(jié)數(shù)據(jù)的校驗(yàn)碼;所述512字節(jié)頁的狀態(tài)為空閑Free或被占用Used;所述512字節(jié)頁對應(yīng)的邏輯單元Unit;所述512字節(jié)頁所在塊的替換塊;所述512字節(jié)頁對應(yīng)的邏輯單元Unit中的邏輯扇區(qū)Sector。其中,所述獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作具體包括接收磁盤文件系統(tǒng)發(fā)送的參數(shù),所述參數(shù)包括》茲盤扇區(qū)號和緩存區(qū);根據(jù)磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;沖艮據(jù)邏輯單元號查找所述邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全0;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將所述512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。其中,所述存在對應(yīng)的塊鏈時,根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁包括對所述邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移、且所述塊的替換塊不存在或所述塊上的替換塊上不存在OOBSector等于所述》茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁;則所述查找到的塊上的512字節(jié)頁即為保存所述磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。其中,所述獲取與所述;f茲盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行塊內(nèi)頁的順序?qū)懖僮靼ń邮沾疟P文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū);根據(jù)所述^f茲盤扇區(qū)號,計算得到所述^茲盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;根據(jù)所述邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則繼續(xù);存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了所述石茲盤扇區(qū)的數(shù)據(jù),沒有則在所述首塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);否則繼續(xù);獲取上次保存所迷磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷上次保存所述磁盤扇區(qū)數(shù)據(jù)的塊的替換塊是否存在,存在則在所述替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則繼續(xù);獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用。其中,所述判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù)具體包括判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該^茲盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù);所述獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊具體包括對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該i茲盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在上次保存所述i茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。其中,所述根據(jù)所述磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移包括所述硬盤中的磁盤扇區(qū)號除以256并進(jìn)行取整所得到的商,對應(yīng)邏輯單元;所述硬盤中的磁盤扇區(qū)號除以256所得到的余數(shù),對應(yīng)所述邏輯單元中的偏移。本發(fā)明還提供一種NandFlash的控制裝置,用于將2048字節(jié)頁的NandFlash模擬成硬盤,包括操作接收單元,用于接收磁盤文件系統(tǒng)對》茲盤扇區(qū)的讀操作或?qū)懖僮?;OOB信息獲取單元,用于獲取NandFlash中512字節(jié)頁的OOB信息;所述512字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊;讀操作單元,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作;寫操作單元,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行塊內(nèi)頁的順序?qū)懖僮?。其中,還包括劃分單元,所述劃分單元具體用于將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且在每一個512字節(jié)頁后面存儲所述512字節(jié)頁對應(yīng)的OOB信息;或?qū)?048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且4個512字節(jié)頁連續(xù)放置,所述4個512字節(jié)頁之前或之后存儲依次存儲每一個512字節(jié)頁對應(yīng)的OOB信息。其中,所述讀操作單元包括讀操作接收子單元,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),所述參數(shù)包括f茲盤扇區(qū)號和H存區(qū);讀操作獲取子單元,用于根據(jù)磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;讀操作執(zhí)行子單元,用于根據(jù)邏輯單元號查找所述邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全0;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述^F茲盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將所述512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。其中,所述讀操作執(zhí)行子單元根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該i茲盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁時,具體用于對所述邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移、且所述塊的替換塊不存在或所述塊上的替換塊上不存在OOBSector等于所述;茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁;則所述查找到的塊上的512字節(jié)頁即為保存所述磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。其中,所述寫操作單元包括寫操作接收子單元,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū);寫操作獲取子單元,用于根據(jù)所述磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;寫操作執(zhí)行子單元,用于#4居所述邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了所述磁盤扇區(qū)的數(shù)據(jù),沒有則在所述首塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);否則獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷上次保存所述^f茲盤扇區(qū)數(shù)據(jù)的塊的替換塊是否存在,存在則在所述替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該i茲盤扇區(qū)最新凝:據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用。其中,所述寫操作執(zhí)行子單元判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù)時,還用于判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了》茲盤扇區(qū)的數(shù)據(jù);所述寫操作執(zhí)行子單元獲取上次保存所述》茲盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊時,還用于對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該;磁盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在上次保存所述石茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)通過將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,并根據(jù)NandFlash中512字節(jié)頁的OOB信息,實(shí)現(xiàn)了將2048字節(jié)頁的NandFlash模擬成石更盤,并適應(yīng)了大頁NandFlash需要在塊內(nèi)順序?qū)懙奶攸c(diǎn),從而可以在大頁NandFlash上運(yùn)行磁盤文件系統(tǒng)。圖l是本發(fā)明中使用的MTD子系統(tǒng)的結(jié)構(gòu)示意圖2是本發(fā)明中小頁NandFlash的頁結(jié)構(gòu)示意圖3是本發(fā)明中小頁NandFlash中OOB的數(shù)據(jù)結(jié)構(gòu)示意圖4是本發(fā)明中塊鏈的結(jié)構(gòu)示意圖5是本發(fā)明中對于512字節(jié)頁的NandFlash,NFTL的讀操作流程圖;圖6是本發(fā)明中對于512字節(jié)頁的NandFlash,NFTL的寫操作流程圖;圖7A至圖7C是本發(fā)明中NFTL對于512字節(jié)頁的NandFlash的操作示意圖8是本發(fā)明中2048字節(jié)頁NandFlash頁結(jié)構(gòu)示意圖;圖9是本發(fā)明中將2048字節(jié)頁的NandFlash模擬成硬盤的方法流程圖;圖IOA和圖10B是本發(fā)明中2048字節(jié)頁NandFlash劃分為小頁的示意圖;圖11是本發(fā)明中2048字節(jié)頁NandFlash中OOB的數(shù)據(jù)結(jié)構(gòu)示意圖;圖12A和12B是本發(fā)明中對于2048字節(jié)頁的NandFlash,NFTL的讀操作流程圖13A和13B是本發(fā)明中對于2048字節(jié)頁的NandFlash,NFTL的寫操作流程圖14A至圖14C是本發(fā)明中NFTL對于2048字節(jié)頁的NandFlash的操作示意圖15是本發(fā)明中NandFlash的控制裝置的結(jié)構(gòu)示意圖16是本發(fā)明中NandFlash的控制裝置的另一結(jié)構(gòu)示意圖。具體實(shí)施例方式以下首先對本發(fā)明所涉及的Linux操作系統(tǒng)中用于管理Flash設(shè)備的MTD子系統(tǒng)進(jìn)行介紹。Linux操作系統(tǒng)中使用MTD子系統(tǒng)來管理各種Flash設(shè)備,如NorFlash、NandFlash等。MTD子系統(tǒng)的結(jié)構(gòu)如圖1所示,其中MTDChar將Flash模擬成字符設(shè)備,MTDBlock將Flash模擬成MTD塊設(shè)備并運(yùn)行Flash文件系統(tǒng),NFTL將NandFlash模擬成硬盤并運(yùn)行磁盤文件系統(tǒng)。圖1中MTD核心層(MTDCore)以及NandFlash通用驅(qū)動的主要作用是識別和驅(qū)動NandFlash芯片,對NandFlash進(jìn)行讀、寫和擦除操作。NFTL的主要作用為,將NandFlash模擬為硬盤,建立磁盤文件系統(tǒng)中扇區(qū)與NandFlash中頁的映射關(guān)系,并將磁盤文件系統(tǒng)的讀寫操作轉(zhuǎn)換為NandFlash的讀、寫和擦除操作。同時,由于磁盤扇區(qū)的壽命很長,磁盤文件系統(tǒng)設(shè)計時不會考慮寫操作對扇區(qū)的損耗,但是NandFlash的每個擦寫塊壽命有限,因此對NandFlash的擦寫操作還需要進(jìn)行損耗均衡,盡量使擦寫操作分布在整個芯片內(nèi)部。綜上所述,NFTL的主要作用主要包括兩部分(l)建立磁盤文件系統(tǒng)中扇區(qū)與NandFlash中頁的映射關(guān)系;(2)對NandFlash擦寫操作的損耗均衡。以下說明對小頁NandFlash(512字節(jié)頁)進(jìn)行讀寫的具體實(shí)現(xiàn)。小頁NandFlash的頁結(jié)構(gòu)如圖2所示,每個存放數(shù)據(jù)的頁都包括一個16字節(jié)的OOB(OutOfBand,NandFlash上用來存儲管理信息的空間)與其對應(yīng),NFTL通過維護(hù)OOB里保存的信息來對NandFlash進(jìn)4于管理,實(shí)現(xiàn)上述映射關(guān)系的建立和擦寫操作的損耗均衡。小頁NandFlash中OOB的數(shù)據(jù)結(jié)構(gòu)如圖3所示,其中各項(xiàng)的內(nèi)容如表1所示表1.NFTLOOB數(shù)據(jù)結(jié)構(gòu)<table>tableseeoriginaldocumentpage16</column></row><table>每次系統(tǒng)啟動時NFTL會掃描整個NandFlash芯片頁所對應(yīng)OOB的磁盤文件系統(tǒng)的邏輯單元號,建立物理擦寫塊與磁盤文件系統(tǒng)邏輯單元的映射關(guān)系,從而進(jìn)一步建立NandFlash頁與磁盤扇區(qū)的對應(yīng)關(guān)系。磁盤文件系統(tǒng)可以直接在已經(jīng)存放數(shù)據(jù)的扇區(qū)上重新寫入數(shù)據(jù),以達(dá)到對文件進(jìn)行修改和刪除的目的。但是,由于NandFlash每個擦寫塊壽命有限,考慮到損耗均衡不直接對頁進(jìn)行擦寫,而是NFTL在芯片上再找一個空閑的塊,用來存放新的數(shù)據(jù)。形成一個如圖4所示的塊鏈,該鏈上的所有塊都保存同一個邏輯單元數(shù)據(jù)。對于512字節(jié)頁的NandFlash,NFTL的讀操作流^_如圖5所示,包括步驟s501、》茲盤文件系統(tǒng)傳入?yún)?shù)扇區(qū)號和buffer。步驟s502、NFTL計算邏輯單元號和扇區(qū)在邏輯單元中的偏移。假設(shè)Unit為邏輯單元號,Offset為扇區(qū)在邏輯單元中的偏移,則Unit=INT(扇區(qū)號/64);Offset=扇區(qū)號°/。64,INT()表示取整函數(shù)。例如對于扇區(qū)號256,邏輯單元號Unit為256除以64得到的商的整數(shù)部分即4,偏移Offset為256除以64得到的余數(shù)部分即0。步驟s503、NFTL查找保存本邏輯單元的塊鏈。步驟s504、判斷塊鏈?zhǔn)欠翊嬖?,不存在則進(jìn)行步驟s505,否則進(jìn)行步驟s506。步驟s505、塊鏈不存在時,設(shè)置buffer的內(nèi)容為全零。步驟s506、記錄塊鏈的首塊為Blockl,設(shè)置BlockO等于Blockl。步驟s507、判斷BlockO是否為有效塊,是則進(jìn)行步驟s508,否則進(jìn)行步驟s510。步驟s508、判斷BlockO上偏移為Offset的頁的狀態(tài)是否為Used,是則進(jìn)行步驟s509,否則進(jìn)行步驟s510。步驟s509、判斷BlockO是否為塊鏈的首塊,是則進(jìn)行步驟s505,否則進(jìn)行步驟s511。步驟s510、設(shè)置Blockl等于BlockO,BlockO等于Blockl的ReplaceBlock,返回步驟s507。步驟s511、將塊Blockl上偏移為Offset的頁的內(nèi)容拷貝到buffer。對于512字節(jié)頁的NandFlash,NFTL的寫操作流程如圖6所示,包括步驟s601、磁盤文件系統(tǒng)傳入?yún)?shù)扇區(qū)號和buffer。步驟s602、NFTL計算邏輯單元號和扇區(qū)在邏輯單元中的偏移。假設(shè)Unit為邏輯單元號,Offset為扇區(qū)在邏輯單元中的偏移,則Unit=INT(扇區(qū)號/64);Offset=扇區(qū)號%64。步驟s603、判斷本邏輯單元是否有對應(yīng)的塊鏈,是則進(jìn)行步驟s604,否則進(jìn)行步驟s609。步驟s604、記錄塊鏈的首塊為Blockl,BlockO等于Blockl。步驟s605、判斷BlockO是否為有效塊,若不是有效塊則進(jìn)行步驟s606,否則進(jìn)行步驟s607。步驟s606、找一個空閑塊BlockO;將邏輯單元信息寫入pageO的OOB;將該塊加入鏈中,進(jìn)行步驟s610。該步驟中,只需將邏輯單元信息寫入pageO的OOB即可,不必要將邏輯單元信息寫入每個OOB。步驟s607、判斷BlockO上偏移為Offset的頁的狀態(tài)是否為空閑,是則進(jìn)行步驟s610,否則進(jìn)行步驟s608。步驟s608、設(shè)置Blockl等于BlockO,BlockO等于Blockl的R印laceBlock,進(jìn)行步驟s605。如果Blockl沒有后續(xù)替代塊時,其ReplaceBlock中為無效標(biāo)示值。步驟s609、找一個空閑塊BlockO,將邏輯單元信息寫入pageO的OOB。步驟s610、將buffer拷貝到塊BlockO上偏移為Offset的頁中。下面結(jié)合一個具體的應(yīng)用場景闡述NFTL對于512字節(jié)頁的NandFlash的具體操作。假設(shè)》茲盤文件系統(tǒng)新建一個文件;然后對文件進(jìn)行修改;最后讀取該文件。則包4舌以下流程(1)向扇區(qū)256、257、258寫入數(shù)據(jù)。具體的,如圖7A所示,NFTL找到一個空閑塊BlockN,并在第0頁的OOB內(nèi)記錄該塊保存的是邏輯單元4;NFTL將扇區(qū)256、257、258,分別寫入頁O、1、2。其中邏輯單元的每一個扇區(qū)對應(yīng)Black中的每一個頁。(2)修改扇區(qū)257、258的數(shù)據(jù),并新增了扇區(qū)259的數(shù)據(jù)。具體的,如圖7B所示,NFTL再找一塊空閑的擦除塊BlockM,并在第0頁的OOB內(nèi)記錄該塊保存的是邏輯單元4;在BlockN的第0頁的OOB內(nèi)記錄,下一個擦寫塊號(替換塊號)為M;NFTL將扇區(qū)257、258新的數(shù)據(jù)寫入BlockM的第1頁和第2頁;NFTL將扇區(qū)259的數(shù)據(jù)寫入BlockN的第3頁。(3)修改扇區(qū)258、259的內(nèi)容。NFTL再找一塊空閑的擦除塊BlockK,并在第0頁的OOB內(nèi)記錄該塊保存的是邏輯單元4;在BlockM的第0頁的OOB內(nèi)記錄,下一個擦寫塊號(替換塊號)為K;NFTL將扇區(qū)258新的數(shù)據(jù)寫入BlockK的第2頁;NFTL將扇區(qū)259新的數(shù)據(jù)寫入BlockM的第3頁。(4)讀取該文寸牛。則讀取扇區(qū)256:NFTL返回BlcokN頁0的數(shù)據(jù);讀取扇區(qū)257:NFTL返回BlockM頁1的數(shù)據(jù);讀取扇區(qū)258:NFTL返回BlockK頁2的數(shù)據(jù);讀取扇區(qū)259:NFTL返回BlockM頁3的數(shù)據(jù)。如前文所述,由于2048字節(jié)頁的NandFlash與512字節(jié)頁的NandFlash特性不同,上述的512字節(jié)頁NandFlash的讀寫方法不能直接運(yùn)用于2048字節(jié)的NandFlash。2048字節(jié)頁NandFlash與512字節(jié)頁NandFlash間的區(qū)別主要有以下兩點(diǎn)(1)2048字節(jié)頁NandFlash每頁的數(shù)據(jù)大小為2048字節(jié),OOB大小為64字節(jié);2048字節(jié)頁NandFlash頁結(jié)構(gòu)如圖8所示,包括2048Bytes的Data以及64Bytes的OOB。(2)2048字節(jié)頁NandFlash要求順序?qū)憠K內(nèi)的頁,而512字節(jié)頁NandFlash沒有這一要求。針對上述問題,本發(fā)明提供一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法。如圖9所示,包括步驟s901、接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀操作或?qū)懖僮鳌2襟Es902、根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作、或塊內(nèi)頁的順序?qū)懖僮鳌F渲?,所?12字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊。具體的,由于2048字節(jié)頁NandFlash可以對每頁進(jìn)行部分寫,所以可以將每頁進(jìn)行圖10A或圖10B所示的劃分。圖10A所示的劃分方法中,將所有的DATA統(tǒng)一置于頁的前部,將所有的OOB統(tǒng)一置于頁的后部。圖IOB所示的劃分方法中,將DATA以及對應(yīng)的OOB連續(xù)放置。以下以采用圖10B所示的劃分方式為例說明本發(fā)明的具體實(shí)施方式。本發(fā)明中,上報給MTD核心層的塊內(nèi)的頁數(shù)將是原來的4倍,即假如每塊內(nèi)有64個2048字節(jié)的頁,則上報給MTD核心層的是每塊內(nèi)有256個512字節(jié)頁。對于2048字節(jié)頁NandFlash,OOB的數(shù)據(jù)結(jié)構(gòu)如圖11所示,其中各項(xiàng)的內(nèi)容如表2所示。表2.本發(fā)明中修改后的NFTLOOB數(shù)據(jù)結(jié)構(gòu)<table>tableseeoriginaldocumentpage20</column></row><table>對于2048字節(jié)頁的NandFlash,NFTL讀取扇區(qū)的方法如圖12A所示,包括步驟s121、接收磁盤文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū)。步驟s122、根據(jù)磁盤扇區(qū)號,計算得到該磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移。步驟s123、根據(jù)邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全O。步驟s124、存在對應(yīng)的塊鏈時,根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該磁盤扇區(qū)在邏輯單元中的偏移,查找到保存該磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將該512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。上述步驟sl24中,具體的,對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁。則該查找到的塊上的512字節(jié)頁即為保存該磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。如圖12B所示,該讀取扇區(qū)的一具體實(shí)現(xiàn)流程包括步驟sl201、磁盤文件系統(tǒng)傳入?yún)?shù)扇區(qū)號和buffer(緩存)。步驟sl202、NFTL計算邏輯單元號和扇區(qū)在邏輯單元中的偏移。假設(shè)Unit為邏輯單元號,Offset為扇區(qū)在邏輯單元中的偏移,則Unit=INT(扇區(qū)號/256);Offset=扇區(qū)號%256。步驟sl203、NFTL查找保存本邏輯單元的塊鏈。步驟sl204、判斷塊鏈?zhǔn)欠翊嬖?,不存在則進(jìn)行步驟s1205,否則進(jìn)行步驟s1206。步驟sl205、塊鏈不存在時,設(shè)置buffer的內(nèi)容為全零。步驟sl206、記錄塊鏈的首塊為Blockl,設(shè)置BlockO等于Blockl。步驟sl207、判斷BlockO是否為有效塊,是則進(jìn)4亍步驟s1208,否則進(jìn)行步驟sl211。步驟s1208、從0到255依次遍歷Block0上的頁。步驟sl209、判斷是否存在OOBSector等于Offset的頁,是則進(jìn)行步驟sl211'否則進(jìn)行步驟s1210。步驟sl210、判斷BlockO是否為塊鏈?zhǔn)讐K,是則進(jìn)行步驟s1205,否則進(jìn)行步驟s1212。步驟sl211、設(shè)置Blockl等于BlockO,BlockO等于Blockl的ReplaceBlock,返回步驟sl207。步驟s1212、將塊Blockl上Sector為Offset的頁的內(nèi)容拷貝到buffer。對于2048字節(jié)頁的NandFlash,NFTL寫扇區(qū)的方法如圖13A所示,包括步驟s131、接收磁盤文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括》茲盤扇區(qū)號和緩存區(qū)。步驟s132、根據(jù)磁盤扇區(qū)號,計算得到該磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移。步驟s133、根據(jù)邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時進(jìn)行步驟s134,否則進(jìn)行步驟s135。步驟s134、獲取一空閑塊,將邏輯單元信息寫入所述空閑塊第0頁的OOB,并在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù)。在該空閑頁的OOB的Sector中寫入Offset的值,并將該空閑頁的OOB的Status設(shè)置為Used。步驟s135、根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該i茲盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù),沒有則進(jìn)行步驟s136,否則進(jìn)行步驟s137。步驟s136、在塊鏈?zhǔn)讐K的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);在該空閑頁的OOB的Sector中寫入Offset的值,并將該空閑頁的OOB的Status設(shè)置為Used。步驟sl37、進(jìn)一步查找塊鏈后續(xù)塊,獲取保存該磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷該塊的替換塊是否存在,存在則進(jìn)行步驟sl38,否則進(jìn)行步驟sl39。步驟sl38、在該替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù)。步驟sl39、獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,并在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù)。在該空閑頁的OOB的Sector中寫入Offset的值,并將該空閑頁的OOB的Status設(shè)置為Used。上述步驟sl35中,判斷首塊上是否有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù)的方法具體為判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該i茲盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù)。上述步驟sl37中,進(jìn)一步查找塊鏈后續(xù)塊,獲取保存該磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊的方法具體為對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在保存該》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。如圖13B所示,該寫扇區(qū)的一具體實(shí)現(xiàn)流程包括步驟sl301、磁盤文件系統(tǒng)傳入?yún)?shù)扇區(qū)號和buffer(緩存)。步驟sl302、NFTL計算邏輯單元號和扇區(qū)在邏輯單元中的偏移。假設(shè)Unit為邏輯單元號,Offset為扇區(qū)在邏輯單元中的偏移,則Unit=INT(扇區(qū)號/256);Offset=扇區(qū)號%256。步驟sl303、判斷本邏輯單元是否有對應(yīng)的塊鏈,是則進(jìn)行步驟s1304,否則進(jìn)行步驟s1309。步驟sl304、記錄塊鏈的首塊為Blockl,BlockO等于Blockl。步驟sl305、判斷BlockO是否為有效塊,不是則進(jìn)行步驟s1306,否則進(jìn)行步驟sl307。步驟sl306、找一個空閑塊Block0;將邏輯單元信息寫入page0的OOB;將本塊號寫入Blockl最后的使用頁的OOB中,進(jìn)行步驟s1310。步驟sl307、判斷在Block0上是否存在OOBSector等于Offset的頁,是則進(jìn)行步驟sl308,否則進(jìn)行步驟s1310。步驟sl308、設(shè)置Blockl等于BlockO,BlockO等于Blockl的R印laceBlock,進(jìn)行步驟sl305。步驟sl309、找一個空閑塊BlockO,將邏輯單元信息寫入page0的OOB。步驟sl310、找到BlockO上第一個空閑頁;將buffer拷貝到該空閑頁中;在該空閑頁的OOB的Sector中寫入Offset的值,并將該空閑頁的OOB的Status23設(shè)置為Used。對于2048字節(jié)頁的NandFlash,下面結(jié)合一個具體的應(yīng)用場景闡述NFTL的具體操作。假設(shè)磁盤文件系統(tǒng)新建一個文件;然后對文件進(jìn)行修改;最后讀取該文件。則包括以下流程一、向扇區(qū)256、257、258寫入數(shù)據(jù)。具體的,如圖14A所示,NFTL找到一個空閑塊BlockN,并在Page0的OOB內(nèi)記錄該塊保存的是邏輯單元1;NFTL將扇區(qū)256、257、258,分別寫入Page0、Page1、Page2。以扇區(qū)256的數(shù)據(jù)寫入為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)寫入過程包括以下步驟(1)根據(jù)扇區(qū)號256,獲取邏輯單元號Unit=256/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=256%256-0。(2)判斷該邏輯單元1不存在對應(yīng)的塊鏈。(3)找一個空閑塊,這里假設(shè)找到的空閑塊為BlockN,將邏輯單元信息寫入BlockN的Page0的OOB。(4)找到BlockN上第一個空閑頁,這里Wli殳找到的空閑頁為Page0,向需要寫入扇區(qū)256的數(shù)據(jù)寫入到Page0中。在該P(yáng)age0的OOB的Sector中寫入Offset的值0,并將Page0的OOB的Status設(shè)置為Used。以扇區(qū)257的數(shù)據(jù)寫入為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)寫入過程包括以下步驟(1)根據(jù)扇區(qū)號257,獲取邏輯單元號Unit=257/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=257%256-1。(2)判斷該邏輯單元1存在對應(yīng)的塊鏈。(3)由于塊鏈的塊首為BlockN,因此設(shè)置Blockl=Block0-BlockN。(4)判斷Block0的值為有效值。(5)判斷在Block0上不存在OOBSector等于Offset(Offset=1)的頁。(6)找到BlockO(即BlockN)上第一個空閑頁,這里找到的空閑頁為Page1,向需要寫入扇區(qū)257的數(shù)據(jù)寫入到Page1中,在該P(yáng)agel的OOB的Sector中寫入Offset的值1,并將該P(yáng)agel的OOB的Status設(shè)置為Used。對于扇區(qū)258的數(shù)據(jù)寫入過程,與上述數(shù)據(jù)257的數(shù)據(jù)寫入過程相似,在此不進(jìn)行重復(fù)介紹。二、修改扇區(qū)257、258的數(shù)據(jù),并新增了扇區(qū)259的數(shù)據(jù)。具體的,如圖14B所示,NFTL再找一塊空閑的擦除塊BlockM,并在Page0的OOB內(nèi)記錄該塊保存的是邏輯單元1;在BlockN的Page2的OOB內(nèi)記錄,下一個擦寫塊號為M;NFTL將扇區(qū)257、258新的數(shù)據(jù)寫入BlockM的Page0和Page1;NFTL將扇區(qū)259的數(shù)據(jù)寫入BlockN的Page3。以修改扇區(qū)257的過程為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)修改過程包括以下步驟(1)根據(jù)扇區(qū)號257,獲取邏輯單元號Unit=257/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=257%256=1。(2)判斷該邏輯單元1存在對應(yīng)的塊鏈。(3)由于塊鏈的塊首為BlockN,因此設(shè)置Blockl=Block0=BlockN。(4)判斷Block0的值為有效值。(5)判斷在Block0上存在Sector等于Offset(Offset=1)的頁。(6)設(shè)置Blockl=BlockN,BlockO=Blockl的替換塊=0xFFFF(即無效塊,其原因?yàn)锽lockl的替換塊并不存在)(7)判斷BlockO的值為無效值。(8)找一個空閑塊,這里布i設(shè)找到的空閑塊為BlockM,將邏輯單元號寫入BlockM的Page0的OOB,將BlockM號寫入Blockl即BlockN的最后使用頁的OOB中。由于BlockN的最后使用頁為Page2,因此將BlockM寫入BlockN的Page2的OOB中。(9)找到BlockO即BlockM的第一個空閑頁,這里<叚設(shè)找到的空閑頁為PageO,向?qū)⑸葏^(qū)257中需要修改的數(shù)據(jù)寫入到BlockM的Page0中。在該P(yáng)ageO的OOB的Sector中寫入Offset的值1,并將該P(yáng)ageO的OOB的Status設(shè)置為Used。以修改扇區(qū)258的過程為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)修改過程包括以下步驟(1)根據(jù)扇區(qū)號258,獲取邏輯單元號Unit=258/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=258%256=2。(2)判斷該邏輯單元1存在對應(yīng)的塊鏈。(3)由于塊鏈的塊首為BlockN,因此設(shè)置Blockl=Block0=BlockN。(4)判斷Block0的值為有效值。(5)判斷在Block0上存在Sector等于Offset(Offset=1)的頁。(6)設(shè)置Blockl=BlockN,BlockO=Blockl的替換塊=BlockM。(7)判斷BlockO的值為有效值。(8)判斷在BlockM上不存在Sector等于Offset(Offset=2)的頁。(9)找到BlockO即BlockM的第一個空閑頁,這里卩艮設(shè)找到的空閑頁為Page1,向?qū)⑸葏^(qū)258中需要修改的數(shù)據(jù)寫入到BlockM的Pagel中。在該P(yáng)agel的OOB的Sector中寫入Offset的值2,并將該P(yáng)agel的OOB的Status設(shè)置為Used。對于扇區(qū)259的數(shù)據(jù)寫入過程,與上述數(shù)據(jù)257、258的數(shù)據(jù)寫入過程相似,在此不進(jìn)行重復(fù)介紹。三、々務(wù)改扇區(qū)258、259的內(nèi)容。具體的,如圖14C所示,NFTL再找一塊空閑的擦除塊BlockK,并在Page0的OOB內(nèi)記錄該塊保存的是邏輯單元1;在BlockM的Page1的OOB內(nèi)記錄,下一個擦寫塊號為K;NFTL將扇區(qū)258新的數(shù)據(jù)寫入BlockK的Page0;NFTL將扇區(qū)259新的數(shù)據(jù)寫入BlockM的Page2。以修改扇區(qū)258的過程為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)修改過程包括以下步驟(1)根據(jù)扇區(qū)號258,獲取邏輯單元號Unit=258/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=258%256=2。(2)判斷該邏輯單元1存在對應(yīng)的塊鏈。(3)由于塊鏈的塊首為BlockN,因此設(shè)置Blockl=BlockO=BlockN。(4)判斷Block0的值為有效值。(5)判斷在Block0上存在OOBSector等于Offset(Offset=2)的頁。(6)設(shè)置Blockl=BlockN,BlockO=Blockl的替換塊=BlockM。(7)判斷BlockO的值為有效值。(8)判斷在BlockO上存在Sector等于Offset(Offset=2)的頁。(9)設(shè)置Blockl=BlockM,BlockO=Blockl的替換塊=0xFFFF(即無效塊,其原因?yàn)锽lockl的替換塊并不存在)(10)判斷BlockO的值為無效值。(11)找一個空閑塊BlockO,這里假設(shè)找到的空閑塊為BlockK,將邏輯單元號寫入BlockK的Page0的OOB,將BlockK號寫入Blockl即BlockM的最后使用頁的OOB中。由于BlockM的最后使用頁為Page1,因此將BlockK寫入BlockM的Page1的OOB中。(12)找到BlockO即BlockK的第一個空閑頁,這里々支設(shè)找到的空閑頁為Page0,將扇區(qū)258中需要修改的數(shù)據(jù)寫入到BlockK的Page0中,在該P(yáng)ageO的OOB的Sector中寫入Offset的值2,并將該P(yáng)ageO的OOB的Status設(shè)置為Used。以修改扇區(qū)259的過程為例,結(jié)合上述圖13所述的流程,該數(shù)據(jù)修改過程包括以下步驟(1)根據(jù)扇區(qū)號259,獲取邏輯單元號Unit=259/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=259%256-3。(2)判斷該邏輯單元1存在對應(yīng)的塊鏈。(3)由于塊鏈的塊首為BlockN,因此設(shè)置Blockl=BlockO-BlockN。(4)判斷BlockO的值為有效值。(5)判斷在Block0上存在OOBSector等于Offset(Offset=3)的頁。(6)設(shè)置Blockl=BlockN,BlockO-Blockl的替換塊=BlockM。(7)判斷BlockO的值為有效值。(8)判斷在BlockO上不存在OOBSector等于Offset(Offset=3)的頁。(9)找到BlockO(即BlockM)上第一個空閑頁,這里找到的空閑頁為Page2,將扇區(qū)259中需要{務(wù)改的數(shù)據(jù)寫入到BlockM的Page2中,在該P(yáng)age2的OOB的Sector中寫入Offset的值3,并將該P(yáng)age2的OOB的Status設(shè)置為Used。四、讀取該文件。讀取扇區(qū)256:NFTL返回BlcokN中Page0的數(shù)據(jù);讀取扇區(qū)257:NFTL返回BlockM中Page0的數(shù)據(jù);讀取扇區(qū)258:NFTL返回BlockK中Page0的數(shù)據(jù);讀取扇區(qū)259:NFTL返回BlockM中Page2的數(shù)據(jù)。以讀取扇區(qū)256的過程為例,結(jié)合上述圖12所述的流程,該數(shù)據(jù)讀取過程包括以下步驟(1)根據(jù)扇區(qū)號256,獲取邏輯單元號Unit=256/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=256%256=0。(2)找到該邏輯單元1對應(yīng)的塊鏈。(3)設(shè)置Blockl=塊鏈的首塊=BlockN,BlockO=BlockN。(4)判斷BlockO的值為有效值。(5)判斷在BlockN上存在Sector等于Offset(Offset=0)的頁。(6)設(shè)置Blockl=BlockN,BlockO=BlockN的替換塊=BlockM。(7)判斷BlockO的值為有效值。(8)判斷在BlockM上不存在Sector等于Offset(Offset=0)的頁。(9)判斷BlockM不是塊鏈的首塊。(10)將Blockl即BlockN上Sector等于Offset(Offset=0)的頁的內(nèi)容讀取出來拷貝到Buffer中,該頁即為BlockN中的Page0。以讀取扇區(qū)258的過程為例,結(jié)合上述圖12所述的流程,該數(shù)據(jù)讀取過程包括以下步驟(I)根據(jù)扇區(qū)號258,獲取邏輯單元號Unit=258/256=1,扇區(qū)在邏輯單元Unit中的偏移Offset=258%256=2。(2)找到該邏輯單元1對應(yīng)的塊鏈。(3)設(shè)置Blockl=塊鏈的首塊=BlockN,Block0=BlockN。(4)判斷BlockO的值為有效值。(5)判斷在BlockN上存在Sector等于Offset(Offset=2)的頁。(6)設(shè)置Blockl=BlockN,BlockO=BlockN的替換塊=BlockM。(7)判斷BlockO的值為有效值。(8)判斷在BlockM上存在Sector等于Offset(Offset=2)的頁。(9)設(shè)置Blockl=BlockM,BlockO-BlockM的替換塊=BlockK。(10)判斷BlockO的值為有效值。(II)判斷在BlockK上存在Sector等于Offset(Offset=2)的頁。(12)設(shè)置Blockl=BlockK,BlockO=BlockK的替換塊=無效塊。(13)判斷BlockO的值為無效值。(14)將Blockl即BlockK上Sector等于Offset(Offset=2)的頁的內(nèi)容讀取出來拷貝到Buffer中,該頁即為BlockK中的Page0。讀取扇區(qū)257、259的過程與上述讀取扇區(qū)258的過程相似,在此不進(jìn)行重復(fù)描述。本發(fā)明還提供一種NandFlash的控制裝置,用于將2048字節(jié)頁的NandFlash模擬成硬盤,如圖15所示,包括操作接收單元10,用于接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀操作或?qū)懖僮鳎籓OB信息獲取單元20,用于獲取NandFlash中512字節(jié)頁的OOB信息;所述512字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊;讀操作單元30,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作;寫操作單元40,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述》茲盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行塊內(nèi)頁的順序?qū)懖僮?。另外,本發(fā)明中的控制裝置如圖16所示,還可以包括劃分單元50,所述劃分單元具體用于將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且在每一個512字節(jié)頁后面存儲所述512字節(jié)頁對應(yīng)的OOB信息;或?qū)?048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且4個512字節(jié)頁連續(xù)放置,所述4個512字節(jié)頁之前或之后存儲依次存儲每一個512字節(jié)頁對應(yīng)的OOB信息。另外,讀才喿作單元30可以進(jìn)一步包括讀操作接收子單元31,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),所述參數(shù)包括磁盤扇區(qū)號和緩存區(qū);讀操作獲取子單元32,用于根據(jù)磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;讀搡作執(zhí)行子單元33,用于根據(jù)邏輯單元號查找所述邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全0;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述》茲盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將所述512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。讀操作執(zhí)行子單元根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁時,具體用于對所述邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移、且所述塊的替換塊不存在或所述塊上的替換塊上不存在OOBSector等于所述》茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁;則所述查找到的塊上的512字節(jié)頁即為保存所述^茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。另外,寫操作單元40可以進(jìn)一步包括寫操作接收子單元41,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū);寫操作獲取子單元42,用于根據(jù)所述磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;寫操作執(zhí)行子單元43,用于才艮據(jù)所述邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述^f茲盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了所述;茲盤扇區(qū)的數(shù)據(jù),沒有則在所述首塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);否則獲取上次保存所述i茲盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷上次保存所述磁盤扇區(qū)數(shù)據(jù)的塊的替換塊是否存在,存在則在所述替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用。盤扇區(qū)的數(shù)據(jù)時,還用于判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù);寫操作執(zhí)行子單元43獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊時,還用于對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在上次保存所述磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。本發(fā)明提供的上述方法和裝置中,通過將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,并根據(jù)NandFlash中512字節(jié)頁的OOB信息,實(shí)現(xiàn)了將2048字節(jié)頁的NandFlash模擬成硬盤,并適應(yīng)了大頁NandFlash需要在塊內(nèi)順序?qū)懙奶攸c(diǎn),從而可以在大頁NandFlash上運(yùn)行石茲盤文件系統(tǒng)。通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺設(shè)備執(zhí)行本發(fā)明各個實(shí)施例所述的方法。以上公開的僅為本發(fā)明的幾個具體實(shí)施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。權(quán)利要求1、一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法,其特征在于,包括接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀操作或?qū)懖僮鳎桓鶕?jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作、或塊內(nèi)頁的順序?qū)懖僮鳎黄渲?,所?12字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊。2、如權(quán)利要求1所述的方法,其特征在于,所述512字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到包括將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且在每一個512字節(jié)頁后面存儲所述512字節(jié)頁對應(yīng)的OOB信息;或?qū)?048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且4個512字節(jié)頁連續(xù)放置,所述4個512字節(jié)頁之前或之后存儲依次存儲每一個512字節(jié)頁對應(yīng)的OOB信息。3、如權(quán)利要求1或2所述的方法,其特征在于,所述每個512字節(jié)頁的OOB信息包括所述512字節(jié)頁中512字節(jié)數(shù)據(jù)的校驗(yàn)碼;所述512字節(jié)頁的狀態(tài)為空閑Free或^皮占用Used;所述512字節(jié)頁對應(yīng)的邏輯單元Unit;所述512字節(jié)頁所在塊的替換塊;所述512字節(jié)頁對應(yīng)的邏輯單元Unit中的邏輯扇區(qū)Sector。4、如權(quán)利要求3所述的方法,其特征在于,所述獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作具體包括接收磁盤文件系統(tǒng)發(fā)送的參數(shù),所述參數(shù)包括磁盤扇區(qū)號和緩存區(qū);根據(jù)磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;根據(jù)邏輯單元號查找所述邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全0;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將所述512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。5、如權(quán)利要求4所述的方法,其特征在于,所述存在對應(yīng)的塊鏈時,根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁包括對所述邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移、且所述塊的替換塊不存在或所述塊上的替換塊上不存在OOBSector等于所述i茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁;則所述查找到的塊上的512字節(jié)頁即為保存所述磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。6、如權(quán)利要求3所述的方法,其特征在于,所述獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)4亍塊內(nèi)頁的順序?qū)懖僮靼ń邮沾疟P文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū);根據(jù)所迷磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;根據(jù)所述邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則繼續(xù);存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了所述磁盤扇區(qū)的數(shù)據(jù),沒有則在所述首塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);否則繼續(xù);獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷上次保存所述^f茲盤扇區(qū)數(shù)據(jù)的塊的替換塊是否存在,存在則在所述替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則繼續(xù);獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該^茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用。7、如權(quán)利要求6所述的方法,其特征在于,所述判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了》茲盤扇區(qū)的數(shù)據(jù)具體包括判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了磁盤扇區(qū)的數(shù)據(jù);所述獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊具體包括對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該,茲盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在上次保存所述》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。8、如權(quán)利要求4或6所述的方法,其特征在于,所述根據(jù)所述磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移包括所述硬盤中的》茲盤扇區(qū)號除以256并進(jìn)行取整所得到的商,對應(yīng)邏輯單元;所述硬盤中的磁盤扇區(qū)號除以256所得到的余數(shù),對應(yīng)所述邏輯單元中的偏移。9、一種NandFlash的控制裝置,用于將2048字節(jié)頁的NandFlash模擬成硬盤,其特征在于,包括操作接收單元,用于接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀搡作或?qū)懖僮?;OOB信息獲取單元,用于獲取NandFlash中512字節(jié)頁的OOB信息;所迷512字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊;讀操作單元,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作;寫操作單元,用于根據(jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行塊內(nèi)頁的順序?qū)懖僮鳌?0、如權(quán)利要求9所述的控制裝置,其特征在于,還包括劃分單元,所述劃分單元具體用于將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且在每一個512字節(jié)頁后面存儲所述512字節(jié)頁對應(yīng)的OOB信息;或?qū)?048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,且4個512字節(jié)頁連續(xù)放置,所述4個512字節(jié)頁之前或之后存儲依次存儲每一個512字節(jié)頁對應(yīng)的OOB信息。11、如權(quán)利要求9所迷的控制裝置,其特征在于,所述讀操作單元包括讀操作接收子單元,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),所述參數(shù)包括磁盤扇區(qū)號和緩存區(qū);讀操作獲取子單元,用于根據(jù)磁盤扇區(qū)號,計算得到所述磁盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;讀操作執(zhí)行子單元,用于根據(jù)邏輯單元號查找所述邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時,向緩存區(qū)返回全0;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所述扇區(qū)最新數(shù)據(jù)的512字節(jié)頁,將所述512字節(jié)頁的數(shù)據(jù)拷貝到緩存區(qū)。12、如權(quán)利要求ll所述的控制裝置,其特征在于,所述讀操作執(zhí)行子單元根據(jù)該邏輯單元號對應(yīng)的塊鏈、以及該磁盤扇區(qū)在邏輯單元中的偏移,查找到保存所迷扇區(qū)最新數(shù)據(jù)的512字節(jié)頁時,具體用于對所述邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該》茲盤扇區(qū)在邏輯單元中的偏移、且所述塊的替換塊不存在或所述塊上的替換塊上不存在OOBSector等于所述》茲盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁;則所述查找到的塊上的512字節(jié)頁即為^f呆存所述》茲盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。13、如權(quán)利要求9所述的控制裝置,其特征在于,所述寫操作單元包括寫操作接收子單元,用于接收磁盤文件系統(tǒng)發(fā)送的參數(shù),該參數(shù)包括磁盤扇區(qū)號和緩存區(qū);寫操作獲取子單元,用于根據(jù)所述》茲盤扇區(qū)號,計算得到所述》茲盤扇區(qū)對應(yīng)的邏輯單元號和在邏輯單元中的偏移;寫搡作執(zhí)行子單元,用于根據(jù)所述邏輯單元號查找該邏輯單元號對應(yīng)的塊鏈,不存在對應(yīng)的塊鏈時獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,在所述空閑塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;存在對應(yīng)的塊鏈時,根據(jù)所述邏輯單元號對應(yīng)的塊鏈、以及所述磁盤扇區(qū)在邏輯單元中的偏移,判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了所述^茲盤扇區(qū)的數(shù)據(jù),沒有則在所述首塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù);否則獲取上次保存所述》茲盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊,并判斷上次保存所述f茲盤扇區(qū)數(shù)據(jù)的塊的替換塊是否存在,存在則在所述替換塊的第一個空閑頁中寫入上述緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用;否則獲取一空閑塊加入塊鏈,將邏輯單元信息寫入所述空閑塊第0頁的OOB,將所述空閑塊的塊號寫入保存有該磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁所在的塊中最后使用頁的OOB中,在所述空閑塊的第一個空閑頁中寫入上迷緩沖區(qū)中的數(shù)據(jù),在所述空閑頁的OOB的Sector中寫入偏移的值,并將該空閑頁的OOB的狀態(tài)設(shè)置為已使用。14、如權(quán)利要求13所述的控制裝置,其特征在于,所述寫操作執(zhí)行子單元判斷對應(yīng)的塊鏈?zhǔn)讐K上是否有512字節(jié)頁保存了》茲盤扇區(qū)的數(shù)據(jù)時,還用于判斷首塊上是否存在一512字節(jié)頁,該512字節(jié)頁的OOBSector等于該;茲盤扇區(qū)在邏輯單元中的偏移,若存在則判斷首塊上有512字節(jié)頁保存了i茲盤扇區(qū)的數(shù)據(jù);所述寫操作執(zhí)行子單元獲取上次保存所述磁盤扇區(qū)數(shù)據(jù)的512字節(jié)頁所在的塊時,還用于對該邏輯單元號對應(yīng)的塊鏈中的塊依次進(jìn)行查找,查找到某塊上512字節(jié)頁的OOBSector等于該i茲盤扇區(qū)在邏輯單元中的偏移、且該塊的替換塊不存在或該塊上的替換塊上不存在OOBSector等于該磁盤扇區(qū)在邏輯單元中的偏移的512字節(jié)頁,則該查找到的塊上存在上次保存所述磁盤扇區(qū)最新數(shù)據(jù)的512字節(jié)頁。全文摘要本發(fā)明公開了一種將2048字節(jié)頁的NandFlash模擬成硬盤的方法和裝置。該方法包括接收磁盤文件系統(tǒng)對磁盤扇區(qū)的讀操作或?qū)懖僮鳎桓鶕?jù)NandFlash中512字節(jié)頁的OOB信息,獲取與所述磁盤扇區(qū)對應(yīng)的512字節(jié)頁,并對所述獲取的512字節(jié)頁進(jìn)行讀操作、或塊內(nèi)頁的順序?qū)懖僮?;其中,所?12字節(jié)頁由每一個2048字節(jié)頁預(yù)先劃分得到;所述OOB信息包括所述512字節(jié)頁對應(yīng)的邏輯單元、狀態(tài)、邏輯扇區(qū)以及所在塊的替換塊。本發(fā)明中通過將2048字節(jié)頁的NandFlash中每個塊的每一頁劃分為4個512字節(jié)頁,并根據(jù)NandFlash中512字節(jié)頁的OOB信息實(shí)現(xiàn)了將2048字節(jié)頁的NandFlash模擬成硬盤,從而可以在大頁NandFlash上運(yùn)行磁盤文件系統(tǒng)。文檔編號G06F17/30GK101364166SQ20081021135公開日2009年2月11日申請日期2008年9月23日優(yōu)先權(quán)日2008年9月23日發(fā)明者王永釗申請人:杭州華三通信技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1