一種基于索引的智能卡記錄備份與恢復(fù)方法
【專利摘要】本發(fā)明涉及一種基于索引的智能卡記錄備份與恢復(fù)方法,通過在智能卡中設(shè)置索引區(qū)和備份區(qū)實現(xiàn)備份和恢復(fù)功能。索引區(qū)保存索引號,用于計算對應(yīng)記錄寫入的地址位置。對于特定一類的定長記錄,當(dāng)記錄區(qū)首地址固定時,一條記錄的索引號與該記錄的首地址就是一一對應(yīng)關(guān)系。備份區(qū)包含前保護(hù)標(biāo)志、記錄長度、當(dāng)前最新一條有效記錄地址、恢復(fù)記錄所在的地址和后保護(hù)標(biāo)志。根據(jù)保護(hù)標(biāo)志確定是否需要進(jìn)行記錄恢復(fù),當(dāng)寫入新記錄失敗需要記錄恢復(fù)時,根據(jù)保存的兩個地址和記錄長度,恢復(fù)出之前的一條有效記錄。本發(fā)明用備份索引替代備份記錄,使每次備份時寫入的字節(jié)數(shù)大大減小,提高了智能卡的交易效率,降低了備份區(qū)損壞的概率。
【專利說明】—種基于索引的智能卡記錄備份與恢復(fù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及智能卡中記錄備份與恢復(fù)的方法,特別是關(guān)于在非法插拔造成意外掉電的情況下,保證記錄正確性的方法。
【背景技術(shù)】
[0002]IC卡是一種內(nèi)部嵌入了芯片的集成電路卡。IC卡的概念在1969年首次被提出,并在1974年被改進(jìn)并一直延續(xù)至今。它是繼磁條卡之后,新出現(xiàn)的一種功能更強大的信息載體,也被稱為智能卡。
[0003]磁條卡是用磁性載體記錄數(shù)據(jù),并通過磁感應(yīng)的方式讀寫數(shù)據(jù)。和磁條卡不同,智能卡是用半導(dǎo)體存儲數(shù)據(jù),并通過邏輯電路或微處理器的編碼和控制,再經(jīng)過射頻接口或接觸式接口進(jìn)行數(shù)據(jù)的讀寫。智能卡中的器件都是有源器件,需要供電才能正常工作,而智能卡中并沒有電能存儲器,它只能依靠讀卡器對它供電。其中接觸式智能卡通過觸點進(jìn)行物理接觸供電,非接觸式智能卡通過線圈的電磁感應(yīng)供電。無論是哪種供電方式,都會面臨數(shù)據(jù)讀寫過程中出現(xiàn)掉電的情況,比如用戶的非法插拔。而在非接觸的情況下,這個問題尤為嚴(yán)重。
[0004]對于包含微處理器的智能卡來說,智能卡在正常工作時的大部分操作都是由微處理器控制。在這些操作過程中,隨時都可能出現(xiàn)掉電情況,中斷微處理器的工作。因此,智能卡需要一種嚴(yán)謹(jǐn)、完備的技術(shù)來保證數(shù)據(jù)完整性。
[0005]申請?zhí)枮?01010156993.3的專利公開了一種智能卡防掉電技術(shù)。該專利提出的防掉電技術(shù)方案是:在寫入新數(shù)據(jù)時,首先把數(shù)據(jù)區(qū)中的原有數(shù)據(jù)拷貝到掉電保護(hù)區(qū),然后將新數(shù)據(jù)寫入數(shù)據(jù)區(qū),如果新寫入數(shù)據(jù)正常,則擦除掉電保護(hù)區(qū)數(shù)據(jù),如果新寫入數(shù)據(jù)出錯,則將掉電保護(hù)區(qū)的數(shù)據(jù)寫回數(shù)據(jù)區(qū)。該技術(shù)雖然能夠保證數(shù)據(jù)的完整性,但是存在兩點不足:一是每次寫入記錄時都必須對原有記錄進(jìn)行備份,這樣相當(dāng)于花費了兩倍的寫記錄時間。由于半導(dǎo)體存儲器的寫入速度較慢,在一次交易中,主要的時間消耗來自于數(shù)據(jù)寫入,因此備份造成的時間浪費變得嚴(yán)重;二是備份區(qū)地址固定且數(shù)據(jù)量大,每寫入一次記錄都要重新擦除備份區(qū)再重新寫入,造成了備份區(qū)大量區(qū)塊的多次擦寫。這容易造成備份區(qū)域的快速損壞,因而大大降低了智能卡的壽命。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有智能卡記錄備份恢復(fù)方法存在的不足,本發(fā)明提出了一種基于索引的備份恢復(fù)方法,用備份索引的方式替代記錄的備份,使得每次備份時寫入的字節(jié)數(shù)大大減小。
[0007]本發(fā)明的技術(shù)原理是:在智能卡中設(shè)置索引區(qū)和備份區(qū),利用索引區(qū)和備份區(qū)實現(xiàn)備份和恢復(fù)功能。索引區(qū)、備份區(qū)和記錄區(qū)的示意圖如圖3所示。其中,索引區(qū)記錄當(dāng)前最新一條有效記錄的索引號,索引號即記錄的編號,其范圍是I到最大記錄數(shù),初始記錄的索引號為1,每新寫入一條記錄,其索引號加1,如果超過最大記錄數(shù)則從I開始重新增加。索引號用于計算對應(yīng)記錄寫入的地址位置。對于特定一類的定長記錄,當(dāng)記錄區(qū)首地址固定時,一條記錄的索引號與該記錄的首地址就是一一對應(yīng)關(guān)系。備份區(qū)包含前保護(hù)標(biāo)志、記錄長度、當(dāng)前最新一條有效記錄地址、恢復(fù)記錄所在的地址和后保護(hù)標(biāo)志。設(shè)置備份區(qū)的目的是,根據(jù)保護(hù)標(biāo)志確定是否需要進(jìn)行記錄恢復(fù),當(dāng)寫入新記錄失敗(比如掉電)需要記錄恢復(fù)時,根據(jù)保存的兩個地址和記錄長度,恢復(fù)出之前的一條有效記錄。
[0008]一種基于索引的智能卡記錄備份與恢復(fù)方法,包括智能卡寫入時記錄備份方法和上電后記錄恢復(fù)方法兩部分,其中,
[0009]智能卡寫入時記錄備份方法包括以下步驟:
[0010]步驟1,準(zhǔn)備好要寫入的記錄之后,從索引區(qū)獲取當(dāng)前最新一條有效記錄的索引號1(1° [0011]索引區(qū)由多個比特組成,其中包含O的比特的個數(shù)就是索引號。根據(jù)索引區(qū)數(shù)據(jù)計算O的個數(shù),并將這個值返回給Itl,即取得了索引號。
[0012]步驟2,計算索引號I。所對應(yīng)的地址。
[0013]不同類型的記錄的長度、起始地址和索引號不同。當(dāng)要寫入的記錄的類型確定之后,按下式計算索引號^所對應(yīng)的Addr_old:
[0014]Addr_old = REC_START_ADDR+REC_LENX10(I)
[0015]式中,REC_START_ADDR是記錄首地址,REC_LEN為記錄長度,這兩個量對于某一特
定記錄是已知量。
[0016]步驟3,計算恢復(fù)記錄所在的地址Addr_new:
[0017]Addr_new = Addr_o I d+REC_LEN X 2(2)
[0018]步驟4,將備份區(qū)前保護(hù)標(biāo)志置O。
[0019]步驟5,將 Addr_new、Addr_old 和 REC_LEN 寫入備份區(qū)。
[0020]步驟6,將備份區(qū)后保護(hù)標(biāo)志置O。
[0021]置后保護(hù)標(biāo)志意味著步驟6已經(jīng)順利執(zhí)行完畢,程序可能已經(jīng)執(zhí)行到步驟7或后續(xù)步驟。
[0022]步驟7,正常寫入新記錄,新記錄寫入的首地址為:Addr_old+REC_LEN。
[0023]步驟8,將索引號加I。
[0024]每增加一條記錄,索引號加1,索引區(qū)某一比特從I變?yōu)镺。當(dāng)達(dá)到可記錄數(shù)量的最大值之后,最初的一條記錄將被覆蓋,索引區(qū)每個比特都變成O。如果還要增加記錄,索引區(qū)所有的O變?yōu)?,然后將第一個比特再改為O。
[0025]步驟9,清空備份區(qū)的所有標(biāo)志和地址。
[0026]如果擦除期間掉電,由于所述備份區(qū)的前、后保護(hù)標(biāo)志和地址保存在存儲器的同一頁內(nèi),而且存儲器擦除的特點是同一頁內(nèi)的所有字節(jié)同時清除,不存在先后順序,因此,即使擦除期間掉電,也不會出現(xiàn)前后保護(hù)標(biāo)志都存在但維護(hù)的兩個地址Addr_neW和Addr_old被清除的情況。
[0027]智能卡上電后記錄恢復(fù)方法包括以下步驟:
[0028]步驟1,獲取備份區(qū)的前后保護(hù)標(biāo)志,根據(jù)保護(hù)標(biāo)志的狀態(tài)確定是否進(jìn)行恢復(fù)操作。
[0029]如果備份區(qū)的兩個標(biāo)志都在置O狀態(tài),說明智能卡上一次上電執(zhí)行停止在了步驟7或步驟8,記錄區(qū)的記錄有非正常寫入的可能,需要進(jìn)行記錄恢復(fù),轉(zhuǎn)步驟2。如果兩個標(biāo)志不全置O,則智能卡上一次上電執(zhí)行停止在了步驟6之前,或者步驟9之后。如果停止在了步驟6之前,說明沒有寫入新記錄,即上一次的上電執(zhí)行沒有對記錄區(qū)做任何修改,因此沒有必要進(jìn)行記錄恢復(fù);如果停止在步驟9之后,說明上一次的新記錄已經(jīng)成功寫入到記錄區(qū),也沒有必要進(jìn)行記錄恢復(fù)。因此,當(dāng)兩個標(biāo)志不全置O時,不進(jìn)行恢復(fù)記錄操作,直接轉(zhuǎn)步驟5。
[0030]步驟2,獲取備份區(qū)的兩個地址Addr_new和Addr_old,將Addr_old地址所指向的記錄復(fù)制到Addr_new所指向的位置。
[0031]步驟3,根據(jù)Addr_new恢復(fù)索引區(qū)的索引號。
[0032]步驟4,清空備份區(qū)。
[0033]如果智能卡在恢復(fù)過程中出現(xiàn)掉電,且發(fā)生在步驟4完成之前,備份區(qū)的內(nèi)容不變,即恢復(fù)工作沒有正常完成,智能卡上電后,因為兩個標(biāo)志的狀態(tài)不變,仍然進(jìn)行恢復(fù)工作;如果掉電發(fā)生在步驟4完成之后,說明恢復(fù)工作已完成,標(biāo)志也隨之清除。
[0034]步驟5,恢復(fù)完成,正常進(jìn)行其它工作。
[0035]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
[0036]1.在每次寫入新記錄的過程中,只備份兩個地址和其它基本信息,與傳統(tǒng)備份一條記錄相比,字節(jié)數(shù)減少了約80?95%,大大減少了備份造成的時間浪費,從而提高了智能卡的交易效率。
[0037]2.備份區(qū)字節(jié)數(shù)的減小可降低備份區(qū)損壞的概率。在相同存儲器條件下,字節(jié)數(shù)減小可使備份區(qū)壽命增加約5?20倍。
【專利附圖】
【附圖說明】
[0038]圖1為本發(fā)明所涉及的智能卡寫入時記錄備份方法流程圖;
[0039]圖2為本發(fā)明所涉及的智能卡上電后記錄恢復(fù)方法流程圖;
[0040]圖3為本發(fā)明智能卡內(nèi)索引區(qū)、備份區(qū)和記錄區(qū)的示意圖。
【具體實施方式】
[0041 ] 下面結(jié)合附圖和實施例對本發(fā)明的內(nèi)容做進(jìn)一步說明。
[0042]本發(fā)明所述的方法包括寫入時記錄備份方法和上電后記錄恢復(fù)方法兩部分。圖1是智能卡寫入時記錄備份方法的流程圖,包括以下步驟:
[0043]步驟1,根據(jù)索引區(qū)數(shù)據(jù)計算索引號
[0044]根據(jù)索引區(qū)數(shù)據(jù)計算O的個數(shù),并將這個值返回給Itl,即取得了索引號。
[0045]步驟2,根據(jù)索引號計算當(dāng)前有效記錄地址。
[0046]不同類型記錄的索引區(qū)不同。同一種類型的記錄區(qū)由連續(xù)等長的記錄組成,不同類型的記錄的長度、起始地址和索引號不同。首先確定要寫入的記錄的類型,根據(jù)這種類型記錄的起始地址REC_START_ADDR、索引號Itl及記錄長度REC_LEN,按公式(I)計算該類型記錄的最新有效記錄所存儲的地址Addr_old。
[0047]步驟3,計算恢復(fù)記錄所在地址。
[0048]Addr_old后的第一條記錄的地址是正常新寫入記錄的地址,Addr_old后的第二條記錄的地址是用于恢復(fù)記錄的地址,因此恢復(fù)記錄所在地址Addr_new與Addr_old相比,向后偏移了兩條記錄的地址。
[0049]步驟4,備份區(qū)前保護(hù)標(biāo)志置O。
[0050]步驟5,將 Addr_new、Addr_old 和 REC_LEN 寫入備份區(qū)。
[0051]步驟6,備份區(qū)后保護(hù)標(biāo)志置O。
[0052]步驟7,正常寫入記錄。
[0053]正常寫入的記錄存儲在Addr_old后偏移一條記錄所在的地址。根據(jù)將要寫入記錄的源地址和將要寫入記錄的目旳地址,以及要寫入的記錄的長度REC_LEN這三個參數(shù),將準(zhǔn)備好的記錄寫入相應(yīng)記錄區(qū)。
[0054]步驟8,將索引區(qū)的索引號加I。
[0055]根據(jù)相應(yīng)的索引號,更新索引區(qū)中O比特的數(shù)量。每增加一條記錄時,索引區(qū)只會將某一比特從I變?yōu)镺??捎涗浀臄?shù)量有限,當(dāng)達(dá)到可記錄數(shù)量的最大值之后,最原始的一條記錄將被覆蓋。具體做法是,當(dāng)索引區(qū)每個比特都已變成0,而還要增加記錄的話,索引區(qū)將會使所有的O變?yōu)镮,然后將第一個比特再改為O。
[0056]這樣的操作方式與半導(dǎo)體存儲器是密切相關(guān)的,存儲器在從I變?yōu)镺時,可以單獨對一個比特進(jìn)行操作,在從O變?yōu)镮時,必須整體操作。因此,在這樣的操作方式下,僅當(dāng)索弓I區(qū)滿時才會進(jìn)行一次擦除操作(所有比特從O變?yōu)镮),和每次更改索引時都要擦寫相比,存儲器的擦寫次數(shù)得到極大的下降,因而延長了索引區(qū)的存儲器壽命。
[0057]步驟9,清空備份區(qū)。
[0058]圖2是智能卡上電后記錄恢復(fù)的流程圖,實現(xiàn)的步驟如下:
[0059]步驟1,讀取備份區(qū)標(biāo)志,并判斷是否需要進(jìn)行記錄恢復(fù)。
[0060]只有當(dāng)備份區(qū)前、后保護(hù)標(biāo)志均為O時執(zhí)行恢復(fù)操作;備份區(qū)前、后保護(hù)標(biāo)志至少有一個不為O時,不執(zhí)行恢復(fù)操作,程序直接跳轉(zhuǎn)到步驟5執(zhí)行正常工作。
[0061]步驟2,恢復(fù)記錄。
[0062]讀取備份區(qū)的Addr_old、Addr_new和REC_LEN,據(jù)將要恢復(fù)記錄的源地址Addr_old、將要恢復(fù)記錄的目的地址Addr_new和記錄長度REC_LEN,將記錄恢復(fù)到記錄區(qū)的新位置。
[0063]步驟3,恢復(fù)索引號。
[0064]由記錄恢復(fù)到的新位置Addr_new可以反推出和這個記錄所對應(yīng)的索引號。通過這個索引號,可以恢復(fù)索引區(qū)中O的個數(shù)。
[0065]步驟4,清空備份區(qū)。
[0066]步驟5,正常進(jìn)行其它工作。
[0067]以上步驟已經(jīng)在北京市嵌入式系統(tǒng)重點實驗室自主研發(fā)的BES2416系列智能卡芯片上得以實踐,經(jīng)過大量的測試,芯片的交易速度、壽命和可靠性有了明顯提升。
【權(quán)利要求】
1.一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于用備份索引替代備份記錄,使每次備份時寫入的字節(jié)數(shù)大大減??;所述方法包括智能卡寫入時記錄備份方法和上電后記錄恢復(fù)方法兩部分,其中, 智能卡寫入時記錄備份方法包括以下步驟: 步驟1,準(zhǔn)備好要寫入的記錄之后,從索引區(qū)獲取當(dāng)前最新一條有效記錄的索引號Itl ; 步驟2,計算索引號Itl所對應(yīng)的地址; 步驟3,計算恢復(fù)記錄所在的地址Addr_new:
Addr_new = Addr_oId+REC_LEN X 2 式中,Addr_old為索引號Itl所對應(yīng)地址,REC_LEN為記錄長度; 步驟4,將備份區(qū)前保護(hù)標(biāo)志置O ; 步驟5,將Addr_new、Addr_old和REC_LEN寫入備份區(qū); 步驟6,將備份區(qū)后保護(hù)標(biāo)志置O ; 步驟7,正常寫入新記錄,新記錄寫入的首地址為:Addr_old+REC_LEN ; 步驟8,將索引號加I ; 步驟9,清空備份區(qū)的所有 標(biāo)志和地址; 智能卡上電后記錄恢復(fù)方法包括以下步驟: 步驟I,獲取備份區(qū)的前后保護(hù)標(biāo)志,根據(jù)保護(hù)標(biāo)志的狀態(tài)確定是否進(jìn)行恢復(fù)操作;步驟2,獲取備份區(qū)的兩個地址Addr_new和Addr_old,將Addr_old地址所指向的記錄復(fù)制到Addr_new所指向的位置; 步驟3,根據(jù)Addr_new恢復(fù)索引區(qū)的索引號; 步驟4,清空備份區(qū); 步驟5,恢復(fù)完成,正常進(jìn)行其它工作。
2.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,所述索引區(qū)由多個比特組成,包含O的比特的個數(shù)就是索引號;根據(jù)索引區(qū)數(shù)據(jù)計算O的個數(shù),并將這個值返回給索引號Itl,即取得了索引號。
3.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,不同類型的記錄的長度、起始地址和索引號不同;當(dāng)要寫入記錄的類型確定之后,按下式計算索引號Itl所對應(yīng)的地址Addr_old:
Addr_old = REC_START_ADDR+REC_LENX10 式中,REC_START_ADDR是記錄首地址,REC_LEN為記錄長度,這兩個量對于某一特定記錄是已知量。
4.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,每增加一條記錄,索引號加1,索引區(qū)某一比特從I變?yōu)镺 ;當(dāng)達(dá)到可記錄數(shù)量的最大值之后,最原始的一條記錄將被覆蓋,索引區(qū)每個比特都變成O;如果還要增加記錄,索引區(qū)所有的O變?yōu)镮,然后將第一個比特再改為O。
5.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,如果所述步驟9擦除期間掉電,由于所述備份區(qū)的前、后保護(hù)標(biāo)志和地址保存在存儲器的同一頁內(nèi),而且存儲器擦除的特點是同一頁內(nèi)的所有字節(jié)同時清除,不存在先后順序,因此,即使擦除期間掉電,也不會出現(xiàn)前后保護(hù)標(biāo)志都存在但維護(hù)的兩個地址Addr_neW和Addr_o I d被清除的情況。
6.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,根據(jù)保護(hù)標(biāo)志的狀態(tài)確定是否進(jìn)行恢復(fù)操作的方法如下: 如果備份區(qū)的兩個標(biāo)志都在置O狀態(tài),說明智能卡上一次上電執(zhí)行停止在了所述步驟7或步驟8,記錄區(qū)的記錄有非正常寫入的可能,需要進(jìn)行記錄恢復(fù),轉(zhuǎn)上電后記錄恢復(fù)方法步驟2 ;如果兩個標(biāo)志不全置O,則智能卡上一次上電執(zhí)行停止在了所述步驟6之前,或者所述步驟9之后;如果停止在了所述步驟6之前,說明沒有寫入新記錄,即上一次的上電執(zhí)行沒有對記錄區(qū)做任何修改,因此沒有必要進(jìn)行記錄恢復(fù);如果停止在所述步驟9之后,說明上一次的新記錄已經(jīng)成功寫入到記錄區(qū),也沒有必要進(jìn)行記錄恢復(fù);因此,當(dāng)兩個標(biāo)志不全置O時,不進(jìn)行恢復(fù)記錄操作,直接轉(zhuǎn)上電后記錄恢復(fù)方法步驟5。
7.根據(jù)權(quán)利要求1所述的一種基于索引的智能卡記錄備份與恢復(fù)方法,其特征在于,如果智能卡在上電記錄恢復(fù)過程中出現(xiàn)掉電,且發(fā)生在上電記錄恢復(fù)方法步驟4完成之前,備份區(qū)的內(nèi)容不變,即恢復(fù)工作沒有正常完成,智能卡上電后,因為兩個標(biāo)志的狀態(tài)不變,仍然進(jìn)行恢復(fù)工作;如果掉電發(fā)生在上電記錄恢復(fù)方法步驟4完成之后,說明恢復(fù)工作已完成,標(biāo)志也隨之 清除。
【文檔編號】G06F17/30GK103744746SQ201310744156
【公開日】2014年4月23日 申請日期:2013年12月30日 優(yōu)先權(quán)日:2013年12月30日
【發(fā)明者】林超, 林平分, 胡杰, 吳旭文 申請人:北京工業(yè)大學(xué)