IC卡接口芯片讀寫器設計管理論文

時間:2022-06-26 04:29:00

導語:IC卡接口芯片讀寫器設計管理論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

IC卡接口芯片讀寫器設計管理論文

摘要:闡述T=0傳輸協議,給出ic卡讀寫器中使用的IC卡APDU指令流程和原理框圖;重點介紹其中的IC卡接口芯片Philips的TDA8007,給出通過TDA8007對CPUIC卡上下電過程、具體程序及TDA8007使用中應注意的問題。

關鍵詞:CPUIC卡TDA8007ISO7816

IC卡(IntegratedCircuitcard)即集成電路卡,是將一個集成電路芯片鑲嵌于朔料基片中,封裝成卡的形式,外形與常用的覆蓋磁條的磁卡相似。IC卡芯片具有寫入和存儲數據的能力。IC卡存儲器中的內容根據需要可以有條件地供外部讀取,或供內部信息處理和判定。根據卡中所鑲嵌的集成電路的不同,可以分成存儲器卡、邏輯加密卡、CPU卡三類。其中CPU卡即為由中央處理器CPU、EEPROM、隨機存儲器RAM以及固化在只讀存儲器ROM中的片內操作系統COS(ChipOperationSystem)組成的IC卡。IC卡按與外界數據傳送的形式來分,有接觸式和非接觸式兩種。

圖1T=0的CPU卡APDU指令實現流程

1CPUIC卡T=0的協議介紹

目前大多數CPUIC卡采用T=0模式。所謂T=0,即CPUIC卡與接口設備(即讀寫器)中數據傳輸方式為異步半雙工字符傳輸模式。

從T=0協議的功能出發,該協議的實現可以分為物理層、數據鏈路層、終端傳輸層和應用層。其中物理層和數據鏈路層可以具體參看ISO7816標準。在T=0協議應用,終端傳輸層和應用層實際上是不易分割來說明的,下面簡單說明。

終端傳輸層根據卡片返回的過程字符和狀態字節執行相應的操作,使讀寫器對數據的處理過程明朗清晰。卡片返回的過程字節和狀態字節跟應用層發送給卡的APDU(ApplicationProtocolDataUnit,應用協議數據單元)和VPP使用等有關。表1為VPP未用時的終端傳輸層中返回的過程字節。

表1

字節值結果

ACKINSVPP空閑,所有其余的數據字節相繼續被傳送

INS+''''FF''''VPP空閑,下一個數據字節隨后被傳送

SW1SW2VPP空閑,接口設備等待SW2字節

應用層即為由CLA、INS、P1、P2、P3作為命令頭組成的命令消息體的APDU響應和應答處理層。其中CLA為指令類別,INS為指令碼,P1、P2為參數,P3為根據APDU的不同格式為發送給卡的數據長度或期望響應的數據長度。APDU的幾種情況如表2所列。

表2

命令頭發送數據長度發送的數據期望應答的數據長度

通用APDUCLAINSP1PLCDataLE

情況一CLAINSP1P

情況二CLAINSP1PLE

情況三CLAINSP1PLCData

情況四CLAINSP1P2LCDataLE

CPU卡對接口設備(即讀寫器)的應答APDU情況如表3所列。

表3

體尾

數據DataSW1SW2

其中體中的數據字節數由命令APDU中的LE指出;SW1、SW2是必備的,可以指明命令APDU執行正確或執行出錯的錯誤類型。

2基于T=0傳輸協議的CPUIC的APDU指令流程

根據目前CPU卡的常用T=0協議、自帶編程升壓電路的應用情況,以及本讀寫器接收IC卡數據報文直接發送PC機處理的特點,本讀寫器可行的APDU命令和響應的處理流程如圖1所示。

3讀寫器的硬件組成

讀寫器的硬件部分主要由IC接口管理芯片TDA8007、MCUAT89C52、外部數據存儲器W24257S、串口電平轉換芯片MAX3226、安全IC卡座(即SAM卡座)、應用IC卡座、鍵盤口供電的串口通信線及其它相關元器件組成。

圖2所示為通過PC機控制管理的外置于PC機的接觸式CPUIC卡讀寫器。通過定制的數據線,該讀寫器的5V直流電源可直接由鍵盤口提供,同時數據線還負責PC機與讀寫器的串行數據交換。在大部分IC卡讀寫應用中,都涉及到IC卡的認證和數據讀寫的國解密問題,所以本讀寫器除了提供一個供用戶使用的IC卡接口卡座外,還內置了一個SAM卡,即安全IC卡卡座,以方便安裝SAM卡,保證應用IC卡讀寫時的數據安全,保護用戶的利益。

硬件的其它組成部分,如處理器,目前采用Atmel的89C52。其4KB的Flash程序存儲器可以滿足讀寫器的程序空間需要。由于PC機與89C52、89C52與TDA8007的數據交換要求的暫存數據空間比較大,89C52提供的256字節不夠,需外加一片數據存儲器。本讀寫器中使用的是華邦的W24257S。其有32KB存儲容量,IC接口部分的主要芯片為Philips的TDA8007。

4IC卡接口芯片應用

下面介紹一下TDA8007及其應用。TDA8007的原理結構如圖3所示。

TDA8007芯片能夠提供兩個能同時滿足ISO7816標準及EMV和GSM11-11標準的IC卡讀寫接口。在本讀寫器中,一個用于與應用IC通信,另一個用于與安全IC卡通信。與上文CPU卡的觸點圖相對應,CLKi、RSTi、VCCi、I/Oi、GNDCi、PRESi、C4i、C8i(其中i=1,2;C4i、C8i未用;PRESi可用于檢測IC卡是否插入。具體應用可參看TDA8007的技術文檔)都直接由TDA8007提供給IC卡接口相連,MCU只需通過其接口控制并行通信來管理TDA8007,便可實現對IC卡的上電、下電及讀寫數據處理。其中,微處理器既可以通過總線復用把TDA8007內部的所有寄存器作為外部存儲器,用MOVX尋址,也可以通過非總線復用方式訪問,此時TDA8007用AD0~AD3來區分內部各寄存器。另外,TDA8007的片選信號和外部中斷信號線可以方便讀寫器處理多個IC卡頭。TDA8007的特別硬件ESD處理、接口短路處理、電源出錯處理等也給IC卡和IC卡讀寫器提供了比較高的安全保護;同時,TDA8007內部集成的電源管理功能允許TDA8007的供電范圍可達2.7~6.0V,并且TDA8007通過電源管理可以給IC卡提供5.0V、3.0V及1.8V的電源,以適合不同工作電壓的IC卡應用。

圖3IC卡接口芯片TDA8007的原理框圖

本讀寫器是通過總線復用對TDA8007的寄存器進行控制的。其中MCU的P1.5為TDA8007的片選,P0口為與之通信的8位數據線,TDA8007的各寄存器預先被宏定義的成微處理器的一個外部數據單元(下面電程序處的定義),從而方便MCU訪問。下面結合TDA8007寄存器的定義和位分配,給出應用TDA8007接口芯片對IC卡進行上電激活和下電的程序。TDA8007的寄存器主要三類。第一類,通用寄存器:①卡槽選擇CSR;②硬件狀態HSR;③定時器TOR1、TOR2、TOR3。第二類,ISO7816串行處理寄存器:①串行狀態USR;②混合狀態MSR;③串行發送UTR;④串行接收URR;⑤隊列控制FCR。第三類,卡專屬寄存器:①可編程分頻PDR;②保護時間GTR;③串行控制UCR1、UCR2;④時鐘配置CCR;⑤上電控制PCR。注意:對于卡專屬的寄存器,即卡接口1、卡接口2分別對應的寄存器,邏輯上具有相同的名及訪問地址,因而,對不同的瞳操作,需要通過CSR選擇對應的卡槽來切換卡專卡屬寄存器的映射的物理空間。所以,接口設備每次從一個卡的上下電或讀寫轉向另一卡,都需要訪CSR設定對應的卡槽。對于每個寄存器的位定義不再多述,主動性者可參看TDA8007的技術文檔。

5上下電過程及具體程序

圖4為IC卡的上電時序圖。要實現之,需對PCR進行寫操作。其中START=PCR.0,RSTIN=PCR.2,VUP上升表示激活了TDA8007中的電壓轉換電路。當START置高時,只要能檢測到選定卡槽中的IC卡存在,且沒有TDA8007能檢測到并在HSR中指示的硬件錯誤出現,則對應IC卡接口的VCC1或VCC2將能被提供響應的電平(5V、3V或1.8V)。隨后對應卡的I/O數據線被置成高狀態(Z狀態),給IC卡提供設定的時鐘信號,常用為3.5712MHz。大約在START置高108ETU后,RSTIN置高。因為RST為RSTIN的拷貝,則對應卡的RST被置高。然后,用TDA8007提供的定時器TOR3、TOR2設定對ATR(AnswerToRequest)即復位應答首字節的最大等待時間120ETU(ElementTimeUnit),TOC設定定時器工作方式,便開始等待ATR首字節到來后做相應處理。至此,IC卡上電激活工作完成,隨后可以根據ATR字節的要求的工作方式對IC卡進行相應的讀寫處理。具體見上電程序。

圖4TDA8007產生滿足ISO7816標準訴IC卡上電激活時序

TDA8007寄存器訪問的預定義

#include<absacc.h>

#defineXXXXBYTE[0x8000]//XXX表示CSR等各寄存器上電程序如下:

P1.5=0;//片選TDA8007

CSR&=0xf8;

CSR|=ncard;//選擇卡,ncard=1,2

CSR&=0xf7;

CSR|=0xf7;

CSR|=0x08;//復位UART的寄存器

UCR2&=0xf7;//異步模式,SAN=0

CCR&=0xdf;//時鐘停止于低電平

UCR2|=0x60;//關閉附加中斷及收發中斷

GTR=0xff;//保持時間12ETU

If(v==1)//v為函數變量

PCR|=0x08;//1.8V卡用

elseif(v==3)

PCR|=0x02;//3V卡用

Else

PCR&=0xfd;//5V卡用

UCR2&=0xfc;//CKU=PSC=0,--31

FCR=0x00;//1奇偶校驗1FIFO

PDR=0x0c;//Divider=12

CCR=0x00;//不分頻

PCR&=0xfb;//RSTIN=0

UCR2|=0x04;//不自動轉換

UCR1=0x01;//正向約定

UCR1&=0xf7;//接收模式

flag3=0;//復位定時標志

flagatr=0;//接收ATR首字節定時標志

PCR|=0x01;//激活

TOR2=0x6c;

TOR3=0x00;

TOC=0x61;//RST拉高前等待108ETU

while(flag3==0);//定時時間到,在中斷中設置flag3=1

TOC=0x00;//關閉定時器

PCR|=0x04;//給復位拉高

TOR2=0x78;

TOR3=0x00;

TOC=0x61;//RST拉高前等待

flagatr=1;

ATR();//復位應答處理函數

圖5為IC卡的下電時序圖。相對于上電時序,下電過程對時間的要求不是很嚴格,只要設計者控制TDA8007按照一定的順序置低START、RSTIN和停止CLK即可,然后TDA8007會自動逐步釋放RST、I/O、Vcc及VUP。具體處理見下電程序。

下電程序:

P15=0;

PCR&=0xfe;//START=0;下電

PCR&=0xfb;//卡的復位腳保持0

CCR&=0xdf;//停止時鐘于低

CCR|=0x10;//停止時鐘

P15=1;

6使用TDA8007應當注意的問題

TDA8007對于Vcc、RST出錯,芯片過熱(如圖IC卡為電源短路卡或金屬片),或IC卡插入拔出時都會產生中斷輸出。每次中斷處理結束,應注意把HSR中的值讀入一個臨時地址,以便清楚HSR中的標志。

每次發送數據到IC前,即接收IC卡的最后一個數據之前,應設置寄存器UCR1中的LCT位,以便接收完IC卡的數據后,自動切換成發送狀態。

對TDA8007部分布線時應注意,時鐘信號線與其它線的隔離:最好被地線包圍。

對于電路板上TDA8007部分的電容應盡量靠近TDA8007,其中電容Cap、Cbp、Cup尤其如此,并最好不要在這些電容連向TDA8007引腳過程中使用過孔;同時,Cap、Cup、Cbp電容的ESR要盡量小。

對TDA8007處理的兩個IC卡座中的任何一個執行上電、下電、讀寫卡操作之前,必須執行選擇卡座的操作函數,以便選中具體的IC卡進行處理。

對IC卡操作中上電時序中的定時,讀寫卡字節間等待定時等都可使用TDA8007中的定時器及定時控制器操作,注意其定時器為向下計數方式。

結語

本文主要從CPUIC卡的T=0的協議出發,介紹此類IC讀寫器設計的一些技術問題。值得指出的是,T=0協議僅僅是IC卡與外界數據交換的一種傳輸協議,只要在軟件上適當修改并利用接口芯片TDA8007突出的處理能力,本讀寫器完全可以實現對其它ISO7816卡、EMV、GSM`11-11卡的讀寫。