本發(fā)明涉及智能卡技術(shù)領(lǐng)域,尤其涉及一種智能卡及其工作方法。
背景技術(shù):
隨著智能卡應(yīng)用的普及,刷卡成為了人民日常生活的一部分,但刷卡的環(huán)境卻不一定是安全的。目前,對(duì)于交易場(chǎng)景的識(shí)別是由終端中的安全芯片來完成的,而對(duì)于交易的主體智能卡來說,本身并不知道交易發(fā)生的場(chǎng)景,如果在交易過程中終端未能即時(shí)發(fā)現(xiàn)卡片被非法替換、或者拔除,則會(huì)導(dǎo)致欺騙交易的發(fā)生。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明提出了一種智能卡及其工作方法。
本發(fā)明采用的技術(shù)方案如下:
一種智能卡的工作方法,包括以下步驟:
步驟S1:卡片上電,向終端返回卡片應(yīng)答;
步驟S2:卡片檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令頭數(shù)據(jù);
當(dāng)卡片在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則卡片將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,執(zhí)行步驟S3;否則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,執(zhí)行步驟S3;
進(jìn)一步的,當(dāng)步驟S2中判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)不正確時(shí),還包括判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否為所述命令頭數(shù)據(jù)的第一個(gè)字節(jié),是則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,并向終端返回預(yù)設(shè)字節(jié)數(shù)據(jù),然后執(zhí)行步驟S3;否則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,執(zhí)行步驟S3。
步驟S3:卡片根據(jù)當(dāng)前記錄的命令頭數(shù)據(jù)判斷是否接收完成所述命令頭數(shù)據(jù),是則根據(jù)所述命令頭數(shù)據(jù)確定命令類型,并執(zhí)行步驟S4,否則返回執(zhí)行步驟S2;
步驟S4:卡片根據(jù)所述命令類型判斷是否要接收命令數(shù)據(jù),是則根據(jù)所述命令頭數(shù)據(jù)確定要接收的命令數(shù)據(jù)長(zhǎng)度并執(zhí)行步驟S5,否則執(zhí)行步驟S7;
步驟S5:卡片檢測(cè)I/O電平,當(dāng)卡片檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令數(shù)據(jù);
當(dāng)卡片在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則卡片將接收到的1字節(jié)的數(shù)據(jù)記錄為命令數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,執(zhí)行步驟S6;否則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,執(zhí)行步驟S6;
步驟S6:卡片根據(jù)當(dāng)前記錄的命令數(shù)據(jù)和所述命令數(shù)據(jù)長(zhǎng)度判斷是否接收完成所述命令數(shù)據(jù),是則執(zhí)行步驟S7,否則返回執(zhí)行步驟S5;
步驟S7:卡片根據(jù)所述命令類型執(zhí)行相應(yīng)處理并返回響應(yīng)數(shù)據(jù)給終端。
一種智能卡,包括第一響應(yīng)模塊、第一收發(fā)模塊、第一判斷模塊、第二判斷模塊、第二收發(fā)模塊、第三判斷模塊和第二響應(yīng)模塊;
所述第一響應(yīng)模塊,用于卡片上電后向終端返回卡片應(yīng)答,并觸發(fā)所述第一收發(fā)模塊;
所述第一收發(fā)模塊,用于收到所述第一響應(yīng)模塊或第一判斷模塊的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令頭數(shù)據(jù),在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第一判斷模塊;否則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第一判斷模塊;
所述第一判斷模塊,用于收到所述第一收發(fā)模塊的觸發(fā)時(shí),判斷所述第一收發(fā)模塊是否接收完成所述命令頭數(shù)據(jù),是則根據(jù)所述第一收發(fā)模塊接收到的命令頭數(shù)據(jù)確定命令類型,并觸發(fā)所述第二判斷模塊,否則觸發(fā)所述第一收發(fā)模塊;
所述第二判斷模塊,用于根據(jù)所述第一判斷模塊確定的所述命令類型判斷是否要接收命令數(shù)據(jù),是則根據(jù)所述第一收發(fā)模塊接收到的命令頭數(shù)據(jù)確定要接收的命令數(shù)據(jù)長(zhǎng)度并觸發(fā)第二收發(fā)模塊,否則觸發(fā)第二響應(yīng)模塊;
所述第二收發(fā)模塊,用于收到所述第二判斷模塊或第三判斷模塊的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)卡片檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令數(shù)據(jù),在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第三判斷模塊;否則在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第三判斷模塊;
所述第三判斷模塊,用于收到所述第二收發(fā)模塊的觸發(fā)時(shí),根據(jù)所述第二判斷模塊確定的所述命令數(shù)據(jù)長(zhǎng)度判斷所述第二收發(fā)模塊是否接收完成所述命令數(shù)據(jù),是則觸發(fā)第二響應(yīng)模塊,否則觸發(fā)第二收發(fā)模塊;
所述第二響應(yīng)模塊,用于根據(jù)所述第一判斷模塊確定的所述命令類型執(zhí)行相應(yīng)處理并返回響應(yīng)數(shù)據(jù)給所述終端。
進(jìn)一步的,上述第一收發(fā)模塊具體包括檢測(cè)單元、接收單元、第一判斷單元和第二判斷單元;
所述檢測(cè)單元,用于收到所述第一響應(yīng)模塊或第一判斷模塊的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),觸發(fā)接收單元;
所述接收單元,用于接收終端發(fā)來的命令頭數(shù)據(jù),每當(dāng)在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),觸發(fā)第一判斷單元;
所述第一判斷單元,用于判斷所述接收單元當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第一判斷模塊;否則觸發(fā)第二判斷單元;
所述第二判斷單元,用于判斷所述接收單元當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否為所述命令頭數(shù)據(jù)的第一個(gè)字節(jié),是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭的第一個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,并向終端返回預(yù)設(shè)字節(jié)數(shù)據(jù),然后觸發(fā)第一判斷模塊;否則在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第一判斷模塊。
本發(fā)明的有益效果如下:本發(fā)明提供的智能卡及其工作方法,既可適用于標(biāo)準(zhǔn)類型智能卡,又可適用于非標(biāo)準(zhǔn)類型的智能卡,兼容性強(qiáng)。本發(fā)明提供的智能卡及其工作方法,還可以實(shí)現(xiàn)在交易過程中防止欺騙交易的發(fā)生,應(yīng)用安全性高。
附圖說明
圖1是本發(fā)明實(shí)施例1提供的一種智能卡的工作方法流程圖;
圖2是圖1中所示步驟8至步驟16的具體細(xì)化圖;
圖3是本發(fā)明實(shí)施例3提供的一種智能卡的模塊組成框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供的實(shí)施例中,etu(elementary time unit,基本時(shí)間單元),是通信協(xié)議里面通用的一個(gè)單位,是指I/O線上傳輸一個(gè)比特位所用的時(shí)鐘周期個(gè)數(shù)。
在卡片和終端的通信過程中,卡片每收發(fā)一個(gè)字節(jié)的數(shù)據(jù)需要12個(gè)etu:起始位(1個(gè)etu)+數(shù)據(jù)位(8個(gè)etu)+奇偶校驗(yàn)位(1個(gè)etu)+錯(cuò)誤檢測(cè)位(2個(gè)etu),其中,在第1至第10個(gè)etu時(shí)卡片的I/O(輸入/輸出端口)為電信號(hào)接收狀態(tài),其中第1個(gè)etu時(shí)卡片的I/O電平為低電平,第2至第9個(gè)etu時(shí)卡片的I/O電平根據(jù)傳輸?shù)臄?shù)據(jù)位進(jìn)行高低電平的變化,在第11、12個(gè)etu時(shí)卡片的I/O為電信號(hào)發(fā)送狀態(tài),且卡片的I/O電平根據(jù)傳輸?shù)臄?shù)據(jù)位正確與否保持I/O電平為高電平或低電平。
實(shí)施例1
本實(shí)施例提供的一種卡片的工作方法,如圖1所示,包括以下步驟:
步驟1:卡片上電,向終端返回卡片應(yīng)答;
步驟2:卡片檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令頭數(shù)據(jù);
當(dāng)卡片在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),執(zhí)行步驟3;
步驟3:卡片判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則執(zhí)行步驟6,否則執(zhí)行步驟4;
優(yōu)選的,卡片將10個(gè)etu內(nèi)傳輸?shù)牡?至第9個(gè)比特位數(shù)據(jù)作為接收到的1字節(jié)的數(shù)據(jù),將10個(gè)etu內(nèi)傳輸?shù)牡?0個(gè)比特位數(shù)據(jù)作為校驗(yàn)位,根據(jù)所述校驗(yàn)位驗(yàn)證所述接收到的1字節(jié)的數(shù)據(jù)是否正確。例如,判斷第2至第10個(gè)etu中傳輸?shù)谋忍匚粸椤?”的個(gè)數(shù)是否為偶數(shù)個(gè),是則判斷結(jié)果為當(dāng)前正在接收的1字節(jié)的數(shù)據(jù)正確,否則判斷結(jié)果為當(dāng)前正在接收的1字節(jié)的數(shù)據(jù)錯(cuò)誤。
步驟4:卡片判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否是命令頭的第一個(gè)字節(jié),是則執(zhí)行步驟5,否則執(zhí)行步驟13;
步驟5:卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,向終端返回預(yù)設(shè)字節(jié)數(shù)據(jù),返回執(zhí)行步驟2;
具體的,卡片在第11、12個(gè)etu保持I/O電平為低電平,在下一個(gè)etu保持I/O電平為高電平,并以etu為單位向終端返回預(yù)設(shè)字節(jié)數(shù)據(jù)。
當(dāng)終端接收到卡片返回的預(yù)設(shè)字節(jié)數(shù)據(jù)時(shí),終端根據(jù)預(yù)設(shè)字節(jié)數(shù)據(jù)可以確定當(dāng)前接收數(shù)據(jù)出錯(cuò)的特定卡片類型,方便終端確定卡片是否被替換,從而防止欺騙交易的發(fā)生。
進(jìn)一步的,本步驟還可以是,卡片在第11、12個(gè)etu保持I/O電平為低電平,根據(jù)接收到的10個(gè)etu中的第2至第9個(gè)etu中傳輸?shù)谋忍匚唤M成一個(gè)字節(jié)數(shù)據(jù),將得到的一個(gè)字節(jié)數(shù)據(jù)作為預(yù)設(shè)字節(jié)數(shù)據(jù)返回給終端。
例如,向終端返回的預(yù)設(shè)字節(jié)數(shù)據(jù)為01。
優(yōu)選的,上述步驟3、步驟4、步驟5還可以替換為如下內(nèi)容:卡片判斷當(dāng)前正在接收的1字節(jié)的數(shù)據(jù)是否正確,是則執(zhí)行步驟6,否則執(zhí)行步驟13。
步驟6:卡片將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平;
具體的,將10個(gè)etu中第2至第9個(gè)etu中傳輸?shù)谋忍匚蛔鳛榻邮盏降?字節(jié)的數(shù)據(jù),將所述1字節(jié)的數(shù)據(jù)記錄為命令頭的一個(gè)字節(jié)。
步驟7:卡片判斷是否接收完長(zhǎng)度為5個(gè)字節(jié)的命令頭,是則執(zhí)行步驟8,否則返回執(zhí)行步驟2;
具體的,卡片判斷當(dāng)前接收到的命令頭的字節(jié)的個(gè)數(shù)是否達(dá)到5個(gè),是則表示接收完長(zhǎng)度為5個(gè)字節(jié)的命令頭,執(zhí)行步驟8,否則返回執(zhí)行步驟2。
步驟8:卡片根據(jù)命令頭的第二個(gè)字節(jié)確定命令類型;
例如,若接收到的5個(gè)字節(jié)的命令頭為00A4 00 00 02,根據(jù)第二個(gè)字節(jié)A4確定的命令類型為選擇文件命令;
若接收到的5個(gè)字節(jié)的命令頭為00B0 00 00 10,根據(jù)第二個(gè)字節(jié)B0確定的命令類型為讀文件命令;
若接收到的5個(gè)字節(jié)的命令頭為00D6 00 00 01,根據(jù)第二個(gè)字節(jié)D6確定的命令類型為更新文件命令。
步驟9:卡片依據(jù)所述命令類型判斷是否要接收命令數(shù)據(jù),是則執(zhí)行步驟10,否則執(zhí)行步驟16;
例如,若命令類型為選擇文件命令或更新文件命令則需要接收命令數(shù)據(jù),若命令類型為讀文件命令則不需要接收命令數(shù)據(jù)。
步驟10:卡片向終端返回接收到的命令頭的第二個(gè)字節(jié),根據(jù)命令頭的第五個(gè)字節(jié)確定命令數(shù)據(jù)的長(zhǎng)度;
例如,接收到的命令頭為00A4 00 00 02,則卡片向終端返回A4,根據(jù)命令頭確定的命令數(shù)據(jù)的長(zhǎng)度為2個(gè)字節(jié)。
步驟11:卡片檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令數(shù)據(jù);
當(dāng)卡片在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),執(zhí)行步驟12;
步驟12:卡片判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則執(zhí)行步驟14,否則執(zhí)行步驟13;
優(yōu)選的,卡片判斷10個(gè)etu中的第2至第10個(gè)etu中比特位為“1”的個(gè)數(shù)是否為偶數(shù)個(gè),是則判斷結(jié)果為當(dāng)前正在接收的1字節(jié)數(shù)據(jù)正確,否則判斷結(jié)果為當(dāng)前正在接收的1字節(jié)的數(shù)據(jù)錯(cuò)誤。
步驟13:卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,然后返回執(zhí)行步驟2;
步驟14:卡片將接收到的1字節(jié)的數(shù)據(jù)記錄為命令數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平;
具體的,卡片將10個(gè)etu中的第2至第9個(gè)etu傳輸?shù)谋忍匚挥涗洖槊顢?shù)據(jù)的1個(gè)字節(jié)。
例如,10個(gè)etu中第2至第9個(gè)etu傳輸?shù)谋忍匚粸?0000001,則記錄得到的命令數(shù)據(jù)的1個(gè)字節(jié)為01。
步驟15:卡片根據(jù)所述命令數(shù)據(jù)的長(zhǎng)度判斷命令數(shù)據(jù)是否全部接收完成,是則執(zhí)行步驟16,否則返回執(zhí)行步驟11;
具體的,卡片判斷當(dāng)前接收到的命令數(shù)據(jù)的字節(jié)個(gè)數(shù)是否達(dá)到所述命令數(shù)據(jù)的長(zhǎng)度,是則表示全部接收完成,執(zhí)行步驟16,否則返回執(zhí)行步驟11。
步驟16:卡片根據(jù)命令類型執(zhí)行相應(yīng)處理并返回響應(yīng)數(shù)據(jù)給終端,然后返回步驟2。
本實(shí)施例中,卡片既可以接收標(biāo)準(zhǔn)指令并根據(jù)標(biāo)準(zhǔn)指令的類型執(zhí)行相應(yīng)處理并返回響應(yīng)數(shù)據(jù)給終端,也可以接收非標(biāo)準(zhǔn)指令并執(zhí)行相應(yīng)處理以及返回響應(yīng)數(shù)據(jù)給終端,從而增強(qiáng)了卡片的兼容性。例如,卡片可以接收的標(biāo)準(zhǔn)指令包括讀文件命令、更新文件命令等,卡片可以接收的非標(biāo)準(zhǔn)指令可以包括創(chuàng)建文件命令。
實(shí)施例2
本實(shí)施例中,針對(duì)卡片接收到的命令以及所執(zhí)行的操作的不同,圖1中所示步驟8至步驟16可細(xì)化為圖2所示內(nèi)容,具體包括卡片執(zhí)行以下步驟:
步驟a1:根據(jù)命令頭的第二個(gè)字節(jié)確定命令類型;
當(dāng)命令類型是選擇文件命令或更新文件命令時(shí),執(zhí)行步驟a2;當(dāng)命令類型是讀文件命令時(shí),執(zhí)行步驟a9;
具體的,判斷命令頭的第二個(gè)字節(jié),若是第一預(yù)設(shè)值則確定命令類型是選擇文件命令,若是第二預(yù)設(shè)值則確定命令類型是讀文件命令,若是第三預(yù)設(shè)值則確定命令類型是更新文件命令。
進(jìn)一步的,本步驟還可以包括,當(dāng)所述命令頭的第二字節(jié)若是第五預(yù)設(shè)值則確定命令類型是創(chuàng)建文件命令,執(zhí)行步驟a2。若是第四預(yù)設(shè)值則確定命令類型是其他,其中第四預(yù)設(shè)值滿足如下要求:高位起的第2、第3個(gè)比特位為1或者高位起的第1、第2個(gè)比特位為1。相應(yīng)的,若所述命令類型是其他則向終端返回接收到的所述命令頭的第二個(gè)字節(jié),等待終端復(fù)位。當(dāng)?shù)却K端復(fù)位時(shí),卡片與終端之間通信中斷。
例如,第一預(yù)設(shè)值為A4,第二預(yù)設(shè)值為B0,第三預(yù)設(shè)值為D6,第四預(yù)設(shè)值為63或93,第五預(yù)設(shè)值為E0。
步驟a2:向終端返回接收到的命令頭的第二個(gè)字節(jié),根據(jù)命令頭的第五個(gè)字節(jié)確定命令數(shù)據(jù)的長(zhǎng)度;
例如,接收到的命令頭為00D6 00 00 01,向終端返回D6,根據(jù)命令頭確定的命令數(shù)據(jù)的長(zhǎng)度為1個(gè)字節(jié)。
步驟a3:當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令數(shù)據(jù);
當(dāng)卡片在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),執(zhí)行步驟a4;
例如,10個(gè)etu內(nèi)傳輸?shù)?0個(gè)比特位數(shù)據(jù)為0000000000,接收到的1字節(jié)的數(shù)據(jù)為0x00。
步驟a4:判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則執(zhí)行步驟a6,否則執(zhí)行步驟a5;
優(yōu)選的,卡片判斷10個(gè)etu內(nèi)的第2至第10個(gè)etu中比特位為“1”的個(gè)數(shù)是否為偶數(shù)個(gè),是則判斷結(jié)果為當(dāng)前接收到的1字節(jié)的數(shù)據(jù)正確,否則判斷結(jié)果為當(dāng)前接收到的1字節(jié)的數(shù)據(jù)錯(cuò)誤。
例如,第2至第10個(gè)etu中比特位為“1”的個(gè)數(shù)為0,則本步驟判斷結(jié)果為當(dāng)前正在接收的1字節(jié)的數(shù)據(jù)正確。
步驟a5:在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,然后執(zhí)行圖1所示步驟2;
步驟a6:將接收到的1字節(jié)的數(shù)據(jù)記錄為命令數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平;
具體的,卡片根據(jù)接收到的10個(gè)etu中的第2至第9個(gè)etu中傳輸?shù)谋忍匚坏玫矫顢?shù)據(jù)的一個(gè)字節(jié)。
例如,接收到的10個(gè)etu中的第2至第9個(gè)etu中傳輸?shù)谋忍匚粸?00000000,則本步驟得到命令數(shù)據(jù)的一個(gè)字節(jié)為00。
步驟a7:根據(jù)所述命令數(shù)據(jù)的長(zhǎng)度判斷命令數(shù)據(jù)是否全部接收完成,是則執(zhí)行步驟a8,否則返回執(zhí)行步驟a3;
例如,命令數(shù)據(jù)的長(zhǎng)度為1個(gè)字節(jié),判斷當(dāng)前接收到的命令數(shù)據(jù)的字節(jié)個(gè)數(shù)是否為1,是則全部接收完成,否則未全部接收完成。
步驟a8:當(dāng)所述命令類型是選擇文件命令時(shí),根據(jù)接收到的命令數(shù)據(jù)確定文件ID,根據(jù)文件ID確定當(dāng)前文件,根據(jù)當(dāng)前文件的文件控制信息(FCI)和表示操作成功的狀態(tài)字組成響應(yīng)數(shù)據(jù)返回給終端;當(dāng)所述命令類型是更新文件命令時(shí),根據(jù)接收到的命令數(shù)據(jù)更新當(dāng)前文件的文件內(nèi)容,將表示操作成功的狀態(tài)字作為響應(yīng)數(shù)據(jù)返回給終端;然后執(zhí)行圖1所示步驟2;
例如,接收到的選擇文件命令為00A4 00 00 02 00 01,根據(jù)命令數(shù)據(jù)00 01得到文件ID,根據(jù)文件ID確定當(dāng)前文件,當(dāng)前文件的FCI為6F17841001020304050607080910111213141516A503880101,表示操作成功的狀態(tài)字為9000,則返回給終端的響應(yīng)數(shù)據(jù)為6F17841001020304050607080910111213141516A503880101 90 00。
所述根據(jù)接收到的命令數(shù)據(jù)更新當(dāng)前文件的文件內(nèi)容具體為,根據(jù)所述更新文件命令的命令頭的第3、4字節(jié)確定偏移地址,用所述命令數(shù)據(jù)更新所述文件內(nèi)容中與所述偏移地址所對(duì)應(yīng)的數(shù)據(jù)。
例如,接收到的更新文件命令為00D6 00 00 01 00,當(dāng)前文件的文件內(nèi)容為01020304050607080910111213141516,根據(jù)命令頭的第3、4字節(jié)確定的偏移地址為0x0000即文件內(nèi)容的起始地址,則更新后的文件內(nèi)容為00020304050607080910111213141516,返回給終端的響應(yīng)數(shù)據(jù)為90 00。
進(jìn)一步的,本步驟還可以包括,當(dāng)所述命令類型是創(chuàng)建文件命令時(shí),根據(jù)接收到的命令數(shù)據(jù)中包含的文件ID創(chuàng)建文件,并根據(jù)表示操作成功的狀態(tài)字組成響應(yīng)數(shù)據(jù)返回給終端。例如,接收到的創(chuàng)建文件命令為80E0000011001500000E0000000000000000FFFFFFFF,則創(chuàng)建文件ID為0015對(duì)應(yīng)的文件的文件內(nèi)容為00000E0000000000000000FFFFFFFF,返回給終端的響應(yīng)數(shù)據(jù)為90 00。
步驟a9:從當(dāng)前文件中讀取文件內(nèi)容,根據(jù)讀取的文件內(nèi)容和表示操作成功的狀態(tài)字組成響應(yīng)數(shù)據(jù)返回給終端,然后執(zhí)行圖1所示步驟2。
具體的,根據(jù)所述讀文件命令的第3、4字節(jié)確定偏移地址,根據(jù)所述讀文件命令的第5字節(jié)確定要讀取的文件內(nèi)容的長(zhǎng)度,以所述偏移地址為起始地址,從當(dāng)前文件的文件內(nèi)容中讀取與所述長(zhǎng)度所對(duì)應(yīng)的數(shù)據(jù)作為讀取的文件內(nèi)容。
優(yōu)選的,所述當(dāng)前文件的文件內(nèi)容為16個(gè)字節(jié)的數(shù)據(jù)。
例如,接收到的讀文件命令為00B0 00 00 10,當(dāng)前文件的文件內(nèi)容為01020304050607080910111213141516,根據(jù)讀文件命令的第3、4字節(jié)確定的偏移地址為0x0000即文件內(nèi)容的起始地址,根據(jù)第5字節(jié)確定讀取的文件的內(nèi)容的長(zhǎng)度為16,則返回給終端的響應(yīng)數(shù)據(jù)為01020304050607080910111213141516 9000。
實(shí)施例3
本實(shí)施例提供了一種智能卡,本實(shí)施例提供的智能卡適用于實(shí)施例1和2提供的工作方法,如圖3所示,本實(shí)施例中所述智能卡(簡(jiǎn)稱卡片)包括第一響應(yīng)模塊101、第一收發(fā)模塊102、第一判斷模塊103、第二判斷模塊104、第二收發(fā)模塊105、第三判斷模塊106和第二響應(yīng)模塊107;其中第一收發(fā)模塊102分別與第一響應(yīng)模塊101、第一判斷模塊103和第二判斷模塊104相連,第一判斷模塊103還與第二響應(yīng)模塊107相連,第二判斷模塊104分別與第一收發(fā)模塊102、第一判斷模塊103、第二收發(fā)模塊105、第三判斷模塊106和第二響應(yīng)模塊107相連,第二收發(fā)模塊105還與第三判斷模塊103相連,第三判斷模塊106還與第二響應(yīng)模塊107相連,上述各個(gè)組成模塊的的功能具體如下:
所述第一響應(yīng)模塊101,用于卡片上電后向終端返回卡片應(yīng)答,并觸發(fā)所述第一收發(fā)模塊102;
所述第一收發(fā)模塊102,用于收到所述第一響應(yīng)模塊101或第一判斷模塊103的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令頭數(shù)據(jù),在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第一判斷模塊103;否則卡片在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第一判斷模塊103;
所述第一判斷模塊103,用于收到所述第一收發(fā)模塊102的觸發(fā)時(shí),判斷所述第一收發(fā)模塊102是否接收完成所述命令頭數(shù)據(jù),是則根據(jù)所述第一收發(fā)模塊102接收到的命令頭數(shù)據(jù)確定命令類型,并觸發(fā)所述第二判斷模塊104,否則再次觸發(fā)所述第一收發(fā)模塊102;
所述第二判斷模塊104,用于根據(jù)所述第一判斷模塊103確定的所述命令類型判斷是否要接收命令數(shù)據(jù),是則根據(jù)所述第一收發(fā)模塊102接收到的命令頭數(shù)據(jù)確定要接收的命令數(shù)據(jù)長(zhǎng)度并觸發(fā)第二收發(fā)模塊105,否則觸發(fā)第二響應(yīng)模塊107;
所述第二收發(fā)模塊105,用于收到所述第二判斷模塊104或第三判斷模塊106的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)卡片檢測(cè)到I/O電平為低電平時(shí),開始接收終端發(fā)來的命令數(shù)據(jù),在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),判斷當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令數(shù)據(jù)的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第三判斷模塊106;否則在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第三判斷模塊106;
所述第三判斷模塊106,用于收到所述第二收發(fā)模塊105的觸發(fā)時(shí),根據(jù)所述第二判斷模塊104確定的所述命令數(shù)據(jù)長(zhǎng)度判斷所述第二收發(fā)模塊105是否接收完成所述命令數(shù)據(jù),是則觸發(fā)第二響應(yīng)模塊107,否則再次觸發(fā)第二收發(fā)模塊105;
所述第二響應(yīng)模塊107,用于根據(jù)所述第一判斷模塊103確定的所述命令類型執(zhí)行相應(yīng)處理并返回響應(yīng)數(shù)據(jù)給所述終端。
具體的,本實(shí)施例中所述第一收發(fā)模塊102包括第一驗(yàn)證單元;
所述第一驗(yàn)證單元,具體用于將10個(gè)etu內(nèi)傳輸?shù)牡?至第9個(gè)比特位數(shù)據(jù)作為接收到的1字節(jié)的數(shù)據(jù),將10個(gè)etu內(nèi)傳輸?shù)牡?0個(gè)比特位數(shù)據(jù)作為校驗(yàn)位,根據(jù)所述校驗(yàn)位驗(yàn)證所述第一收發(fā)模塊102當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確;
本實(shí)施例中所述第二收發(fā)模塊105包括第二驗(yàn)證單元;
所述第二驗(yàn)證單元,具體用于用于將10個(gè)etu內(nèi)傳輸?shù)牡?至第9個(gè)比特位數(shù)據(jù)作為接收到的1字節(jié)的數(shù)據(jù),將10個(gè)etu內(nèi)傳輸?shù)牡?0個(gè)比特位數(shù)據(jù)作為校驗(yàn)位,根據(jù)所述校驗(yàn)位驗(yàn)證所述第二收發(fā)模塊105當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確。
本實(shí)施例中所述第一判斷模塊103,具體用于判斷所述第一收發(fā)模塊102當(dāng)前接收到的所述命令頭數(shù)據(jù)的長(zhǎng)度是否達(dá)到預(yù)設(shè)長(zhǎng)度,是則根據(jù)所述命令頭數(shù)據(jù)的第二個(gè)字節(jié)確定命令類型,并觸發(fā)所述第二判斷模塊104,否則再次觸發(fā)所述第一收發(fā)模塊102。
本實(shí)施例中所述第二判斷模塊104,具體用于判斷所述第一判斷模塊103確定的所述命令類型是否是預(yù)設(shè)類型命令,是則根據(jù)所述第一收發(fā)模塊102接收到的命令頭數(shù)據(jù)的第五個(gè)字節(jié)確定要接收的命令數(shù)據(jù)長(zhǎng)度并觸發(fā)第二收發(fā)模塊105,否則觸發(fā)第二響應(yīng)模塊107。所述預(yù)設(shè)類型命令包括選擇文件命令、更新文件命令和創(chuàng)建文件命令。
進(jìn)一步的,本實(shí)施例中所述第一收發(fā)模塊102還可以是具體包括檢測(cè)單元、接收單元、第一判斷單元和第二判斷單元;
其中,所述檢測(cè)單元,用于收到所述第一響應(yīng)模塊101或第一判斷模塊103的觸發(fā)時(shí),檢測(cè)I/O電平,當(dāng)檢測(cè)到I/O電平為低電平時(shí),觸發(fā)接收單元;
所述接收單元,用于接收終端發(fā)來的命令頭數(shù)據(jù),每當(dāng)在10個(gè)etu內(nèi)接收到1字節(jié)的數(shù)據(jù)時(shí),觸發(fā)第一判斷單元;
所述第一判斷單元,用于判斷所述接收單元當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否正確,是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭的1個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,觸發(fā)第一判斷模塊103;否則觸發(fā)第二判斷單元;
所述第二判斷單元,用于判斷所述接收單元當(dāng)前接收到的1字節(jié)的數(shù)據(jù)是否為所述命令頭數(shù)據(jù)的第一個(gè)字節(jié),是則將接收到的1字節(jié)的數(shù)據(jù)記錄為命令頭的第一個(gè)字節(jié),在第11、12個(gè)etu保持I/O電平為高電平,并向終端返回預(yù)設(shè)字節(jié)數(shù)據(jù),然后觸發(fā)第一判斷模塊103;否則在第11、12個(gè)etu保持I/O電平為低電平之后恢復(fù)I/O電平為高電平,觸發(fā)第一判斷模塊103。所述預(yù)設(shè)字節(jié)數(shù)據(jù)具體為所述命令頭數(shù)據(jù)的第一個(gè)字節(jié)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。