文獻(xiàn)標(biāo)識碼: B
自從1993年推出"金卡工程"以來,我國金融和流通領(lǐng)域逐漸進入了電子貨幣時代,各種接觸式IC卡讀寫器得到了廣泛應(yīng)用。它將微電子技術(shù)和計算機技術(shù)結(jié)合在一起,提高了人們生活和工作的現(xiàn)代化程度。
接觸式集成電路(IC)卡國際標(biāo)準(zhǔn)(ISO/IEC 7816)由國際標(biāo)準(zhǔn)化組織(ISO)和國際電子技術(shù)委員會(IEC)共同制定,該標(biāo)準(zhǔn)對接觸式IC卡領(lǐng)域的物理特性、電信號和傳輸協(xié)議等各個方面進行了統(tǒng)一規(guī)范。根據(jù)該標(biāo)準(zhǔn),按照供給卡的電源電壓不同而將卡分為A、B兩類,即5 V電壓的A類卡和3 V電壓的B類卡[1]。傳統(tǒng)的接觸式IC卡讀寫器大多采用A類接口設(shè)備或B類接口設(shè)備,只能對單一的A類卡或B類卡進行操作,而具有AB類接口設(shè)備的讀寫器卻應(yīng)用不多。隨著接觸式IC卡在日常生活中的廣泛應(yīng)用,具有AB類接口的讀寫器將有廣闊的市場。本文設(shè)計的讀寫器采用5 V的電源電壓供電,可以實現(xiàn)對B類卡的全功能讀寫,該技術(shù)可以解決在5 V的系統(tǒng)中對A類卡和B類卡進行同時讀寫的問題。
1 系統(tǒng)硬件設(shè)計
本文中的IC卡讀寫器采用ATMEL公司的高性能、低功耗的8位AVR微處理器ATMEGA32,電平轉(zhuǎn)換芯片采用美國國家半導(dǎo)體公司(National Semiconductor)的LM1117-3.3,可以給卡座提供3.3 V的電源電壓。微處理器與卡座之間的接口轉(zhuǎn)換電路采用德州儀器公司(TI)的SN74TVC3010器件,該芯片可以對10路信號同時進行轉(zhuǎn)換,完全可滿足讀寫器設(shè)計的需要。讀寫器硬件電路結(jié)構(gòu)如圖1所示,該讀寫器主要由3部分組成。
(1)電源。主要是為整個讀寫器提供穩(wěn)定的5 V和3 V的電源電壓。5 V電源通過USB口由上位機直接提供,可以作為讀寫器內(nèi)微處理器、蜂鳴器電路、光電指示電路的電源。5 V電源電壓通過LM1117-3.3芯片的轉(zhuǎn)換后可以得到穩(wěn)定的3.3 V的電平,為后續(xù)的SN74TVC3010接口電路、卡座提供電源電壓。具體的電路如圖2所示。
(2)數(shù)據(jù)交換。PC機與讀寫器的數(shù)據(jù)交換也即是與ATMEGA32單片機之間的數(shù)據(jù)交換,PC機通過上位機軟件向單片機發(fā)送命令以實現(xiàn)對卡片的讀寫操作。本讀卡器采用RS232串口與PC機進行通信,由于接口電平的不同,在讀卡器內(nèi)部應(yīng)用MAX232芯片實現(xiàn)了不同電平間的轉(zhuǎn)換[2]。
(3)讀寫器與CPU卡的通信。在讀卡器上有一個常閉型接觸卡座,這是讀寫器與CPU卡進行通信的接口,通過符合ISO 7816標(biāo)準(zhǔn)要求的8個觸點實現(xiàn)與CPU卡的連接[3]。
SN74TVC3010為一雙向電平轉(zhuǎn)換器件,在轉(zhuǎn)換過程中不需要方向控制信號。SN74TVC3010芯片包含由11個N 溝道導(dǎo)通晶體管組成的晶體管陣列,陣列中的所有晶體管都具有相同的電氣特性,它們的門在內(nèi)部連接在一起,因此,其中的任一個晶體管都可以作為參考晶體管,其他的作為導(dǎo)通晶體管,每個導(dǎo)通晶體管的低壓端上的最大正電壓限制為由參考晶體管設(shè)置的電壓。由于晶體管是對稱制造的,且I/O 信號是雙向經(jīng)過每個晶體管,所以每位的任一端口連線可用作低壓端[4]。
本文設(shè)計的讀寫器中參考晶體管的一端通過1個200 kΩ電阻接5 V電源,另一端接3.3 V電源,如圖3所示。當(dāng)數(shù)據(jù)從卡座向單片機傳輸時,電壓達(dá)到3.3 V,導(dǎo)通晶體管關(guān)閉,單片機管腳上的電平通過上拉電阻拉至5 V。當(dāng)數(shù)據(jù)從單片機向卡座傳輸時,卡座端的電壓被鉗位在3.3 V左右。這樣可準(zhǔn)確地實現(xiàn)單片機與卡片之間的正常通信。
2 底層固件設(shè)計
本讀寫器固件編程采用C語言編寫,編程環(huán)境為IAR Embedded Workbench,仿真及下載底層固件在AVR Studio 4中完成。固件的整體結(jié)構(gòu)如圖4所示。
單片機通過RS232串口接收上位機發(fā)送的命令,主程序按照預(yù)先設(shè)計的通信協(xié)議格式對其解析之后,如果是正確的命令,則轉(zhuǎn)到相應(yīng)的命令處進行執(zhí)行,否則向上位機返回錯誤信息,并繼續(xù)接收新的命令。該固件程序可以實現(xiàn)讀寫器與上位機之間通信速率在9 600 b/s、19 200 b/s、38 400 b/s、57 600 b/s、76 800 b/s、115 200 b/s內(nèi)任意選擇。
本讀寫器可以對符合T=0、T=1協(xié)議的B類CPU卡進行讀寫操作,也可以對其他的存儲卡、邏輯加密卡進行程序擴展。T=0的協(xié)議卡以單字節(jié)的字符為基本單位,T=1的協(xié)議卡以有一定長度的數(shù)據(jù)分組為傳輸?shù)幕締挝?。程序設(shè)計過程中,通過判斷復(fù)位應(yīng)答來獲得卡片的協(xié)議類型,再根據(jù)不同協(xié)議的要求執(zhí)行相應(yīng)的處理。如圖5所示為主程序執(zhí)行流程。
系統(tǒng)上電后,首先執(zhí)行系統(tǒng)初始化,包括串口的初始化、系統(tǒng)聲光電路的指示設(shè)置等,如果發(fā)光二極管顯示正常,表明讀寫器已經(jīng)打開,可以正常工作。在卡片插入之后,常閉型接觸卡座的查詢卡片狀態(tài)管腳被彈開,電壓變?yōu)楦唠娖?,說明卡片已到位,此時按照從串口接收的有效命令對卡進行復(fù)位、密碼校驗、讀寫數(shù)據(jù)等操作。
3 應(yīng)用軟件設(shè)計
讀寫器的應(yīng)用軟件是讀寫器系統(tǒng)的一個重要組成部分,它主要實現(xiàn)對讀寫器參數(shù)的設(shè)置、數(shù)據(jù)的讀寫和顯示、IC卡狀態(tài)的判斷等,是操作讀寫器的最直觀接口[3]。
該應(yīng)用軟件的設(shè)計環(huán)境為Microsoft Visual C++ 6.0。在軟件設(shè)計過程中采用了Visual C++提供的ActiveX控件MSComm來實現(xiàn)對串口的訪問,該控件的使用不需要了解較為復(fù)雜的API函數(shù)就可以非常方便地進行串口編程[6]。
該應(yīng)用軟件界面友好、使用非常方便,只需要把串口通信的串口號、通信速率設(shè)置好,就能成功對讀寫器進行操作,其界面如圖6所示。設(shè)置好串口參數(shù),輸入相應(yīng)的讀寫指令后,在OUTPUT框內(nèi)就可以看到讀寫器返回的結(jié)果。
該接觸式讀寫器經(jīng)檢測在Windows環(huán)境能夠?qū)類CPU卡進行全功能讀寫,可以廣泛應(yīng)用于金融、醫(yī)療、保險等行業(yè)。同時該讀寫器的讀寫速度沒有因應(yīng)用了電平轉(zhuǎn)換電路而受到明顯的影響,所以真正實現(xiàn)了在5 V的系統(tǒng)中對B類卡的讀寫,這對設(shè)計AB類接口設(shè)備具有指導(dǎo)意義。
參考文獻(xiàn)
[1] 王愛英.智能卡技術(shù)-IC卡(第二版)[M].北京:清華大學(xué)出版社,2000.
[2] 何英慧,張其善.接觸式智能卡讀寫器的研制[J].電子測量技術(shù),2006,29(3):65-66.
[3] 張國云.加密型IC卡與AT89C51單片機接口程序設(shè)計[J] .電子與自動化,2000(5):32-34.
[4] Texas Instruments Incorporated. SN74TVC3010 10-bit voltage clamp datasheet,1999.
[5] 李瀛,王欣,吳曉波,等.基于USB接口的lC卡讀寫器[J]. 東北大學(xué)學(xué)報,2004,25(11):1046-1049.
[6] 李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實踐(第二版)[M].北京:人民郵電出版社,2004.