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

一種操作Flash的方法和裝置的制作方法

文檔序號(hào):6334480閱讀:253來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種操作Flash的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種操作Flash的方法和裝置。
背景技術(shù)
閃存Flash在沒(méi)有電流供應(yīng)的條件下也能夠長(zhǎng)久地保存數(shù)據(jù),其存儲(chǔ)特性相當(dāng)于 硬盤(pán),這項(xiàng)特性使得Flash成為各類(lèi)便攜型數(shù)字設(shè)備使用的存儲(chǔ)介質(zhì)。閃存Flash通常情況下被劃分為多個(gè)扇區(qū),多個(gè)字節(jié)為一頁(yè),因此每個(gè)扇區(qū)包括 多個(gè)頁(yè)。對(duì)Flash進(jìn)行讀寫(xiě)時(shí),以頁(yè)為單位進(jìn)行操作。在要寫(xiě)入數(shù)據(jù)的頁(yè)為不可用狀態(tài)如 被其它文件數(shù)據(jù)占用時(shí),對(duì)該頁(yè)執(zhí)行擦除操作,在Flash中無(wú)空閑頁(yè)或空閑頁(yè)不夠時(shí),以扇 區(qū)為單位執(zhí)行擦除操作,因此是以扇區(qū)為單位的回收機(jī)制。通常情況下便攜型數(shù)字設(shè)備使用的Flash容量比較小,因此扇區(qū)也比較小。如智 能卡芯片內(nèi)部的Flash大小一般在256k以?xún)?nèi),其扇區(qū)均在512字節(jié)以?xún)?nèi),有64字節(jié)/128 字節(jié)/256字節(jié)/512字節(jié)四種。對(duì)于這種小容量Flash的操作方式都是直接對(duì)其物理地址 進(jìn)行操作,具體為在執(zhí)行寫(xiě)操作時(shí),根據(jù)維護(hù)的頁(yè)信息表,獲取要寫(xiě)入數(shù)據(jù)的頁(yè)是否為空閑頁(yè),其中 要寫(xiě)入數(shù)據(jù)的頁(yè)是由操作系統(tǒng)根據(jù)特定規(guī)則確定的;在要寫(xiě)入數(shù)據(jù)的頁(yè)為空閑頁(yè)時(shí),根據(jù)該頁(yè)物理地址將要寫(xiě)入的數(shù)據(jù)寫(xiě)入;在要寫(xiě) 入數(shù)據(jù)的頁(yè)不是空閑頁(yè)時(shí),將該頁(yè)進(jìn)行擦除。在Flash中無(wú)空閑頁(yè)或空閑頁(yè)不夠時(shí),以扇區(qū) 為單位執(zhí)行擦除操作實(shí)現(xiàn)回收。對(duì)Flash采用直接對(duì)其物理地址進(jìn)行操作的方式,在Flash容量比較小時(shí),執(zhí)行上 述頁(yè)擦除及扇區(qū)擦除的頻率都比較高,但因?yàn)樯葏^(qū)小,擦寫(xiě)速度快,所以即使一條指令有幾 次對(duì)Flash的寫(xiě)操作都需要進(jìn)行擦除也可以滿(mǎn)足產(chǎn)品的性能要求。但是目前越來(lái)越多的便攜型數(shù)字設(shè)備使用大容量的Flash如NANDFlash, NANDFlash最大的優(yōu)點(diǎn)在于容量可以做得很大,超過(guò)512MB容量的NAND產(chǎn)品相當(dāng)普遍,如采 用較多為IM容量,扇區(qū)大小為4k的Flash。對(duì)于這些大容量大扇區(qū)的片內(nèi)Flash,操作系統(tǒng) 可用的用戶(hù)空間即用戶(hù)區(qū)比較小,如為64K。對(duì)于扇區(qū)劃分較大,用戶(hù)區(qū)較小的片內(nèi)Flash, 如果采用上述直接對(duì)物理地址操作的方式進(jìn)行讀寫(xiě),由于用戶(hù)區(qū)比較小也會(huì)比較頻繁地出 現(xiàn)頁(yè)擦除及扇區(qū)擦除操作。而扇區(qū)擦除操作中,由于扇區(qū)比較大因此擦除操作占用的時(shí)間 長(zhǎng),在實(shí)際應(yīng)用中速度太慢無(wú)法被用戶(hù)接收,而且每操作一個(gè)扇區(qū)內(nèi)的數(shù)據(jù)時(shí)都要將全部 4K數(shù)據(jù)擦除對(duì)Flash的壽命也是一個(gè)很大的影響。目前對(duì)于管理扇區(qū)較大的NANDFlash,有的采用文件系統(tǒng)下一層的文件分配表 FAT管理機(jī)制如FAT16、FAT32等。文件分配表FAT管理機(jī)制功能強(qiáng)大,適于管理存儲(chǔ)空間 比較大、文件管理復(fù)雜的場(chǎng)景,多應(yīng)用于計(jì)算機(jī)。但是在智能卡應(yīng)用中,對(duì)于扇區(qū)劃分較大, 用戶(hù)區(qū)較小的片內(nèi)Flash來(lái)說(shuō),采用FAT管理機(jī)制復(fù)雜有余,又不能物盡其用。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種操作Flash的方法和裝置,用以?xún)?yōu)化現(xiàn)有扇區(qū)劃分較大, 用戶(hù)區(qū)較小的片內(nèi)Flash操作方法。本發(fā)明提供一種操作Flash的方法,該方法包括接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);查找所述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè),所述映射表用于建立邏 輯頁(yè)與映射頁(yè)的映射關(guān)系;根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中的數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè),并在所 述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù),所述指定頁(yè)為在映射區(qū)中指定的一個(gè)空閑頁(yè);將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè)。本發(fā)明還提供了一種操作Flash的裝置,包括寫(xiě)邏輯頁(yè)確定單元,用于接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);寫(xiě)邏輯頁(yè)確定單元,用于接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);第一查找單元,用于查找所述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè),所 述映射表用于反映所有邏輯頁(yè)的映射頁(yè);組織數(shù)據(jù)單元,用于根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中的數(shù)據(jù)組織要寫(xiě)入 的數(shù)據(jù);映射頁(yè)選取單元,用于從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作 為第二映射頁(yè),并在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù),所述指定頁(yè)為在映射區(qū)中指定 的一個(gè)空閑頁(yè);映射關(guān)系修改單元,用于將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為 所述第二映射頁(yè)。利用本發(fā)明提供的操作Flash的方法和裝置,具有以下有益效果通過(guò)建立映射 表,并對(duì)映射表中映射頁(yè)動(dòng)態(tài)更新,由于映射頁(yè)可以從Flash中除用戶(hù)區(qū)外的設(shè)定輔助區(qū) 選取,因此所操作的Flash空間變大,對(duì)于扇區(qū)劃分較大,用戶(hù)區(qū)較小的片內(nèi)Flash來(lái)說(shuō),減 少了扇區(qū)擦除操作次數(shù),提高了 Flash壽命及讀取速度。


圖1為依照本發(fā)明實(shí)施例中示例的對(duì)Flash劃分后的物理結(jié)構(gòu);圖2為本發(fā)明提供的操作Flash的方法流程圖;圖3為依照本發(fā)明實(shí)施例中采用動(dòng)態(tài)建立映射方式時(shí)對(duì)應(yīng)的操作Flash的流程圖;圖4為依照本發(fā)明實(shí)施例中操作Flash的方法中實(shí)現(xiàn)刪除操作的流程圖;圖5為依照本發(fā)明實(shí)施例中操作Flash的方法中實(shí)現(xiàn)讀取操作的流程圖;圖6為依照本發(fā)明實(shí)施例中操作Flash的詳細(xì)過(guò)程流程圖;圖7為依照本發(fā)明實(shí)施例中操作Flash的裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明提出的操作Flash的方法和裝置進(jìn)行更詳細(xì)地說(shuō)明。本發(fā)明能夠避免現(xiàn)有智能卡操作系統(tǒng)運(yùn)行時(shí),使用復(fù)雜的Flash管理模式實(shí)現(xiàn)其 操作的同時(shí),又能夠快速地進(jìn)行Flash的操作,并保證Flash的損耗在一定程度上均衡。對(duì)于智能卡操作Flash時(shí),雖然Flash的容量非常大,例如有1M,但是對(duì)于智能卡 操作系統(tǒng)來(lái)說(shuō),能夠進(jìn)行操作的區(qū)域即用戶(hù)區(qū)是有限,如用戶(hù)區(qū)為64K,因此進(jìn)行Flash操 作時(shí),是針對(duì)這64K可見(jiàn)的用戶(hù)區(qū)進(jìn)行數(shù)據(jù)讀寫(xiě)。本發(fā)明將對(duì)Flash中用戶(hù)區(qū)劃分得到的 頁(yè)作為邏輯頁(yè),操作Flash時(shí)只面向這些邏輯頁(yè)進(jìn)行Flash操作。依照本發(fā)明的實(shí)施例中,提供一種操作Flash的方法,如圖2所示,該方法包括步驟S101,接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);寫(xiě)操作指令中對(duì)數(shù)據(jù)的寫(xiě)操作是以頁(yè)為單位的,每次寫(xiě)操作都會(huì)指向一個(gè)要寫(xiě)入 數(shù)據(jù)的邏輯頁(yè)。步驟S102,查找所述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè),該映射表用 于建立邏輯頁(yè)與映射頁(yè)的映射關(guān)系;優(yōu)選地,初始化時(shí)用戶(hù)區(qū)所有邏輯頁(yè)映射到映射區(qū)同一指定頁(yè),所述指定頁(yè)為在 映射區(qū)中指定的一個(gè)空閑頁(yè);在映射表中建立所有邏輯頁(yè)的映射頁(yè),這樣,實(shí)際進(jìn)行寫(xiě)操作時(shí)指向的頁(yè)為其映 射頁(yè)。步驟S103,根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);由于寫(xiě)操作中既包含向一個(gè)空閑頁(yè)中寫(xiě)入數(shù)據(jù)的操作,也包括對(duì)之前寫(xiě)入的某頁(yè) 數(shù)據(jù)進(jìn)行修改的操作。因此,在查找到的第一映射頁(yè)為空閑頁(yè)時(shí),說(shuō)明操作系統(tǒng)還未向此次 寫(xiě)操作指向的邏輯頁(yè)寫(xiě)入數(shù)據(jù),組織數(shù)據(jù)具體為將要寫(xiě)入的數(shù)據(jù)作為寫(xiě)入數(shù)據(jù);在查找到 第一映射頁(yè)中有數(shù)據(jù)時(shí),說(shuō)明操作系統(tǒng)之前針對(duì)此次寫(xiě)操作指向的邏輯頁(yè)寫(xiě)入過(guò)數(shù)據(jù),對(duì) 應(yīng)地要修改這些數(shù)據(jù),因此組織數(shù)據(jù)為根據(jù)寫(xiě)操作指令對(duì)寫(xiě)操作指向的邏輯頁(yè)的第一映射 頁(yè)中數(shù)據(jù)進(jìn)行修改。步驟S104,從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二映射 頁(yè),并在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù);映射區(qū)的存儲(chǔ)空間大于用戶(hù)區(qū)的存儲(chǔ)空間,映射區(qū)的具體位置根據(jù)實(shí)際情況進(jìn)行 設(shè)定,優(yōu)選地,本實(shí)施例中所述映射區(qū)由所述用戶(hù)區(qū)及Flash中除用戶(hù)區(qū)外的設(shè)定輔助區(qū) 組成。本發(fā)明映射表中一個(gè)邏輯頁(yè)對(duì)應(yīng)一個(gè)映射頁(yè),上述第一映射頁(yè)指未進(jìn)行任何操作 前查找到的映射頁(yè),第二映射頁(yè)為進(jìn)行相關(guān)操作后修改后的映射頁(yè)。組織好數(shù)據(jù)要寫(xiě)入時(shí),應(yīng)將組織好的數(shù)據(jù)寫(xiě)入到空閑頁(yè)中。如果映射頁(yè)是指定頁(yè), 說(shuō)明是針對(duì)該邏輯頁(yè)第一次寫(xiě)入數(shù)據(jù),將數(shù)據(jù)寫(xiě)入到映射區(qū)中除指定頁(yè)外的空閑頁(yè)中。優(yōu) 選地,如果寫(xiě)操作指向的邏輯頁(yè)是空閑頁(yè)時(shí),可以將該邏輯頁(yè)本身作為其映射頁(yè)。如果映射 頁(yè)是除指定頁(yè)外的頁(yè),說(shuō)明是針對(duì)該邏輯頁(yè)進(jìn)行數(shù)據(jù)修改,修改后將修改好的數(shù)據(jù)寫(xiě)入到 選取的空閑頁(yè)中。步驟S105,將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為上述第二映射 頁(yè)。因此,更新了邏輯頁(yè)和映射頁(yè)之間的映射關(guān)系。下次對(duì)該邏輯頁(yè)中數(shù)據(jù)進(jìn)行操作時(shí),可 以根據(jù)映射關(guān)系找到上次寫(xiě)入的數(shù)據(jù)。
本發(fā)明提供的上述操作Flash的方法,對(duì)于大扇區(qū)的Flash,用戶(hù)區(qū)較小的智能 卡來(lái)說(shuō),首先,在寫(xiě)操作寫(xiě)入修改好的數(shù)據(jù)時(shí),不用再像以前一樣先將所在的頁(yè)擦除再寫(xiě), 這樣就大大提高了寫(xiě)Flash的速度;其次,由于Flash應(yīng)用中多數(shù)操作都是針對(duì)用戶(hù)區(qū)前 部分,不需要每次寫(xiě)都擦就意味著大大增強(qiáng)了 Flash的使用壽命,使損耗均衡和整個(gè)區(qū)域 的使用效率得到了保證;由于空閑頁(yè)的選取范圍擴(kuò)展為大于用戶(hù)區(qū)的映射區(qū),如擴(kuò)展為由 Flash中的用戶(hù)區(qū)及Flash中除用戶(hù)區(qū)外的設(shè)定輔助區(qū)組成的映射區(qū),因此,F(xiàn)lash操作 時(shí)實(shí)際操作的空間為映射區(qū),通過(guò)映射表實(shí)現(xiàn)了對(duì)Flash中除用戶(hù)區(qū)外的設(shè)定輔助區(qū)的利 用,充分了 Flash中空閑空間,且延長(zhǎng)了 Flash回收的周期,回收次數(shù)少則意味著設(shè)備性能 的極大提高。優(yōu)選地,本實(shí)施例中設(shè)定輔助區(qū)采用與用戶(hù)區(qū)相同的空間劃分方式,所述設(shè)定輔 助區(qū)的區(qū)域由Flash中除用戶(hù)區(qū)外的閑置空間確定;所述映射表存放在映射表區(qū),映射表 區(qū)的區(qū)域由Flash中除映射區(qū)外的閑置空間確定。仍以1M容量,用戶(hù)區(qū)為64K的Flash為例,如圖1所示,設(shè)定輔助區(qū)采用與相同 的空間劃分方式,具體為4K為一個(gè)扇區(qū)(sector),256字節(jié)為一個(gè)頁(yè)(page),內(nèi)有16個(gè) sector,每個(gè)sector內(nèi)是16個(gè)page。設(shè)定輔助區(qū)包括3個(gè)sector,用來(lái)擴(kuò)展用戶(hù)區(qū)的映 射關(guān)系,設(shè)定輔助區(qū)的區(qū)域的設(shè)計(jì)在Flash總空間充足的情況下可以任意分配其數(shù)量。映 射表區(qū)包括2個(gè)sector,以頁(yè)為單位進(jìn)行映射,建立邏輯頁(yè)對(duì)應(yīng)的映射頁(yè)。從上面邏輯頁(yè)的映射過(guò)程可以看出,寫(xiě)操作會(huì)使實(shí)際被使用的頁(yè)作為映射頁(yè)被記 錄在映射表中,因此,初始化應(yīng)將所有邏輯頁(yè)映射到同一空閑的指定頁(yè),代表所有的其它所 有頁(yè)都可以使用。優(yōu)選地,初始化時(shí)所有邏輯頁(yè)映射的同一指定頁(yè)為對(duì)Flash中用戶(hù)區(qū)劃 分得到的第一個(gè)扇區(qū)的第一頁(yè)。本實(shí)施例中確定空閑頁(yè)所依據(jù)的信息除了映射表中的映射頁(yè)以外,還利用了頁(yè)信 息表,頁(yè)信息表用于標(biāo)識(shí)頁(yè)的使用信息,所標(biāo)識(shí)的頁(yè)的使用信息通過(guò)上電時(shí)遍歷映射區(qū)獲 得,隨著頁(yè)的使用及而更新,如在上述選取了空閑頁(yè)寫(xiě)入數(shù)據(jù)后,頁(yè)信息表中相應(yīng)地將這些 空閑頁(yè)標(biāo)識(shí)為已寫(xiě)入數(shù)據(jù)。優(yōu)選地,本實(shí)施例中確定映射區(qū)中空閑頁(yè)具體包括將映射區(qū)中 在頁(yè)信息表中標(biāo)識(shí)為空閑頁(yè)且未在映射表中作為映射頁(yè)的頁(yè),確空為映射區(qū)中的空閑頁(yè)。建立映射表的目的是反映邏輯頁(yè)對(duì)應(yīng)的映射頁(yè),下面給出依照本發(fā)明實(shí)施例的一 種優(yōu)選的映射表反映邏輯頁(yè)的映射頁(yè)方式,本實(shí)施例中映射表包括與所有邏輯頁(yè)總數(shù)相等 數(shù)量個(gè)映射項(xiàng),每個(gè)映射項(xiàng)反映一個(gè)邏輯頁(yè)的一個(gè)映射頁(yè),如有256個(gè)邏輯頁(yè)時(shí),對(duì)應(yīng)256 個(gè)映射項(xiàng);每個(gè)映射項(xiàng)由扇區(qū)號(hào)(sector號(hào))和頁(yè)號(hào)(page號(hào))組成,且所有映射項(xiàng)中扇區(qū) 號(hào)占用的字節(jié)數(shù)相等及頁(yè)號(hào)占用的字節(jié)數(shù)相等,每個(gè)映射項(xiàng)反映的邏輯頁(yè)由該映射項(xiàng)在映 射表中的偏移確定,反映的映射頁(yè)由該映射項(xiàng)中的扇區(qū)號(hào)和頁(yè)號(hào)確定。每個(gè)頁(yè)的物理地址可以由其在Flash中所在sector及在sector內(nèi)的page號(hào)確 定,因此通過(guò)上述映射項(xiàng)的內(nèi)容(扇區(qū)號(hào)和頁(yè)號(hào))可以唯一索引到映射頁(yè)的物理地址。由于 每個(gè)映射項(xiàng)占用的字節(jié)數(shù)是相同的,因此可以通過(guò)映射項(xiàng)的偏移確定其反映的邏輯頁(yè)。具 體地,映射項(xiàng)中扇區(qū)號(hào)占用的字節(jié)數(shù),由對(duì)映射區(qū)劃分得到的頁(yè)組成的扇區(qū)個(gè)數(shù)總數(shù)確定, 映射項(xiàng)中頁(yè)號(hào)占用的字節(jié)數(shù)由組成一個(gè)扇區(qū)的頁(yè)數(shù)確定。優(yōu)選地,本實(shí)施例中映射表還包括第一字段(下面稱(chēng)為T(mén)1字段)和第二字段(下 面稱(chēng)為T(mén)2字段),T1字段用于標(biāo)識(shí)無(wú)效或有效,T2字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě)操作時(shí)使用的映射表即查找邏輯頁(yè)的第一映射頁(yè)的映射表,具體為T(mén)1字段標(biāo)識(shí)為有效的映射表, 如圖3所示,依照本發(fā)明另一實(shí)施例中的操作Flash的方法,包括步驟S301,接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);步驟S302,查找寫(xiě)操作指向的的邏輯頁(yè)在映射表中的第一映射頁(yè),該映射表具體 為T(mén)1字段標(biāo)識(shí)為有效的映射表,初始化時(shí)建立的映射表中T1字段標(biāo)識(shí)為有效;步驟S303,根據(jù)查找到的第一映射頁(yè)中數(shù)據(jù)及寫(xiě)操作指令組織要寫(xiě)入的數(shù)據(jù);步驟S304,從對(duì)所述映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二 映射頁(yè),并在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù);步驟S305,新建一映射表,將T1字段標(biāo)識(shí)為有效的映射表中除T1字段以外內(nèi)容復(fù) 制到新建映射表中,并將新建映射表中T2字段加一;步驟S306,在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù)之后,將新建映射表中寫(xiě)操作 指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè);步驟S307,在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的T1字段,依據(jù)流水號(hào)將前一映射表 中的T1字段標(biāo)識(shí)修改為無(wú)效。因此,執(zhí)行下次寫(xiě)操作時(shí)查找邏輯頁(yè)的映射頁(yè)使用的映射表為最新建立的映射表。上述T1字段和T2字段用來(lái)在創(chuàng)建新映射表完成后和去使能前一個(gè)映射表之前斷 電后再次上電時(shí)判斷使用,操作過(guò)程保證了在寫(xiě)映射表斷電時(shí),再次上電時(shí)保證了數(shù)據(jù)不 會(huì)因斷電被找錯(cuò)。本實(shí)施例中在斷電再次上電后接收到寫(xiě)操作指令時(shí),確定寫(xiě)操作中查找 邏輯頁(yè)的第一映射頁(yè)使用的映射表,即確定有效映射表的步驟,具體包括依據(jù)流水號(hào)查找兩個(gè)最新建立的映射表;在這兩個(gè)映射表中1)較老的映射表中T1字段標(biāo)識(shí)為無(wú)效,且較新的映射表中T1字段標(biāo)識(shí)為有效時(shí), 確定較新的映射表為寫(xiě)操作使用的映射表;說(shuō)明上次寫(xiě)操作及修改映射表的步驟已完成,因此使用最新的映射表。2)兩個(gè)映射表中T1字段均標(biāo)識(shí)為有效,確定較新的映射表為寫(xiě)操作使用的映射 表,并將較老的映射表T1字段修改為無(wú)效;說(shuō)明上次寫(xiě)操作及修改映射表的步驟已完成但未將較老映射表修改為無(wú)效時(shí)發(fā) 生斷電,因此可以使用最新的映射表。3)較老的映射表中T1字段標(biāo)識(shí)為有效,且較新的映射表中T1字段未填寫(xiě)時(shí),確定 較老的映射表為寫(xiě)操作使用的映射表。這種情況下,斷電有可能是在數(shù)據(jù)寫(xiě)入未完成或在數(shù)據(jù)寫(xiě)入完成而映射關(guān)系未修 改時(shí)斷電,也可能是在映射關(guān)系修改完后斷電的,因?yàn)椴淮_定斷電時(shí)機(jī),因而采用較老的映 射表查找數(shù)據(jù)。優(yōu)選地,本實(shí)施例中上述映射表還包括校驗(yàn)字段X0R,所述校驗(yàn)字段X0R的取值由 所述映射表中除T1字段外的內(nèi)容累加和確定,這樣,在上述確定寫(xiě)操作中使用的映射表的 步驟中,還包括對(duì)上述兩個(gè)最新的映射表,根據(jù)映射表中校驗(yàn)字段X0R進(jìn)行校驗(yàn)的步驟,如 對(duì)于3)這種情況,如果最新的映射表中的校驗(yàn)字段X0R與較老的映射表校驗(yàn)字段X0R不 同,說(shuō)明已完映射關(guān)系修改而填入新的校驗(yàn)字段,因此可以確定最新的映射表為有效的映 射表。這種操作過(guò)程保證了在寫(xiě)映射表斷電時(shí),再次上電,可以根據(jù)有效的映射表,及其信息項(xiàng)中的校驗(yàn)值來(lái)判斷當(dāng)前最新的映射表是否正確,若不正確,采用流水號(hào)較老的用,保證 了數(shù)據(jù)不會(huì)因斷電被找錯(cuò)。在文件系統(tǒng)的操作中,對(duì)Flash的操作一般為讀操作、寫(xiě)操作和擦除操作。在上述 實(shí)施例給出的寫(xiě)操作的基礎(chǔ)上,優(yōu)選地,本實(shí)施例中映射表還包括第三字段(下面稱(chēng)為V字 段),所述V字段用于記錄初始化時(shí)所有邏輯頁(yè)映射到的同一指定頁(yè),如圖4所示,還包括步驟S401,接收到刪除操作指令時(shí),確定刪除操作指向的邏輯頁(yè);步驟S402,查找刪除操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);在采用上述動(dòng)態(tài)建立映射表的方式時(shí),這里使用的映射表為當(dāng)前T1字段標(biāo)識(shí)有 效的映射表。步驟S403,在查找到的第一映射頁(yè)中寫(xiě)入使該第一映射頁(yè)視為空閑頁(yè)的數(shù)據(jù);現(xiàn)有Flash初始化時(shí)被格式化為全FF,因此數(shù)據(jù)為全FF的頁(yè)為被視為空閑頁(yè)。這 樣,本實(shí)施例中可以將要?jiǎng)h除的文件實(shí)際占用的頁(yè)執(zhí)行一次數(shù)據(jù)寫(xiě)入操作,即將該頁(yè)數(shù)據(jù) 修改為全FF。由于將該頁(yè)更新為空閑頁(yè),頁(yè)信息表該頁(yè)的使用信息由已寫(xiě)入數(shù)據(jù)更新為空 閑頁(yè)。步驟S404,將映射表中刪除操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述映射表 中V字段記錄的指定頁(yè)。這樣下次對(duì)該邏輯頁(yè)進(jìn)行寫(xiě)操作時(shí),發(fā)現(xiàn)當(dāng)前映射頁(yè)為空閑頁(yè)且之前的映射頁(yè)已 不在映射表中,說(shuō)明還未被使用而可以列入空閑頁(yè)中。本發(fā)明實(shí)施例中擦除實(shí)事上只是一個(gè)虛擬操作,不會(huì)真正擦除。跟寫(xiě)的過(guò)程類(lèi)似, 只是將寫(xiě)的數(shù)據(jù)寫(xiě)為全FF,在寫(xiě)到整頁(yè)都為FF的時(shí)候,將該邏輯頁(yè)映射在指定頁(yè)上即可。 這樣即節(jié)約了擦的時(shí)間,又能夠極大地節(jié)約flash的存儲(chǔ)空間,提高了 FLASH的存儲(chǔ)效率, 并且能夠延長(zhǎng)Flash的回收時(shí)間,從性能、效率、和延長(zhǎng)使用壽命上都起到了作用。本實(shí)施例中基于上述實(shí)施例中給出的操作Flash方法中的寫(xiě)操作,如圖5所示,還 包括步驟S501,接收到讀操作指令時(shí)確定讀操作指向的邏輯頁(yè);步驟S502,查找讀操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);在采用上述動(dòng)態(tài)建立映射表的方式時(shí),這里使用的映射表為當(dāng)前T1字段標(biāo)識(shí)有 效的映射表步驟S503,根據(jù)所述讀操作指令在所述第一映射頁(yè)的相應(yīng)位置讀取數(shù)據(jù)。因此實(shí) 現(xiàn)了 Flash的讀操作。下面仍以1M容量,用戶(hù)區(qū)為64K的Flash為例,說(shuō)明本發(fā)明實(shí)施例中上述映射表 的結(jié)構(gòu),如表1所示,該映射表中包括256個(gè)映射項(xiàng),由于每個(gè)扇區(qū)有16頁(yè),所以采用4bit 的頁(yè)號(hào);由于用戶(hù)區(qū)有16個(gè)扇區(qū),設(shè)定輔助區(qū)有3個(gè)扇區(qū),因此最少要5bit扇區(qū)號(hào),為了方 便表示,本實(shí)施例中扇區(qū)號(hào)采用一個(gè)字節(jié)。這樣每個(gè)映射項(xiàng)占用1.5個(gè)字節(jié),其中扇區(qū)號(hào)占 用前一個(gè)字節(jié),頁(yè)號(hào)占用后半個(gè)字節(jié)。每個(gè)映射項(xiàng)在映射表中的偏移除以1.5字節(jié),就是其 所代表的邏輯頁(yè),這樣映射項(xiàng)的前一個(gè)字節(jié)表示該邏輯頁(yè)的映射頁(yè)所在的sector,后半個(gè) 字節(jié)代表該邏輯頁(yè)的映射頁(yè)所在sector內(nèi)的page號(hào)。在初始化后的狀態(tài)下,由于Flash 全部區(qū)域?yàn)镕F狀態(tài),映射表的每一映射項(xiàng)的映射頁(yè)都指向第一個(gè)全FF的page。表1 映射表的結(jié)構(gòu)
權(quán)利要求
一種操作Flash的方法,其特征在于,該方法包括接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);查找所述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè),所述映射表用于建立邏輯頁(yè)與映射頁(yè)的映射關(guān)系;根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中的數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè),并在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù),所述指定頁(yè)為在映射區(qū)中指定的一個(gè)空閑頁(yè);將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè)。
2.如權(quán)利要求1所述的方法,其特征在于,該方法還包括在初始化時(shí),所有用戶(hù)區(qū)邏 輯頁(yè)映射到映射區(qū)空閑頁(yè)中同一指定頁(yè)。
3.如權(quán)利要求1所述的方法,其特征在于,所述映射表還包括第一字段和第二字段,所 述第一字段用于標(biāo)識(shí)無(wú)效或有效,所述第二字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě)操作時(shí)使用 的映射表為第一字段標(biāo)識(shí)為有效的映射表,在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù)時(shí),還 包括新建一映射表,將第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映 射表中,并將新建映射表中第二字段加一;將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為第二映射頁(yè),包括 在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù)之后,將新建映射表中寫(xiě)操作指向的邏輯頁(yè)的 第一映射頁(yè),修改為所述第二映射頁(yè);在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一映射表中的第一字段 標(biāo)識(shí)修改為無(wú)效。
4.如權(quán)利要求3所述的方法,其特征在于,在斷電再次上電后接收到寫(xiě)操作指令時(shí),還 包括確定寫(xiě)操作中使用的映射表的步驟,具體包括依據(jù)流水號(hào)查找兩個(gè)最新建立的映射表;在這兩個(gè)映射表中 較老的映射表中第一字段標(biāo)識(shí)為無(wú)效,且較新的映射表中第一字段標(biāo)識(shí)為有效時(shí),確 定較新的映射表為寫(xiě)操作使用的映射表;兩個(gè)映射表中第一字段均標(biāo)識(shí)為有效,確定較新的映射表為寫(xiě)操作使用的映射表,并 將較老的映射表第一字段修改為無(wú)效;較老的映射表中第一字段標(biāo)識(shí)為有效,且較新的映射表中第一字段未填寫(xiě)時(shí),確定較 老的映射表為寫(xiě)操作使用的映射表。
5.如權(quán)利要求1所述的方法,其特征在于,所述映射區(qū)中空閑頁(yè)的確定包括將映射區(qū)中在頁(yè)信息表中標(biāo)識(shí)為空閑頁(yè),且未在映射表中作為映射頁(yè)的頁(yè),確定為映 射區(qū)中的空閑頁(yè),所述頁(yè)信息表用于標(biāo)識(shí)頁(yè)的使用信息,所標(biāo)識(shí)的頁(yè)的使用信息通過(guò)上電 時(shí)遍歷映射區(qū)獲得,隨著頁(yè)的使用及而更新。
6.如權(quán)利要求1所述的方法,其特征在于,所述映射表還包括第三字段,所述第三字段 用于記錄初始化時(shí)所有邏輯頁(yè)映射到的指定頁(yè),還包括接收到刪除操作指令時(shí),確定刪除操作指向的邏輯頁(yè); 查找刪除操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè); 在查找到的第一映射頁(yè)中寫(xiě)入使該第一映射頁(yè)視為空閑頁(yè)的數(shù)據(jù);將映射表中刪除操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述映射表中第三字段記錄 的指定頁(yè)。
7.如權(quán)利要求1 6任一所述的方法,其特征在于,所述寫(xiě)操作指令中包括至少一次寫(xiě) 操作,上述確定寫(xiě)操作指向的邏輯頁(yè)到組織要寫(xiě)入的數(shù)據(jù)的步驟完成一次寫(xiě)操作;執(zhí)行完寫(xiě)操作指令中的所有寫(xiě)操作后,從對(duì)所述映射區(qū)劃分得到的頁(yè)中,選取除指定 頁(yè)外的空閑頁(yè)作為第二映射頁(yè)。
8.如權(quán)利要求7所述的方法,其特征在于,每次執(zhí)行寫(xiě)操作時(shí),確定RAM中是否記錄有此次寫(xiě)操作指向的邏輯頁(yè),若未記錄,則查 找此次寫(xiě)操作指向的邏輯頁(yè)在RAM中緩存的映射表中的第一映射頁(yè),根據(jù)第一映射頁(yè)中數(shù) 據(jù)及寫(xiě)操作指令,在RAM中組織此次寫(xiě)操作要寫(xiě)入的數(shù)據(jù),并在RAM中記錄此次寫(xiě)操作指向 的邏輯頁(yè);確定RAM中記錄有此次寫(xiě)操作指向的邏輯頁(yè)時(shí),根據(jù)在RAM中查找到的記錄該邏輯頁(yè) 時(shí)所緩存的要寫(xiě)入的數(shù)據(jù),重新組織此次寫(xiě)操作寫(xiě)入的數(shù)據(jù);執(zhí)行完寫(xiě)操作指令中的所有寫(xiě)操作后,根據(jù)所記錄的不同邏輯頁(yè)的數(shù)目,從映射區(qū)中 選取不同邏輯頁(yè)的數(shù)目個(gè)除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè);將每次寫(xiě)操作在RAM中緩存的組織好數(shù)據(jù)寫(xiě)入一個(gè)空閑的第二映射頁(yè),并在映射表區(qū) 的新建映射表及RAM中緩存的映射表中,將此次寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改 為寫(xiě)入此次寫(xiě)操作要寫(xiě)入的數(shù)據(jù)的第二映射頁(yè);清空?qǐng)?zhí)行所述寫(xiě)操作指令中寫(xiě)操作時(shí)在RAM中緩存的要寫(xiě)入的數(shù)據(jù)和記錄的邏輯頁(yè), 發(fā)送指令返回碼指示寫(xiě)操作指令執(zhí)行完畢。
9.如權(quán)利要求2所述的方法,其特征在于,初始化時(shí)所有邏輯頁(yè)映射的同一指定頁(yè)為 對(duì)Flash中用戶(hù)區(qū)劃分得到的第一個(gè)扇區(qū)的第一頁(yè)。
10.如權(quán)利要求1 6任一所述的方法,其特征在于,還包括 接收到讀操作指令時(shí)確定讀操作指向的邏輯頁(yè);查找讀操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè); 根據(jù)所述讀操作指令在所述第一映射頁(yè)的相應(yīng)位置讀取數(shù)據(jù)。
11.一種操作Flash的裝置,其特征在于,包括寫(xiě)邏輯頁(yè)確定單元,用于接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè); 第一查找單元,用于查找所述寫(xiě)操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè),所述映 射表用于反映所有邏輯頁(yè)的映射頁(yè);組織數(shù)據(jù)單元,用于根據(jù)寫(xiě)操作指令及查找到的第一映射頁(yè)中的數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);映射頁(yè)選取單元,用于從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第 二映射頁(yè),并在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù),所述指定頁(yè)為在映射區(qū)中指定的一 個(gè)空閑頁(yè);映射關(guān)系修改單元,用于將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述 第二映射頁(yè)。
12.如權(quán)利要求11所述的裝置,其特征在于,映射表還包括第一字段和第二字段,所述 第一字段用于標(biāo)識(shí)無(wú)效或有效,所述第二字段用于標(biāo)識(shí)映射表的流水號(hào),寫(xiě)操作時(shí)使用的映射表為第一字段標(biāo)識(shí)為有效的映射表,還包括新建映射表單元,用于在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù)時(shí)時(shí),新建一映射表,將 第一字段標(biāo)識(shí)為有效的映射表中除第一字段以外內(nèi)容復(fù)制到新建映射表中,并將新建映射 表中第二字段加一;所述映射關(guān)系修改單元,具體包括第一修改單元,用于在所述第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù)之后,將新建映射表中寫(xiě) 操作指向的邏輯頁(yè)的第一映射頁(yè),修改為所述第二映射頁(yè);第二修改單元,用于在新建映射表中寫(xiě)入標(biāo)識(shí)為有效的第一字段,依據(jù)流水號(hào)將前一 映射表中的第一字段標(biāo)識(shí)修改為無(wú)效。
13.如權(quán)利要求12所述的裝置,其特征在于,還包括有效映射表確定單元,用于在斷電再次上電后接收到寫(xiě)操作指令時(shí),依據(jù)流水號(hào)查找 兩個(gè)最新建立的映射表;在這兩個(gè)映射表中較老的映射表中第一字段標(biāo)識(shí)為無(wú)效,且較 新的映射表中第一字段標(biāo)識(shí)為有效時(shí),確定較新的映射表為寫(xiě)操作使用的映射表;兩個(gè)映 射表中第一字段均標(biāo)識(shí)為有效,確定較新的映射表為寫(xiě)操作使用的映射表,并將較老的映 射表第一字段修改為無(wú)效;較老的映射表中第一字段標(biāo)識(shí)為有效,且較新的映射表中第一 字段未填寫(xiě)時(shí),確定較老的映射表為寫(xiě)操作使用的映射表。
14.如權(quán)利要求11所述的裝置,其特征在于,還包括空閑頁(yè)確定單元,用于將映射區(qū)中在頁(yè)信息表中標(biāo)識(shí)為空閑頁(yè),且未在映射表中作為 映射頁(yè)的頁(yè),確定為映射區(qū)中的空閑頁(yè),所述頁(yè)信息表用于標(biāo)識(shí)頁(yè)的使用信息,所標(biāo)識(shí)的頁(yè) 的使用信息通過(guò)上電時(shí)遍歷映射區(qū)獲得,隨著頁(yè)的使用及而更新。
15.如權(quán)利要求11所述的裝置,其特征在于,所述映射表還包括第三字段,所述第三字 段用于記錄初始化時(shí)所有邏輯頁(yè)映射到的指定頁(yè),還包括刪除邏輯頁(yè)確定單元,用于接收到刪除操作指令時(shí),確定刪除操作指向的邏輯頁(yè);第二查找單元,用于查找刪除操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè);數(shù)據(jù)修改單元,在查找到的第一映射頁(yè)中寫(xiě)入使該第一映射頁(yè)視為空閑頁(yè)的數(shù)據(jù);指定映射關(guān)系修改單元,用于將映射表中刪除操作指向的邏輯頁(yè)的第一映射頁(yè),修改 為所述映射表中第三字段記錄的指定頁(yè)。
16.如權(quán)利要求11 15任一所述的裝置,其特征在于,所述寫(xiě)操作指令中包括至少一 次寫(xiě)操作,所述寫(xiě)邏輯頁(yè)確定單元、第一查找單元和組織數(shù)據(jù)單元用于完成寫(xiě)操作指令中 的所有寫(xiě)操作;所述映射頁(yè)選取單元,具體用于執(zhí)行完寫(xiě)操作指令中的所有寫(xiě)操作后,從對(duì)所述映射 區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè)。
17.如權(quán)利要求16所述的裝置,其特征在于,還包括記錄確定單元,用于每次執(zhí)行寫(xiě)操作時(shí),確定RAM中是否記錄有此次寫(xiě)操作指向的邏 輯頁(yè);所述組織數(shù)據(jù)單元,具體用于確定RAM中未記錄有此次寫(xiě)操作指向的邏輯頁(yè)時(shí),根據(jù) 查找到的第一映射頁(yè)中數(shù)據(jù)及寫(xiě)操作指令,在RAM中組織此次寫(xiě)操作要寫(xiě)入的數(shù)據(jù),并在 RAM中記錄此次寫(xiě)操作指向的邏輯頁(yè);確定RAM中記錄有此次寫(xiě)操作指向的邏輯頁(yè)時(shí),根據(jù) 在RAM中查找到的記錄該邏輯頁(yè)時(shí)所緩存的要寫(xiě)入的數(shù)據(jù),重新組織此次寫(xiě)操作寫(xiě)入的數(shù)據(jù);所述映射頁(yè)選取單元,具體用于執(zhí)行完寫(xiě)操作指令中的所有寫(xiě)操作后,根據(jù)所記錄的 不同邏輯頁(yè)的數(shù)目,從映射區(qū)中選取不同邏輯頁(yè)的數(shù)目個(gè)除指定頁(yè)外的空閑頁(yè)作為第二映 射頁(yè);所述映射關(guān)系修改單元,具體用于將每次寫(xiě)操作在RAM中緩存的組織好數(shù)據(jù)寫(xiě)入一個(gè) 空閑的第二映射頁(yè),并在映射表區(qū)的新建映射表及RAM中緩存的映射表中,將此次寫(xiě)操作 指向的邏輯頁(yè)的第一映射頁(yè),修改為寫(xiě)入此次寫(xiě)操作要寫(xiě)入的數(shù)據(jù)的第二映射頁(yè);指令執(zhí)行完畢確定單元,用于映射關(guān)系修改單元完成修改后,清空?qǐng)?zhí)行寫(xiě)操作指令中 寫(xiě)操作時(shí)在RAM中緩存的要寫(xiě)入的數(shù)據(jù)數(shù)據(jù)和記錄的邏輯頁(yè),發(fā)送指令返回碼指示寫(xiě)操作 指令執(zhí)行完畢。
18.如權(quán)利要求11 15任一所述的裝置,其特征在于,還包括 讀邏輯頁(yè)確定單元,用于接收到讀操作指令時(shí)確定讀操作指向的邏輯頁(yè); 第三查找單元,用于查找讀操作指向的邏輯頁(yè)在映射表中的第一映射頁(yè); 讀取單元,用于根據(jù)所述讀操作指令在所述第一映射頁(yè)的相應(yīng)位置讀取數(shù)據(jù)。
全文摘要
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,公開(kāi)了一種操作Flash的方法和裝置,該方法包括接收到寫(xiě)操作指令時(shí)確定寫(xiě)操作指向的邏輯頁(yè);查找該邏輯頁(yè)在映射表中的第一映射頁(yè),該映射表用于建立邏輯頁(yè)與映射頁(yè)的映射關(guān)系;根據(jù)第一映射頁(yè)中數(shù)據(jù)組織要寫(xiě)入的數(shù)據(jù);從對(duì)映射區(qū)劃分得到的頁(yè)中,選取除指定頁(yè)外的空閑頁(yè)作為第二映射頁(yè),并在第二映射頁(yè)上寫(xiě)入要寫(xiě)入的數(shù)據(jù);將映射表中寫(xiě)操作指向的邏輯頁(yè)的第一映射頁(yè)修改為第二映射頁(yè)。本發(fā)明優(yōu)化了現(xiàn)有智能卡對(duì)扇區(qū)劃分較大、用戶(hù)區(qū)較小的片內(nèi)Flash操作,減少了擦除操作次數(shù),提高了Flash壽命及讀取速度。
文檔編號(hào)G06F12/02GK101980177SQ201010520788
公開(kāi)日2011年2月23日 申請(qǐng)日期2010年10月21日 優(yōu)先權(quán)日2010年10月21日
發(fā)明者孫婉麗, 張楠, 粟超 申請(qǐng)人:北京握奇數(shù)據(jù)系統(tǒng)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1