一種sd卡掉電保護(hù)、恢復(fù)方法以及帶有掉電保護(hù)的sd卡的制作方法
【專利摘要】本發(fā)明涉及一種SD卡掉電保護(hù)和恢復(fù)方法,在整個(gè)支付交易過程中,如果存在命令需要寫入數(shù)據(jù)到flash或者修改flash的數(shù)據(jù),則啟動(dòng)掉電保護(hù)機(jī)制,就是在執(zhí)行一個(gè)命令的時(shí)候,該命令需要寫入實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù),首先將數(shù)據(jù)寫到備份區(qū)里,當(dāng)在備份區(qū)將數(shù)據(jù)寫完后,再將備份區(qū)數(shù)據(jù)按照實(shí)際目標(biāo)數(shù)據(jù)區(qū)寫入數(shù)據(jù),當(dāng)將備份區(qū)的數(shù)據(jù)完全寫入到實(shí)際數(shù)據(jù)區(qū)后,還需要把0xFAFAFAFA的標(biāo)志,寫到備份區(qū)的總體情況區(qū)的最后四個(gè)字節(jié);所述方法采用循環(huán)使用及自然增長方式,實(shí)現(xiàn)備份區(qū)數(shù)據(jù)及信息的寫入,擦除的次數(shù)最小化,并且能夠防止一個(gè)位置反復(fù)擦除,寫入,最大化使用了備份區(qū),實(shí)現(xiàn)了寫平衡,既延長了嵌入式設(shè)備的壽命,又實(shí)現(xiàn)了掉電保護(hù)功能。
【專利說明】—種SD卡掉電保護(hù)、恢復(fù)方法以及帶有掉電保護(hù)的SD卡
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種對(duì)SD卡的掉電保護(hù)和掉電恢復(fù)。
【背景技術(shù)】
[0002]在測量、控制,金融支付領(lǐng)域等的應(yīng)用中,常要求嵌入式設(shè)備在寫入存儲(chǔ)設(shè)備的數(shù)據(jù),不會(huì)因?yàn)殡娫吹綦娀蛘呖ㄆ齐x讀寫器范圍掉電等情況的發(fā)生,而存在寫不完整數(shù)據(jù),造成系統(tǒng)內(nèi)數(shù)據(jù)不一致,這就要求對(duì)嵌入式系統(tǒng)具有掉電保護(hù)機(jī)制,能夠保證存儲(chǔ)數(shù)據(jù)一致性,完整性。掉電保護(hù)通??刹捎靡韵氯N方法:一是加接不間斷電源,讓整個(gè)系統(tǒng)在掉電時(shí)繼續(xù)工作,二是采用備份電源,讓在內(nèi)部和外部RAM中的數(shù)據(jù)在電源掉電時(shí)不丟失,重新加電時(shí),RAM中的數(shù)據(jù)能夠保存完好,掉電后保護(hù)系統(tǒng)中全部或部分?jǐn)?shù)據(jù)存儲(chǔ)單元的內(nèi)容;三是采用軟硬件結(jié)合方式實(shí)現(xiàn)來掉電保護(hù)功能,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),嵌入式內(nèi)部存儲(chǔ)設(shè)備首先進(jìn)行備份,掉電重啟后,軟件檢測掉電備份區(qū)中的信息,將備份區(qū)的數(shù)據(jù)寫入到真正的目標(biāo)區(qū)中。
[0003]【背景技術(shù)】的缺陷:在實(shí)際應(yīng)用中由于在卡片,或者SD卡等較小體積的嵌入式設(shè)備中,方法一,方法二由于要求存在一定電路而造成體積大,成本高,不宜采用,所以在卡片或者SD卡等應(yīng)用中,一般采用方法三的軟硬件結(jié)合的方式,實(shí)現(xiàn)掉電保護(hù)的處理。
【發(fā)明內(nèi)容】
[0004]考慮到備份和保存數(shù)據(jù)的都采用嵌入式設(shè)備中的flash,而flash有一定的擦寫次數(shù)的壽命,而目前flash,尤其是nand flash的容量越來越大,對(duì)于flash的容量的變化不太敏感,所以本發(fā)明采用了一種針對(duì)flash的寫平衡的掉電保護(hù)方法。
[0005]本發(fā)明的目的是通過軟硬件結(jié)合的方式來完成:1)實(shí)現(xiàn)掉電保護(hù)功能,保證數(shù)據(jù)的有效性,完整性;2)備份區(qū)的寫平衡,保證設(shè)備壽命。
[0006]嵌入式設(shè)備的flash數(shù)據(jù)存儲(chǔ)區(qū)分為兩個(gè)區(qū)域,分別是備份區(qū)和數(shù)據(jù)區(qū)。在備份區(qū)又分為兩塊:一部分作為記錄整個(gè)備份區(qū)情況的總體情況區(qū)域,另外一部分作為備份的數(shù)據(jù)區(qū)域。
[0007]在嵌入式設(shè)備進(jìn)行數(shù)據(jù)存儲(chǔ)操作的時(shí)候,首先要將數(shù)據(jù)寫入備份區(qū),特別是修改目標(biāo)區(qū)域數(shù)據(jù)時(shí),需要先將目標(biāo)區(qū)域數(shù)據(jù)讀出,在設(shè)備的內(nèi)存RAM里修改相應(yīng)數(shù)據(jù),然后作為整體數(shù)據(jù)寫入到備份區(qū),再進(jìn)行目標(biāo)區(qū)域擦除操作,繼而將備份區(qū)的數(shù)據(jù)寫入到目標(biāo)數(shù)據(jù)區(qū)里。在上述過程的寫入備份區(qū)的過程中,要把寫入備份區(qū)一些情況,寫入到備份區(qū)的總體情況區(qū)域中。該總體情況區(qū)域里記錄了每次寫入時(shí),都要增加一條相關(guān)記錄:該條記錄包括備份區(qū)數(shù)據(jù)區(qū)的起始地址(由于我們的技術(shù)方案要求寫入到備份區(qū)域的數(shù)據(jù)是循環(huán)寫入的,這樣起始地址在不斷變化,比如一條命令需要寫入f IashS次,則這些數(shù)據(jù)要依次寫入到flash的備份區(qū)里,但寫入這些數(shù)據(jù)的情況在總體記錄里只寫I次:新的備份區(qū)的起始地址+包括共寫入的次數(shù)(8條記錄)。每次都是先在備份區(qū)的總體記錄區(qū)記錄一下起始地址,在備份區(qū)的數(shù)據(jù)區(qū)寫完數(shù)據(jù)后,再在備份區(qū)的總體記錄區(qū)的寫實(shí)際備份數(shù)據(jù)條數(shù),而當(dāng)數(shù)據(jù)最終寫入到實(shí)際數(shù)據(jù)區(qū)域后,還需要寫I個(gè)字表示完成寫入過程,相當(dāng)于本條備份作廢。如果在寫備份區(qū)的數(shù)據(jù)就出現(xiàn)了掉電情況,則重啟后,系統(tǒng)首先讀取備份區(qū)的總體記錄區(qū)的最后一條,如果沒有完成寫入的標(biāo)志,說明存在掉電保護(hù)情況發(fā)生,需要啟動(dòng)掉電恢復(fù)功能,完成數(shù)據(jù)最終寫入。當(dāng)然如果只有起始地址,而實(shí)際條數(shù)為O,則說明只是掉電備份,但備份并沒有完成,而是掉電出現(xiàn)在備份工程中,則從記錄起始位置,直到找到新的沒有被使用的地址數(shù)據(jù)開始,重新作為備份區(qū)域的起始地址,且相當(dāng)于備份的這條指令并沒運(yùn)行,保證了數(shù)據(jù)的完整性和一致性。
[0008]下面是備份區(qū)的總體情況區(qū)域的數(shù)據(jù)格式:
[0009]上次擦除備份數(shù)據(jù)區(qū)地址(4)備份區(qū)數(shù)據(jù)區(qū)起始地址(4)備份區(qū)的數(shù)據(jù)區(qū)備份數(shù)據(jù)記錄數(shù)(4)本次備份已經(jīng)寫入到實(shí)際數(shù)據(jù)區(qū)標(biāo)志符(4)
[0010]其中:
[0011]上次擦除備份數(shù)據(jù)區(qū)地址是指當(dāng)備份區(qū)數(shù)據(jù)區(qū)由于是循環(huán)寫,所以需要記錄上次擦除備份數(shù)據(jù)區(qū)地址,作為這次的邊界,如果離邊界一定距離后,需要擦除一定區(qū)域的備份區(qū),保證備份區(qū)的數(shù)據(jù)區(qū)可以寫入新數(shù)據(jù);
[0012]備份區(qū)數(shù)據(jù)區(qū)起始地址是指這條命令進(jìn)行數(shù)據(jù)寫入(或者改寫)的起始地址,如果備份數(shù)據(jù)寫到備份區(qū)的最大物理邊界的時(shí)候,需要將數(shù)據(jù)從備份區(qū)最小物理邊界接著寫,實(shí)現(xiàn)循環(huán)寫入的目的;
[0013]數(shù)據(jù)區(qū)備份數(shù)據(jù)記錄數(shù)是指這條命令一共產(chǎn)生了多少條備份數(shù)據(jù);
[0014]本次備份已經(jīng)寫入到實(shí)際數(shù)據(jù)區(qū)標(biāo)志符為OxFAFAFAFA。
[0015]在數(shù)據(jù)寫入的命令執(zhí)行的時(shí)候會(huì)在備份區(qū)的總體情況區(qū)域增加一條記錄,并且自然增長:即在寫入一條新的總體情況記錄時(shí),一般是找到最后一個(gè)總體情況記錄,再接著往下寫。當(dāng)數(shù)據(jù)增加到備份區(qū)的總體情況區(qū)域的邊緣的時(shí)候,需要寫入到別的特定區(qū)域,該區(qū)域只保存記錄一條總體情況記錄。在擦除整個(gè)備份區(qū)的總體情況記錄區(qū)后,再把剛才備份到特定區(qū)域的那條總體情況記錄從備份區(qū)總體情況區(qū)域的首地址寫入,然后再擦除相應(yīng)的特定區(qū)域的那一條總體情況記錄,這樣保證了備份區(qū)的總體情況記錄區(qū)完整性和一致性。
[0016]為了保證備份數(shù)據(jù)方便查找,我們?cè)趯懭雮浞輩^(qū)的數(shù)據(jù)區(qū)域的數(shù)據(jù)也采用一定數(shù)據(jù)格式,使用變長記錄LV方式實(shí)現(xiàn),每一條記錄的格式為:
[0017]長度I (2)目標(biāo)地址a(4)數(shù)據(jù)d(X)校驗(yàn)數(shù)據(jù)c (XOR(I))0
[0018]其中長度I是指整個(gè)要寫入的數(shù)據(jù)(數(shù)據(jù)d)的長度,目標(biāo)地址a是指備份數(shù)據(jù)要寫入的目標(biāo)數(shù)據(jù)區(qū)的地址,數(shù)據(jù)d是實(shí)際要寫入的數(shù)據(jù),校驗(yàn)數(shù)據(jù)c是對(duì)數(shù)據(jù)d的校驗(yàn)和,其目的有兩個(gè):一個(gè)保證寫入到備份區(qū)的數(shù)據(jù)是有效的,保證將來寫入到目標(biāo)區(qū)域的數(shù)據(jù)也是有效的,另外一個(gè)是在驗(yàn)證備份區(qū)出現(xiàn)掉電時(shí)候,能夠幫助驗(yàn)證最后一個(gè)數(shù)據(jù)有效性,從而確定最后一個(gè)使用的備份區(qū)數(shù)據(jù)區(qū)的位置;備份區(qū)的數(shù)據(jù)區(qū)域由于數(shù)據(jù)組織結(jié)構(gòu)中包含長度,以及校驗(yàn)和,所以根據(jù)上一條數(shù)據(jù)位置,可以計(jì)算得出一下條數(shù)據(jù)位置,直到最后一個(gè)已經(jīng)寫好的數(shù)據(jù)位置的下一個(gè)字節(jié),再接著寫新的數(shù)據(jù)。并且可以讓數(shù)據(jù)能夠?qū)崿F(xiàn)循環(huán)使用備份區(qū)的數(shù)據(jù)區(qū)域,也即是說,由于已經(jīng)在備份區(qū)域的總體情況記錄區(qū)記錄了新的備份區(qū)的數(shù)據(jù)區(qū)域的起始地址,我們只要按照新的起始地址寫數(shù)據(jù),如果到了備份區(qū)域的數(shù)據(jù)區(qū)域的邊界,則可以從備份區(qū)域的物理小邊界地址接著寫,相當(dāng)于循環(huán)使用備份區(qū)域的數(shù)據(jù)區(qū)域,全寫入到數(shù)據(jù)區(qū)后,才繼續(xù)執(zhí)行下面的命令。并且也并不擦除備份區(qū)的數(shù)據(jù),只是調(diào)整備份區(qū)起始位置和寫入數(shù)據(jù)的記錄數(shù),這樣的機(jī)制保證備份區(qū)記錄狀態(tài)的完整性,有效性。
[0019]根據(jù)本發(fā)明的實(shí)施方式,公開了一種SD卡的掉電保護(hù)方法,所述方法包括如下步驟:
[0020]SD卡啟動(dòng)后,判斷是否有掉電保護(hù)數(shù)據(jù),根據(jù)備份區(qū)總體情況記錄的最后4個(gè)字節(jié)是否是OxFAFAFAFA,判斷掉電情況是否發(fā)生;
[0021]如果上述最后四個(gè)字節(jié)不是OxFAFAFAFA,則判斷是發(fā)生了掉電,進(jìn)入掉電恢復(fù)流程之后,進(jìn)入判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟,如果最后四個(gè)字節(jié)是OxFAFAFAFA,則判斷上次SD退出時(shí),不是由于掉電引起的,直接進(jìn)入判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟;
[0022]判斷是否涉及flash數(shù)據(jù)的寫入和修改:在處理支付交易命令時(shí),如果該命令不涉及到flash數(shù)據(jù)的寫入和修改,則結(jié)束該方法流程;如果命令涉及到了 flash數(shù)據(jù)的寫入和修改,則繼續(xù)進(jìn)入確定此次備份起始位置步驟;
[0023]當(dāng)需要flash數(shù)據(jù)寫入或者修改時(shí),根據(jù)備份區(qū)總體情況區(qū)的最后一個(gè)記錄,確定此次備份起始位置;
[0024]當(dāng)往備份區(qū)總體情況區(qū)寫記錄時(shí),首先判斷備份區(qū)總體情況區(qū)是否寫滿,如果沒寫滿,則寫上步驟中確定的備份起始位置,如果寫滿了,將備份起始位置寫入到特定位置,擦除備份區(qū)總體情況區(qū),并寫回備份區(qū)總體情況區(qū)起始位置,并且擦除特定位置的數(shù)據(jù);
[0025]將要寫入的數(shù)據(jù)在RAM里組織好;
[0026]按照備份起始地址將數(shù)據(jù)寫入備份區(qū)的數(shù)據(jù)區(qū),寫完一條備份記錄,記錄數(shù)增加1,計(jì)算新的寫備份數(shù)據(jù)地址;直到將所有需要備份的數(shù)據(jù)都寫入到備份區(qū)的數(shù)據(jù)區(qū),計(jì)算好這次備份的總的記錄數(shù);
[0027]將這次備份的總的記錄數(shù)寫入到備份區(qū)的總體情況區(qū)最后4個(gè)字節(jié);
[0028]根據(jù)備份區(qū)總體情況找到備份數(shù)據(jù)起始地址以及記錄條數(shù)找到備份數(shù)據(jù),按照備份數(shù)據(jù)保含的數(shù)據(jù)實(shí)際目標(biāo)地址逐條寫到數(shù)據(jù)區(qū)域,完成數(shù)據(jù)寫入;
[0029]將OxFAFAFAFA標(biāo)志,寫到備份總體情況最后4個(gè)字節(jié),完成在掉電保護(hù)的情況下的數(shù)據(jù)真正寫入工作,接著執(zhí)行下一條指令,進(jìn)入到判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟循環(huán)。
[0030]其中,判斷備份區(qū)總體情況區(qū)是否寫滿是判斷至少有12個(gè)字節(jié)的空間。
[0031]根據(jù)本發(fā)明的另一個(gè)實(shí)施方式,還公開了一種SD卡的掉電恢復(fù)方法,所述方法包括如下步驟:
[0032]判斷特定位置是否有備份區(qū)總體情況數(shù)據(jù),如果有說明在擦除備份區(qū)總體情況數(shù)據(jù)出現(xiàn)掉電,則擦除備份區(qū)總體情況區(qū)域,將特定位置的數(shù)據(jù)寫到總體情況區(qū)域的開始位置,然后再擦除特定位置的數(shù)據(jù);
[0033]判斷是否備份區(qū)數(shù)據(jù)區(qū)不完整,如果是,,則需要按照總體情況區(qū)域最后記錄中備份起始地址開始查找,根據(jù)數(shù)據(jù)區(qū)每條數(shù)據(jù)的頭可以知道數(shù)據(jù)長度和校驗(yàn)和,從而知道數(shù)據(jù)實(shí)際寫入情況將殘缺的記錄條數(shù)記做OxFDFDFDFD,并增加一條記錄,地址為確定殘缺的備份區(qū)域的最后地址+1,并且將條數(shù)寫成OxFEFEFEFE ;
[0034]判斷是否寫入實(shí)際數(shù)據(jù)區(qū)掉電,如果備份區(qū)總體情況最后記錄的最后4個(gè)字節(jié)不是OxFAFAFAFA,則需要讀出備份區(qū)的數(shù)據(jù)區(qū)數(shù)據(jù);去讀實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù)進(jìn)行比較,并且完成最終數(shù)據(jù)的寫入工作,最后將OxFAFAFAFA寫入到備份區(qū)的總體情況區(qū)的最后4個(gè)字節(jié)中,完成掉電恢復(fù)全部工作。
[0035]其中判斷是否備份區(qū)數(shù)據(jù)區(qū)不完整是總體情況記錄里條數(shù)為O的情況。
[0036]根據(jù)本發(fā)明的另一個(gè)實(shí)施方式,還公開了一種可以進(jìn)行掉電保護(hù)的SD卡,所述SD卡包括SD控制器和載有金融支付功能COS的安全芯片,其中SD控制器負(fù)責(zé)SD接口,并連接大容量Flash數(shù)據(jù)存儲(chǔ)器,而載有金融支付功能COS的安全芯片實(shí)現(xiàn)金融支付功能,所述flash存儲(chǔ)器裝有支付過程的數(shù)據(jù),所述SD卡在進(jìn)行掉電保護(hù)時(shí)可以執(zhí)行如上所述的掉電保護(hù)方法。
[0037]根據(jù)本發(fā)明的另一個(gè)實(shí)施方式,還公開了一種可以進(jìn)行掉電恢復(fù)的SD卡,所述SD卡包括SD控制器和載有金融支付功能COS的安全芯片,其中SD控制器負(fù)責(zé)SD接口,并連接大容量Flash數(shù)據(jù)存儲(chǔ)器,而載有金融支付功能COS的安全芯片實(shí)現(xiàn)金融支付功能,所述flash存儲(chǔ)器裝有支付過程的數(shù)據(jù),所述SD卡在進(jìn)行掉電恢復(fù)時(shí)可以執(zhí)行如上所述的掉電恢復(fù)方法。
[0038]本發(fā)明的關(guān)鍵點(diǎn):
[0039]I)本發(fā)明的掉電保護(hù)采用軟硬件方式實(shí)現(xiàn)
[0040]2)本發(fā)明的嵌入式設(shè)備的數(shù)據(jù)存儲(chǔ)部件采用的是flash,我們從軟件角度講flash分為數(shù)據(jù)區(qū)和備份區(qū)。備份區(qū)又被分為備份區(qū)總體情況記錄區(qū),和備份區(qū)數(shù)據(jù)區(qū)兩部分。
[0041]3)備份區(qū)總體情況區(qū)在嵌入式系統(tǒng)執(zhí)行一條需要數(shù)據(jù)存儲(chǔ)的命令時(shí),就記錄一條備份區(qū)數(shù)據(jù)區(qū)的總體情況記錄,并不是改寫,而是順序往下寫,寫滿后將最后一個(gè)記錄寫入到特定位置,再擦除,保證整個(gè)備份區(qū)總體情況記錄區(qū)擦寫次數(shù)減少,并且不在一個(gè)地方反復(fù)擦寫的問題;
[0042]4)備份區(qū)數(shù)據(jù)區(qū)則利用一定數(shù)據(jù)結(jié)構(gòu),依次寫入備份數(shù)據(jù),不用備份用完后進(jìn)行擦除,可以直到當(dāng)備份數(shù)據(jù)寫到備份區(qū)數(shù)據(jù)區(qū)的物理最大的邊界時(shí),可以再從備份區(qū)數(shù)據(jù)區(qū)的物理最小邊界接著寫,實(shí)現(xiàn)循環(huán)使用備份區(qū)的數(shù)據(jù)區(qū),當(dāng)備份數(shù)據(jù)區(qū)的未寫入部分小于我們?cè)O(shè)定的大小時(shí),就可以從我們要備份的地址開始擦除。
[0043]本發(fā)明的效果:采用循環(huán)使用及自然增長方式,實(shí)現(xiàn)備份區(qū)數(shù)據(jù)及信息的寫入,擦除的次數(shù)最小化,并且能夠防止一個(gè)位置反復(fù)擦除,寫入,最大化使用了備份區(qū),實(shí)現(xiàn)了寫平衡,既延長了嵌入式設(shè)備的壽命,又實(shí)現(xiàn)了掉電保護(hù)功能,同時(shí)保證了數(shù)據(jù)的有效性,完整性。
【專利附圖】
【附圖說明】
[0044]附圖1是現(xiàn)有技術(shù)中SD的結(jié)構(gòu);
[0045]附圖2是本發(fā)明實(shí)施例提供的SD卡的掉電保護(hù)機(jī)制;
[0046]附圖3是本發(fā)明實(shí)施例提供的SD卡的掉電恢復(fù)機(jī)制。
【具體實(shí)施方式】
[0047]在金融支付的SD卡中,SD卡(如圖1所示)里包含有SD控制器和載有金融支付功能COS的安全芯片,其中SD控制器負(fù)責(zé)SD接口,并連接大容量Flash數(shù)據(jù)存儲(chǔ)器,而載有金融支付功能COS的安全芯片實(shí)現(xiàn)金融支付功能。在這個(gè)安全芯片里有flash存儲(chǔ)器,里裝有支付過程的數(shù)據(jù),由于涉及到金融數(shù)據(jù)的穩(wěn)定可靠,特別要求在整個(gè)支付交易過程中,數(shù)據(jù)不會(huì)由于在寫入flash過程中出現(xiàn)掉電而造成數(shù)據(jù)寫入中斷而造成數(shù)據(jù)出現(xiàn)錯(cuò)誤等問題。同時(shí)flash本身具有一定寫擦除壽命也是需要考慮的問題。我們的COS程序里包含有掉電保護(hù)的軟件方法就很好的解決了上述問題。
[0048]安全芯片里的flash從軟件角度定義了兩部分來保證數(shù)據(jù)掉電保護(hù)的數(shù)據(jù)一致性:一部分是實(shí)際數(shù)據(jù)區(qū),一部分是備份區(qū),而備份區(qū)里又定義為了備份數(shù)據(jù)區(qū),和備份總體情況區(qū)。在整個(gè)支付交易過程中,如果存在命令需要寫入數(shù)據(jù)到flash或者修改flash的數(shù)據(jù),則啟動(dòng)我們的掉電保護(hù)機(jī)制:就是在執(zhí)行一個(gè)命令的時(shí)候,該命令需要寫入實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù),首先將數(shù)據(jù)寫到備份區(qū)里,數(shù)據(jù)組成一定格式,包括目標(biāo)地址,數(shù)據(jù)長度,以及校驗(yàn)和等。并把數(shù)據(jù)寫入備份區(qū)的整體情況寫入到備份區(qū)總體情況區(qū)里,包括備份的起始地址,這次備份的記錄共有多少條,當(dāng)在備份區(qū)將數(shù)據(jù)寫完后,再將備份區(qū)數(shù)據(jù)按照實(shí)際目標(biāo)數(shù)據(jù)區(qū)寫入數(shù)據(jù),當(dāng)將備份區(qū)的數(shù)據(jù)完全寫入到實(shí)際數(shù)據(jù)區(qū)后,還需要把OxFAFAFAFA的標(biāo)志,寫到備份區(qū)的總體情況區(qū)的最后四個(gè)字節(jié),這樣就完成了整個(gè)掉電保護(hù)過程。當(dāng)然存在的一些和備份區(qū)寫入等有關(guān)的特殊情況處理,現(xiàn)在詳細(xì)介紹一下掉電保護(hù)情況(如圖2所示):
[0049]I) SD卡啟動(dòng)后,判斷是否有掉電保護(hù)數(shù)據(jù),根據(jù)備份區(qū)總體情況記錄的最后4個(gè)字節(jié)是否是OxFAFAFAFA,判斷掉電情況是否發(fā)生;
[0050]2)如果不是OxFAFAFAFA,則進(jìn)入掉電恢復(fù)流程(下面有介紹),如果是,則上次SD退出時(shí),不是由于掉電引起的,進(jìn)行正常的支付交易命令處理;
[0051]3)在處理支付交易命令時(shí),如果該命令不涉及到flash數(shù)據(jù)的寫入和修改,則不啟動(dòng)掉電保護(hù)機(jī)制;
[0052]4)如果命令涉及到了 flash數(shù)據(jù)的寫入和修改,則啟動(dòng)掉電保護(hù)機(jī)制;當(dāng)需要flash數(shù)據(jù)寫入或者修改時(shí),根據(jù)備份區(qū)總體情況區(qū)的最后一個(gè)記錄,確定此次備份起始位置;
[0053]5)當(dāng)往備份區(qū)總體情況區(qū)寫記錄時(shí),首先判斷備份區(qū)總體情況區(qū)是否寫滿(判斷至少有12個(gè)字節(jié)的空間),如果沒寫滿,則寫上步驟中確定的備份起始位置,如果寫滿了,將備份起始位置寫入到特定位置,擦除備份區(qū)總體情況區(qū),并寫回備份區(qū)總體情況區(qū)起始位置,并且擦除特定位置的數(shù)據(jù);
[0054]6)將要寫入的數(shù)據(jù)在RAM里組織好;
[0055]7)按照備份起始地址將數(shù)據(jù)寫入備份區(qū)的數(shù)據(jù)區(qū),寫完一條備份記錄,記錄數(shù)增加1,計(jì)算新的寫備份數(shù)據(jù)地址;直到將所有需要備份的數(shù)據(jù)都寫入到備份區(qū)的數(shù)據(jù)區(qū),計(jì)算好這次備份的總的記錄數(shù);
[0056]8)將這次備份的總的記錄數(shù)寫入到備份區(qū)的總體情況區(qū)最后4個(gè)字節(jié);
[0057]9)根據(jù)備份區(qū)總體情況找到備份數(shù)據(jù)起始地址以及記錄條數(shù)找到備份數(shù)據(jù),按照備份數(shù)據(jù)保含的數(shù)據(jù)實(shí)際目標(biāo)地址逐條寫到數(shù)據(jù)區(qū)域,完成數(shù)據(jù)寫入;
[0058]10)將OxFAFAFAFA標(biāo)志,寫到備份總體情況最后4個(gè)字節(jié),完成在掉電保護(hù)的情況下的數(shù)據(jù)真正寫入工作,接著執(zhí)行下一條指令(進(jìn)入到步驟3循環(huán))。[0059]而當(dāng)SD卡重新上電后,SD里的安全芯片里的金融支付的COS啟動(dòng)后,首先判斷是否存在掉電情況,根據(jù)備份總體情況區(qū)記錄的數(shù)據(jù)是否最后4個(gè)字節(jié)為OxFAFAFAFA,如果是則不存在掉電情況,COS進(jìn)行正常的金融支付和大容量數(shù)據(jù)存儲(chǔ)即可。而如果最后四個(gè)字節(jié)不是OxFAFAFAFA,則說明存在掉電情況,需要通過掉電保護(hù)恢復(fù)機(jī)制進(jìn)行處理。在掉電保護(hù)恢復(fù)時(shí),首先判斷是在什么情況下出現(xiàn)的掉電情況,這個(gè)可以通過備份總體情況區(qū)的數(shù)據(jù)以及備份區(qū)數(shù)據(jù),甚至在與寫入實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù)進(jìn)行比較,來確認(rèn)掉電情況發(fā)生在什么地方進(jìn)行相應(yīng)的處理,掉電恢復(fù)情況(如圖3所示)具體介紹如下:
[0060]I)判斷特定位置是否有備份區(qū)總體情況數(shù)據(jù),如果有說明在擦除備份區(qū)總體情況數(shù)據(jù)出現(xiàn)掉電,則擦除備份區(qū)總體情況區(qū)域。將特定位置的數(shù)據(jù)寫到總體情況區(qū)域的開始位置,然后再擦除特定位置的數(shù)據(jù);
[0061]2)判斷是否備份區(qū)數(shù)據(jù)區(qū)不完整(總體情況記錄里條數(shù)為O的情況),如果為零,則需要按照總體情況區(qū)域最后記錄中備份起始地址開始查找,根據(jù)數(shù)據(jù)區(qū)每條數(shù)據(jù)的頭可以知道數(shù)據(jù)長度和校驗(yàn)和,從而知道數(shù)據(jù)實(shí)際寫入情況將殘缺的記錄條數(shù)記做OxFDFDFDFD,并增加一條記錄,地址為確定殘缺的備份區(qū)域的最后地址+1,并且將條數(shù)寫成OxFEFEFEFE ;
[0062]3)判斷是否寫入實(shí)際數(shù)據(jù)區(qū)掉電,如果備份區(qū)總體情況最后記錄的最后4個(gè)字節(jié)不是OxFAFAFAFA,則需要讀出備份區(qū)的數(shù)據(jù)區(qū)數(shù)據(jù);去讀實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù)進(jìn)行比較,并且完成最終數(shù)據(jù)的寫入工作,最后將OxFAFAFAFA寫入到備份區(qū)的總體情況區(qū)的最后4個(gè)字節(jié)中,完成掉電恢復(fù)全部工作。
[0063]以上實(shí)施方式僅用于說明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)【技術(shù)領(lǐng)域】的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
【權(quán)利要求】
1.一種SD卡的掉電保護(hù)方法,其特征在于,所述方法包括如下步驟: SD卡啟動(dòng)后,判斷是否有掉電保護(hù)數(shù)據(jù),根據(jù)備份區(qū)總體情況記錄的最后4個(gè)字節(jié)是否是OxFAFAFAFA,判斷掉電情況是否發(fā)生; 如果上述最后四個(gè)字節(jié)不是OxFAFAFAFA,則判斷是發(fā)生了掉電,進(jìn)入掉電恢復(fù)流程之后,進(jìn)入判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟,如果最后四個(gè)字節(jié)是OxFAFAFAFA,則判斷上次SD退出時(shí),不是由于掉電引起的,直接進(jìn)入判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟; 判斷是否涉及flash數(shù)據(jù)的寫入和修改:在處理支付交易命令時(shí),如果該命令不涉及到flash數(shù)據(jù)的寫入和修改,則結(jié)束該方法流程;如果命令涉及到了 flash數(shù)據(jù)的寫入和修改,則繼續(xù)進(jìn)入確定此次備份起始位置步驟; 確定此次備份起始位置:當(dāng)需要flash數(shù)據(jù)寫入或者修改時(shí),根據(jù)備份區(qū)總體情況區(qū)的最后一個(gè)記錄,確定此次備份起始位置; 當(dāng)往備份區(qū)總體情況區(qū)寫記錄時(shí),首先判斷備份區(qū)總體情況區(qū)是否寫滿,如果沒寫滿,則寫上步驟中確定的備份起始位置,如果寫滿了,將備份起始位置寫入到特定位置,擦除備份區(qū)總體情況區(qū),并寫回備份區(qū)總體情況區(qū)起始位置,并且擦除特定位置的數(shù)據(jù); 將要寫入的數(shù)據(jù)在RAM里組織好; 按照備份起始地址將數(shù)據(jù)寫入備份區(qū)的數(shù)據(jù)區(qū),寫完一條備份記錄,記錄數(shù)增加1,計(jì)算新的寫備份數(shù)據(jù)地址;直到將所有需要備份的數(shù)據(jù)都寫入到備份區(qū)的數(shù)據(jù)區(qū),計(jì)算好這次備份的總的記錄數(shù); 將這次備份的總的記錄數(shù)寫入到備份區(qū)的總體情況區(qū)最后4個(gè)字節(jié); 根據(jù)備份區(qū)總體情況找到備份數(shù)據(jù)起始地址以及記錄條數(shù)找到備份數(shù)據(jù),按照備份數(shù)據(jù)保含的數(shù)據(jù)實(shí)際目標(biāo)地址逐條寫到數(shù)據(jù)區(qū)域,完成數(shù)據(jù)寫入; 將OxFAFAFAFA標(biāo)志,寫到備份總體情況最后4個(gè)字節(jié),完成在掉電保護(hù)的情況下的數(shù)據(jù)真正寫入工作,接著執(zhí)行下一條指令,進(jìn)入到判斷是否涉及flash數(shù)據(jù)的寫入和修改步驟循環(huán)。
2.根據(jù)權(quán)利要求1所述的SD卡的掉電保護(hù)方法,其特征在于,其中判斷備份區(qū)總體情況區(qū)是否寫滿是判斷至少有12個(gè)字節(jié)的空間。
3.—種SD卡的掉電恢復(fù)方法,其特征在于,所述方法包括如下步驟: 判斷特定位置是否有備份區(qū)總體情況數(shù)據(jù),如果有說明在擦除備份區(qū)總體情況數(shù)據(jù)出現(xiàn)掉電,則擦除備份區(qū)總體情況區(qū)域,將特定位置的數(shù)據(jù)寫到總體情況區(qū)域的開始位置,然后再擦除特定位置的數(shù)據(jù); 判斷是否備份區(qū)數(shù)據(jù)區(qū)不完整,如果是,則需要按照總體情況區(qū)域最后記錄中備份起始地址開始查找,根據(jù)數(shù)據(jù)區(qū)每條數(shù)據(jù)的頭可以知道數(shù)據(jù)長度和校驗(yàn)和,從而知道數(shù)據(jù)實(shí)際寫入情況,將殘缺的記錄條數(shù)記做OxFDFDFDFD,并增加一條記錄,地址為確定殘缺的備份區(qū)域的最后地址+1,并且將條數(shù)寫成OxFEFEFEFE ; 判斷是否寫入實(shí)際數(shù)據(jù)區(qū)掉電,如果備份區(qū)總體情況最后記錄的最后4個(gè)字節(jié)不是OxFAFAFAFA,則需要讀出備份區(qū)的數(shù)據(jù)區(qū)數(shù)據(jù);去讀實(shí)際數(shù)據(jù)區(qū)的數(shù)據(jù)進(jìn)行比較,并且完成最終數(shù)據(jù)的寫入工作,最后將OxFAFAFAFA寫入到備份區(qū)的總體情況區(qū)的最后4個(gè)字節(jié)中,完成掉電恢復(fù)全部工作。
4.如權(quán)利要求3所述的SD卡的掉電保護(hù)方法,其特征在于,其中判斷是否備份區(qū)數(shù)據(jù)區(qū)不完整是指總體情況記錄里條數(shù)為O的情況。
5.一種可以進(jìn)行掉電保護(hù)的SD卡,其特征在于,所述SD卡包括SD控制器和載有金融支付功能COS的安全芯片,其中SD控制器負(fù)責(zé)SD接口,并連接大容量Flash數(shù)據(jù)存儲(chǔ)器,而載有金融支付功能COS的安全芯片實(shí)現(xiàn)金融支付功能,所述flash存儲(chǔ)器裝有支付過程的數(shù)據(jù),所述SD卡在進(jìn)行掉電保護(hù)時(shí)可以執(zhí)行如權(quán)利要求1所述的掉電保護(hù)方法。
6.一種可以進(jìn)行掉電恢復(fù)的SD卡,其特征在于,所述SD卡包括SD控制器和載有金融支付功能COS的安全芯片,其中SD控制器負(fù)責(zé)SD接口,并連接大容量Flash數(shù)據(jù)存儲(chǔ)器,而載有金融支付功能COS的安全芯片實(shí)現(xiàn)金融支付功能,所述flash存儲(chǔ)器裝有支付過程的數(shù)據(jù),所述SD卡 在進(jìn)行掉電恢復(fù)時(shí)可以執(zhí)行如權(quán)利要求3所述的掉電恢復(fù)方法。
【文檔編號(hào)】G06F12/16GK103914407SQ201210592331
【公開日】2014年7月9日 申請(qǐng)日期:2012年12月30日 優(yōu)先權(quán)日:2012年12月30日
【發(fā)明者】邵波 申請(qǐng)人:航天信息股份有限公司