專利名稱:閃存介質(zhì)中數(shù)據(jù)保護方法
技術(shù)領(lǐng)域:
本發(fā)明涉及半導(dǎo)體存儲領(lǐng)域,具體地說涉及閃存介質(zhì)中數(shù)據(jù)保護方法,利用該方法,即使在向閃存介質(zhì)寫入數(shù)據(jù)時的任一時刻發(fā)生非法斷電,所述閃存介質(zhì)中的原有數(shù)據(jù)文件以及已寫入的數(shù)據(jù)都不會丟失,保證了閃存介質(zhì)存儲數(shù)據(jù)的安全。
背景技術(shù):
現(xiàn)階段,采用閃存介質(zhì)進行數(shù)據(jù)存儲的移動存儲裝置已獲得廣泛使用。其不足之處也為用戶造成了諸多不便,例如在向閃存介質(zhì)中寫入數(shù)據(jù)時,或?qū)υ瓉硪汛嬖诘臄?shù)據(jù)進行修改時,若由于意外或用戶誤操作等情況造成非法斷電,會造成數(shù)據(jù)丟失。
申請?zhí)枮?3104983.4,發(fā)明名稱為“閃存介質(zhì)中的數(shù)據(jù)管理方法”的發(fā)明專利申請針對上述缺點提出了解決方案,其構(gòu)思是對閃存介質(zhì)的存儲塊設(shè)置狀態(tài)標志,在寫數(shù)據(jù)時對狀態(tài)標志進行修改操作;在斷電情況發(fā)生后,通過對狀態(tài)標志的檢查尋找數(shù)據(jù)并進行數(shù)據(jù)恢復(fù),可以確保在對閃存介質(zhì)寫入數(shù)據(jù)過程中即使發(fā)生非法斷電,也不會丟失閃存介質(zhì)中原有的數(shù)據(jù),并且可以避免存儲塊沒有被完全擦除以致再次讀寫出錯的情況。
在實踐中發(fā)現(xiàn)上述方法也存在一些不足。采用上述方法進行數(shù)據(jù)管理,由于要對閃存芯片進行多次讀寫,致使讀寫速度降低,若要提高速度就需要硬件的支持;并且該方法不完全符合通用的規(guī)范標準,不能為某些類型的閃存介質(zhì)所采用,兼容性不強。
發(fā)明內(nèi)容
針對上述現(xiàn)有閃存介質(zhì)中數(shù)據(jù)管理技術(shù)存在的讀寫速度低,不符合規(guī)范,兼容性不強等缺點,本發(fā)明的目的在于提出一種在閃存介質(zhì)中數(shù)據(jù)保護方法,通過該方法可以在現(xiàn)有的各種閃存介質(zhì)中快速的寫入數(shù)據(jù)并且完整地保護在非法斷電前已寫入到閃存介質(zhì)中的數(shù)據(jù)。
本發(fā)明的另一個目的在于提出一種在閃存介質(zhì)中恢復(fù)數(shù)據(jù)的方法。
為實現(xiàn)本發(fā)明的上述目的,本發(fā)明提供了一種閃存介質(zhì)中數(shù)據(jù)保護方法,閃存介質(zhì)包括多個存儲塊,每個存儲塊由多個頁構(gòu)成,每頁劃分為數(shù)據(jù)存儲區(qū)和冗余區(qū),該方法包括以下步驟在根據(jù)數(shù)據(jù)操作指令對存儲塊900執(zhí)行數(shù)據(jù)操作時,對執(zhí)行數(shù)據(jù)操作的頁加注標注信息。該方法中,對存儲塊900進行數(shù)據(jù)操作包括將另一個存儲塊800內(nèi)要保留的數(shù)據(jù)搬遷到存儲塊900的步驟和/或根據(jù)數(shù)據(jù)操作指令在存儲塊900中寫入新數(shù)據(jù)的步驟。上述方法中所說的標注信息可以是數(shù)據(jù)操作指令的指定地址所指向的存儲塊800的邏輯地址,或者可以是具有一定變化規(guī)律或固定不變的符號,也可以是執(zhí)行數(shù)據(jù)操作的頁的頁號以及數(shù)值、字符或數(shù)值和字符的組合。
本發(fā)明還提供了在閃存裝置中寫數(shù)據(jù)的方法,閃存裝置包括用于控制數(shù)據(jù)存取的控制器和用于存儲數(shù)據(jù)的閃存介質(zhì),閃存介質(zhì)包括多個存儲塊,每個存儲塊由多個頁構(gòu)成,每頁劃分為數(shù)據(jù)存儲區(qū)和冗余區(qū),該方法包括以下步驟(1)控制器接受數(shù)據(jù)操作指令,并根據(jù)數(shù)據(jù)操作指令的指定地址查找相應(yīng)的存儲塊800;(2)將存儲塊800中要保留的數(shù)據(jù)搬遷到另一個空白存儲塊900中,同時在存儲塊900中執(zhí)行數(shù)據(jù)操作的頁加注標注信息;(3)根據(jù)上述所接受的數(shù)據(jù)操作指令,在存儲塊900中寫入數(shù)據(jù)并在執(zhí)行數(shù)據(jù)操作的頁加注標注信息;(4)擦除存儲塊800,使其為空。
在如上所述的寫數(shù)據(jù)方法中,在執(zhí)行步驟(2)或(3)時,標注信息可以是數(shù)據(jù)操作指令中的地址信息所指向的存儲塊800的邏輯地址,或者是具有一定變化規(guī)律的數(shù)值、字符或數(shù)值與字符的組合。
本發(fā)明還提供了一種閃存介質(zhì)的數(shù)據(jù)恢復(fù)方法,其適用于對所述閃存介質(zhì)采用上述方法寫數(shù)據(jù)過程中,由于非法斷電而產(chǎn)生的數(shù)據(jù)損壞情況進行數(shù)據(jù)恢復(fù),其步驟包括通過檢驗標注信息判斷閃存介質(zhì)中存儲塊的數(shù)據(jù)是否完整,并對數(shù)據(jù)不完整的存儲塊進行數(shù)據(jù)恢復(fù)操作。
上述方法中,若存儲塊中的標注信息與預(yù)定的標注信息一致,或符合預(yù)定的標注信息變化規(guī)律,就表明存儲塊中的數(shù)據(jù)是完整的。
上述方法進一步包括擦除數(shù)據(jù)不完整的存儲塊的步驟,還包括利用校驗碼檢驗數(shù)據(jù)完整的存儲塊的步驟,若存儲塊的檢驗結(jié)果都正確,則擦除其中任意一個存儲塊;若其中一個存儲塊檢驗結(jié)果不正確,則擦除該檢驗結(jié)果不正確的存儲塊。
采用本發(fā)明提供的數(shù)據(jù)保護方法,通過對存儲塊加注標注信息,可以確保在對大多數(shù)種類的閃存介質(zhì)寫入新數(shù)據(jù)過程中,無論是人為的非法操作或是意外斷電等情況,都不會丟失閃存介質(zhì)中原有的要保留的數(shù)據(jù)文件,還可以避免存儲塊沒有被完全擦除以致再次讀寫出錯的情況,在不影響讀寫速度的前提下提高了數(shù)據(jù)安全性及系統(tǒng)穩(wěn)定性。
以下參照附圖對本發(fā)明的具體實施例的具體而詳細的說明將會使本領(lǐng)域普通技術(shù)人員理解本發(fā)明的思想。
附圖的簡要說明
圖1示意性地說明了現(xiàn)有閃存介質(zhì)中存儲塊和頁的組織結(jié)構(gòu);圖2是本發(fā)明數(shù)據(jù)保護方法中閃存介質(zhì)中原存儲塊和新存儲塊的示意圖;圖3示意性地說明了上述本發(fā)明具體實施例的閃存介質(zhì)存儲塊中頁的冗余區(qū)的劃分;圖4是根據(jù)本發(fā)明第一個實施例的閃存介質(zhì)中數(shù)據(jù)保護方法寫入新數(shù)據(jù)的流程圖;圖5說明在實施圖4所述方法過程中發(fā)生非法斷電后重新加電的數(shù)據(jù)恢復(fù)過程流程圖;圖6是根據(jù)本發(fā)明第二個實施例的閃存介質(zhì)中數(shù)據(jù)保護方法寫入新數(shù)據(jù)的流程圖;圖7說明在實施圖6所述方法過程中發(fā)生非法斷電后重新加電的數(shù)據(jù)恢復(fù)過程流程圖。
本發(fā)明的具體實施方式
為便于理解本發(fā)明的閃存介質(zhì)中數(shù)據(jù)保護方法,首先對目前的閃存介質(zhì)數(shù)據(jù)讀寫技術(shù)進行說明。圖1示出了現(xiàn)有閃存介質(zhì)的物理構(gòu)造,如圖所示,目前通用的閃存介質(zhì)一般劃分為多個存儲塊(Block,即物理塊),每個存儲塊由多個頁(Page)構(gòu)成,每個頁包括若干字節(jié)的數(shù)據(jù)存儲區(qū)和若干字節(jié)的冗余區(qū),例如每頁可以包含512字節(jié)的數(shù)據(jù)存儲區(qū)和16字節(jié)的冗余區(qū),或者每頁可以包含2K字節(jié)的數(shù)據(jù)存儲區(qū)和64字節(jié)的冗余區(qū)。所述數(shù)據(jù)存儲區(qū)一般用于記錄用戶數(shù)據(jù),所述冗余區(qū)一般記錄該頁所在的閃存芯片的專用信息和該頁所在存儲塊地址等索引信息,以及其他可由用戶自行設(shè)定的信息,該區(qū)域也可以棄而不用。根據(jù)現(xiàn)有技術(shù)規(guī)范,每一個存儲塊中都保存有該塊的邏輯地址,該地址通常保存在存儲塊的第一頁中。該邏輯地址是查找存儲塊的依據(jù)。
當(dāng)用戶向閃存介質(zhì)中寫入新數(shù)據(jù)或?qū)υ瓉硪汛嬖诘臄?shù)據(jù)進行修改時,根據(jù)閃存介質(zhì)特殊的讀寫特性,首先要將寫數(shù)據(jù)控制指令中的指定地址所指向的存儲塊(以下稱之為原塊)中的要保留的數(shù)據(jù)由原塊“搬遷”到另一個存儲塊中(以下稱之為新塊)中。
上述要保留的數(shù)據(jù)是指原塊記錄的原始數(shù)據(jù)中,不會被要寫入的新數(shù)據(jù)覆蓋的頁中的數(shù)據(jù)。要保留的數(shù)據(jù)可能是原塊中的全部原始數(shù)據(jù),也可能是原始數(shù)據(jù)中的一部分。
從閃存介質(zhì)讀取數(shù)據(jù)需要通過讀文件分配表、目錄區(qū)等來獲得閃存介質(zhì)內(nèi)文件的信息。如果在將要保留的數(shù)據(jù)進行上述搬遷的過程中,發(fā)生意外或用戶誤操作等情況造成非法斷電,會使這個搬遷過程意外中斷。在斷電時刻對要保留的數(shù)據(jù)的搬遷工作尚未完成,這部分數(shù)據(jù)的邏輯地址在文件分配表、目錄區(qū)等內(nèi)并沒有及時的更新,那么這些參與搬遷的數(shù)據(jù)將無法讀取,變?yōu)闊o效數(shù)據(jù)。這樣,在此之前保存的含有這部分數(shù)據(jù)的文件成為無效文件,即造成數(shù)據(jù)文件丟失。
另外,在數(shù)據(jù)搬遷工作完成后,要對原存儲塊進行擦除操作,使其為“空”;該操作是將存儲塊中的所有位設(shè)置為邏輯“1”。經(jīng)過擦除操作,內(nèi)部所有位都為邏輯“1”的塊稱為“空塊”。如果在擦除過程中斷電,可能存在該存儲塊中一部分位已經(jīng)為邏輯“1”,而尚余部分位仍為邏輯“0”的情況。這時,若再向該存儲塊寫入新數(shù)據(jù)就會出錯。
如圖3示出了閃存介質(zhì)中頁內(nèi)的冗余區(qū)的劃分示例。根據(jù)相關(guān)標準,頁冗余區(qū)中包含有存放地址信息的區(qū)域,本實施例設(shè)置一個存儲塊內(nèi)的所有頁的標注信息都一樣,都是該存儲塊的邏輯地址。存儲塊的邏輯地址與對照表中的地址信息具有對應(yīng)關(guān)系。根據(jù)數(shù)據(jù)操作指令中的指定地址,通過地址變換可得出相應(yīng)的指定邏輯地址(以下統(tǒng)稱為指定邏輯地址),根據(jù)該指定邏輯地址查找對照表,找出與指定邏輯地址相應(yīng)的邏輯地址,再找出該邏輯地址對應(yīng)的物理地址,就可以從閃存介質(zhì)中找到指定的存儲塊。所述對指定地址的地址變換操作可以采用現(xiàn)有的地址變換技術(shù)進行。
在冗余區(qū)中,還設(shè)置有校驗碼區(qū)域,用于存放校驗碼。對頁的數(shù)據(jù)存儲區(qū)內(nèi)的數(shù)據(jù)進行計算,可以得出校驗值。將該校驗值與校驗碼區(qū)域內(nèi)的校驗碼相比較,根據(jù)比較結(jié)果可以判斷數(shù)據(jù)存儲區(qū)內(nèi)存放的數(shù)據(jù)是否正確完整。在本發(fā)明實施過程中,對存儲塊的每一頁進行數(shù)據(jù)操作的同時,控制器根據(jù)該頁的數(shù)據(jù)存儲區(qū)內(nèi)的數(shù)據(jù)計算得出校驗值,存放在該校驗碼區(qū)域中。
接下來將根據(jù)圖2,圖3和圖4說明本發(fā)明閃存介質(zhì)的數(shù)據(jù)保護方法的一個具體實施例,然而,本領(lǐng)域普通技術(shù)人員可以理解,該具體實施例并不是對本發(fā)明的限定。
根據(jù)該實施例,當(dāng)在閃存介質(zhì)中采用本發(fā)明的數(shù)據(jù)保護方法時,數(shù)據(jù)操作可以在圖2所示的存儲塊800和900之間進行,其中存儲塊800為原塊,其為數(shù)據(jù)操作指令中的地址所指向的存儲塊。存儲塊900為新塊,在實施數(shù)據(jù)搬遷時,將原塊800中要保留的數(shù)據(jù)搬遷到新塊900相應(yīng)的頁。
具體來說,如圖4所示,當(dāng)所述閃存介質(zhì)接收到來自操作系統(tǒng)的數(shù)據(jù)操作指令,例如寫入新數(shù)據(jù)指令(步驟1)后,閃存裝置的控制器根據(jù)所述指令中的指定地址尋找要寫入數(shù)據(jù)的存儲塊,即原塊800(步驟2)。
在步驟3中,判斷是否找到該指定地址所指向的原塊800。
如果數(shù)據(jù)操作指令中的指定地址所指向的原塊不存在,則進行步驟3’,在所述閃存介質(zhì)中找出一個空塊,將該空塊虛擬為一個已經(jīng)存有數(shù)據(jù)的原塊800。具體做法是在該空塊的冗余區(qū)寫入根據(jù)指定地址變換得到的指定邏輯地址,保持該空塊的其余存儲空間仍然為空,再進行步驟4。
如果能找到原塊800,則直接進行步驟4。
在步驟4中,找出一個空白的新塊900。
接下來在步驟5中,閃存裝置的控制器根據(jù)指令中指定要寫入數(shù)據(jù)的頁號,判斷原塊800中的哪些頁將被新數(shù)據(jù)覆蓋,哪些頁中的原始數(shù)據(jù)需要保留。對于所述原塊800中要保留的數(shù)據(jù),控制器將其按頁復(fù)制到新塊900中,即對原塊中的不被新數(shù)據(jù)覆蓋的部分頁中的原始數(shù)據(jù)(即要保留的數(shù)據(jù))進行搬遷。在每向新塊900中寫入一頁數(shù)據(jù)的同時在該頁的冗余區(qū)內(nèi)標注指定邏輯地址(即原塊800的邏輯地址)。
對于數(shù)據(jù)操作指令中的指定地址所指的原塊不存在的情況,在前述步驟3’中進行虛擬得到的原塊800,同樣進行步驟4及步驟5的操作,將其不被新數(shù)據(jù)覆蓋的部分頁內(nèi)的數(shù)據(jù)復(fù)制到新塊900中并在新塊900的相應(yīng)頁中標注指定邏輯地址。
對于第一次進行數(shù)據(jù)寫入操作的閃存芯片,根據(jù)本實施例中的寫數(shù)據(jù)方法,由指定邏輯地址無法找到指定寫入數(shù)據(jù)的原塊800,應(yīng)進行步驟3’,即找出一空白存儲塊,在其每一頁的冗余區(qū)中寫入指定邏輯地址,將其虛擬為原塊800;再找出一空白的新塊900,進行上述數(shù)據(jù)搬遷的操作(步驟5)。
接著,將要寫入的數(shù)據(jù)寫入所述新塊900中,在每寫入一頁的同時在該頁的冗余區(qū)內(nèi)標注指定邏輯地址(步驟6)。直到新塊900的每一頁都存儲有遷入的要保留的數(shù)據(jù)或新寫入的數(shù)據(jù)。也就是說,新塊900的所有頁都標注了指定邏輯地址。
以上說明的是步驟5與步驟6順序執(zhí)行,即首先進行要保留的數(shù)據(jù)的搬遷,將原塊800中要保留的數(shù)據(jù)搬遷到新塊900的對應(yīng)頁中,同時在該頁中標注指定邏輯地址,直到要保留的數(shù)據(jù)全部搬遷完畢;然后再向新塊900的其余頁中寫入新數(shù)據(jù)并在相應(yīng)頁中標注指定邏輯地址,直到新塊900的每一頁存儲有數(shù)據(jù)并標注有指定邏輯地址。
事實上,步驟5和步驟6也可以同時進行,即在將數(shù)據(jù)從原塊800搬遷到新塊900的某些頁并在相應(yīng)頁面標注指定邏輯地址的同時,將新數(shù)據(jù)寫入到新塊900的其他頁中并在相應(yīng)頁面標注指定邏輯地址。
步驟5和6還可以混合交叉進行,例如按照新塊900中頁的順序,逐頁進行數(shù)據(jù)操作??刂破鞲鶕?jù)指令中指定要寫入新數(shù)據(jù)的頁號,判斷原塊800中的哪些頁將被新數(shù)據(jù)覆蓋,哪些頁中的原始數(shù)據(jù)需要保留。根據(jù)判斷結(jié)果,如果新塊900中的當(dāng)前頁對應(yīng)原塊800中要保留的數(shù)據(jù)所在的頁,應(yīng)按照步驟5將原塊800中的要保留的數(shù)據(jù)搬遷到新塊900;如果新塊中當(dāng)前頁對應(yīng)要寫入的新數(shù)據(jù),應(yīng)按照步驟6寫入新數(shù)據(jù)。如此進行直到新塊的最后一頁操作完成,此時新塊900的所有頁全部進行過數(shù)據(jù)操作。
在完成了步驟5和6之后,原塊800中要求保留的數(shù)據(jù)已全部復(fù)制到新塊900中,根據(jù)數(shù)據(jù)操作指令要寫入的數(shù)據(jù)也全部寫入完成。同時,新塊900的每一頁都已標注了指定邏輯地址。接下來,執(zhí)行步驟7,即將原塊800完全擦除。
重復(fù)上述操作直至所有要寫入的新數(shù)據(jù)全部寫完(步驟8),更新對照表中的對應(yīng)地址信息(步驟9),更新方法是將對照表中存儲塊900的邏輯地址修改為指定邏輯地址。寫入新數(shù)據(jù)的操作完成。
從對本發(fā)明上述實施例的描述可以理解,本發(fā)明的數(shù)據(jù)保護方法的特征在于在對新塊進行數(shù)據(jù)操作的過程中,例如將原塊要保留的數(shù)據(jù)復(fù)制到新塊和向新塊中寫入新數(shù)據(jù)時,對新塊的頁進行標注。
利用本發(fā)明上述的數(shù)據(jù)保護方法,在對所述閃存介質(zhì)進行數(shù)據(jù)寫入時,即使發(fā)生非法斷電,可以保證閃存介質(zhì)中原有文件中的數(shù)據(jù)不會丟失。
也就是說,通過上述的閃存介質(zhì)的數(shù)據(jù)保護方法,無論在操作過程的哪個步驟發(fā)生非法斷電,該閃存介質(zhì)在重新加電時都可以恢復(fù)要保留的數(shù)據(jù)。
例如,非法斷電如果發(fā)生在將要保留的數(shù)據(jù)復(fù)制到新塊900之前(步驟5進行之前),或在原塊800被擦除之后(步驟7完成之后),由于數(shù)據(jù)讀寫操作尚未開始或已經(jīng)完成,不需進行恢復(fù)操作。
如果在步驟5進行過程中發(fā)生非法斷電,或者步驟5進行完畢但步驟6還未開始進行時發(fā)生非法斷電,從以上描述可知,無論哪種情況,新塊900中只有部分頁遷入數(shù)據(jù)并且標注了指定邏輯地址。再次上電后,對新塊900內(nèi)各頁的邏輯地址進行檢查,如果發(fā)現(xiàn)有某頁的邏輯地址與指定邏輯地址不同,說明對新塊900的數(shù)據(jù)操作處于數(shù)據(jù)搬遷階段,新塊900中數(shù)據(jù)不全。這時,盡管新塊900的數(shù)據(jù)不全,但原塊的數(shù)據(jù)還未擦除,所以要保留的數(shù)據(jù)不會丟失,可以恢復(fù)。
由于步驟6仍然是對新塊900進行數(shù)據(jù)操作,還未對原塊800進行擦除,原塊中的要保留的數(shù)據(jù)不會丟失。若在步驟6進行過程中發(fā)生非法斷電,由于步驟6還未完成,新塊900中還是只有部分頁寫入數(shù)據(jù)并且標注了指定邏輯地址。再次上電后,對新存儲塊900內(nèi)各頁的邏輯地址進行檢查,如果發(fā)現(xiàn)有某頁的邏輯地址與標注的指定邏輯地址不同,說明新塊900中數(shù)據(jù)不全。如上所述,由于未對原塊800進行擦除,原塊800中的數(shù)據(jù)得以保留。在重新上電之前,原塊800中的要保留的數(shù)據(jù)可以恢復(fù)。
如果在步驟6完成之后、步驟7進行之前發(fā)生非法斷電,此時新存儲塊900已經(jīng)保存有遷入的要保留的數(shù)據(jù)及新寫入的數(shù)據(jù),并且所有頁都標注了指定邏輯地址。而原塊中的數(shù)據(jù)尚未開始擦除,兩個存儲塊每一頁的邏輯地址都與指定邏輯地址相同,但兩個存儲塊內(nèi)部數(shù)據(jù)存儲區(qū)保存的數(shù)據(jù)不同。重新加電時,擦除原塊800或新塊900的任一個即可。為了進一步排除可能出錯的數(shù)據(jù),需要通過校驗碼檢驗各存儲塊中每頁數(shù)據(jù)是否正確,找出數(shù)據(jù)有錯的存儲塊并擦除;如果兩個存儲塊的數(shù)據(jù)都是正確的,則任意擦除一個。
利用校驗碼對數(shù)據(jù)的檢驗方法是在向存儲塊寫數(shù)據(jù)過程中,每寫入一頁數(shù)據(jù)時,控制器根據(jù)要寫入的數(shù)據(jù),根據(jù)現(xiàn)有技術(shù)已知的算法計算出校驗碼,將其保存在該頁冗余區(qū)中。在使用校驗碼對數(shù)據(jù)進行檢驗時,根據(jù)頁內(nèi)數(shù)據(jù)存儲區(qū)保存的數(shù)據(jù),采用相同的算法計算出校驗值,將該值與該頁冗余區(qū)中的保存的校驗碼比較,如果兩者不相同,說明該頁內(nèi)數(shù)據(jù)存儲區(qū)保存的數(shù)據(jù)與要寫入的數(shù)據(jù)不同,該頁內(nèi)的數(shù)據(jù)有錯。
如果在步驟7進行過程中發(fā)生非法斷電,此時原存儲塊800可能已有部分頁被擦除,丟失邏輯地址;若發(fā)現(xiàn)原塊800中有某頁的邏輯地址與指定邏輯地址不同,說明對原塊800的擦除操作未完成,部分頁已經(jīng)擦除,部分頁尚余數(shù)據(jù)。此時應(yīng)對原存儲塊800的每一頁數(shù)據(jù)進行檢查,若發(fā)現(xiàn)有未完全擦除的頁就對原存儲塊800進行完全擦除操作,以保證原存儲塊800為空;以上是說明在實施本發(fā)明數(shù)據(jù)保護方法的閃存介質(zhì)遭遇非法斷電后數(shù)據(jù)恢復(fù)的可能性。
接下來結(jié)合附圖5具體說明閃存介質(zhì)中實施了上述的數(shù)據(jù)保護方法,當(dāng)該閃存介質(zhì)因非法斷電造成操作中斷后,對該閃存介質(zhì)的數(shù)據(jù)恢復(fù)方法。
所述存儲裝置再次上電后,或再次進行數(shù)據(jù)操作前,控制器讀取所述存儲裝置的存儲空間中所有存儲塊的冗余區(qū)信息,根據(jù)讀到的信息建立對照表(步驟1);建立對照表的操作可采用現(xiàn)有技術(shù)進行。在對所有存儲塊進行讀取操作、建立對照表的過程中,若發(fā)現(xiàn)存儲空間中有兩個存儲塊800和900具有相同的邏輯地址,則中斷建立對照表的步驟,轉(zhuǎn)到對這兩個存儲塊進行數(shù)據(jù)恢復(fù)操作(步驟2)。
在邏輯地址相同的兩個存儲塊800和900內(nèi),可能有一個含有不完整的數(shù)據(jù)信息。此時檢驗找到的其中一個存儲塊800/900中每頁的邏輯地址是否與指定邏輯地址相符(步驟3),如果有某頁邏輯地址與指定邏輯地址不符,說明該存儲塊內(nèi)數(shù)據(jù)不完整,將存儲塊800/900擦除(步驟3’)。否則檢查另一個存儲塊900/800的邏輯地址是否與指定邏輯地址相符。
如果通過對另一個存儲塊900/800的邏輯地址進行檢查(步驟4),發(fā)現(xiàn)有某頁邏輯地址與指定邏輯地址不符,說明該存儲塊內(nèi)數(shù)據(jù)不完整,將存儲塊900/800擦除(步驟4’)。
如果兩個存儲塊的邏輯地址都相符,說明兩個存儲塊內(nèi)的數(shù)據(jù)都是完整的。但兩個存儲塊內(nèi)部數(shù)據(jù)存儲區(qū)保存的數(shù)據(jù)可能不同,需要分別對兩個存儲塊通過校驗碼來檢驗數(shù)據(jù)是否正確。此時,根據(jù)存儲塊900/800中每頁存儲的數(shù)據(jù)計算校驗值,并與該頁冗余區(qū)內(nèi)存儲的校驗碼比較(步驟5);如果發(fā)現(xiàn)某頁校驗碼不符,說明該存儲塊檢驗結(jié)果不正確,該存儲塊內(nèi)部數(shù)據(jù)不完整,則擦除存儲塊900/800(步驟5’)。
如果存儲塊900/800內(nèi)所有頁的檢驗結(jié)果都正確,則對存儲塊800/900進行相同的校驗碼檢查(步驟6);如發(fā)現(xiàn)存儲塊800/900內(nèi)校驗碼有不符則擦除存儲塊800/900(步驟6’);否則說明兩個存儲塊內(nèi)的數(shù)據(jù)都是正確的,可以擦除其中任一個,此處擦除存儲塊900/800(步驟6”)。
通過該做法排除了對存儲塊數(shù)據(jù)操作中斷可能造成的存儲塊數(shù)據(jù)錯誤、丟失或重復(fù)情況,然后判斷此時對照表建立完畢與否(步驟7);如果沒有完畢,則重新進行建立對照表的步驟(步驟1),直到不再發(fā)現(xiàn)邏輯地址相同的存儲塊,對照表建立完畢為止,數(shù)據(jù)恢復(fù)流程結(jié)束(步驟8)。
在上述實施例中,在向新塊搬遷和寫入數(shù)據(jù)的時候,要在所進行操作的相應(yīng)頁面標注指定邏輯地址。該指定邏輯地址與原塊800的邏輯地址相同。如上所述,在寫入數(shù)據(jù)階段,當(dāng)未能找到原塊800而虛擬原塊800時(步驟3’),也要在所虛擬的原塊800的每一個頁面標注指定邏輯地址。通過該標注信息,在寫數(shù)據(jù)的任何時刻即使非法斷電也能實現(xiàn)數(shù)據(jù)恢復(fù)。
根據(jù)本發(fā)明,對存儲塊所作的標注,其標注信息內(nèi)容并不局限于上述實施例中的指定邏輯地址,還可以采用數(shù)值、字符或數(shù)值與字符的組合。標注信息的設(shè)置方式也不僅限于對所有頁標注同樣信息,還可以設(shè)置成遞增、遞減、累加、累乘和/或按照其他規(guī)律或規(guī)則變化的數(shù)值、字符或數(shù)值與字符的組合。標注信息存放的位置也不是唯一的,可以存放在邏輯地址區(qū),也可以存放在保留區(qū)或其他區(qū)域;標注信息所占字節(jié)數(shù)目也不是唯一的。本領(lǐng)域技術(shù)人員可以理解,對標注信息的內(nèi)容、存放位置以及變化規(guī)律的設(shè)置方法有多種可能,只要是按照某種規(guī)律或規(guī)則加注標注信息,都將落入本發(fā)明的保護范圍內(nèi)。
例如,可采用遞增的數(shù)值作為標注信息,在寫入數(shù)據(jù)的過程中,對新塊900的每一頁按照頁號順序,逐頁加一的方式加注標注信息。設(shè)置第一頁標注數(shù)值1,第二頁標注數(shù)值2,如此累加直至該塊的最后一頁,最后一頁的標注數(shù)值應(yīng)該等于該存儲塊中包含的頁的數(shù)目。
在采用上述標注方法寫數(shù)據(jù)的過程中如果發(fā)生非法斷電,可能存在新塊900的部分頁已經(jīng)被標注,而剩余頁無標注信息的情況。根據(jù)本發(fā)明的思想,通過對標注信息的檢查,可以判斷存儲塊內(nèi)數(shù)據(jù)是否完整。進而結(jié)合對校驗碼的檢查,找出完整正確的數(shù)據(jù)并進行恢復(fù)操作。
數(shù)據(jù)恢復(fù)操作的原理同上述實施例,所述閃存裝置的控制器根據(jù)寫入新數(shù)據(jù)指令中的指定地址,經(jīng)過地址變換、查找對照表,在閃存介質(zhì)中尋找所有地址信息與該指定邏輯地址相符的存儲塊,再通過檢查其每一頁的標注信息來判斷存儲塊內(nèi)數(shù)據(jù)是否完整;結(jié)合校驗碼找出正確的數(shù)據(jù)進行恢復(fù)。
在上述實施例中,進行數(shù)據(jù)恢復(fù)需要對可能有錯誤的存儲塊的每一頁檢查邏輯地址,只要有一頁的邏輯地址不符,就認為該存儲塊存在錯誤數(shù)據(jù)。然而本發(fā)明不局限于此。在一個優(yōu)選實施方案中,規(guī)定對存儲塊的數(shù)據(jù)操作都按照存儲塊內(nèi)頁的次序進行,可以從存儲塊中的第一頁順序進行到最后一頁。同樣地,也可以先從最后一頁開始操作,按照頁號倒序進行,最后對第一頁操作。
如果采用上述方法對存儲塊寫入數(shù)據(jù),步驟5與步驟6可能需要混合交叉進行,按照新塊900中頁的順序,逐頁進行數(shù)據(jù)操作??刂破鞲鶕?jù)數(shù)據(jù)操作指令中指定要寫入新數(shù)據(jù)的頁號,判斷原塊800中的哪些頁將被新數(shù)據(jù)覆蓋,哪些頁中的原始數(shù)據(jù)需要保留。根據(jù)判斷結(jié)果,如果新塊900中的當(dāng)前頁對應(yīng)原塊800中要保留的數(shù)據(jù)所在的頁,應(yīng)按照步驟5將原塊800中的要保留的數(shù)據(jù)搬遷到新塊900;如果新塊中當(dāng)前頁對應(yīng)要寫入的新數(shù)據(jù),應(yīng)按照步驟6寫入新數(shù)據(jù)。如此進行直到新塊的最后一頁操作完成,此時新塊900的所有頁全部進行過數(shù)據(jù)操作。
由于在本實施例的寫數(shù)據(jù)過程中,對存儲塊的所有數(shù)據(jù)操作,包括數(shù)據(jù)搬遷、新數(shù)據(jù)的寫入和標注都是從該塊的第一頁開始,依次進行到最后一頁的,如果中途發(fā)生非法斷電,數(shù)據(jù)操作未能進行到存儲塊的最后一頁,必然會造成第一頁和/或最后一頁的標注信息不完整。因此在數(shù)據(jù)恢復(fù)過程中,僅需對每一個存儲塊的第一頁和最后一頁的標注信息進行檢查,大大提高了數(shù)據(jù)恢復(fù)程序的效率。
上述數(shù)據(jù)操作的次序也可以是從最后一頁,按照倒序進行到第一頁的。其恢復(fù)數(shù)據(jù)階段對存儲塊內(nèi)標注信息的檢查,也可以只檢查第一頁和最后一頁。
為了進一步簡化操作,可以只對存儲塊的最后一個進行操作的頁的標注信息進行檢查。對于對所有頁標注信息為同一內(nèi)容的情況,在寫入新數(shù)據(jù)的過程中根據(jù)預(yù)先定義好的標注信息以及數(shù)據(jù)操作順序進行標注;而在數(shù)據(jù)恢復(fù)階段,控制器依舊根據(jù)該標注信息和數(shù)據(jù)操作順序,檢查存儲塊中按照該數(shù)據(jù)操作順序,應(yīng)當(dāng)最后進行數(shù)據(jù)操作的那一頁中的標注信息;對于標注信息按照某規(guī)則進行變化的情況,在寫入新數(shù)據(jù)的過程中根據(jù)預(yù)先定義好的標注信息變化規(guī)則、初始內(nèi)容以及數(shù)據(jù)操作順序進行標注;在數(shù)據(jù)恢復(fù)階段,控制器根據(jù)標注信息變化規(guī)則、初始內(nèi)容以及數(shù)據(jù)操作順序,計算得到該存儲塊中,按照該數(shù)據(jù)操作順序最后應(yīng)標注的內(nèi)容,與存儲塊中存儲塊中按照該數(shù)據(jù)操作順序,最后進行數(shù)據(jù)操作的那一頁中的實際標注信息是否相符。此時,對存儲塊標注的檢查簡化到只需檢查一頁中的標注信息,大大縮短了檢查時間。
以下是本發(fā)明的另一個優(yōu)選實施例,其具體體現(xiàn)了上述改進的數(shù)據(jù)保護方法。
在本實施例中假設(shè)每個存儲塊包含64個頁,對所有64個頁從0開始順序進行編號,最后一頁頁號為63。本實施例還對執(zhí)行的數(shù)據(jù)操作及標注的方法作如下規(guī)定對存儲塊的數(shù)據(jù)操作從存儲塊的第一頁(頁號為0)開始,按照頁號的順序依次進行到最后一頁(頁號為63);標注信息的編碼規(guī)則為“字母+數(shù)值”,其中的數(shù)值按照遞增規(guī)則變化,即在存儲塊的第一頁(頁號為0)中的初始標注為“A1”,對第二頁(頁號為1)應(yīng)標注“A2”......直至最后一頁(頁號為63)應(yīng)標注“A64”。
現(xiàn)參照圖2和圖6,說明本實施例在閃存介質(zhì)中數(shù)據(jù)保護的方法。如圖2所示,當(dāng)在閃存介質(zhì)中采用本實施例提供的數(shù)據(jù)保護方法時,數(shù)據(jù)操作可以在存儲塊800和900之間進行,其中存儲塊800為原塊,其為數(shù)據(jù)操作指令中的指定地址所指向的存儲塊。存儲塊900為新塊,在實施數(shù)據(jù)搬遷時,將原塊800中應(yīng)當(dāng)保留的數(shù)據(jù)搬遷到新塊900相應(yīng)的頁。
具體來說,如圖6所示,當(dāng)所述閃存介質(zhì)接收到來自操作系統(tǒng)的數(shù)據(jù)操作指令,例如寫入新數(shù)據(jù)指令(步驟1)后,閃存裝置的控制器根據(jù)所述指令中的指定地址尋找要寫入數(shù)據(jù)的存儲塊,即原塊800(步驟2)。
在步驟3中,判斷是否找到該指定地址所指向的原塊800。
如果數(shù)據(jù)操作指令中的指定地址所指向的原塊不存在,則進行步驟3’,在所述閃存介質(zhì)中找出一個空塊,將該空塊虛擬為一個已經(jīng)存有數(shù)據(jù)的原塊800。虛擬原塊800的具體方法與上一個實施例相似,其不同之處在于在所述空塊每頁的冗余區(qū)依次寫入根據(jù)上述標注的編碼規(guī)則得到的標注信息,第一頁(頁號為0)標注“A1”,第二頁(頁號為1)標注“A2”......如此直到最后一頁(頁號為63)標注“A63”。保持該空塊的其余存儲空間仍然為空,再進行步驟4。
如果能找到原塊800,則直接進行步驟4。
在步驟4中,找出一個空白的新塊900。
接下來在步驟5中,閃存裝置的控制器根據(jù)指令中指定要寫入數(shù)據(jù)的頁號,判斷原塊800中的哪些頁將被新數(shù)據(jù)覆蓋,哪些頁中的原始數(shù)據(jù)需要保留。對于所述原塊800中要保留的數(shù)據(jù),控制器將其按頁復(fù)制到新塊900中,即對原塊中的不被新數(shù)據(jù)覆蓋的部分頁中的要保留的數(shù)據(jù)進行搬遷。在每向新塊900中寫入一頁數(shù)據(jù)的同時,根據(jù)上述標注信息編碼規(guī)則計算該頁的標注信息,并寫入該頁的冗余區(qū)內(nèi)。
對于數(shù)據(jù)操作指令中的指定地址所指的原塊不存在的情況,在前述步驟3’中進行虛擬得到的原塊800,同樣進行步驟4及步驟5的操作,將其不被新數(shù)據(jù)覆蓋的部分頁復(fù)制到新塊900中,計算標注信息,并在新塊900的相應(yīng)頁中寫入該標注信息。
對于第一次進行數(shù)據(jù)寫入操作的閃存芯片,根據(jù)本實施例中的寫數(shù)據(jù)方法,由指定邏輯地址無法找到指定寫入數(shù)據(jù)的原塊800,應(yīng)進行步驟3’,找出一空白存儲塊,在其每一頁的冗余區(qū)中寫入相應(yīng)的標注信息,將其虛擬為原塊800;再找出空白的新塊900,進行上述數(shù)據(jù)搬遷的操作(步驟5)。
接著,將要寫入的數(shù)據(jù)寫入所述新塊900中,在每寫入一頁的同時計算標注信息,并在該頁的冗余區(qū)內(nèi)寫入標注信息(步驟6)。直到新塊900的每一頁都存儲有搬遷的要保留的數(shù)據(jù)或新寫入的數(shù)據(jù)。也就是說,新塊900的所有頁都進行了相應(yīng)的標注。
上述操作中,步驟5和6可以混合交叉進行。此時對存儲塊的數(shù)據(jù)操作要按照預(yù)先定義的順序,逐頁進行??刂破鞲鶕?jù)指令中指定要寫入新數(shù)據(jù)的頁號,判斷原塊800中的哪些頁將被新數(shù)據(jù)覆蓋,哪些頁中的原始數(shù)據(jù)需要保留。根據(jù)判斷結(jié)果,如果新塊900中的當(dāng)前頁對應(yīng)原塊800中要保留的數(shù)據(jù)所在的頁,應(yīng)按照步驟5將原塊800中的要保留的數(shù)據(jù)搬遷到新塊900;如果新塊中當(dāng)前頁對應(yīng)要寫入的新數(shù)據(jù),應(yīng)按照步驟6寫入新數(shù)據(jù),如此進行直到最后一頁(頁號63)操作完成,此時新塊900的所有頁全部進行過數(shù)據(jù)操作并且全部進行了標注。
在完成了步驟5和6之后,原塊800中要求保留的數(shù)據(jù)已全部復(fù)制到新塊900中,根據(jù)數(shù)據(jù)操作指令要寫入的數(shù)據(jù)也全部寫入完成。同時,新塊900的每一頁都已標注了相應(yīng)的標注信息。接下來,執(zhí)行步驟7,即將原塊800完全擦除。
重復(fù)上述操作直至所有要寫入的新數(shù)據(jù)全部寫完(步驟8),更新對照表中的對應(yīng)地址信息(步驟9),更新方法是將對照表中存儲塊900的邏輯地址修改為指定邏輯地址。寫入新數(shù)據(jù)的操作完成。
如果在上述寫操作過程中發(fā)生非法斷電,存儲塊800及900中可能產(chǎn)生錯誤的情況與實施例一中相似,故不贅述。
現(xiàn)在結(jié)合附圖6及附圖7具體說明閃存介質(zhì)中實施了本實施例提供的數(shù)據(jù)保護方法,當(dāng)該閃存介質(zhì)因非法斷電造成操作中斷后,對該閃存介質(zhì)再次加電時的數(shù)據(jù)恢復(fù)方法。
所述存儲裝置再次上電后,或再次進行數(shù)據(jù)操作前,控制器讀取所述存儲裝置的存儲空間中所有存儲塊的冗余區(qū)信息,根據(jù)讀到的信息建立對照表(步驟1);建立對照表的操作可采用現(xiàn)有技術(shù)進行。在對所有存儲塊進行讀取操作、建立對照表的過程中,若發(fā)現(xiàn)存儲空間中有兩個存儲塊800和900具有相同的邏輯地址,則中斷建立對照表的步驟,轉(zhuǎn)到對這兩個存儲塊進行數(shù)據(jù)恢復(fù)操作(步驟2)。
在邏輯地址相同的兩個存儲塊800和900內(nèi),可能有一個含有不完整的數(shù)據(jù)信息。此時檢驗找到的其中一個存儲塊800/900的最后一頁(頁號為63)應(yīng)標注的信息預(yù)定義標注信息的編碼規(guī)則為“字母+數(shù)值”,其中的數(shù)值按照遞增規(guī)則變化,存儲塊中包含64個頁,由此可得出,該存儲塊中最后一頁(頁號為63)的標注信息應(yīng)為“A64”。
將該計算結(jié)果與所述存儲塊中最后一頁(頁號為63)中的標注信息進行比較,根據(jù)本發(fā)明的數(shù)據(jù)保護方法可知,只要是所述最后一頁(頁號為63)內(nèi)標注信息與計算得出的標注信息不相符,就說明該存儲塊在中斷前的數(shù)據(jù)操作中使用過,說明該塊數(shù)據(jù)不完整,將其擦除(步驟3’),否則采用同樣方法檢查另一個存儲塊900/800最后一頁的標注信息。
如果通過對另一個存儲塊900/800的最后一頁標注信息進行檢查(步驟4),若最后一頁的標注信息與計算得出的標注信息不相符,說明該存儲塊內(nèi)數(shù)據(jù)不完整,將存儲塊900/800擦除(步驟4’)。
如果第二個存儲塊內(nèi)最后一頁的標注信息也正確,說明兩個存儲塊內(nèi)的數(shù)據(jù)都是完整的。但兩個存儲塊內(nèi)部數(shù)據(jù)存儲區(qū)保存的數(shù)據(jù)可能不同,需要分別對兩個存儲塊通過校驗碼來檢驗數(shù)據(jù)是否正確。此時,根據(jù)存儲塊900/800中每頁存儲的數(shù)據(jù)計算校驗值,并與該頁冗余區(qū)內(nèi)存儲的校驗碼比較(步驟5);如果發(fā)現(xiàn)某頁校驗碼不符,說明該存儲塊檢驗結(jié)果不正確,則擦除存儲塊900/800(步驟5’)。
如果存儲塊900/800內(nèi)所有頁的檢驗結(jié)果都正確,則對存儲塊800/900進行相同的校驗碼檢查(步驟6);如發(fā)現(xiàn)存儲塊800/900內(nèi)校驗碼有不符則擦除存儲塊800/900(步驟6’);否則說明兩個存儲塊內(nèi)的數(shù)據(jù)都是正確的,可以擦除其中任一個,此處擦除存儲塊900/800(步驟6”)。
通過該做法排除了對存儲塊數(shù)據(jù)操作中斷可能造成的存儲塊數(shù)據(jù)錯誤、丟失或重復(fù)情況,然后判斷此時對照表建立完畢與否(步驟7);如果沒有完畢,則重新進行建立對照表的步驟(步驟1),直到不再發(fā)現(xiàn)邏輯地址相同的存儲塊,對照表建立完畢為止,數(shù)據(jù)恢復(fù)流程結(jié)束(步驟8)。
在上述實施例中,在向新塊搬遷和寫入數(shù)據(jù)的時候,要在進行數(shù)據(jù)操作的頁面標注相應(yīng)標注信息。如上所述,當(dāng)未能找到原塊800而虛擬原塊800時(步驟3′),也要在所虛擬的原塊800的每一個頁面標注相應(yīng)標注信息。通過該標注信息,在寫數(shù)據(jù)的任何時刻即使非法斷電也能實現(xiàn)數(shù)據(jù)恢復(fù)。
根據(jù)本發(fā)明方法的又一個實施例,按照SSFDC協(xié)議將所述閃存介質(zhì)分成若干個區(qū)(Zone),每個區(qū)由若干個存儲塊構(gòu)成,并且每個區(qū)都有設(shè)置至少一個空存儲塊,用于將要保留的數(shù)據(jù)復(fù)制到該存儲塊中。在寫入新數(shù)據(jù)階段,如果需要查找新塊900,則直接調(diào)用該預(yù)留的空存儲塊,節(jié)省了查找空存儲塊的時間。
在本實施例中,采用與前述實施例類似的數(shù)據(jù)保護方法對各區(qū)內(nèi)的數(shù)據(jù)進行操作,其不同之處在于在寫數(shù)據(jù)操作時,尋找新塊的范圍局限在原塊所在的區(qū)中;在恢復(fù)數(shù)據(jù)操作階段,由于數(shù)據(jù)讀寫操作只是在同一區(qū)內(nèi)的兩個存儲塊之間進行,所述閃存介質(zhì)的其他區(qū)在上述寫數(shù)據(jù)過程中不會出錯,故只需根據(jù)指定邏輯地址查找本區(qū)內(nèi)的存儲塊并排除錯誤即可。借此,提高了在所述閃存介質(zhì)中寫數(shù)據(jù)的速度及恢復(fù)數(shù)據(jù)的速度。
引入?yún)^(qū)(Zone)的機制,使得參與數(shù)據(jù)操作的存儲塊集中在相對緊湊的存儲空間中,在數(shù)據(jù)的讀寫和恢復(fù)過程中,節(jié)省了操作時間。
以上是對本發(fā)明示例性地說明,本領(lǐng)域普通技術(shù)人員可以理解,對頁內(nèi)的標注信息設(shè)置的方法,以及校驗碼算法都不是唯一的,搜尋存儲塊的途徑也可采用各種已知的技術(shù)。本發(fā)明的精髓是在數(shù)據(jù)操作時設(shè)置標注信息以鑒別所涉及的存儲塊的狀態(tài),結(jié)合對校驗碼的檢驗以鑒別存儲塊內(nèi)數(shù)據(jù)的正確性,從而在發(fā)生非法斷電后能有效地恢復(fù)原有數(shù)據(jù)文件,保證數(shù)據(jù)的完整性。
而本發(fā)明的數(shù)據(jù)恢復(fù)方法的精髓在于根據(jù)閃存介質(zhì)中存儲塊中的標志進行檢查,結(jié)合對頁的校驗碼的檢查,判斷中斷發(fā)生時刻存儲塊的狀態(tài)及存儲塊內(nèi)數(shù)據(jù)的完整性,進而找出要保留的數(shù)據(jù),進行相應(yīng)的數(shù)據(jù)恢復(fù)操作,排除存儲塊擦除不完全的錯誤。因此,對于寫數(shù)據(jù)方法中的步驟調(diào)整而造成恢復(fù)數(shù)據(jù)方法的改變,是不偏離本發(fā)明思想的。
不偏離本發(fā)明思想的對本發(fā)明技術(shù)方案的各種改型將落入本發(fā)明權(quán)利要求所限定的范圍中。
權(quán)利要求
1.閃存介質(zhì)中數(shù)據(jù)保護方法,所述閃存介質(zhì)包括多個存儲塊,每個存儲塊由多個頁構(gòu)成,每頁劃分為數(shù)據(jù)存儲區(qū)和冗余區(qū),所述方法包括以下步驟根據(jù)數(shù)據(jù)操作指令對所述存儲塊(900)執(zhí)行數(shù)據(jù)操作時,對執(zhí)行數(shù)據(jù)操作的頁加注標注信息。
2.根據(jù)權(quán)利要求1所述的方法,其中對所述存儲塊(900)進行數(shù)據(jù)操作包括將另一個存儲塊(800)內(nèi)要保留的數(shù)據(jù)搬遷到所述存儲塊(900)的步驟。
3.根據(jù)權(quán)利要求1所述的方法,其中對所述存儲塊(900)進行數(shù)據(jù)操作包括根據(jù)所述數(shù)據(jù)操作指令在所述存儲塊(900)中寫入新數(shù)據(jù)的步驟。
4.根據(jù)權(quán)利要求1-3任何一個權(quán)利要求所述的方法,其中所述的標注信息可以是所述數(shù)據(jù)操作指令的指定地址所指向的存儲塊(800)的邏輯地址。
5.根據(jù)權(quán)利要求1-3任何一個權(quán)利要求所述的方法,其中所述的標注信息可以是具有一定變化規(guī)律或固定不變的符號。
6.根據(jù)權(quán)利要求5所述的方法,其中在所述執(zhí)行數(shù)據(jù)操作的頁中加注標注信息時,所述標注信息可以是執(zhí)行數(shù)據(jù)操作的頁的頁號。
7.根據(jù)權(quán)利要求5所述的方法,其中在所述執(zhí)行數(shù)據(jù)操作的頁中加注標注信息時,所述標注信息可以是數(shù)值、字符或數(shù)值和字符的組合。
8.在閃存裝置中寫數(shù)據(jù)的方法,所述閃存裝置包括用于控制數(shù)據(jù)存取的控制器和用于存儲數(shù)據(jù)的閃存介質(zhì),所述閃存介質(zhì)包括多個存儲塊,每個存儲塊由多個頁構(gòu)成,每頁劃分為數(shù)據(jù)存儲區(qū)和冗余區(qū),所述方法包括以下步驟(1)所述控制器接受數(shù)據(jù)操作指令,并根據(jù)數(shù)據(jù)操作指令的指定地址查找相應(yīng)的存儲塊(800);(2)將所述存儲塊(800)中要保留的數(shù)據(jù)搬遷到另一個空白存儲塊(900)中,同時在所述存儲塊(900)中對執(zhí)行數(shù)據(jù)操作的頁加注標注信息;(3)根據(jù)上述所接受的數(shù)據(jù)操作指令,在所述存儲塊(900)中寫入數(shù)據(jù)并在執(zhí)行數(shù)據(jù)操作的頁加注標注信息;(4)擦除存儲塊(800),使其為空。
9.根據(jù)權(quán)利要求8所述的方法,其中在執(zhí)行步驟(2)或(3)時,所述的標注信息可以是數(shù)據(jù)操作指令中的指定地址所指向的存儲塊(800)的邏輯地址。
10.根據(jù)權(quán)利要求8所述的方法,其中在執(zhí)行步驟(2)或(3)時,所述的標注信息可以是固定不變或具有一定變化規(guī)律的數(shù)值、字符或數(shù)值與字符的組合。
11.閃存介質(zhì)的數(shù)據(jù)恢復(fù)方法,其適用于在所述閃存介質(zhì)采用如權(quán)利要求8所述方法寫數(shù)據(jù)過程中,由于非法斷電而產(chǎn)生的數(shù)據(jù)損壞情況進行數(shù)據(jù)恢復(fù),其步驟包括通過檢驗標注信息判斷所述閃存介質(zhì)中存儲塊的數(shù)據(jù)是否完整,并對數(shù)據(jù)不完整的存儲塊進行數(shù)據(jù)恢復(fù)操作。
12.根據(jù)權(quán)利要求11所述的方法,若存儲塊中的標注信息與預(yù)定的標注信息一致,或符合預(yù)定的標注信息變化規(guī)律,表明存儲塊中的數(shù)據(jù)是完整的。
13.根據(jù)權(quán)利要求11所述的方法,進一步包括擦除數(shù)據(jù)不完整的存儲塊的步驟。
14.根據(jù)權(quán)利要求11所述的方法,進一步包括利用校驗碼檢驗數(shù)據(jù)完整的存儲塊的步驟,若存儲塊的檢驗結(jié)果都正確,則擦除其中任意一個存儲塊;若其中一個存儲塊檢驗結(jié)果不正確,則擦除該檢驗結(jié)果不正確的存儲塊。
全文摘要
本發(fā)明提出一種在閃存介質(zhì)中數(shù)據(jù)保護方法,在對所述存儲塊進行數(shù)據(jù)操作時,在執(zhí)行數(shù)據(jù)操作的頁加注標注信息。通過該方法可以在現(xiàn)有的各種閃存介質(zhì)中快速的寫入數(shù)據(jù)并且完整地保護在非法斷電前已寫入到閃存介質(zhì)中的數(shù)據(jù)文件。本發(fā)明還提供了采用上述數(shù)據(jù)保護方法的寫數(shù)據(jù)方法和數(shù)據(jù)恢復(fù)方法。
文檔編號G11C16/22GK1567256SQ0313742
公開日2005年1月19日 申請日期2003年6月20日 優(yōu)先權(quán)日2003年6月20日
發(fā)明者鄧國順, 成曉華, 向鋒, 葉志祥 申請人:深圳市朗科科技有限公司