李冬霞,張雪慶
(中國(guó)民航大學(xué)電子信息工程學(xué)院,天津 300300)
基于ARM的USB讀卡器設(shè)計(jì)與測(cè)試
李冬霞,張雪慶
(中國(guó)民航大學(xué)電子信息工程學(xué)院,天津 300300)
設(shè)計(jì)了一個(gè)基于ARM Cortex-M3和USB接口的智能卡讀卡器系統(tǒng),采用具有ARM Cortex-M3內(nèi)核的STM32F103R6T6等芯片進(jìn)行相關(guān)的硬件設(shè)計(jì);分別使用Keil和Visual C++6.0進(jìn)行固件程序和驅(qū)動(dòng)程序開發(fā),實(shí)現(xiàn)了計(jì)算機(jī)與智能卡的準(zhǔn)確、高效通信。同時(shí),通過(guò)設(shè)計(jì)測(cè)試程序?qū)ο到y(tǒng)的功能和性能進(jìn)行測(cè)試,證明其有效性。
智能卡;USB通信;驅(qū)動(dòng)程序;測(cè)試
USB是一種高效、快速、經(jīng)濟(jì)的串行通信接口,其易用性和可擴(kuò)展性在業(yè)界得到了廣泛的支持和應(yīng)用[1]。目前,市場(chǎng)上大多采用單片機(jī)和串口通信的智能卡讀卡器,其通信速度和中斷響應(yīng)速度受到很大限制。本文針對(duì)商業(yè)和稅控等應(yīng)用,設(shè)計(jì)了基于USB接口的智能卡讀卡器系統(tǒng),系統(tǒng)設(shè)計(jì)中選用ST公司的新一代32位閃存微控制器(STM32)。STM32系列芯片擁有ARM Cortex-M3內(nèi)核,專為嵌入式應(yīng)用開發(fā),可大幅度提高中斷響應(yīng)速度,同時(shí)具有更低的功耗[2]。本文著重說(shuō)明此類智能卡讀卡器的軟件設(shè)計(jì)與測(cè)試方法。
智能卡USB讀卡器通過(guò)USB接口實(shí)現(xiàn)計(jì)算機(jī)與智能卡的快速、高效通信。USB接口通信必須按照USB接口功能層次逐層進(jìn)行設(shè)計(jì);而智能卡信息的有效讀取和寫入必須基于相應(yīng)的應(yīng)用協(xié)議數(shù)據(jù)單元。
智能卡中每個(gè)應(yīng)用都包括一系列信息項(xiàng)[3],信息項(xiàng)是信息最小單位,即應(yīng)用協(xié)議數(shù)據(jù)單元(APDU),其用名稱、邏輯內(nèi)容說(shuō)明、格式及代碼來(lái)標(biāo)識(shí),在終端成功完成應(yīng)用選擇后可對(duì)這些信息進(jìn)行訪問(wèn)。APDU可分為命令A(yù)PDU和響應(yīng)APDU[4]。
命令A(yù)PDU由4字節(jié)長(zhǎng)的必備頭和一個(gè)可變長(zhǎng)的條件體組成,響應(yīng)APDU由一個(gè)變長(zhǎng)的條件體和2字節(jié)長(zhǎng)的必備尾組成,如圖1所示,APDU報(bào)文的內(nèi)容描述如表1所示。
圖1 APDU結(jié)構(gòu)Fig.1 APDU formats
表1 APDU的內(nèi)容描述Tab.1 APDU fields description
說(shuō)明:在命令A(yù)PDU需要時(shí),Le字段始終被設(shè)為‘00(H)’,表示需要的最大字節(jié)數(shù)為256字節(jié)。
針對(duì)設(shè)計(jì)好的智能卡讀卡器硬件系統(tǒng),如圖2所示,其軟件的設(shè)計(jì)首先要實(shí)現(xiàn)STM32F103R6T6分別與智能卡和USB接口的通信,即讀卡器固件子系統(tǒng)軟件,然后再實(shí)現(xiàn)讀卡器與PC端應(yīng)用程序之間的數(shù)據(jù)傳輸,即PC端子系統(tǒng)驅(qū)動(dòng)程序。最終實(shí)現(xiàn)計(jì)算機(jī)與智能卡通信,完成對(duì)智能卡的一系列操作。
圖2 智能卡讀卡器硬件系統(tǒng)Fig.2 Hardware system of smart card reader
讀卡器的固件程序設(shè)計(jì)是為了實(shí)現(xiàn)向智能卡寫入和讀出數(shù)據(jù),以及通過(guò)USB接口與計(jì)算機(jī)通信。程序采用模塊化設(shè)計(jì),在基于ARM的開發(fā)環(huán)境Keil下用C語(yǔ)言編寫、編譯,生成可執(zhí)行文件。
首先,初始化硬件設(shè)備。初始化時(shí)對(duì)智能卡、USB中斷及相應(yīng)的變量進(jìn)行初始化,設(shè)置USB接口的工作模式及讀寫使用的端點(diǎn)號(hào)。端點(diǎn)設(shè)置根據(jù)STM32F103R6T6的具體要求選擇,本設(shè)計(jì)中采用兩個(gè)端點(diǎn)(端點(diǎn)1和端點(diǎn)2),分別作為讀端點(diǎn)和寫端點(diǎn)。
此后,系統(tǒng)進(jìn)入循環(huán)等待狀態(tài),等待中斷發(fā)生。中斷產(chǎn)生后,根據(jù)中斷狀態(tài)從相應(yīng)的端點(diǎn)讀取數(shù)據(jù),或是向相應(yīng)的端點(diǎn)發(fā)送數(shù)據(jù)。如果STM32F103R6T6接收到USB接口發(fā)出的中斷,在接收數(shù)據(jù)的端點(diǎn)根據(jù)接收的數(shù)據(jù)進(jìn)行拆包處理,從中讀出對(duì)卡操作的APDU命令,通過(guò)智能卡接口發(fā)送給智能卡;如果STM32F103R6T6接收到了智能卡發(fā)出的中斷,則根據(jù)智能卡的命令進(jìn)行數(shù)據(jù)打包操作,并通過(guò)相應(yīng)的USB端點(diǎn)發(fā)送出去[5]。
最后,系統(tǒng)重新回到等待中斷的狀態(tài),具體流程如圖3所示。
圖3 讀卡器固件子系統(tǒng)程序流程Fig.3 Firmware program design flowchart of smart card reader
由于USB設(shè)備的開發(fā)需要驅(qū)動(dòng)程序的支持,因此高效的驅(qū)動(dòng)程序開發(fā)是USB設(shè)計(jì)的關(guān)鍵。目前開發(fā)USB設(shè)備驅(qū)動(dòng)程序有三種方式:使用Microsoft公司的DDK工具、使用KRFTech公司的WinDriver工具和使用Compuware公司的DriverStudio工具。僅使用DDK開發(fā)比較復(fù)雜,如同使用匯編語(yǔ)言一樣;而WinDriver有時(shí)難于實(shí)現(xiàn)某些設(shè)計(jì)目的[6]。本文設(shè)計(jì)的PC端子系統(tǒng)驅(qū)動(dòng)程序是由DriverStudio與Microsoft的DDK配合進(jìn)行開發(fā),該驅(qū)動(dòng)程序開發(fā)平臺(tái)開發(fā)效率較高,符合設(shè)計(jì)要求。
首先,根據(jù)硬件設(shè)置,利用驅(qū)動(dòng)程序生成向?qū)river Wizard生成USB設(shè)備驅(qū)動(dòng)程序整體框架。在該框架中,選擇驅(qū)動(dòng)程序類型為WDM(Windows Driver Model)、運(yùn)行平臺(tái)為Windows2000,確定USB總線類型;在此需要增加端點(diǎn)1和端點(diǎn)2,并設(shè)置其分別具有IN和OUT屬性,且必須與固件程序設(shè)計(jì)保持一致,否則無(wú)法驅(qū)動(dòng)讀卡器設(shè)備,這一點(diǎn)非常關(guān)鍵。
然后,根據(jù)需要選擇對(duì)設(shè)備的操作,包括:Read、Write、DeviceControl和CleanUp。例如,選擇給端點(diǎn)2產(chǎn)生BULK Write的代碼,向?qū)?huì)自動(dòng)產(chǎn)生一套對(duì)端點(diǎn)2進(jìn)行寫的代碼。接著設(shè)置端點(diǎn)的I/O屬性,在選取讀寫方式時(shí)應(yīng)遵循的原則是:需要快速傳送大量數(shù)據(jù)時(shí),用Direct I/O,反之用Buffer I/O。本文設(shè)計(jì)系統(tǒng)數(shù)據(jù)量不大,故選用Buffer I/O。
最后,生成一個(gè)WDM型的USB設(shè)備驅(qū)動(dòng)程序框架和一個(gè)測(cè)試該驅(qū)動(dòng)程序的測(cè)試程序框架。通過(guò)DriverStudio初步建立的驅(qū)動(dòng)程序框架,還需根據(jù)設(shè)計(jì)要求建立一系列用戶自定義的請(qǐng)求,如管理設(shè)備對(duì)象、設(shè)置即插即用策略、設(shè)置電源策略等。程序編寫完后進(jìn)行編譯,最終生成USB設(shè)備驅(qū)動(dòng)程序。此設(shè)計(jì)中不僅不需要對(duì)底層的硬件進(jìn)行編程,甚至可忽略與硬件控制緊密相關(guān)的復(fù)雜的Windows數(shù)據(jù)結(jié)構(gòu)和API函數(shù)的使用,這也證明了設(shè)計(jì)方法的正確性和實(shí)用性。
對(duì)USB智能卡讀卡器系統(tǒng)的整體測(cè)試分為單元測(cè)試和系統(tǒng)測(cè)試兩個(gè)階段。單元測(cè)試主要是對(duì)軟件模塊進(jìn)行白盒測(cè)試,系統(tǒng)測(cè)試則是對(duì)軟硬件系統(tǒng)整體進(jìn)行黑盒測(cè)試。
單元測(cè)試根據(jù)程序代碼和項(xiàng)目的《詳細(xì)設(shè)計(jì)文檔》設(shè)計(jì)。本文利用自動(dòng)化測(cè)試工具IBM Rational Test RealTime創(chuàng)建測(cè)試腳本,執(zhí)行測(cè)試用例和生成測(cè)試報(bào)告,對(duì)被測(cè)代碼進(jìn)行靜態(tài)分析和運(yùn)行時(shí)分析[7]。最終生成的測(cè)試報(bào)告包含代碼覆蓋分析報(bào)告,內(nèi)存分析報(bào)告,性能分析報(bào)告和執(zhí)行追蹤報(bào)告。
系統(tǒng)測(cè)試流程根據(jù)單元測(cè)試部分和《系統(tǒng)需求規(guī)格說(shuō)明書》設(shè)計(jì),具體包括針對(duì)USB通信和讀寫智能卡的大容量數(shù)據(jù)測(cè)試以及可靠性測(cè)試。本文設(shè)計(jì)的測(cè)試程序可用于測(cè)試USB的通信速度性能,以及測(cè)試使用APDU命令對(duì)智能卡操作的正確性。
1)通信速度測(cè)試
在固件程序設(shè)計(jì)中已經(jīng)設(shè)定:如果數(shù)據(jù)包第4位為“AF(H)”,則表示發(fā)送的數(shù)據(jù)為測(cè)試USB通信的數(shù)據(jù)。讀卡器將通過(guò)接收端點(diǎn)接收的數(shù)據(jù)原樣返回給發(fā)送端點(diǎn),完成了一次接收發(fā)送數(shù)據(jù)的測(cè)試。
2)APDU命令測(cè)試
根據(jù)圖1的智能卡APDU結(jié)構(gòu)及表1內(nèi)容,通過(guò)文中設(shè)計(jì)的測(cè)試程序測(cè)試有智能卡情況下利用APDU命令對(duì)智能卡的操作:即發(fā)送單條命令測(cè)試讀寫智能卡里的數(shù)據(jù)和返回值是否正確,具體流程如圖4所示。
文中使用自動(dòng)化測(cè)試工具IBM Rational Test Real-Time生成并執(zhí)行測(cè)試用例,分別針對(duì)部分函數(shù)和不同類型的程序模塊進(jìn)行性能分析和代碼覆蓋率測(cè)試。通過(guò)分析代碼覆蓋分析報(bào)告和性能分析報(bào)告,查找出部分代碼執(zhí)行效率不高,存在性能上的問(wèn)題。因此,對(duì)代碼執(zhí)行的流程做了相應(yīng)修改,達(dá)到了提高代碼效率的目的。修改前后的分析報(bào)告分別如圖5(a)和圖5(b)所示。
圖 5(a)中,函數(shù) USB_WriteEP()和 USB_ReadEP()的占用時(shí)間分別為26.91%和26.89%,通過(guò)修改部分程序,采用雙緩沖機(jī)制,不需要等待判斷標(biāo)志位即可把數(shù)據(jù)存入另一個(gè)緩沖區(qū),提高了函數(shù)接收發(fā)送數(shù)據(jù)的速度,使得原來(lái)所占用總程序時(shí)間的26.91%和26.89%縮短至0.1%,如圖5(b)所示。可見(jiàn),修改后減少了軟件延遲,大幅提高了效率。同時(shí),通過(guò)修改測(cè)試腳本,增加測(cè)試用例,提高了代碼覆蓋率。如圖5中“Modified conditions”和“Multiple conditions”兩種類型程序模塊的覆蓋率分別由修改前的21.4%和33.3%提高到修改后的28.6%和38.9%。
1)通信速度測(cè)試
利用測(cè)試程序可發(fā)送任意次數(shù)的數(shù)據(jù)【12 00 FB AF……】(16進(jìn)制顯示),如圖6所示。通過(guò)大量測(cè)試,證明發(fā)送和接收的數(shù)據(jù)完全一致,同時(shí)也表明USB通信正確、可靠。經(jīng)計(jì)算,在無(wú)卡情況下USB通信符合USB2.0規(guī)范標(biāo)準(zhǔn)。
通過(guò)與其他廠家生產(chǎn)的讀卡器(A和B)技術(shù)參數(shù)進(jìn)行比較,得出本文所設(shè)計(jì)的讀卡器在通信速度、功耗、可靠性上具有一定的優(yōu)勢(shì),如表2所示。
表2 讀卡器技術(shù)參數(shù)比較Tab.2 Parameter comparison of smart card readers
2)APDU命令測(cè)試
按照測(cè)試流程,首先發(fā)送對(duì)卡的復(fù)位命令,接著發(fā)送VERIFY命令,再選擇透明文件,隨之執(zhí)行讀透明文件【12 00 05 00 B0 00 86 30 C0】,其中,“12 00(H)”是數(shù)據(jù)包頭,“05(H)”是數(shù)據(jù)包長(zhǎng)度,“00 B0 00 86(H)”分別是文件參數(shù) CLA 、INS、P1、P2,“30(H)”是本命令所期望得到的數(shù)據(jù)字節(jié)數(shù),“C0(H)”是數(shù)據(jù)包的校驗(yàn)位。智能卡返回的數(shù)據(jù)是【21 00 32 F7 D2 87 3A 48 AF DC FE A6 9E 64 3D E3 BA 91 7C D7 9C FB C0 68 B8 AA B3 F7 D2 87 3A 48 AF DC FE 19 A2 61 12 40 9E 27 57 02 89 D9 3F 41 5E 88 6F 90 00 32】,其中,“21 00(H)”是響應(yīng)數(shù)據(jù)包頭,“32(H)”是數(shù)據(jù)包長(zhǎng)度(包括響應(yīng)APDU中的Data和兩個(gè)字節(jié)的SW1、SW2字段),“F7 D2 87 3A 48 AF DC FE A6 9E 64 3D E3 BA 91 7C D7 9C FB C0 68 B8 AA B3 F7 D2 87 3A 48 AF DC FE 19 A2 61 12 40 9E 27 57 02 89 D9 3F 41 5E 88 6F”是智能卡中所讀到的該透明文件的數(shù)據(jù)內(nèi)容,如圖7所示。
以上命令測(cè)試說(shuō)明,通過(guò)發(fā)送命令讀取智能卡中確定字節(jié)數(shù)量的文件,讀卡器能夠完成對(duì)智能卡中數(shù)據(jù)的讀取。讀卡器采用單一解決方案的EMV 2000 L1和 PC/SC 標(biāo)準(zhǔn),支持符合 ISO 7816 A(5V)、B(3V)類智能卡,智能卡接口支持T0、T1協(xié)議,經(jīng)過(guò)充分測(cè)試,兼容市場(chǎng)中所有主流稅控智能卡。
3)可靠性測(cè)試
為提供較高可靠性,本文設(shè)計(jì)的智能卡讀卡器采用觸點(diǎn)短路保護(hù)電路。在測(cè)試中進(jìn)行模擬200 000次插拔卡實(shí)驗(yàn),充分證明了設(shè)備設(shè)計(jì)的可靠性,完全符合國(guó)家相關(guān)標(biāo)準(zhǔn)規(guī)定[8]。目前,產(chǎn)品通過(guò)了國(guó)家計(jì)算機(jī)檢測(cè)中心(NCTC)的檢測(cè),其中電磁兼容性能通過(guò)了國(guó)家B級(jí)標(biāo)準(zhǔn)(最高級(jí)別)。
綜上所述,筆者所設(shè)計(jì)的基于ARM的智能卡USB讀卡器系統(tǒng)能夠與計(jì)算機(jī)進(jìn)行高速數(shù)據(jù)通信,對(duì)智能卡操作準(zhǔn)確無(wú)誤,讀取數(shù)據(jù)正確。讀卡器設(shè)備無(wú)需外接電源、即插即用,驅(qū)動(dòng)程序穩(wěn)定、安全、可靠地完成設(shè)備與應(yīng)用程序之間的數(shù)據(jù)通信,實(shí)現(xiàn)軟硬件協(xié)同整合。而且本系統(tǒng)滿足當(dāng)今稅務(wù)管理系統(tǒng)對(duì)智能卡的應(yīng)用需求,市場(chǎng)應(yīng)用潛力巨大。本文的創(chuàng)新點(diǎn)在于詳細(xì)設(shè)計(jì)了基于ARM的USB讀卡器,具有更高的中斷響應(yīng)速度、更低的功耗,簡(jiǎn)化了軟件開發(fā)的流程,提高了整個(gè)系統(tǒng)性能。
[1] 陳青松,王 ?。ㄓ么锌偩€的數(shù)據(jù)傳輸[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(11):2077-2079.
[2]STM32F10xxx_Reference_Manual_Chinese[G].STMicroelectronics,2007.
[3]GB 18240.2-2003,稅控收款機(jī)第2部分:稅控IC卡規(guī)范[S].
[4] 王卓人,王金峰.智能卡大全[M].北京:電子工業(yè)出版社,2008:257-259.
[5] 郭佑民,王 杰,孫啟國(guó).基于嵌入式微處理器S3C44B0X的USB通信[J].微計(jì)算機(jī)信息,2008,1(2):156-157.
[6] 薛園園.USB應(yīng)用開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007:8-9.
[7]IBM Rational Test RealTime[G].IBM Corporation,2009.
[8]GB/T 16649.3-2006,識(shí)別卡-帶觸點(diǎn)的集成電路卡(ISO/IEC 7816-3:1997 IDT)[S].
Design and Test of USB Smart Card Reader Based on ARM
LI Dong-xia,ZHANG Xue-qing
(College of Electronic and Information Engineering, CAUC, Tianjin 300300,China)
A smart card reader is designed based on ARM Cortex-M3 and USB.The STM32F103R6T6 whose core is ARM Cortex-M3 is used in the hardware design,and the software Keil and Visual C++6.0 are used in the design of firmware program and driver of the smart card reader.The correct and effective communications between the computer and the smart card is realized.Meanwhile,the test program is designed to detect the correctness and effectiveness of the smart card reader in this paper.
smart card; USB communications; driver program; test
TP311
A
1674-5590(2010)04-0031-04
2009-10-18;
2009-12-28 基金項(xiàng)目:中國(guó)民航大學(xué)科研基金項(xiàng)目(qd02so7)
李冬霞(1971—),女,陜西綏德人,副教授,工學(xué)博士,研究方向?yàn)閿?shù)據(jù)網(wǎng)絡(luò)通信、通信協(xié)議的實(shí)現(xiàn).
(責(zé)任編輯:楊媛媛)