《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于MCU實現(xiàn)CPU卡讀寫驅(qū)動接口的設計
基于MCU實現(xiàn)CPU卡讀寫驅(qū)動接口的設計
2016年微型機與應用第08期
高柱榮1,2,蔡國永1
(1.桂林電子科技大學 計算機科學與工程學院,,廣西 桂林 541004,; 2.桂林市利通電子科技有限責任公司,廣西 桂林 541004
摘要: 提出了一種CPU卡低層讀寫驅(qū)動接口的設計方案,,該方案采用MCU的通用I/O引腳直接驅(qū)動CPU卡的方式實現(xiàn),。首先分析了CPU卡的接口特性及傳輸協(xié)議,介紹了方案設計時對MCU選型的注意事項和ESAM安全模塊的功能及作用,;接著基于Microchip公司的PIC16LF1946芯片,,完成了方案中硬件接口設計和軟件接口函數(shù)設計;最后對方案中給出的設計進行實現(xiàn)和接口驗證測試,。測試結果表明,,該設計方案符合ISO7816標準的要求,能高效實現(xiàn)CPU卡的讀寫,。
Abstract:
Key words :

  高柱榮1,2,,蔡國永1

  (1.桂林電子科技大學 計算機科學與工程學院,,廣西 桂林 541004,;2.桂林市利通電子科技有限責任公司,廣西 桂林 541004)

  摘要:提出了一種CPU卡低層讀寫驅(qū)動接口的設計方案,,該方案采用MCU的通用I/O引腳直接驅(qū)動CPU卡的方式實現(xiàn),。首先分析了CPU卡的接口特性及傳輸協(xié)議,介紹了方案設計時對MCU選型的注意事項和ESAM安全模塊的功能及作用,;接著基于Microchip公司的PIC16LF1946芯片,完成了方案中硬件接口設計和軟件接口函數(shù)設計,;最后對方案中給出的設計進行實現(xiàn)和接口驗證測試,。測試結果表明,該設計方案符合ISO7816標準的要求,,能高效實現(xiàn)CPU卡的讀寫,。

  關鍵詞: CPU卡;ESAM模塊,;讀寫接口,;傳輸協(xié)議;ISO7816

0引言

  當今,,各類IC卡(如居民身份證,、社保卡,、水電氣充值卡等)已成為人們?nèi)粘I钪胁豢扇鄙俚囊徊糠?,并為人們的生活帶來了極大的便利。IC卡技術也已從最初的存儲卡、邏輯加密卡發(fā)展到今天的CPU卡,。與之相應的是需要配備大量的IC卡智能終端設備,。目前開發(fā)的IC卡智能終端設備中的讀寫接口部分大多采用專用的接口芯片來實現(xiàn),如TDA8007等,,這使得產(chǎn)品的成本較高,,體積也較大。本文提出一種基于設備產(chǎn)品的主控MCU通用引腳,,直接模擬通信協(xié)議實現(xiàn)接觸式CPU卡讀寫接口的低成本實用方案,。

1CPU卡的接口特性及傳輸協(xié)議

  CPU卡也稱智能卡(Smart Card),卡中的集成電路包括微處理器,、EEPROM,、隨機存儲器RAM、程序存儲器ROM(Flash)以及片內(nèi)操作系統(tǒng)(COS),。裝有COS的CPU卡相當于一臺微型計算機,,不僅具有數(shù)據(jù)存儲功能,同時具有命令處理和數(shù)據(jù)安全保護等功能,。按卡與外界數(shù)據(jù)傳送的形式來劃分,,可將CPU卡分為接觸式卡、非接觸式卡和雙界面卡,。

  1.1CPU卡的觸點分配

  CPU卡觸點的分配遵循ISO78162的規(guī)定[1],,如圖1所示,表1為觸點的功能及工作參數(shù)說明,?! ?/p>

001.jpg

  1.2CPU卡使用過程

  正常的用卡過程可劃分為如下4個階段[2]:

  (1)把IC卡插入終端接口設備,,并接通各觸點,;

  (2)使IC卡復位并在終端和IC卡間建立通信,;

 ?。?)執(zhí)行交易;

 ?。?)釋放觸點并取出IC卡,。

  1.3傳輸協(xié)議

  根據(jù)ISO7816-4的規(guī)定,CPU卡必須支持異步半雙工字符傳輸協(xié)議(T=0)或異步半雙工塊傳輸協(xié)議(T=1)中的一種,,且僅支持一種,。讀卡終端則必須同時支持T=0和T=1的兩種協(xié)議[3]。目前T=0通信協(xié)議的應用最為廣泛,,大多數(shù)CPU卡都支持該協(xié)議,,在金融交易中也采用這種通信協(xié)議,,基于此,本文僅討論T=0協(xié)議,。

  1.3.1協(xié)議命令

  協(xié)議的命令格式如下[4]:

       H074L5_%C76_CM859%USB4F.png其中CLA表示命令類別,;INS表示指令代碼;P1,、P2為INS的參數(shù)字節(jié),;Lc為發(fā)送數(shù)據(jù)長度, 可選字段,長度為0,、1 B或3 B,;Data為命令數(shù)據(jù)字段,可選字段,,長度為0~N B,;Le為接收數(shù)據(jù)長度,可選字段,,長度為0,、1 B、2 B或3 B,,指出命令響應中預期的數(shù)據(jù)最大字節(jié)數(shù),;命令頭由命令的前5 B組成,其中第5個字節(jié)(P3)由INS的編碼而定,,或是表示命令中送給CPU卡的數(shù)據(jù),,或是等待從CPU卡響應的最大數(shù)據(jù)長度?! f(xié)議響應的格式如下:

        ~QZV}4B2T~1HK16SDC[T_(Q.png

2其中Data為返回數(shù)據(jù)字段,,可選字段,長度為0~N B;SW1,、SW2為響應狀態(tài)字節(jié),。

  1.3.2過程字節(jié)

  CPU卡在收到命令頭后,回送一個過程字節(jié)給傳輸層(TTL),,向TTL指明下一步必須采取的措施[2],如表2所示,。

007.jpg

  在情況Ⅰ或Ⅱ時,,當TTL采取的措施實行后,它就等待著另一個過程字節(jié),。當情況為Ⅲ時,,在收到第2個狀態(tài)字節(jié)SW2之后,TTL必須處理如下:

 ?。?)如果過程字節(jié)為"61",,則TTL送出一條GET RESPONSE命令給IC卡,,其中的最大長度為XX,XX為SW2的值,。

 ?。?)如果過程字節(jié)為"6C",則TTL立即重發(fā)前一個命令的命令頭給IC卡,,其長度為XX,,XX是SW2之值。

 ?。?)如果過程字節(jié)為"6X"(除了"60",、"61"和"6C")或"9X",TTL將通過命令響應返回狀態(tài)碼給應用層(TAL),,由TAL處理,,并等待下一個命令。

2硬件接口設計

  能對CPU卡進行讀寫操作的MCU,,第一,,需要有時鐘輸出CLKOUT功能,能輸出1~5 MHz的某一頻率時鐘,;第二,,需要有一個外部中斷口,用于檢測插卡動作,。當然,,開發(fā)一個項目,比如卡式水表或燃氣表,,還需要考慮低功耗,、LCD驅(qū)動、A/D轉(zhuǎn)換,、內(nèi)部存儲器和內(nèi)部振蕩器等,,盡量用一顆MCU完成項目的所有功能以節(jié)約成本。

  在本案中,,選用了Microchip公司的8位CMOS閃存單片機PIC16LF1946芯片[5],。該芯片內(nèi)置高精度振蕩器,可選32 MHz,、16 MHz(TYP),、8 MHz、4 MHz,、2 MHz,、1 MHz作為系統(tǒng)時鐘;內(nèi)置16K×14 B的閃存程序存儲器,,1 024 B的數(shù)據(jù)存儲器(RAM),,256 B數(shù)據(jù)EEPROM,;自帶LCD驅(qū)動器,最多能驅(qū)動4×46位段的面板,;一個時鐘輸出引腳,,輸出頻率為Fosc/4;還有17個10 bit分辨率的AD采樣口,,8個外部中斷口,,5個定時/計數(shù)器等功能部件;超低功耗設計,已采用該芯片開發(fā)完成的卡式燃氣表,,其平均電流小于8 μA,。這些資源和特性滿足控制系統(tǒng)的需求。

  2.1ESAM

  嵌入式安全控制模塊(Embedded Secure Access Module,,ESAM)其實質(zhì)為DIP或者SOP芯片封裝的CPU卡芯片,,最早被用于IC卡電表作為錢包使用,存儲充值及消費金額以及其他一些重要的參數(shù),,同時具有身份識別功能,,與外部卡片進行雙向身份認證。隨著終端安全的日益被重視,,目前ESAM被廣泛應用于各種智能終端設備中,,實現(xiàn)文件和密鑰的安全存儲、數(shù)字簽名,、數(shù)據(jù)加密解密,、雙向身份認證、內(nèi)部分散密鑰,、電子錢包等多種功能[6],。ESAM的讀寫接口與CPU卡的讀寫接口完全一致。

  2.2電路設計

  本方案包括CPU卡接口電路和ESAM接口電路,,可實現(xiàn)對CPU卡讀寫,、密鑰認證和數(shù)據(jù)存儲等功能。原理圖如圖2所示,。

002.jpg

  RG1和RG3端口分別連接CPU卡的數(shù)據(jù)IO和RST,,RF6和RF5端口分別連接ESAM模塊的數(shù)據(jù)IO和RST。

  CPU卡的工作時鐘直接使用MCU的引腳輸出時鐘,,這樣就可以很好地實現(xiàn)雙方的通信時鐘同步問題,。因PIC16LF1946單片機只有一個時鐘輸出端口(RA6),只能使用此端口同時給CPU卡和ESAM提供工作時鐘,,時鐘工作頻率設置為4 MHz,以充分利用CPU卡的高速性能,。

  從降低功耗和安全性方面考慮,,CPU卡和ESAM的電圖2電路原理圖源和時鐘應該由MCU來控制,,RG2端口控制給卡座供電,RF7端口控制給ESAM卡供電,,RG0端口控制時鐘輸出,。使用具有中斷功能的RB0端口檢測卡片的插入與拔出,當有卡片插入卡座時,,給卡座供電,,同時輸出時鐘信號;當卡片拔出后應立即停止供電和關閉時鐘輸出,。ESAM也一樣,,其電源和時鐘在需要訪問時才打開,訪問結束后關閉,。

3軟件函數(shù)設計

  實現(xiàn)整個接口驅(qū)動,,可設計成6個函數(shù)來完成,應用層一般只需調(diào)用上電復位函數(shù),、卡命令處理函數(shù)和下電關閉函數(shù),。

  void delayETU(x):位持續(xù)時間延時函數(shù);

  void cpu_deactivation(void):下電關閉函數(shù),;

  static unsigned char cpu_receivebyte(unsigned char *c):接收字符幀函數(shù),;

  static unsigned char cpu_sendbyte(unsigned char c):發(fā)送字符幀函數(shù);

  unsigned char cpu_reset(unsigned char len,unsigned char *data_buffer):上電復位函數(shù),;

  unsigned char cpu_protocol(unsigned char len, const unsigned char *send_cmd, unsigned char *lenr, unsigned char *receive_data, unsigned char bRespondAuto):卡命令處理函數(shù),。

  3.1位持續(xù)時間的計算

  終端與CPU卡之間通過改變I/O傳輸線上的電平來交換信息,在數(shù)據(jù)傳輸中每一位的持續(xù)時間稱為基本時間單元(Elementary Time Unit,,ETU),,ETU的值由時鐘頻率f決定,其計算公式為:

  1 ETU=372/f(1)

  其中,,f的單位為Hz,,在卡的整個交易過程中,f的值應在1~5 MHz之間[2],。當時鐘頻率f選擇4 MHz時,,1 ETU=93 μs,這只是一個理論值,,在實際應用中,,受到編程語言及編譯器的影響會有小幅變化,需調(diào)測出最小值和最大值,,選擇中間值使用,。

  3.2上電復位

  CPU卡插入卡座前,必須確保終端的所有觸點都處于低電平狀態(tài),。當MCU的外部中斷檢測到有卡片插入卡座時,,在做必要的防抖動處理后,,開始進入對CPU的上電復位操作,步驟如下:

 ?。?)給Vcc上電,,延時20 μs左右等待Vcc穩(wěn)定;

 ?。?)加上CLK時鐘信號,;

  (3)把I/O線置為接收方式,;

 ?。?)延時40 000~45 000個CLK周期,之后把RST置為高電平狀態(tài),;

 ?。?)循環(huán)檢測CPU卡上I/O的復位應答信號,正常情況下,,400多個CLK周期之后便能開始收到應答,,如應答字節(jié)符合ISO78163的要求,則復位成功,;如在40 000個CLK周期內(nèi)沒有收到應答,,表明復位失敗,需對CPU卡執(zhí)行下電操作,,釋放各個觸點,。

  3.3下電關閉

  下電是用卡過程的最后一個步驟,在交易結束后(包括異常結束),,必須按以下步驟釋放各觸點:

 ?。?)置RST為低電平狀態(tài);

 ?。?)在RST置為低電平之后,,且Vcc置為低電平之前,將CLK關閉,,I/O置為低電平,;

  (3)置Vcc為低電平去電,。

  3.4接收字符幀

  每一個字符幀包含10個相連的數(shù)位:1位為低電平的起始位,、8位數(shù)據(jù)字節(jié)和1位偶校驗位。首先循環(huán)查詢起始位,,如果在40 000個CLK周期內(nèi)沒有收到低電平起始位,,表明接收字符幀失敗,返回接收超時失敗,;否則,,如收到圖3接收字符幀流程低電平起始位,則繼續(xù)接收后續(xù)的8位數(shù)據(jù)字節(jié)和1位偶校驗位,。之后,比較校驗位是否正確,,若校驗位正確則表明接收字符幀成功,;若校驗位錯誤,請求CPU卡重發(fā)字符幀,,最多請求重發(fā)2次,。若2次重新接收的字符幀都不正確,則返回接收失敗,。圖3是接收字符幀的函數(shù)流程圖,。

003.jpg

  3.5發(fā)送字符幀

  根據(jù)ISO7816標準的規(guī)定,要發(fā)送一個字符幀,,首先發(fā)送1位起始位,,接著發(fā)送8位數(shù)據(jù)字節(jié),最后發(fā)送偶校驗位,。之后,,I/O口轉(zhuǎn)為接收模式,再過一個ETU之后,,檢測I/O口,,若為高電平則表明字符發(fā)送成功,若為低電平則表明發(fā)送錯誤,,需要重新發(fā)送,。若重發(fā)2次都還是發(fā)送錯誤,則返回發(fā)送失敗,。圖4是發(fā)送字符幀的函數(shù)流程圖,。

  

004.jpg

  3.6卡命令處理函數(shù)

  在ISO7816標準中定義了多種終端與卡的信息交互命令,包括管理卡和文件的命令,、數(shù)據(jù)單元處理命令,、記錄處理命令、數(shù)據(jù)對象處理命令,、安全處理命令,、傳輸處理命令、用于結構化卡查詢語言的處理命令和在多應用環(huán)境中的應用管理命令,。當然,,在實際應用中并不要求所有的卡都支持全部的命令。

  所有命令均是由終端應用層(TAL)通過傳輸層(TTL)向IC卡發(fā)出命令,TTL首先把命令頭的5 B傳送給IC卡,,并等待著一個過程字節(jié)返回,,之后再根據(jù)返回的過程字節(jié)作進一步的處理[2]。

  圖5是卡命令處理函數(shù)的流程圖[7],,按此圖編寫的函數(shù)可處理所有終端與卡交互命令,。

  

005.jpg

4接口測試

  圖6卡式燃氣表控制器使用某一燃氣表項目的CPU卡,對按照本文接口方案開發(fā)的卡式燃氣表控制器(如圖6所示)進行測試,,分別測試了上電復位函數(shù),、卡命令處理函數(shù)和下電關閉函數(shù)。測試結果表明接口的設計符合ISO7816的要求,。

006.jpg

 ?。?)上電復位測試

  把CPU卡插入卡座,控制器MCU執(zhí)行cpu_reset()函數(shù),,接收到從CPU卡返回的應答數(shù)據(jù):3B 6D 00 00 57 44 29 46 40 86 93 00 07 E2 07 45 2C,。該數(shù)據(jù)符合ISO78163的復位應答要求,上電復位函數(shù)測試成功,。

 ?。?)選擇應用目錄命令測試

  MCU執(zhí)行cpu_protocol()函數(shù),給CPU卡發(fā)送命令:00 A4 00 00 02 DF 01,;CPU卡返回應答數(shù)據(jù):6F 10 84 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 32 90 00,。

  應答數(shù)據(jù)的最后2 B為狀態(tài)字節(jié)SW1和SW2,其中90 00表示執(zhí)行命令成功,。

 ?。?)讀取用戶卡號命令測試

  MCU執(zhí)行cpu_protocol()函數(shù),給CPU卡發(fā)送命令:00 B0 8A 0C 08,;CPU卡返回應答數(shù)據(jù):07 55 00 01 26 70 17 06 90 00,。

  應答數(shù)據(jù)的前8 B為用戶卡的卡編號,后2 B狀態(tài)字節(jié)90 00表示執(zhí)行命令成功,。

 ?。?)下電關閉測試

  在MCU執(zhí)行cpu_deactivation ()函數(shù)之后,使用萬用表檢測卡座的RST,、Vcc和I/O觸點均為低電平,,使用示波器檢測CLK觸點為沒有波型輸出,說明CPU卡已下電關閉成功,。

5結論

  本文是在具體的項目開發(fā)過程中,,根據(jù)ISO7816系列標準,基于MCU通用I/O引腳實現(xiàn)了CPU卡讀寫接口的軟硬件低層驅(qū)動設計,,此設計方案已在實際應用中得到了驗證,,效果良好,。讀者稍加修改或不用修改便可以把本文的設計應用到其他CPU卡系統(tǒng)項目中。

參考文獻

 ?。?] International Standard ISO/IEC 78162. Dimensions and location of the contacts[S]. 2007.

 ?。?] International Standard ISO/IEC 78163. Electrical interface and transmission protocols[S]. 2006.

  [3] International Standard ISO/IEC 78164. Organization, security and commands for interchange[S]. 2005.

 ?。?] 王愛英. 智能卡技術——IC卡,、RFID標簽與物聯(lián)網(wǎng)(第4版)[M]. 北京:清華大學出版社, 2015.

  [5] Microchip. PIC16(L)F1946/1947數(shù)據(jù)手冊[Z]. 2012.

 ?。?] 王耀. ESAM安全模塊及其在卡表上的應用[J]. 城市燃氣, 2003, 337(3): 1821.

 ?。?] 陳峰,尹寒. CPU卡的接口特性、傳輸協(xié)議與讀寫程序設計[J]. 單片機與嵌入式系統(tǒng)應用, 2002(3): 1722.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉(zhuǎn)載。