IC卡接口原理管理論文
時(shí)間:2022-06-26 05:21:00
導(dǎo)語(yǔ):IC卡接口原理管理論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:詳細(xì)介紹接觸式ic卡讀寫(xiě)原理;結(jié)合一個(gè)基于不同讀寫(xiě)芯片、可以同時(shí)操作6片接觸式IC卡的系統(tǒng),對(duì)包括并行通信、半雙工串行通信和I2C通信的幾種不同接口形式的IC卡讀寫(xiě)芯片進(jìn)行了詳細(xì)的對(duì)比分析。
關(guān)鍵詞:ISO/IEC7816接口技術(shù)接觸式IC卡并行通信半雙工串行通信I2C總線通信
引言
I(yíng)C卡(IntegratedCircuitCard,集成電路卡)是繼磁卡之后出現(xiàn)的又一種新型信息工具。IC卡在有些國(guó)家和地區(qū)也稱智能卡(smartcard)、智慧卡(intelligentcard)、微電路卡(microcircuitcard)或微芯片卡等。它是將一個(gè)微電子芯片嵌入符合ISO7816標(biāo)準(zhǔn)的卡基中,做成卡片形式;已經(jīng)十分廣泛地應(yīng)用于包括金融、交通、社保等很多領(lǐng)域。
IC卡讀寫(xiě)器是IC卡與應(yīng)用系統(tǒng)間的橋梁,在ISO國(guó)際標(biāo)準(zhǔn)中稱之為接口設(shè)備IFD(InterfaceDevice)。IFD內(nèi)的CPU通過(guò)一個(gè)接口電路與IC卡相連并進(jìn)行通信。IC卡接口電路是IC卡讀寫(xiě)器中至關(guān)重要的部分,根據(jù)實(shí)際應(yīng)用系統(tǒng)的不同,可選擇并行通信、半雙工串行通信和I2C通信等不同的IC卡讀寫(xiě)芯片。
1接觸式IC卡接口技術(shù)原理
IC卡讀寫(xiě)器要能讀寫(xiě)符合ISO7816標(biāo)準(zhǔn)的IC卡。IC卡接口電路作為IC卡與IFD內(nèi)的CPU進(jìn)行通信的唯一通道,為保證通信和數(shù)據(jù)交換的安全與可靠,其產(chǎn)生的電信號(hào)必須滿足下面的特定要求。
1.1完成IC卡插入與退出的識(shí)別操作
IC卡接口電路對(duì)IC卡插入與退出的識(shí)別,即卡的激活和釋放,有很嚴(yán)格的時(shí)序要求。如果不能滿足相應(yīng)的要求,IC卡就不能正常進(jìn)行操作;嚴(yán)重時(shí)將損壞IC卡或IC卡讀寫(xiě)器。
(1)激活過(guò)程
為啟動(dòng)對(duì)卡的操作,接口電路應(yīng)按圖1所示順序激活電路:
◇RST處于L狀態(tài);
◇根據(jù)所選擇卡的類型,對(duì)VCC加電A類或B類,正常操作條件下VCC的電特性見(jiàn)表1;
表1正常操作條件VCC的電特性
符號(hào)最小值最大值條件
Vvcc/V4.5
2.75.5
3.3A類
B類
Icc/mA60500.5A類,在最大允許頻率
B類,在最大允許頻率時(shí)鐘停止
◇VPP上升為空閑狀態(tài);
◇接口電路的I/O應(yīng)置于接收狀態(tài);
◇向IC卡的CLK提供時(shí)鐘信號(hào)(A類卡1~5MHz,B類卡1~4MHz)。
圖3
如圖1所示,在t’a時(shí)間對(duì)IC卡的CLK加時(shí)鐘信號(hào)。I/O線路應(yīng)在時(shí)鐘信號(hào)加于CLK的200個(gè)時(shí)鐘周期(ta)內(nèi)被置于高阻狀態(tài)Z(ta時(shí)間在t’a之后)。時(shí)鐘加于CLK后,保持RST為狀態(tài)L至少400周期(tb)使卡復(fù)位(tb在t’a之后)。在時(shí)間t’b,RST被置于狀態(tài)H。I/O上的應(yīng)答應(yīng)在RST上信號(hào)上升沿之后的400~40000個(gè)時(shí)鐘周期(tc)內(nèi)開(kāi)始(tc在t’b之后)。
在RST處于狀態(tài)H的情況下,如果應(yīng)答信號(hào)在40000個(gè)時(shí)鐘周期內(nèi)仍未開(kāi)始,RST上的信號(hào)將返回到狀態(tài)L,且IC卡接口電路按照?qǐng)D2所示對(duì)IC卡產(chǎn)生釋放。
(2)釋放過(guò)程
當(dāng)信息交換結(jié)束或失敗時(shí)(例如,無(wú)卡響應(yīng)或卡被移出),接口電路應(yīng)按圖2所示時(shí)序釋放電路:
◇RST應(yīng)置為狀態(tài)L;
◇CLK應(yīng)置為狀態(tài)L(除非時(shí)鐘已在狀態(tài)L上停止);
◇VPP應(yīng)釋放(如果它已被激活);
◇I/O應(yīng)置為狀態(tài)A(在td時(shí)間內(nèi)沒(méi)有具體定義);
◇VCC應(yīng)釋放。
圖4
1.2通過(guò)觸點(diǎn)向卡提供穩(wěn)定的電源
IC卡接口電路應(yīng)能在表1規(guī)定的電壓范圍內(nèi),向IC卡提供相應(yīng)穩(wěn)定的電流。
1.3通過(guò)觸點(diǎn)向卡提供穩(wěn)定的時(shí)鐘
IC卡接口電路向卡提供時(shí)鐘信號(hào)。時(shí)鐘信號(hào)的實(shí)際頻率范圍在復(fù)位應(yīng)答期間,應(yīng)在以下范圍內(nèi):A類卡,時(shí)鐘應(yīng)在1~5MHz;B類卡,時(shí)鐘應(yīng)在1~4MHz。
復(fù)位后,由收到的ATR(復(fù)位應(yīng)答)信號(hào)中的F(時(shí)鐘頻率變換因子)和D(比特率調(diào)整因子)來(lái)確定。
時(shí)鐘信號(hào)的工作周期應(yīng)為穩(wěn)定操作期間周期的40%~60%。當(dāng)頻率從一個(gè)值轉(zhuǎn)換到另一個(gè)值時(shí),應(yīng)注意保證沒(méi)有比短周期的40%更短的脈沖。
2幾種實(shí)現(xiàn)方式的對(duì)比與分析
IFD內(nèi)的IC卡讀寫(xiě)芯片,按其與IFD內(nèi)的CPU的通信方式進(jìn)行分類,有并行通信、半雙工串行通信和I2C通信的讀寫(xiě)芯片。圖3是一個(gè)基于三種不同通信方式讀寫(xiě)芯片的通用IC卡讀寫(xiě)器的原理示意。這個(gè)系統(tǒng)可以同時(shí)對(duì)6片IC卡進(jìn)行操作,其中每一個(gè)IC卡讀寫(xiě)芯片都可以驅(qū)動(dòng)2片IC卡。應(yīng)用系統(tǒng)可以根據(jù)實(shí)際情況合理選用其中的一種或多種讀寫(xiě)芯片。
2.1IC卡讀寫(xiě)芯片的硬件對(duì)比分析
(1)通信方式為并行通信的CTS56I01
CTS56I01支持兩個(gè)符合ISO/IEC7816-3標(biāo)準(zhǔn)的T0和T1傳輸協(xié)議的IC卡。它采用并行的方式與IFD內(nèi)的CPU通信;可以檢查到卡的插入與拔出,并自動(dòng)產(chǎn)生激活與釋放時(shí)序。CTS56I01內(nèi)部每個(gè)通道都有發(fā)送緩沖空、ATR超時(shí)、釋放檢測(cè)完成、TS沒(méi)有收到等10個(gè)獨(dú)立的中斷源,當(dāng)CTS56I01內(nèi)部的狀態(tài)發(fā)生變化時(shí),可以產(chǎn)生中斷信號(hào)。系統(tǒng)通過(guò)P0口與CTS56I01的數(shù)據(jù)線相連,地址選擇用P2[2:0],兩個(gè)中斷信號(hào)經(jīng)過(guò)或門(mén)后接到89C51的INT0上。對(duì)IC卡的所有操作,只是對(duì)CTS56I01內(nèi)部寄存器的讀寫(xiě)操作,方便可靠。CTS56I01采用LQFP-32封裝,僅占很小的空間。
(2)通信方式為半雙工串行通信的WatchCore
WatchCore是握奇公司為了方便各種嵌入式設(shè)備與IC卡的通信開(kāi)發(fā)而推出的一款I(lǐng)C卡讀寫(xiě)芯片,硬件平臺(tái)采用ST7261單片機(jī),內(nèi)部掩膜有握奇公司對(duì)IC卡進(jìn)行讀寫(xiě)操作的全部程序;支持ISO/IEC7816T=0、T=1異步傳輸協(xié)議的各種智能卡,支持對(duì)Memory卡操作,支持雙卡頭操作,與接口CPU采用半雙工串行通信。系統(tǒng)用P1.1和P1.2模擬一個(gè)串口與WatchCore進(jìn)行通信。WatchCore采用SO-20裝封,占PCB板很小的位置。
圖5
(3)通信方式為I2C的TDA8020
TDA8020是Philips生產(chǎn)的支持兩個(gè)獨(dú)立IC卡的讀寫(xiě)芯片,IFD內(nèi)的CPU采用I2C的方式向TDA8020發(fā)送命令和讀取狀態(tài),通過(guò)TDA8020的I/OuC端口向IC卡發(fā)送和接收數(shù)據(jù)。它支持符合ISO/IEC7816-3T=0、T=1標(biāo)準(zhǔn)的IC卡,也支持符合EMV3.1.1(Europay,MasterCard,VISA)標(biāo)準(zhǔn)的卡。與它Pin-to-Pin兼容的芯片還有ST公司生產(chǎn)的ST8020等。TDA8020有2個(gè)地址選擇引腳。本系統(tǒng)的地址引腳接地,兩個(gè)IC卡對(duì)應(yīng)的地址分別為0x40和0x48。I2C的時(shí)鐘信號(hào)和數(shù)據(jù)信號(hào)分別由89C51的P1.3和P1.4進(jìn)行模擬,IC卡的數(shù)據(jù)通道I/OuC連89C51的P1.5和P1.6。TDA8020也采用LQFP-32裝封。
2.2IC卡讀寫(xiě)芯片的軟件設(shè)計(jì)
2.2.1通信方式為并行通信的CTS56I01
CST56I01只有3根地址線,內(nèi)部卻有37個(gè)寄存器。其中有8個(gè)寄存器可以直接訪問(wèn),另外的29個(gè)寄存器要通過(guò)索引地址寄存器(IAR)來(lái)訪問(wèn)。其訪問(wèn)分為兩步:第一步是將要間接訪問(wèn)的寄存器的地址寫(xiě)到IAR寄存器中;第二步就是從數(shù)據(jù)寄存器(DR)中讀出數(shù)據(jù)或?qū)懭霐?shù)據(jù)到DR寄存器中,來(lái)完成對(duì)要間接訪問(wèn)的寄存器的訪問(wèn)。
下面的C51子程序是基于圖3的寫(xiě)一個(gè)字節(jié)到要間接訪問(wèn)的寄存器中的子程序。
#defineSN2_IARXBYTE[0x0000]
#defineSN2_DRXBYTE[0x0100]
voidWriteByteIndexed(BYTEbIndex,BYTEbData){
P1.0=0;
SN2_IAR=bIndex;
SN2_DR=bData;
}
2.2.2WatchCore的軟件設(shè)計(jì)
WatchCore是不帶硬件的UART,其串行通信是用軟件實(shí)時(shí)仿真的。通信速度采用9600bps;通信字節(jié)格式為1位起始位,8位數(shù)據(jù)位,1位偶校驗(yàn)位,2位停止位。TXD與RXD電氣信號(hào)是標(biāo)準(zhǔn)的CMOS電平,可直接與TTL的電路相連。以下是通信時(shí)的數(shù)據(jù)包格式。
(1)命令包
命令包是IC卡讀寫(xiě)器內(nèi)的CPU發(fā)往WatchCore的數(shù)據(jù),其包格式如下:
NAD
PCB
LEN
DATA
BCC
NAD為卡頭選擇,NAD=0x00/0x12為主卡頭,NAD=0x13為從卡頭;
PCB與通信無(wú)關(guān),CPU卡T=1時(shí)使用,PCB通常設(shè)置為0x00;
LEN為數(shù)據(jù)的字節(jié)長(zhǎng)度(僅DATA段的字節(jié)數(shù));
DATA為發(fā)送WactchCore或IC卡內(nèi)的命令(命令參考ISO7816-4的標(biāo)準(zhǔn));
BCC為異或校驗(yàn)字節(jié)(BCC段前的4段所有字節(jié)的異或和)。
(2)數(shù)據(jù)包
數(shù)據(jù)包是WatchCore收到命令包后返回的數(shù)據(jù),其包格式如下:
NAD*是WatchCore把命令包中NAD字節(jié)的高低4位互換后的返回。例如,命令包發(fā)送NAD=0x12,WatchCore則返回NAD*=0x21;
其它各段與命令包相同。
通信舉例(以下數(shù)據(jù)都用十六進(jìn)制表示)
對(duì)主卡進(jìn)行復(fù)位
發(fā)送命令包如下:
120005001200000005
若主卡頭中無(wú)卡,則WatchCore返回:
210002620041
若主卡頭有一張T=0的CPU卡,則可能返回:
2100113B7A180000210811121314151617189000D8
2.2.3TDA8020的軟件設(shè)計(jì)
TDA8020與IFD內(nèi)CPU的通信是用I2C總線方式進(jìn)行的。通過(guò)I2C接口,IFD內(nèi)的CPU可以向TDA8020發(fā)送命令或讀取TDA8020的狀態(tài)。TDA8020有兩個(gè)地址選擇引腳(SAD0和SAD1)。在圖3中,這兩個(gè)地址選擇引腳接地,對(duì)應(yīng)兩個(gè)IC卡的I2C總線地址分別是40H和48H。如果系統(tǒng)中有別的I2C總線器件,可以按表2的方式進(jìn)行尋址。
表2TDA8020的I2C地址選擇表
SAD1SAD0CARD1CARD2
0040H48H
0142H4AH
1046H4CH
1148H4EH
(1)向TDA8020寫(xiě)入命令的格式
圖4為向TDA8020寫(xiě)入命令的格式。按圖3所示,對(duì)卡1的地址和寫(xiě)的字節(jié)為40H。
其中控制字節(jié)各位的含義如表3所列。
表3命令控制字節(jié)各位的含義
名稱位說(shuō)明
START和/STOP0為1,產(chǎn)生一個(gè)冷復(fù)位的激活時(shí)序:為0,產(chǎn)生一個(gè)釋放時(shí)序
WARM1為1,產(chǎn)生一個(gè)熱復(fù)位時(shí)序
3/5V2為1,設(shè)定卡的操作電壓為3V;為0,設(shè)定卡的操作電壓為5V
PDOWN3為1,設(shè)定卡為下電模式;為0,設(shè)定卡為正常工作模式
CLKPD4為1,設(shè)定下電模式下CLK停在高電平;為0,設(shè)定下電模式下CLK停在低電平
CLKSEL15兩位設(shè)定卡在正常工作模式時(shí)的工作時(shí)鐘頻率見(jiàn)表4
CLKSEL26
I/OEN7I/O使能位。為1時(shí),I/O與I/Ouc相連;為0時(shí),I/Ouc是高阻狀態(tài)
(2)讀TDA8020內(nèi)部狀態(tài)的數(shù)據(jù)格式
從TDA8020讀出狀態(tài)的格式如圖5所示。按圖3所示,對(duì)卡1的地址和讀的字節(jié)為41H。
其中狀態(tài)字節(jié)中各位的含義如表5所列。
表4工作時(shí)鐘頻率選擇方式
CLKSEL2CLKSEL1CLOCKOU
00CLKIN/8
00CLKIN/4
10CLKIN/2
11CLKIN
表5狀態(tài)字節(jié)各位的含義
名稱位說(shuō)明
PRES0卡的狀態(tài)指示。為1時(shí),檢測(cè)到卡:為0時(shí),沒(méi)有檢測(cè)到卡
PRESL1為1時(shí),卡的狀態(tài)還沒(méi)有讀;當(dāng)為0時(shí),卡的狀態(tài)已讀出
I/O2I/O為高時(shí),這位為1;當(dāng)I/O為低時(shí),這位為0
SUPL3為1時(shí),表示電源監(jiān)控器已輸出,上電后就為1,直到讀出后為0
PROT4為1時(shí),表示過(guò)熱或過(guò)載狀態(tài)
MUTE5為1時(shí)表示卡在規(guī)定的時(shí)間內(nèi)沒(méi)有發(fā)出ATR信號(hào)
EARLY6為1時(shí)表示卡在規(guī)定的時(shí)間前就已經(jīng)發(fā)出ATR信號(hào)
ACTIVE7為1時(shí),卡處于激活狀態(tài);為0時(shí),卡處于釋放狀態(tài)
3總結(jié)
以上比較詳細(xì)地介紹了三種不同接口的IC卡讀寫(xiě)芯片。這三種方式最大的區(qū)別在于其與IFD內(nèi)的CPU的通信方式不一樣,并且也都符合ISO/IEC7816的標(biāo)準(zhǔn)。但是,這三個(gè)讀寫(xiě)芯片有一些地方也存在一些差異。
TDA8020支持A類和B類卡,但是WatchCore和SNIPERIICST56I01只支持A類卡。(雖然SNIPERIICST56I01內(nèi)部寄存器中有一位是卡類選擇,但卻只支持A類卡。)
TDA8020和SNIPERIICST56I01其ESD保護(hù)達(dá)6kV,但是WatchCore卻沒(méi)有ESD保護(hù)功能。
TDA8020對(duì)卡的電源可以直接支持,并有過(guò)流保護(hù)功能;但是WatchCore和SNIPERIICST56I01卻只有通過(guò)一個(gè)功放管來(lái)實(shí)現(xiàn),并且沒(méi)有過(guò)流保護(hù)功能,只有外接保護(hù)電路(如加可復(fù)位保險(xiǎn)絲)。
就其接口方式來(lái)說(shuō),I2C總線的TDA8020和串口的WatchCore雖然與IC卡讀寫(xiě)器內(nèi)的CPU的連接方便,但是一般CPU沒(méi)有多余的串口和I2C總線接口給這兩個(gè)芯片,一般要用通用I/O口來(lái)模擬串口和I2C總線接口才能進(jìn)行通信。而SNIPERIICST56I01與IFD內(nèi)的CPU的并行通信雖然連接線較多,但其相應(yīng)的軟件就方便多了。
綜上所述,這三個(gè)IC卡讀寫(xiě)芯片各有不同,在實(shí)現(xiàn)應(yīng)用的過(guò)程中,只有根據(jù)不同的資源情況來(lái)選用不同的讀寫(xiě)芯片。