專利名稱:高可靠排序管理扇區(qū)的存儲結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于閃存記憶體存儲領(lǐng)域。采用特定的存儲結(jié)構(gòu),并通過排序管理扇區(qū)的方式,提升閃存記憶體的存儲性能,實現(xiàn)對重要表格資料的備份和保護。
背景技術(shù):
閃存記憶體和硬盤是目前市場上兩個主流的數(shù)據(jù)存儲媒介,其中閃存記憶體最主要的好處在于省電以及具有較小的體積。目前市場上的USB存儲盤、MP3播放器、PMP個人多媒體播放器以及SD/MMC/MS等存儲卡絕大部分都是以閃存記憶體作為存儲的媒介。在可以預(yù)見的未來幾年內(nèi),閃存依舊將是小型數(shù)據(jù)儲存的主流媒介。
閃存記憶體本身有一些先天性的特性,在寫入的過程中其數(shù)據(jù)內(nèi)容只能由‘1’變成‘0’,而無法將‘0’變成‘1’。舉例來說,如果閃存記憶體上已經(jīng)有數(shù)據(jù)0x86,而我們現(xiàn)在想要寫入一個新的數(shù)據(jù)0x11,則結(jié)果會變成0x00(0x86交集0x11)。所以在某一個位置上的數(shù)據(jù)如果重復(fù)寫入時,會無法保證數(shù)據(jù)的正確性。如果我們想要重復(fù)使用某一個位置時,我們必須對某一個位置所在的區(qū)塊進行擦除的動作。因為一個區(qū)塊的大小(以三星的為例,此大小為128K字節(jié))通常遠大于寫入數(shù)據(jù)(通常是512字節(jié))的大小,所以為了寫入一筆數(shù)據(jù),抹除的動作會花費許多時間。從而成為性能上的瓶頸。
當數(shù)據(jù)要寫入閃存記憶體超過一定次數(shù)時,閃存記憶體無法保證寫入數(shù)據(jù)的正確性。根據(jù)目前市場上MLC(多層次細胞)閃存記憶體的要求,當讀寫超過1000次,再寫入每一個512字節(jié)的數(shù)據(jù)時,可能會發(fā)生3個字節(jié)的錯誤。所以我們每一次寫入數(shù)據(jù)時,每一筆數(shù)據(jù)需要加入錯誤修正碼,來保證數(shù)據(jù)讀取時的正確性。
在系統(tǒng)運行時,因為某些數(shù)據(jù)表格非常重要,不能丟失,否則此閃存記憶體上的數(shù)據(jù)將會沒有意義,比如系統(tǒng)的啟動扇區(qū)(Boot sector),文件分配表(FAT)等等。所以要加強重要數(shù)據(jù)表格的保護與備份。
要同時解決上面所提到的問題,即為從事此行業(yè)之相關(guān)廠商所亟欲研究改善之方向。
發(fā)明內(nèi)容
本發(fā)明的主要目的是提升閃存記憶體的性能,加強重要表格數(shù)據(jù)的備份以及保護數(shù)據(jù)的內(nèi)容。
將經(jīng)常使用的表格數(shù)據(jù),利用標記序號的方法,將數(shù)據(jù)與序號以及ECC錯誤修正碼混合編碼,其中序號是用來表示數(shù)據(jù)是否是最新的數(shù)據(jù),并且獨立出兩個區(qū)塊給此數(shù)據(jù)表格使用,表格數(shù)據(jù)在此兩個區(qū)塊中依序往下一頁寫入,如此當區(qū)塊中重要數(shù)據(jù)區(qū)塊的數(shù)據(jù)消失時,還可以依據(jù)另外一個區(qū)塊中最新的表格數(shù)據(jù),將被刪除的數(shù)據(jù)救回。而且只有當兩個區(qū)塊完全使用完時,才需要做擦除的動作。如此可以避免每次更新數(shù)據(jù),就需要使用擦除的指令,也可以增加系統(tǒng)性能以及延長閃存記憶體的使用壽命。
因為表格數(shù)據(jù)的內(nèi)容不容許發(fā)生錯誤,所以我們利用所有閃存記憶體扇區(qū)的剩余空間放置ECC錯誤修正碼,將對此表格數(shù)據(jù)的保護修正程度發(fā)揮到最強,當然也可以只利用其中一些空間放置錯誤碼,其它空間以作他用。
表格的內(nèi)容也不允許消失,但有可能當其中一個表格因為電源穩(wěn)定的問題或因為其它原因,造成閃存記憶體數(shù)據(jù)總線發(fā)生位置的取樣錯誤,刪除重要表格數(shù)據(jù)的內(nèi)容。所以利用兩個表格,當發(fā)生一個表格數(shù)據(jù)消失時,還有另外一個區(qū)塊的資料可以使用。此時便可以使用該區(qū)塊的數(shù)據(jù),利用序號找出最新的表格數(shù)據(jù),并重建此兩個區(qū)塊內(nèi)的表格數(shù)據(jù)。
圖1數(shù)據(jù)表格存入兩個區(qū)塊的流程圖。
圖2數(shù)據(jù)、序號以及ECC錯誤修正碼擺放的方式。
圖3數(shù)據(jù)初始的配置。
圖4在初始之后,寫入下一筆數(shù)據(jù)。
圖5數(shù)據(jù)已經(jīng)寫到第一區(qū)塊的最后一頁。
圖6將第二區(qū)塊先擦除。
圖7將新資料寫入第二區(qū)塊的第一頁。
圖8將第一區(qū)塊擦除。
圖9將第二區(qū)塊的第一頁拷貝到第一區(qū)塊的第一頁。
圖10找最新資料的流程圖。
圖11將第一區(qū)塊擦除。
圖12將第二區(qū)塊最新的數(shù)據(jù)拷貝到第一區(qū)塊的第一頁。
圖13將第二區(qū)塊擦除。
圖14第一區(qū)塊的第一頁拷貝到第二區(qū)塊的第一頁。
圖15序號可以放在任意數(shù)據(jù)區(qū)段中,將數(shù)據(jù)區(qū)段切割。
主要組件符號說明200存放數(shù)據(jù)的區(qū)域。在一般的操作系統(tǒng)此區(qū)域大小為512字節(jié)。
210序號。此序號代表此資料的新舊程度。數(shù)字越大表示此數(shù)據(jù)越新。一般此序號的位置在第513字節(jié)處,也可以在第1到第512字節(jié)之間任何位置。當數(shù)據(jù)被寫到第一區(qū)塊第一頁時,序號為0;接著數(shù)據(jù)被備份到第二區(qū)塊的第一頁時,序號為1。
220存放數(shù)據(jù)的ECC錯誤修正碼之處,此處錯誤修正碼的大小可以介于1到528減去數(shù)據(jù)長度再減去數(shù)據(jù)序號長度(1)之間。
具體實施例方式
為進一步的闡明本發(fā)明的流程以及所使用的方法,將本方法的過程以及使用的方法,利用下方面的流程圖加以說明。
本發(fā)明將數(shù)據(jù)、序號以及ECC錯誤修正碼放在同一個閃存記憶體的頁面上(圖1)。并另外利用兩組區(qū)塊170,180來儲存一組數(shù)據(jù),如圖1所示。為了方便計算此兩個區(qū)塊的位置,一般此兩個區(qū)塊是相連的,且第一個區(qū)塊的號碼是偶數(shù),另外一個區(qū)塊180為在此區(qū)塊170的下一個區(qū)塊。當其中的某區(qū)塊中數(shù)據(jù)因為電壓不穩(wěn)定或是程控出問題而不小心損壞或消失時,可以利用另一個區(qū)塊的數(shù)據(jù),將消失的數(shù)據(jù)救回,而此閃存記憶體還可以繼續(xù)使用。
當讀取資料時,便可以利用此ECC錯誤修正碼來檢查數(shù)據(jù)是否錯誤,假設(shè)發(fā)生錯誤時,則可以依據(jù)此錯誤修正碼來修正錯誤。所以我們需要在數(shù)據(jù)的尾端加入ECC錯誤修正碼保護數(shù)據(jù)。
系統(tǒng)格式初始化完成時,將需要保護的重要表格數(shù)據(jù)寫入兩個區(qū)塊的第一頁,如圖1所示。如果在第一次寫入時就有某區(qū)塊發(fā)生誤擦除的情況時,此機制可以增加系統(tǒng)程序的穩(wěn)定性。
系統(tǒng)重新啟動時,系統(tǒng)會搜尋整個閃存空間,找尋最新的表格數(shù)據(jù),并且將此位置記錄在系統(tǒng)的變量上,可以避免每次都要重新搜尋數(shù)據(jù)的時間,提升性能。當系統(tǒng)在找尋數(shù)據(jù)的過程中,發(fā)現(xiàn)錯誤時,便會重建數(shù)據(jù)表格,回到圖3的狀態(tài)。如圖3,系統(tǒng)將會搜尋到數(shù)據(jù)130為最新的數(shù)據(jù)。
當數(shù)據(jù)寫入時,系統(tǒng)會寫入400第二區(qū)塊的下一頁410,并將序號加一,如圖4所示。依此類推,依序?qū)懙降谝粎^(qū)塊的最后一頁。當還有新數(shù)據(jù)需要更新時,如圖5所示,此時先抹除第二區(qū)塊,如圖6所示,此時之前最新的數(shù)據(jù)還存在第一區(qū)塊的最后一頁上。因為序號只有一個字節(jié)大小,而在市場上高容量的閃存中,兩個區(qū)塊總共有256頁,超過序號所能代表的范圍。因此,當我們寫入第一區(qū)塊的最后一頁時,就必須重新建立表格。第二區(qū)塊擦除動作完成之后,將新的數(shù)據(jù)寫入第二區(qū)塊的第一頁并且給予一個最新的序號,如圖7所示。最后擦除第一區(qū)塊,如圖8所示,并將第二區(qū)塊的第一頁,拷貝到第一區(qū)塊的第一頁,如圖9所示。
在搜尋數(shù)據(jù)過程中,依次搜尋第一區(qū)塊的每一頁,如果發(fā)現(xiàn)數(shù)據(jù)表格錯誤,發(fā)生的原因可能是因為上次寫入時突然斷電,我們需要重建表格。以圖10為例,當發(fā)現(xiàn)第一區(qū)塊的第三頁有錯誤時,我們可以知道第二區(qū)塊第二頁是最可信的資料。所以根據(jù)此頁重新建立表格。因為第一區(qū)塊中第三頁發(fā)生錯誤,所以先擦除第一區(qū)塊如圖11所示。將第二區(qū)塊第二頁的數(shù)據(jù)拷貝到第一區(qū)塊第一頁,并且給予一個初始化的序號,此序號為0,如圖12所示。然后抹除第二區(qū)塊,如圖13所示。將第一區(qū)塊第一頁的數(shù)據(jù)拷貝到第二區(qū)塊第一頁,并給予一個適當?shù)男蛱?,如圖14所示,如此便可以完成錯誤修正的動作。
權(quán)利要求
1.一種高可靠性的排序管理扇區(qū)的數(shù)據(jù)存儲結(jié)構(gòu)以及處理方式,將數(shù)據(jù)、數(shù)據(jù)序號以及ECC修正碼按特定的方式混合編碼放在一個區(qū)域內(nèi),并利用閃存記憶體中的兩個連續(xù)的區(qū)塊,將混合編碼后的數(shù)據(jù)按特定的方式寫入、修正、讀出以完成重要表格資料的修復(fù)與備份工作。
2.如權(quán)利要求1所述的數(shù)據(jù)存儲結(jié)構(gòu),其特征在于數(shù)據(jù)資料放在前面,后面接著放數(shù)據(jù)序號,最后剩余的位置放ECC修正碼,ECC錯誤修正碼可以保護數(shù)據(jù)及數(shù)據(jù)序號的正確性。
3.如權(quán)利要求1所述的數(shù)據(jù)存儲結(jié)構(gòu),其特征在于數(shù)據(jù)序號可以放在數(shù)據(jù)資料存儲區(qū)的任一位置,最后剩余的位置放ECC修正碼,ECC錯誤修正碼可以保護數(shù)據(jù)及數(shù)據(jù)序號的正確性。
4.如權(quán)利要求1所述的將數(shù)據(jù),數(shù)據(jù)序號以及ECC修正碼按特定的方式混合編碼,其特征在于在WINDOWS操作系統(tǒng)中,數(shù)據(jù)資料大小為512字節(jié),數(shù)據(jù)序號為1個字節(jié),可以放在0~512字節(jié)之間的任何位置,閃存記憶體中的一個扇區(qū)的物理空間有528字節(jié),所以其中還有15字節(jié)存儲ECC錯誤修正碼,最多可以修正包含數(shù)據(jù)資料和數(shù)據(jù)序號在內(nèi)的6個字節(jié)的錯誤。
5.如權(quán)利要求4所述,當數(shù)據(jù)序號為2個字節(jié)時,ECC錯誤修正碼為14字節(jié),其最多能修正包含數(shù)據(jù)資料和數(shù)據(jù)序號在內(nèi)的5個字節(jié)的錯誤;當數(shù)據(jù)序號為3或4個字節(jié)時,ECC錯誤修正碼為13或12個字節(jié),其最多能修正包含數(shù)據(jù)資料和數(shù)據(jù)序號在內(nèi)的4個字節(jié)的錯誤,依次類推。
6.如權(quán)利要求1所述的數(shù)據(jù)序號,可以是系統(tǒng)中的一個暫存器的狀態(tài)或是一個固定的內(nèi)存位置。
7.如權(quán)利要求1所述的將混合編碼后的數(shù)據(jù)按特定的方式寫入閃存記憶體中的扇區(qū)中,其特征在于第一次寫入時,將混合編碼后的數(shù)據(jù)寫入到第一區(qū)塊的第一頁,序號為0,寫完后同時將資料備份到第二區(qū)塊的第一頁,序號加1;在后面的寫入時,依次寫入到第一和第二區(qū)塊的相應(yīng)頁面中,序號依次加1。
8.如權(quán)利要求1所述的將混合編碼后的數(shù)據(jù)按特定的方式從閃存記憶體中的扇區(qū)中修正讀出,其特征在于在讀出時,系統(tǒng)先搜尋第一個區(qū)塊的資料,找到最新資料后并確認該資料是否有錯誤或損壞,如該資料有損壞,首先利用ECC修正碼修復(fù),如修復(fù)不成功,則第二區(qū)塊的最新資料為最可信資料,系統(tǒng)將讀出該資料,并擦除第一區(qū)塊把第二區(qū)塊的最可信資料拷貝到第一區(qū)塊的第一頁中。
9.如權(quán)利要求1至8所述的高可靠排序管理扇區(qū)的存儲結(jié)構(gòu),其中以增加序號來提升閃存記憶體的性能、加強重要表格數(shù)據(jù)的備份以及保護數(shù)據(jù)的處理方式適用于任何的閃存記憶體存儲裝置,例如U盤(包含但不限于USBPendriver 1.1/2.0)、PMP Player、存儲卡(包含但不限于SD/MMC/CF/MemoryStick/XD)和MP3Player等。
全文摘要
本發(fā)明公開了一種提升閃存性能以及加強數(shù)據(jù)保護的數(shù)據(jù)存儲結(jié)構(gòu)以及數(shù)據(jù)處理方式。其特征在于將數(shù)據(jù)與序號碼混合編碼,其中序號碼是用來表示數(shù)據(jù)是否是最新的數(shù)據(jù),并避免經(jīng)常要擦除數(shù)據(jù)所在的區(qū)塊,造成性能的浪費。此外,對重要的表格數(shù)據(jù)區(qū)塊增加一組區(qū)塊做備份的動作,表格數(shù)據(jù)在此兩個區(qū)塊中依序往下一頁寫入,如此當區(qū)塊中重要數(shù)據(jù)區(qū)塊的數(shù)據(jù)消失時,還可以依據(jù)另外一個區(qū)塊中最新的表格數(shù)據(jù),將被刪除的數(shù)據(jù)救回。在數(shù)據(jù)的最后端,將所有剩余可用的區(qū)域作為ECC(Error Correction Code)數(shù)據(jù)的儲存區(qū)域。采用本發(fā)明的方法可以同時提升閃存記憶體的效能,加強重要表格數(shù)據(jù)的備份以及保護數(shù)據(jù)的內(nèi)容。
文檔編號G11C16/06GK1933026SQ20061006217
公開日2007年3月21日 申請日期2006年8月18日 優(yōu)先權(quán)日2006年8月18日
發(fā)明者林清益 申請人:福昭科技(深圳)有限公司