CPU卡的接口特性、傳輸協(xié)議與讀寫(xiě)程序設(shè)計(jì)
IC卡的概念是20世紀(jì)70年代提出的。法國(guó)BULL公司首創(chuàng)IC卡產(chǎn)品,并將這項(xiàng)技術(shù)應(yīng)用到金融、交通、醫(yī)療、身份證明等多個(gè)方面。IC卡的核心是集成電路芯片,一般為3μm以下的半導(dǎo)體技術(shù)制造。IC卡具有寫(xiě)入數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的能力。IC可存儲(chǔ)其中的內(nèi)容,根據(jù)需要可以有條件地供外部讀取,或供內(nèi)部信息處理或校驗(yàn)用。
本文引用地址:http://m.butianyuan.cn/article/187077.htm根據(jù)各種集成電路的不同,IC卡可以分為以下三類(lèi):存儲(chǔ)器卡、邏輯加密卡與CPU卡。其中,存儲(chǔ)器卡僅有數(shù)據(jù)存儲(chǔ)能力,沒(méi)有安全措施;邏輯加密卡僅有幾個(gè)字節(jié)的密碼,卡中有一個(gè)錯(cuò)誤計(jì)數(shù)器,如果指定次數(shù)驗(yàn)證密碼失敗,則卡中數(shù)據(jù)被自動(dòng)鎖死,該卡數(shù)據(jù)不能再更改;CPU卡是這三類(lèi)IC卡中最高級(jí)的卡,一般有ROM、RAM和EEPROM三種存儲(chǔ)器。ROM中存放的是程序,程序是為IC卡的CPU專(zhuān)門(mén)設(shè)計(jì)的,用來(lái)解釋讀寫(xiě)器終端送來(lái)的命令。IC卡應(yīng)用系統(tǒng)根據(jù)應(yīng)用需要由終端送一系列命令到CPU卡,通過(guò)改變命令的內(nèi)容和命令的順序就可以滿(mǎn)足不同的需要,因此有較高的靈活性;同時(shí),因?yàn)镃PU有計(jì)算功能,存儲(chǔ)容量又大,可以進(jìn)行比較復(fù)雜的加密/解密運(yùn)算,極大提高了安全性。EEPROM主要用來(lái)存放一些應(yīng)用數(shù)據(jù),其容量比邏輯加密卡大,可實(shí)現(xiàn)一卡多用,是目前最安全的卡類(lèi)型。因此,CPU卡是目前IC卡的重要發(fā)展方向之一。
1 CPU卡的接口特性
1.1 觸點(diǎn)定義
觸點(diǎn)的定義遵循ISO7816-2的規(guī)定,如圖1所示。符號(hào)說(shuō)明如表1所列。
圖1 CPU卡的觸點(diǎn)
表1 符號(hào)說(shuō)明
1.2 字符幀
數(shù)據(jù)在I/O上以圖2所示的字符幀方式傳輸。
圖2 字符幀傳輸方式
每個(gè)位寬是1個(gè)etu,etu = 372/f。在此處,f = 3.57 MHz。
起始位由接收端通過(guò)對(duì)I/O周期采樣獲得,采樣周期應(yīng)小于0.2 etu。2個(gè)連續(xù)字符起始位上升沿之間的間隔時(shí)間等于(10±0.2)etu加上1個(gè)保護(hù)時(shí)間(最少2個(gè)etu)。在保護(hù)時(shí)間內(nèi),卡與終端都應(yīng)處于接收模式(I/O為高電平狀態(tài))。如果卡或終端作為接收方檢測(cè)出奇偶錯(cuò)誤,則I/O被置為低電平,以向發(fā)送方表明出現(xiàn)錯(cuò)誤。
1.3 卡操作
卡操作的步驟如下:
?、?將卡插入終端接口設(shè)備,使兩者的觸點(diǎn)相接并激活觸點(diǎn);
?、?將卡復(fù)位,建立卡與終端間的通信;
?、?執(zhí)行操作;
④ 釋放觸點(diǎn),并從接口設(shè)備取出卡片。
以下是除第③步(執(zhí)行操作)以外,各步的時(shí)序要求。
?。?) 觸點(diǎn)激活
時(shí)序如圖3所示。
圖3 觸點(diǎn)激活時(shí)序
(2) 卡復(fù)位
卡利用低電平復(fù)位來(lái)完成異步復(fù)位應(yīng)答,隨著觸點(diǎn)的激活,終端將進(jìn)行一個(gè)冷復(fù)位并從卡獲得復(fù)位應(yīng)答。冷復(fù)位時(shí)序如圖4所示。
圖4 冷復(fù)位時(shí)序
冷復(fù)位過(guò)程之后,如果收到的復(fù)位應(yīng)答信號(hào)不滿(mǎn)足標(biāo)準(zhǔn)的規(guī)定,終端將啟動(dòng)一個(gè)熱復(fù)位并從卡獲得復(fù)位響應(yīng)。熱復(fù)位時(shí)序如圖5所示。
圖5 熱復(fù)位時(shí)序
在實(shí)際程序設(shè)計(jì)時(shí),由Reset子程序?qū)崿F(xiàn)觸點(diǎn)激活和卡復(fù)位。
?。?) 觸點(diǎn)釋放時(shí)序
觸點(diǎn)釋放時(shí)序過(guò)程如圖6所示。
圖6 觸點(diǎn)釋放時(shí)序
2 傳輸協(xié)議與卡命令處理程序
ISO7816-4及中國(guó)金融集成電路(IC)卡規(guī)范所規(guī)定的異步半雙工傳輸協(xié)議,是關(guān)于終端為實(shí)現(xiàn)傳輸控制和特殊控制而發(fā)出的命令的結(jié)構(gòu)及其處理過(guò)程,包括了兩種協(xié)議:字符傳輸協(xié)議(T = 0)和塊傳輸協(xié)議(T = 1)。本文著重討論字符傳輸協(xié)議(T = 0)協(xié)議,它是IC卡推薦使用的通信協(xié)議。
2.1 命令
命令包含1個(gè)連續(xù)4字節(jié)的命令頭,用CLA、INS、P1和P2以及1個(gè)可變長(zhǎng)度的條件體來(lái)表示。
命令頭定義如下:
◇ CLA:指令類(lèi)別,除“FF”外的任何值;
◇ INS:在指令類(lèi)別中的指令碼,當(dāng)最低位是“0”,并且高位半字節(jié)既不是“6”也不是“9”時(shí),INS才有效;
◇ P1、P2完成INS的參數(shù)字節(jié)。
條件體定義如下:
◇ Lc(發(fā)送數(shù)據(jù)長(zhǎng)度)占1個(gè)字節(jié),在命令中定義為發(fā)送數(shù)據(jù)的字節(jié)數(shù),取值范圍是1~255。
◇ Data為將要發(fā)送的命令數(shù)據(jù)域,字節(jié)數(shù)由Lc定義。
◇ Le (接收數(shù)據(jù)長(zhǎng)度)占1個(gè)字節(jié),指出命令響應(yīng)中預(yù)期的數(shù)據(jù)最大字節(jié)數(shù)。Le的取值范圍是0~255。如果Le=0,預(yù)期數(shù)據(jù)字節(jié)的最大長(zhǎng)度是256。
可能的命令結(jié)構(gòu)的4種情況定義如表2所列。
表2
命令全部由終端應(yīng)用層(TAL)初始化。它通過(guò)終端傳輸層(TTL)向卡發(fā)送1個(gè)由5個(gè)字節(jié)組成的命令頭,并等待一個(gè)過(guò)程字節(jié)。
2.2 過(guò)程字節(jié)
卡收到命令后,緊接著返回一個(gè)過(guò)程字節(jié)給TTL,指明下一步該作什么,如表3所列。
表3
在(1)、(2)情況中,TTL完成動(dòng)作后將等待另一個(gè)過(guò)程字節(jié)。在(3)情況中,第二個(gè)過(guò)程字節(jié)或狀態(tài)碼(SW2)被收到后,TTL將做以下事情:
◇ 如果過(guò)程字節(jié)為“61”,TTL將發(fā)送一個(gè)最大長(zhǎng)度(P3)為“XX”的得到響應(yīng)命令(GET RESPONSE)給卡,“XX”為SW2的值。GET RESPONSE命令僅適用于T = 0協(xié)議。命令報(bào)文的結(jié)構(gòu)如表4所列。
表4
◇ 如果過(guò)程字節(jié)為“6C”,TTL將立即重發(fā)前一個(gè)命令的命令頭給卡,它的P3值用“XX”代替。“XX”是SW2的值。
◇ 如果過(guò)程字節(jié)是“6X”(除“60”、“61”及“6C”之外)或“9X”,與前兩者TTL自己處理不同,TTL將通過(guò)命令響應(yīng)返回狀態(tài)碼給上一層--終端應(yīng)用層(TAL),由TAL處理,并等待下一個(gè)命令。
2.3 卡命令處理程序流程圖
圖 7 是卡命令處理程序,即終端與卡的信息交互過(guò)程的流程圖,具體程序見(jiàn)本刊網(wǎng)站。
圖7 卡命令處理程序流程圖
以下是引腳說(shuō)明。
ECPU:決定卡的CLK觸點(diǎn)上是否有CLK信號(hào)的引腳;
ICVCC:終端與卡的Vcc觸點(diǎn)相接觸的引腳;
ICIO: 終端與卡的I/O觸點(diǎn)相接觸的引腳;
ICCLK:終端與卡的CLK觸點(diǎn)相接觸的引腳;
ICRST:終端與卡的RST觸點(diǎn)相接觸的引腳。
以下是程序中函數(shù)介紹。
◇ void isr_timer1(void) interrupt 3:定時(shí)器1中斷子程序,用于按位發(fā)送和接收數(shù)據(jù)字節(jié);
◇ void Snd(void): 發(fā)送數(shù)據(jù)子程序,由定時(shí)器1實(shí)現(xiàn);
◇ void Rcv(BYTE bytenr,BYTE *Buffer):接收數(shù)據(jù)子程序(參數(shù)含義分別是:接收數(shù)據(jù)字節(jié)數(shù)、接收數(shù)據(jù)的存放處),由定時(shí)器1實(shí)現(xiàn);
◇ 函數(shù)1 void Reset(BYTE *len, BYTE *resp):復(fù)位子程序(參數(shù)含義分別是:返回復(fù)位響應(yīng)數(shù)據(jù)的長(zhǎng)度、復(fù)位響應(yīng)數(shù)據(jù));
◇ 函數(shù)2 void Power_off(void):觸點(diǎn)釋放子程序;
◇ 函數(shù)3 WORD CPUC_Cmd(BYTE len,BYTE* comm, BYTE *lenr, BYTE* resp):CPU卡命令子程序(參數(shù)含義分別是:發(fā)送命令長(zhǎng)度、發(fā)送命令、返回字節(jié)數(shù)、返回?cái)?shù)據(jù)),函數(shù)返回狀態(tài)字節(jié)SW1SW2。
參考文獻(xiàn)
1 全國(guó)標(biāo)準(zhǔn)化技術(shù)委員。 中國(guó)金融集成電路(IC)卡規(guī)范(V1.0)。 北京:中國(guó)金融出版社
2 中國(guó)華大集成電路設(shè)計(jì)中心。 CIU9102智能卡接口特性和通信規(guī)程
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論