專利名稱:在內(nèi)存中存放校驗(yàn)碼的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在閃存中存放校驗(yàn)碼的方法及裝置,尤指一種可有效減少對(duì)冗余校驗(yàn)碼字節(jié)擦除次數(shù)的方法及裝置。
背景技術(shù):
眾所周知,對(duì)于一存儲(chǔ)系統(tǒng)而言,有二個(gè)因素非常重要快速讀寫數(shù)據(jù)的能力及可靠存取數(shù)據(jù)的能力。為便于存取,存儲(chǔ)系統(tǒng)在邏輯上可被格式化為多數(shù)個(gè)邏輯區(qū),一邏輯區(qū)可被進(jìn)一步劃分為多數(shù)個(gè)數(shù)據(jù)塊,直至多數(shù)個(gè)字節(jié),一字節(jié)通常包括有8個(gè)字位。所述字節(jié)、字位可以是存儲(chǔ)器中的物理單元,也可以是邏輯區(qū)中的邏輯單元。一種被廣泛用于確保數(shù)據(jù)存取可靠性的方法是對(duì)被存儲(chǔ)數(shù)據(jù)進(jìn)行冗余校驗(yàn)碼校驗(yàn),每次向存儲(chǔ)系統(tǒng)寫入數(shù)據(jù)時(shí),按特定方法生成相關(guān)數(shù)據(jù)(可以是幾個(gè)字節(jié),或者是大量數(shù)據(jù))的冗余校驗(yàn)碼;將其存儲(chǔ)在一個(gè)或多數(shù)個(gè)字節(jié)中,該字節(jié)的位置是預(yù)先定義好的;當(dāng)讀出數(shù)據(jù)時(shí)相應(yīng)的冗余校驗(yàn)碼一同被讀出,生成新冗余校驗(yàn)碼與的相對(duì)比來完成校驗(yàn)。
上述存儲(chǔ)系統(tǒng)可以是使用半導(dǎo)體、磁、光作為存儲(chǔ)介質(zhì)的存儲(chǔ)器產(chǎn)品,這里尤指可擦寫半導(dǎo)體只讀存儲(chǔ)器,包括有閃存、EEPROM(ElectricallyErasable Programmable Read Only Memory)等。閃存全稱快閃只讀存儲(chǔ)器(Flash Read Only Memory),或閃存(Flash Memory)。這些存儲(chǔ)器都能在斷電情況下保存數(shù)據(jù),并根據(jù)輸入數(shù)據(jù)更新存儲(chǔ)器。但閃存與EEPROM又有所不同。當(dāng)存儲(chǔ)器中的數(shù)據(jù)需要更新時(shí),EEPROM需要在高于工作電壓下進(jìn)行擦除,這通常需要另一種裝置來完成;而閃存可在正常工作電壓下進(jìn)行擦除。EEPROM只允許每次擦除一個(gè)字節(jié);而閃存可對(duì)數(shù)據(jù)塊進(jìn)行擦除。但即使是閃存,也存在有擦除次數(shù)限制、擦除速度較慢及出現(xiàn)壞道的類問題,例如閃存在連續(xù)擦除100,000次左右就會(huì)完全損壞。
針對(duì)上述情況,在閃存類存儲(chǔ)器中存儲(chǔ)冗余校驗(yàn)碼的缺點(diǎn)就顯得尤其明顯,因?yàn)槊窟M(jìn)行一次存儲(chǔ),即使只更新了一個(gè)字節(jié),就需要將相應(yīng)的校驗(yàn)碼字節(jié)擦除,再寫入新生成的冗余校驗(yàn)碼。目前,通常的做法有二種不考慮上述情況,完全依賴閃存自身的物理性質(zhì),如較多的擦除次數(shù)、較快的擦除速度;或?yàn)橄嚓P(guān)數(shù)據(jù)設(shè)置多數(shù)個(gè)校驗(yàn)碼字節(jié),相當(dāng)于將原先對(duì)一個(gè)校驗(yàn)碼字節(jié)的擦除次數(shù)分?jǐn)傊炼鄶?shù)個(gè)字節(jié)。
隨著互聯(lián)網(wǎng)及便攜設(shè)備的普及,提高了對(duì)存儲(chǔ)容量、數(shù)據(jù)交換的要求。從網(wǎng)上下載的大量軟件、信息、音樂等,使得存儲(chǔ)器所存儲(chǔ)的數(shù)據(jù)需要時(shí)常更新,也使得對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù)顯著增加。并且,現(xiàn)有技術(shù)沒有充分利用閃存類存儲(chǔ)器的存儲(chǔ)特點(diǎn),即閃存的字位可由1被改寫為0,可由0被擦除為1。所謂改寫,為字位由代表1的高電壓狀態(tài)變?yōu)榇?的低電壓狀態(tài);所謂擦除,為字位被恢復(fù)為代表1的高電壓狀態(tài),即可被改寫狀態(tài)。假設(shè)一閃存字節(jié)包括有8個(gè)字位,其值的二進(jìn)制表示為11110101,將該值變?yōu)?0100101時(shí),無需擦除,因?yàn)閷?duì)應(yīng)字位可由1被改寫為0;而將該值變?yōu)?1111010時(shí),由于對(duì)應(yīng)字位無法由0被改寫為1,才需要先將該字節(jié)擦除為11111111,再改寫為11111010。
綜上所述,充分利用閃存類存儲(chǔ)器的存儲(chǔ)特點(diǎn),提供一種可有效減少對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù)的方法及裝置十分必要。
發(fā)明內(nèi)容本發(fā)明的主要目的在于提供一種在閃存中存放校驗(yàn)碼的方法及裝置,其可利用閃存類存儲(chǔ)器的存儲(chǔ)特點(diǎn),減少對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù)。
為達(dá)上述發(fā)明目的,本發(fā)明提供一種在閃存中存放校驗(yàn)碼的方法,其使用一微處理器來完成冗余校驗(yàn)碼的生成及存儲(chǔ)操作,包括有如下步驟(a)將閃存在邏輯上劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)來存儲(chǔ)冗余校驗(yàn)碼;(b)微處理器讀取一數(shù)據(jù)塊的數(shù)據(jù)并計(jì)算每一字節(jié)相加的和的補(bǔ)碼;(c)微處理器分別將校驗(yàn)碼區(qū)的各字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加,再將和數(shù)與該字節(jié)數(shù)據(jù)按位相與;(d)若相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則微處理器將該和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼;(e)若無一相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則微處理器在校驗(yàn)碼區(qū)隨機(jī)選取一字節(jié),將該字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加,擦除該字節(jié)后,將和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼。由上述方法所生成的冗余校驗(yàn)碼完全符合該冗余校驗(yàn)碼的校驗(yàn)要求,即將數(shù)據(jù)塊與校驗(yàn)碼區(qū)按字節(jié)相加求和,其結(jié)果為空。
為達(dá)上述發(fā)明目的,本發(fā)明還提供一種在閃存中存放校驗(yàn)碼的裝置,其包括有一閃存,其在邏輯上被劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)來存儲(chǔ)冗余校驗(yàn)碼;一微處理器,系可對(duì)上述閃存進(jìn)行讀寫操作,生成被存儲(chǔ)數(shù)據(jù)的冗余校驗(yàn)碼并將其存儲(chǔ)于相應(yīng)校驗(yàn)碼區(qū)。其中,微處理器讀取一數(shù)據(jù)塊的數(shù)據(jù)并計(jì)算每一字節(jié)相加的和的補(bǔ)碼;分別將校驗(yàn)碼區(qū)的各字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加求和,再將和數(shù)與該字節(jié)數(shù)據(jù)按位相與;若相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則將和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼;若無一相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則在校驗(yàn)碼區(qū)隨機(jī)選取一字節(jié),將該字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加求和,擦除該字節(jié)后,將和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼。這是可行的,因?yàn)橛缮鲜鲅b置所提供的冗余校驗(yàn)碼完全符合該冗余校驗(yàn)碼的校驗(yàn)要求,即將數(shù)據(jù)塊與校驗(yàn)碼區(qū)按字節(jié)相加求和,其結(jié)果為空。
通過上述方法及裝置,可減少對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù)。
圖1為本發(fā)明在閃存中存放校驗(yàn)碼的裝置的硬件架構(gòu)圖。
圖2為本發(fā)明在閃存中存放校驗(yàn)碼的存儲(chǔ)空間示意圖。
圖3為本發(fā)明為存儲(chǔ)于閃存中的數(shù)據(jù)生成冗余校驗(yàn)碼的示意圖。
圖4為本發(fā)明在閃存中存放校驗(yàn)碼的方法流程圖。
具體實(shí)施方式參閱圖1所示,為本發(fā)明在閃存中存放校驗(yàn)碼的裝置的硬件架構(gòu)圖。該在閃存中存放校驗(yàn)碼的裝置包括有微處理器10、系統(tǒng)總線20、隨機(jī)存儲(chǔ)器30及閃存40。其中,微處理器10可管理數(shù)據(jù)的輸入/輸出操作,具有執(zhí)行加法運(yùn)算及按位相與的能力。系統(tǒng)總線20可以為各種適當(dāng)類型的數(shù)據(jù)/控制總線,微處理器10通過該系統(tǒng)總線20向隨機(jī)存儲(chǔ)器30及閃存40發(fā)送控制信號(hào)并在三者的間進(jìn)行數(shù)據(jù)傳輸。隨機(jī)存儲(chǔ)器30作為內(nèi)部存儲(chǔ)器,可為微處理器10提供運(yùn)行程序、暫存數(shù)據(jù)的工作空間,一般可被劃分為程序區(qū)、數(shù)據(jù)區(qū)及系統(tǒng)區(qū)(圖中未畫出)。閃存40作為外部存儲(chǔ)器,可不斷更新并保存大量數(shù)據(jù),例如系統(tǒng)信息、軟件程序、用戶個(gè)人數(shù)據(jù)等。微處理器10可從閃存40中讀取所需數(shù)據(jù),將其傳輸?shù)诫S機(jī)存儲(chǔ)器30中;或通過系統(tǒng)總線從外部數(shù)據(jù)源(圖中未畫出)接收數(shù)據(jù)并將其存儲(chǔ)于閃存40中。
參閱圖2所示,為本發(fā)明在閃存中存放校驗(yàn)碼的存儲(chǔ)空間示意圖。該方法在邏輯上將存儲(chǔ)器劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊進(jìn)一步被劃分多數(shù)個(gè)字節(jié)。所述存儲(chǔ)器是指作為外部存儲(chǔ)器的閃存40,如此,閃存40被劃分為多數(shù)個(gè)數(shù)據(jù)塊41,每一數(shù)據(jù)塊41包含一校驗(yàn)碼區(qū)42,該校驗(yàn)碼區(qū)42包括有多數(shù)個(gè)字節(jié)來存儲(chǔ)冗余校驗(yàn)碼,每一冗余校驗(yàn)碼僅占一字節(jié)。
在讀數(shù)據(jù)操作中,微處理器10從閃存40中讀取所需數(shù)據(jù)塊41的數(shù)據(jù)并暫存在隨機(jī)存儲(chǔ)器30中,所讀取數(shù)據(jù)包含了校驗(yàn)碼區(qū)42的數(shù)據(jù)。在輸出所需數(shù)據(jù)的前,微處理器10將對(duì)所讀取數(shù)據(jù)進(jìn)行冗余校驗(yàn)碼校驗(yàn),即將所取數(shù)據(jù)逐字節(jié)相加求和,若和數(shù)為0,則代表所取數(shù)據(jù)通過數(shù)據(jù)完整性校驗(yàn),數(shù)據(jù)讀取正確。若和數(shù)不為0,則代表在讀數(shù)據(jù)操作中數(shù)據(jù)讀取有誤。此時(shí)可使用現(xiàn)有的錯(cuò)誤恢復(fù)方法進(jìn)行修正或簡單回傳出錯(cuò)信息并要求重新讀取所需數(shù)據(jù)塊的數(shù)據(jù)。
在寫數(shù)據(jù)操作中,微處理器10將數(shù)據(jù)寫入指定數(shù)據(jù)塊41中,為維持被存儲(chǔ)數(shù)據(jù)完整性,冗余校驗(yàn)碼必須重新生成。按照本實(shí)施例所提供的方法,可在相應(yīng)的校驗(yàn)碼區(qū)42中逐字節(jié)尋找適當(dāng)字節(jié)并生成新冗余校驗(yàn)碼改寫該字節(jié),或先將其擦除再寫入新冗余校驗(yàn)碼。
參閱圖3所示,為本發(fā)明為存儲(chǔ)于閃存中的數(shù)據(jù)生成冗余校驗(yàn)碼的示意圖。如上所述,數(shù)據(jù)塊41可被進(jìn)一步劃分為多數(shù)個(gè)字節(jié),假設(shè)數(shù)據(jù)塊41包括有40個(gè)字節(jié),分別被標(biāo)記為字節(jié)60至字節(jié)100。數(shù)據(jù)塊41包含其校驗(yàn)碼區(qū)42,校驗(yàn)碼區(qū)42包括有多數(shù)個(gè)字節(jié),分別被標(biāo)記為字節(jié)91至字節(jié)100。為生成新冗余校驗(yàn)碼52,將數(shù)據(jù)區(qū)41的數(shù)據(jù)逐字節(jié)相加得和數(shù)50,求該和數(shù)50的補(bǔ)碼51,在校驗(yàn)碼區(qū)42中找到可被改寫的字節(jié)9x(具體步驟將在下面詳述),可被改寫的字節(jié)9x與補(bǔ)碼51的和即為新冗余校驗(yàn)碼52。
參閱圖4所示,為本發(fā)明在閃存中存放校驗(yàn)碼的方法流程圖。首先對(duì)本圖所用的助記符說明如下本發(fā)明將數(shù)據(jù)存儲(chǔ)器定義為包括有多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)來存儲(chǔ)冗余校驗(yàn)碼。
A區(qū),代表一數(shù)據(jù)塊,例如在第二圖中為數(shù)據(jù)塊41;B區(qū),代表一數(shù)據(jù)塊中的校驗(yàn)碼區(qū),例如在第二圖中為校驗(yàn)碼區(qū)42;
SUM,代表一數(shù)據(jù)塊的數(shù)據(jù)逐字節(jié)相加的和;CRC′,代表SUM的補(bǔ)碼;CRC,代表一數(shù)據(jù)塊的數(shù)據(jù)的冗余校驗(yàn)碼;i,代表一校驗(yàn)碼區(qū)的開始字節(jié)至末端字節(jié)范圍的地址;B[i],代表B區(qū)中一字節(jié)的數(shù)據(jù)。
首先,微處理器10將數(shù)據(jù)寫入閃存40,開始生成相應(yīng)的冗余校驗(yàn)碼。例如A區(qū)的數(shù)據(jù)被改寫,先將A區(qū)的數(shù)據(jù)逐字節(jié)相加求和得SUM,再求SUM的補(bǔ)碼CRC′(步驟S1)。i代表B區(qū)的地址范圍,初始值為B區(qū)開始字節(jié)的地址。將CRC′與B[i]的和作為新冗余校驗(yàn)碼CRC(步驟S2)。將CRC與該B[i]按位相與,所謂按位相與是指將二個(gè)字節(jié)的對(duì)應(yīng)位置的字位分別進(jìn)行與操作,一典型字節(jié)會(huì)包括有8個(gè)字位。并判斷按位相與的結(jié)果是否與CRC相等(步驟S3)。若相等,則表示B[i]數(shù)據(jù)可被改寫,i代表該可被改寫的字節(jié)。將CRC寫入該字節(jié)以完成冗余校驗(yàn)碼的生成(步驟S7)。若不等,則將i加1,即將i指向B區(qū)中下一字節(jié)(步驟S4)。判斷i是否超出B區(qū)的邊界,即i的值是否大于B區(qū)的末端字節(jié)地址(步驟S5)。若判斷結(jié)果為真,則表示B區(qū)中已經(jīng)無可被改寫的字節(jié)。在B區(qū)中隨機(jī)選取一字節(jié),將CRC′與該字節(jié)的和作為新CRC,擦除該字節(jié)后,寫2CRC數(shù)值以完成冗余校驗(yàn)碼的生成(步驟S6)。若判斷結(jié)果為否,則回到步驟S2,重新生成CRC,繼續(xù)尋找可被改寫的字節(jié)。
權(quán)利要求
1.一種在閃存中存放校驗(yàn)碼的方法,其使用一微處理器來完成冗余校驗(yàn)碼的生成及存儲(chǔ)操作,其特征在于,包括有如下步驟(a)將一閃存在邏輯上劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)用于存儲(chǔ)冗余校驗(yàn)碼;(b)微處理器讀取一數(shù)據(jù)塊的數(shù)據(jù)并計(jì)算每一字節(jié)相加的和的補(bǔ)碼;(c)微處理器分別將校驗(yàn)碼區(qū)的各字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加,再將和數(shù)與該字節(jié)資料按位相與;(d)若相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則微處理器將該和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼;(e)若無一相與結(jié)果與對(duì)應(yīng)和數(shù)相同,則微處理器在校驗(yàn)碼區(qū)隨機(jī)選取一字節(jié),將該字節(jié)數(shù)據(jù)與上述補(bǔ)碼相加,擦除該字節(jié)后,將和數(shù)存儲(chǔ)于該字節(jié)中,作為新冗余校驗(yàn)碼。
2.如權(quán)利要求1所述的在閃存中存放校驗(yàn)碼的方法,其特征在于,其中微處理器可對(duì)上述閃存進(jìn)行讀寫操作。
3.如權(quán)利要求1所述的在閃存中存放校驗(yàn)碼的方法,其特征在于,其中微處理器可進(jìn)行加法運(yùn)算及按位相與。
4.如權(quán)利要求1所述的在閃存中存放校驗(yàn)碼的方法,其特征在于,其中擦除為將上述閃存字節(jié)重新變?yōu)榭筛膶憼顟B(tài)。
5.如權(quán)利要求4所述的在閃存中存放校驗(yàn)碼的方法,其特征在于,其中可改寫狀態(tài)為字位可由1被改寫為0,即由代表1的高電壓狀態(tài)變?yōu)榇?的低電壓狀態(tài)。
6.一種在閃存中存放校驗(yàn)碼的裝置,其可減少對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù),該裝置包括有一閃存及一微處理器,其特征在于閃存在邏輯上被劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)用于存儲(chǔ)冗余校驗(yàn)碼;微處理器用以對(duì)該閃存進(jìn)行讀寫操作,其讀取一數(shù)據(jù)塊的數(shù)據(jù)并計(jì)算每一字節(jié)相加的和的補(bǔ)碼,在校驗(yàn)碼區(qū)選取一字節(jié)數(shù)據(jù)與該補(bǔ)碼相加以生成新冗余校驗(yàn)碼。
7.如權(quán)利要求6所述的在閃存中存放校驗(yàn)碼的裝置,其特征在于,其中微處理器可分別將校驗(yàn)碼區(qū)的各字節(jié)數(shù)據(jù)與上述新冗余校驗(yàn)碼按位相與。
8.如權(quán)利要求7所述的在閃存中存放校驗(yàn)碼的裝置,其特征在于,其中微處理器可將該新冗余校驗(yàn)碼存儲(chǔ)于所選取的字節(jié)中。
9.如權(quán)利要求7所述的在閃存中存放校驗(yàn)碼的裝置,其特征在于,其中微處理器可先擦除所選取的字節(jié),再把該新冗余校驗(yàn)碼存儲(chǔ)于該字節(jié)中。
10.如權(quán)利要求9所述的在閃存中存放校驗(yàn)碼的裝置,其特征在于,其中擦除為將上述閃存字節(jié)重新變?yōu)榭筛膶憼顟B(tài)。
11.如權(quán)利要求10所述的在閃存中存放校驗(yàn)碼的裝置,其特征在于,其中可改寫狀態(tài)為字位可由1被改寫為0,即由代表1的高電壓狀態(tài)變?yōu)榇?的低電壓狀態(tài)。
全文摘要
一種在閃存中存放校驗(yàn)碼的方法及裝置,該裝置包括有一微處理器及一閃存。閃存在邏輯上被劃分為多數(shù)個(gè)數(shù)據(jù)塊,每一數(shù)據(jù)塊包含一校驗(yàn)碼區(qū),該校驗(yàn)碼區(qū)包括有多數(shù)個(gè)字節(jié)來存儲(chǔ)冗余校驗(yàn)碼。微處理器可對(duì)閃存進(jìn)行讀寫操作,生成被存儲(chǔ)數(shù)據(jù)的冗余校驗(yàn)碼并將其存儲(chǔ)于相應(yīng)校驗(yàn)碼區(qū)。通過上述方法及裝置,可減少對(duì)校驗(yàn)碼字節(jié)的擦除次數(shù)。
文檔編號(hào)G11C29/00GK1480953SQ0213468
公開日2004年3月10日 申請(qǐng)日期2002年9月7日 優(yōu)先權(quán)日2002年9月7日
發(fā)明者王宏榮 申請(qǐng)人:鴻富錦精密工業(yè)(深圳)有限公司, 鴻海精密工業(yè)股份有限公司