陳俊杰,朱志杰,溫耀軍
(湖南大學(xué) 電氣與信息工程學(xué)院,湖南 長(zhǎng)沙 410082)
智能卡(Smart Card)是將一個(gè)專用的集成電路芯片鑲嵌于符合ISO7816標(biāo)準(zhǔn)或者ISO14443標(biāo)準(zhǔn)的PVC(或ABS等)塑料基片中,封裝成外形與磁卡類似的卡片。智能卡已在眾多領(lǐng)域獲得廣泛應(yīng)用,并取得了初步的社會(huì)效益和經(jīng)濟(jì)效益。
市面上的智能卡(Smart Card)可以分成接觸式智能卡ICC(Integrated Circuit Cards)和非接觸式智能卡PICC(Proximity Card),與之對(duì)應(yīng)的讀卡器則分成接觸式和非接觸式兩類[1]。
巨大的智能卡市場(chǎng)更加速了與之相配套的讀卡器產(chǎn)業(yè)的發(fā)展。一般讀卡器僅支持接觸式智能卡ICC或非接觸式智能卡PICC其中的一種,這無(wú)形中增加了讀卡器的成本。在此背景下,本文探討了一款能兼容接觸式和非接觸式兩種智能卡的讀卡器。
該多功能讀卡器主要由Sitronix的主控芯片ST2211[2]和NXP的射頻芯片PN532組成。ST2211芯片內(nèi)部集成接觸式智能卡控制模塊,該模塊支持符合ISO7816標(biāo)準(zhǔn)和EMV模塊的接觸式智能卡。射頻芯片PN532內(nèi)部具有輸出驅(qū)動(dòng)緩存器,能讀寫符合ISO14443 TypeA和TypeB的非接觸式智能卡。ST2211與PN532之間采用標(biāo)準(zhǔn)SPI通信。ST2211有兩個(gè)16位的專用于SPI通信的輸入輸出寄存器,其具體使用的位數(shù)由BC[3:0]確定。SPI速率是ST2211系統(tǒng)時(shí)鐘的分頻,分頻數(shù)由SCK[2:0]確定。
圖1 多功能讀卡器組成框圖
多功能讀卡器的組成結(jié)構(gòu)如圖1所示。主控芯片ST2211通過(guò)串口或USB與上位機(jī)相連,串口速率支持9 600 b/s和115 200 b/s,USB則支持2.0全速通信。在接觸式方面,ST2211通過(guò)標(biāo)準(zhǔn)的ISO7806智能卡接口與接觸式插座相連。對(duì)于非接觸式卡,ST2211通過(guò)頻率為1 MHz的SPI接口與PN532相連,其中輸入、輸出寄存器均設(shè)置為8位,且選擇模式0——時(shí)鐘信號(hào)高電平有效,數(shù)據(jù)信號(hào)在時(shí)鐘信號(hào)第一個(gè)上升沿采樣。
讀卡器的硬件設(shè)計(jì)主要包括接主控芯片ST2211電路設(shè)計(jì)、射頻芯片PN532外圍電路設(shè)計(jì)和電源設(shè)計(jì)三方面。
芯片 ST2211引腳數(shù)為 118, 有 PA、PB、PC、PD 4組通用I/O口,共28個(gè),其中PD口僅為4個(gè)引腳。其中PD 4個(gè)引腳均可接入外部中斷,片內(nèi)32 KB的ROM,最大可外擴(kuò)到32 MB,內(nèi)部包含USB2.0控制模塊(最高速度支持12 MB)、看門狗模塊和智能卡控制模塊。
ST2211的主要外圍硬件電路如圖2所示。主控芯片擴(kuò)展了8MB的外部Flash——EN29LV800B,其結(jié)構(gòu)為1024 K×8 bit,需要 23 根地址線(A0~A22)和 8 根數(shù)據(jù)線(D0~D7),并與ST2211相應(yīng)引腳相連。片選信號(hào)/CE通過(guò)三針引腳與主控芯片引腳MMD/CS0相連。當(dāng)MMD/CS0接地,芯片復(fù)位后首先訪問(wèn)內(nèi)部的32 KB ROM,反之當(dāng)MMD/CS0與EN29LV800B的片選引腳/CE相連,則復(fù)位后從外部的8 MB Flash處開(kāi)始運(yùn)行。
接觸式智能卡控制模塊的連接方式如圖2所示,其中“SC_RST,SC_CLK,SC_IO”分別為接觸式 IC卡的復(fù)位、時(shí)鐘和IO數(shù)據(jù)引腳,而電源引腳通過(guò)三引腳插針與SC_VCC或 SC_VDD相連,如圖 2中“J2”所示。SC_VDD經(jīng)過(guò)MOS管后接至SC_VCC。ST2211的用戶手冊(cè)推薦使用SC_VCC與IC卡的電源引腳相連,但實(shí)際中電壓經(jīng)過(guò)MOS管后有0.4 V壓降,所以是將SC_VDD與IC卡的電源引腳相連。
PN532是NXP公司推出的應(yīng)用于13.56 MHz非接觸式通信的高集成度IC卡讀寫芯片,支持ISO14443 TypeA&TpyeB的所有層協(xié)議[3],其內(nèi)部的發(fā)送器模塊具有輸出驅(qū)動(dòng)緩存器,讀寫距離達(dá)100 mm。接收器模塊接收天線傳來(lái)的信號(hào),對(duì)該信號(hào)進(jìn)行解調(diào)和解碼形成相關(guān)數(shù)據(jù)。數(shù)字模塊負(fù)責(zé)按ISO14443規(guī)定幀格式處理該數(shù)據(jù),并使用奇偶校驗(yàn)和CRC校驗(yàn)進(jìn)行錯(cuò)誤檢測(cè),其硬件結(jié)構(gòu)如圖3所示。
(1)總線類型設(shè)計(jì)
PN532內(nèi)部有三種總線類型:HUS(全雙工串行總線)、I2C(雙線式串行總線)和 SPI(串行總線)。 因?yàn)?PN532與主控芯片ST2211之間采用SPI模式進(jìn)行通信,所以16和 17號(hào)引腳分別接“0”和“1”實(shí)現(xiàn) SPI模式通信,圖3中的24號(hào)引腳接高電平表示選擇 SPI通信模式“0”,即時(shí)鐘信號(hào)高電平有效,數(shù)據(jù)信號(hào)是在時(shí)鐘信號(hào)第一個(gè)上升沿采樣。因?yàn)镻N532每處理完ST2211一個(gè)命令后引腳“IRQ”會(huì)產(chǎn)生中斷,所以要與 ST2211的具有外部中斷的引腳“PD1”相連。
(2)天線設(shè)計(jì)
該讀卡器系統(tǒng)屬于電感耦合射頻系統(tǒng),PN532外接天線產(chǎn)生磁通用于向非接觸式智能卡提供電源并在讀卡器和非接觸式智能卡之間傳送信號(hào)[4]。因此,讀卡器天線的構(gòu)造有兩個(gè)基本要求:①使天線線圈的電流最大,用于產(chǎn)生最大的磁通量;②足夠的帶寬,以無(wú)失真地傳送數(shù)據(jù)調(diào)制和載波信號(hào)。
根據(jù)頻率范圍的不同,使用不同的方法將天線線圈接到讀卡器發(fā)送器的輸出端,通過(guò)功率匹配將天線線圈直接連接到功率輸出級(jí)。
由于PN532是低功耗設(shè)計(jì),因此智能卡和天線之間的耦合系數(shù)不能低于0.3。天線的直徑要求介于0.5~1.5 mm之間。該讀卡器天線采用總面積為65 mm×54 mm、天線導(dǎo)體寬度為1 mm、圈數(shù)為3圈的方形天線。
主控芯片ST2211輸入電壓為5.0~6.8 V,正常情況下有兩種供電方式:直流DC供電和USB供電。具體的硬件結(jié)構(gòu)如圖4所示。
當(dāng)僅有USB接入時(shí),USBVBUS電源電壓經(jīng)過(guò)集成電路IC(RT9285)由5 V升為7 V。同時(shí)ST2211內(nèi)部特殊寄存器“Usb_on_flag”被置位,表示 USB被識(shí)別,調(diào)節(jié)器 1被使能,將 5 V降為 3.3 V并經(jīng)過(guò)引腳“VU5_3”接至引腳“VCC”給ST2211內(nèi)部MCU供電。同時(shí)調(diào)節(jié)器2被禁止,調(diào)節(jié)器3被使能,將7 V降至5 V,經(jīng)過(guò)引腳“VBT6_5” 與 引 腳 “SV_VDD” 相 連 , 其 中 寄 存 器“SCVCC_EN”通過(guò) MOS管可以控制接觸式 IC卡的電源 引腳“SC_VCC”。
同理,當(dāng)ST2211與上位機(jī)通信僅使用串口時(shí),需外接直流DC,將220 V交流轉(zhuǎn)換成7 V直流。此時(shí)調(diào)節(jié)器2和調(diào)節(jié)器3被使能,調(diào)節(jié)器1被禁止。調(diào)節(jié)器2將7 V直流降至3.3 V,給內(nèi)部MCU供電。如果USB和串口同時(shí)被接入,則在驅(qū)動(dòng)層面串口通信被禁止,僅使用USB接口。
如圖 4所示,“SWITCH”是常開(kāi)開(kāi)關(guān),與智能 IC卡的卡座機(jī)械相連,僅當(dāng)IC卡插入卡座時(shí)才閉合。“SC_DET”為智能 IC卡檢測(cè)引腳,當(dāng) IC卡插入時(shí),開(kāi)關(guān)“SWITCH”閉合,則寄存器SCSB被置位。
圖4中LVD模塊為低電壓檢測(cè)模塊 (Low Voltage Detector),電壓檢測(cè)值可由引腳“VIN”讀出。按圖4中連接方式,當(dāng) R3為 300 kΩ,R4為 100 kΩ 時(shí),可以由式(1)計(jì)算得到檢測(cè)電壓為5 V。
當(dāng)?shù)碗妷嚎刂萍拇嫫鱈VDEN被置位時(shí),LVD被使能,引腳“VIN”上的數(shù)值經(jīng)過(guò) 30 μs后處于穩(wěn)定狀態(tài),即可以進(jìn)行讀取。因?yàn)長(zhǎng)VD模塊消耗電流,所以當(dāng)?shù)碗妷簷z測(cè)完成后,應(yīng)將LVDEN清零。
射頻芯片PN532基于80C51內(nèi)核,內(nèi)部包含工作載波為13.56 MHz的非接觸式通信模塊。整個(gè)芯片工作電壓為3.3 V,其供電結(jié)構(gòu)如圖5所示。
圖5中的“VBTIN”網(wǎng)絡(luò)結(jié)點(diǎn)如圖4中所示,為USBVBUS經(jīng)過(guò)RT9285升壓后與7 V直流DC的連接處。由圖5可知VBTIN經(jīng)過(guò)U5穩(wěn)壓成3.3 V后供電給PN532,同時(shí)在VBTIN與U5之間加入了一個(gè)絕緣柵型增強(qiáng)型P溝道的場(chǎng)效應(yīng)管來(lái)控制電路的通斷,如果直接用ST2211的PC5引腳(普通GPIO)來(lái)驅(qū)動(dòng)G極,無(wú)法將場(chǎng)效應(yīng)管完全關(guān)斷,所以為了增大驅(qū)動(dòng)能力,在PC5外還加了NPN的三極管。當(dāng)讀卡器通過(guò)USB與上位機(jī)相連后,如果主機(jī)休眠則可以選擇性地通過(guò)PC5關(guān)閉PN532供電,減少USB的電流消耗。
該讀卡器系統(tǒng)采用了USB和串口兩種與上位機(jī)通信方式,需經(jīng)過(guò)自定義的驅(qū)動(dòng)層將兩種通信接口的數(shù)據(jù)進(jìn)行打包成符合微軟標(biāo)準(zhǔn)CCID的格式。軟件架構(gòu)如圖6所示。其中接觸式IC卡的識(shí)別是通過(guò)卡片插入時(shí)相應(yīng)的開(kāi)關(guān)被閉合來(lái)識(shí)別的,而非接觸式智能卡則是通過(guò)每秒4次輪詢磁場(chǎng)中是否有卡片來(lái)進(jìn)行識(shí)別的。
圖6 多功能讀卡器的軟件架構(gòu)
讀卡器上的主要流程如圖7所示,每次重新啟動(dòng)后,處理各種中斷,并初始化相關(guān)寄存器,然后進(jìn)入程序主循環(huán)。ST2211檢測(cè)與上位機(jī)通信接口是否已經(jīng)建立,如果有USB中斷或者串口中斷發(fā)生則將數(shù)據(jù)按標(biāo)準(zhǔn)CCID格式進(jìn)行打包并繼續(xù)向下處理,否則仍然在主程序處循環(huán)。
圖7 多功能讀卡器主程序流程圖
本文對(duì)兼容接觸式和非接觸式卡片的多功能讀卡器的硬件設(shè)計(jì)進(jìn)行了較為詳細(xì)的論述,同時(shí)對(duì)讀卡器系統(tǒng)的軟件架構(gòu)和總體流程作了簡(jiǎn)介,對(duì)于文中涉及的芯片的開(kāi)發(fā)使用有具體指導(dǎo)意義。
[1]李翔.智能卡研發(fā)技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2003.
[2]Sitronix.ST2211 User’s Manual.Version 0.2 October 2006.
[3]Philips Co Ltd.PN532 datasheet.Rev.3.0-15,2006.
[4]Philips Co Ltd.PN532 User’s Manual.Rev.06-07.2006.