關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 接觸式IC卡接口原理與不同實(shí)現(xiàn)方式對(duì)比

接觸式IC卡接口原理與不同實(shí)現(xiàn)方式對(duì)比

作者: 時(shí)間:2011-08-01 來源:網(wǎng)絡(luò) 收藏

2 幾種與分析

  IFD內(nèi)的卡讀寫芯片,按其與IFD內(nèi)的CPU的通信進(jìn)行分類,有并行通信、半雙工串行通信和I2C通信的讀寫芯片。圖3是一個(gè)基于三種通信讀寫芯片的通用卡讀寫器的示意。這個(gè)系統(tǒng)可以同時(shí)對(duì)6片卡進(jìn)行操作,其中每一個(gè)IC卡讀寫芯片都可以驅(qū)動(dòng)2片IC卡。應(yīng)用系統(tǒng)可以根據(jù)實(shí)際情況合理選用其中的一種或多種讀寫芯片。

2.1 IC卡讀寫芯片的硬件分析

(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沒有收到等10個(gè)獨(dú)立的中斷源,當(dāng)CTS56I01內(nèi)部的狀態(tài)發(fā)生變化時(shí),可以產(chǎn)生中斷信號(hào)。系統(tǒng)通過P0口與CTS56I01的數(shù)據(jù)線相連,地址選擇用P2[2:0],兩個(gè)中斷信號(hào)經(jīng)過或門后接到89C51的INT0上。對(duì)IC卡的所有操作,只是對(duì)CTS56I01內(nèi)部寄存器的讀寫操作,方便可靠。CTS56I01采用LQFP-32封裝,僅占很小的空間。

(2)通信方式為半雙工串行通信的WatchCore

  WatchCore是握奇公司為了方便各種嵌入式設(shè)備與IC卡的通信開發(fā)而推出的一款I(lǐng)C卡讀寫芯片,硬件平臺(tái)采用ST7261單片機(jī),內(nèi)部掩膜有握奇公司對(duì)IC卡進(jìn)行讀寫操作的全部程序;支持ISO/IEC 7816 T=0、T=1異步傳輸協(xié)議的各種智能卡,支持對(duì)Memory卡操作,支持雙卡頭操作,與CPU采用半雙工串行通信。系統(tǒng)用P1.1和P1.2模擬一個(gè)串口與WatchCore進(jìn)行通信。WatchCore采用SO-20裝封,占PCB板很小的位置。

圖5

  TDA8020是Philips生產(chǎn)的支持兩個(gè)獨(dú)立IC卡的讀寫芯片,IFD內(nèi)的CPU采用I2C的方式向TDA8020發(fā)送命令和讀取狀態(tài),通過TDA8020的I/OuC端口向IC卡發(fā)送和接收數(shù)據(jù)。它支持符合ISO/IEC7816-3 T=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.2 IC卡讀寫芯片的軟件設(shè)計(jì)

2.2.1 通信方式為并行通信的CTS56I01

  CST56I01只有3根地址線,內(nèi)部卻有37個(gè)寄存器。其中有8個(gè)寄存器可以直接訪問,另外的29個(gè)寄存器要通過索引地址寄存器(IAR)來訪問。其訪問分為兩步:第一步是將要間接訪問的寄存器的地址寫到IAR寄存器中;第二步就是從數(shù)據(jù)寄存器(DR)中讀出數(shù)據(jù)或?qū)懭霐?shù)據(jù)到DR寄存器中,來完成對(duì)要間接訪問的寄存器的訪問。

下面的C51子程序是基于圖3的寫一個(gè)字節(jié)到要間接訪問的寄存器中的子程序。

#define SN2_IAR XBYTE[0x0000]

#define SN2_DR XBYTE[0x0100]

void WriteByteIndexed(BYTE bIndex, BYTE bData) {

P1.0=0;

SN2_IAR = bIndex;

SN2_DR = bData;

}

2.2.2 WatchCore的軟件設(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卡讀寫器內(nèi)的CPU發(fā)往WatchCore的數(shù)據(jù),其包格式如下:

NAD

PCB

LEN

DATA

BCC

NAD為卡頭選擇, NAD=0x00/0x12為主卡頭,NAD=0x13為從卡頭;

PCB與通信無關(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ā)送命令包如下:



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉