增強智能卡可靠性的方法
【技術領域】
[0001]本發(fā)明屬于嵌入式軟件領域中的智能卡軟件范疇,特別涉及智能卡可靠性方法。
【背景技術】
[0002]智能卡是一種IC卡,卡內的集成電路包括中央處理器CPU、R0M、EEPR0M(或其它介質)、RAM和存儲在卡內的智能卡軟件和數據。
[0003]智能卡通常有電壓保護、頻率保護等硬件可靠性保護措施,但仍然存在在某些非正常工作條件下(如電源不穩(wěn)定、帶電插拔、電磁干擾等的條件),智能卡程序指針跑飛的情況。智能卡程序指針跑飛,通常會使程序返回錯誤的狀態(tài)。根據智能卡應用的特點,程序跑飛會帶來兩種后果。一是對于大多數程序跑飛的情況而言,程序將可能返回錯誤狀態(tài),僅會造成應用中斷,因為智能卡應用的上位機及后臺服務器通常有針對應用中斷的處理,因此影響很??;另一種后果是,因為智能卡內是有擦寫程序的,如果程序跑飛并調用了擦寫程序導致擦寫了不應該擦寫的數據甚至擦寫了程序代碼,則卡片會成為無效卡片。如果在生產環(huán)節(jié)出現此問題,會造成成品率的下降;如果在用戶手中出現此問題,則給持卡人帶來不便,造成發(fā)卡商投訴率上升。
[0004]通常嵌入式軟件中為提高可靠性級別時,會采用N版本程序設計的方法,即設計N個相同功能的相異程序,各版本先后運算出來的結果相互比較來確定輸出。但這種方法會造成開發(fā)周期長,性能較低,占用空間大,通常而言是不適合智能卡的應用場景的。
[0005]芯片硬件有時也會采取一些可靠性的設計,例如硬件設計為在擦寫等動作前要先寫入一定的指令序列,否則不啟動擦寫。但通常擦寫函數是將該指令序列和啟動擦寫放在一個函數中的,一旦程序跑飛到函數入口,則會順序寫入指令序列和啟動擦寫,就會造成誤擦寫。
【發(fā)明內容】
[0006]智能卡由于本身的特點,需要嵌入式軟件來增強智能卡整體的可靠性。在智能卡可靠性問題中較嚴重的一種問題,就是智能卡在受到干擾時程序指針跑飛造成程序代碼或數據被誤擦寫的情況。本發(fā)明正是為解決這一問題而設計的一種方法。
[0007]本發(fā)明提供的這種增強智能卡可靠性的方法,設計了一個軟件開關來控制智能卡非易失性存儲器擦寫函數的擦寫使能,將軟件開關的開啟和關閉操作放置在擦寫函數之夕卜,同時將軟件開關的開啟和關閉操作和正確的程序運行流程緊密結合。如果軟件開關沒有打開,則程序不會執(zhí)行擦寫函數或硬件的擦寫指令。將軟件開關的開啟和關閉操作和正確的程序運行流程緊密結合,則使得程序跑飛時軟件開關極大概率的處于關閉狀態(tài)。從而當程序沒有按正常的程序流程執(zhí)行而跑飛到擦寫函數時,擦寫函數或硬件的擦寫指令不會被成功執(zhí)行。
[0008]本發(fā)明包含如下軟件開關程序調用方法A:
[0009](I)在智能卡開始運行的初期,將軟件開關關閉;
[0010](2)進行智能卡程序的初始化;
[0011](3)在進入智能卡應用程序處理前,將軟件開關關閉;
[0012](4)等待接收智能卡應用命令;
[0013](5)接收到智能卡應用命令后,將軟件開關打開;
[0014](6)處理接收到的智能卡應用命令(含有調用擦寫程序),并返回數據,然后將軟件開關關閉;
[0015](7)重復執(zhí)行步驟4?步驟6。
[0016]該方法有效果的依據之一是:如果是因為干擾程序跑飛,幾乎不能完整的執(zhí)行步驟4?步驟6,特別是執(zhí)行在第4步的接收環(huán)節(jié)中,就會因為收不到正確的命令而中止,因此在程序跑飛到擦寫函數時,軟件開關會極大概率的處于關閉的狀態(tài)。
[0017]本發(fā)明包含如下軟件開關(Switch_Variable,采用變量的開關)程序設計方法B:
[0018](I)軟件開關的打開或關閉,決定了擦寫操作是否被允許執(zhí)行;
[0019](2)軟件開關代表的數字要在4個字節(jié)以上,即232個數據以上;
[0020](3)軟件開關可拆成一組開關變量,以增加開關的判斷次數,例如I個變量表示I個字節(jié)的子開關或I個變量表示2個字節(jié)的子開關;
[0021](4)軟件開關等于一組特殊值時,表示開關關閉,例如0x00000000 ;
[0022](5)軟件開關等于一組特殊值時,表示開關開啟,例如0x6780904F。
[0023]本發(fā)明包含如下結合了軟件開關的非易失性存儲器的擦寫程序的設計方法C:
[0024](I)將待寫入的數據寫入硬件擦寫操作的緩沖區(qū);
[0025](2)調用判斷軟件開關函數。該函數功能是判斷軟件開關(Switch_Variable,表示基于變量的開關)是否處于開啟狀態(tài)(由上述的方法A、方法B決定),如果是關閉狀態(tài),則直接執(zhí)行芯片異常中斷或退出擦寫程序;如果是開啟狀態(tài),則執(zhí)行下一步驟;
[0026](3)啟動智能卡芯片的擦寫硬件操作;
[0027]特別可以利用某些CPU的指令特點來作為另一種軟件開關,例如指令的條件執(zhí)行屬性,即當CPU內部的某SFR的某bit不滿足條件時,CPU將不執(zhí)行當前這句條件指令(通常稱含有條件執(zhí)行屬性的指令為條件指令)。下面以ARM SC100 CPU的條件指令為例進行說明。
[0028]STREQ R2,[R1];例如,假設本句指令表示硬件啟動寫操作,但因為有EQ這兩個字母表示的條件執(zhí)行屬性,則說明需要在“z”這個CPU標記(該類標記是CPU內部的狀態(tài)標記,一般存儲在寄存器cpsr中)為I時,STREQ這句指令才會被CPU執(zhí)行(R2\R1是指令的操作數)。如果只在執(zhí)行該指令之前才將“z”設置為1,并且使得設置z的語句的存儲位置遠離STREQ這句指令(通過將設置z的語句封裝在另一個函數中就能使的存儲位置遠離),這樣就基本完全杜絕了程序直接跑飛到STREQ這句啟動寫的指令時,造成誤擦寫的情況。
[0029]本發(fā)明包含如下結合了條件指令的軟件開關的非易失性存儲器的擦寫程序的設計方法D:
[0030](I)將待寫入的數據寫入硬件擦寫操作的緩沖區(qū);
[0031](2)將條件指令的開關(Switch_Instruct1n,表示基于指令的開關)設為關
[0032](3)調用判斷軟件開關函數。該函數功能是判斷當前開關(Switch_Variable)是否處于開啟狀態(tài)(由上述的方法A、方法B決定),如果是關閉狀態(tài),則直接執(zhí)行芯片異常中斷或退出擦寫程序;如果是開啟狀態(tài),則將條件指令的開關設為開,并執(zhí)行下一步驟;
[0033](4)啟動智能卡芯片的擦寫硬件操作(采用條件指令);
[0034]設計方法D比設計方法C的效果更好,但需要CPU指令的支持。
[0035]其他能增強本發(fā)明效果的輔助手段還有:利用函數合并等手段將“啟動智能卡芯片的擦寫硬件操作”的軟件操作數量盡可能的降到最少,將能提升本發(fā)明的效果;如果設計成由硬件在啟動擦寫前來識別軟件開關的開啟(例如硬件設計為在擦寫等動作前要先寫入一定的