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

  高柱榮1,2,蔡國永1

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

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

  關鍵詞: CPU卡;ESAM模塊讀寫接口;傳輸協議;ISO7816

0引言

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

1CPU卡的接口特性及傳輸協議

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

  1.1CPU卡的觸點分配

  CPU卡觸點的分配遵循ISO78162的規定[1],如圖1所示,表1為觸點的功能及工作參數說明。  

001.jpg

  1.2CPU卡使用過程

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

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

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

  (3)執行交易;

  (4)釋放觸點并取出IC卡。

  1.3傳輸協議

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

  1.3.1協議命令

  協議的命令格式如下[4]:

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

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

2其中Data為返回數據字段,可選字段,長度為0~N B;SW1、SW2為響應狀態字節。

  1.3.2過程字節

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

007.jpg

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

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

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

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

2硬件接口設計

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

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

  2.1ESAM

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

  2.2電路設計

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

002.jpg

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

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

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

3軟件函數設計

  實現整個接口驅動,可設計成6個函數來完成,應用層一般只需調用上電復位函數、卡命令處理函數和下電關閉函數。

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

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

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

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

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

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

  3.1位持續時間的計算

  終端與CPU卡之間通過改變I/O傳輸線上的電平來交換信息,在數據傳輸中每一位的持續時間稱為基本時間單元(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,這只是一個理論值,在實際應用中,受到編程語言及編譯器的影響會有小幅變化,需調測出最小值和最大值,選擇中間值使用。

  3.2上電復位

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

  (1)給Vcc上電,延時20 μs左右等待Vcc穩定;

  (2)加上CLK時鐘信號;

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

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

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

  3.3下電關閉

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

  (1)置RST為低電平狀態;

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

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

  3.4接收字符幀

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

003.jpg

  3.5發送字符幀

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

  

004.jpg

  3.6卡命令處理函數

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

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

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

  

005.jpg

4接口測試

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

006.jpg

  (1)上電復位測試

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

  (2)選擇應用目錄命令測試

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

  應答數據的最后2 B為狀態字節SW1和SW2,其中90 00表示執行命令成功。

  (3)讀取用戶卡號命令測試

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

  應答數據的前8 B為用戶卡的卡編號,后2 B狀態字節90 00表示執行命令成功。

  (4)下電關閉測試

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

5結論

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

參考文獻

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

  [2] 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.

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

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

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

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


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美精品色一区二区三区| 欧美三日本三级少妇三2023| aaa亚洲精品一二三区| 久久精品成人欧美大片古装| 亚洲午夜免费视频| 亚洲精品在线一区二区| 亚洲高清免费在线| 尤物九九久久国产精品的分类| 国产欧美日韩综合一区在线观看 | 欧美日韩综合在线| 欧美日本在线一区| 欧美国产日本在线| 欧美成人中文| 欧美电影免费网站| 欧美精品三级在线观看| 欧美日本一区| 欧美日韩精品一区二区在线播放| 欧美国产激情| 欧美精品久久久久久久| 欧美另类极品videosbest最新版本| 欧美va亚洲va香蕉在线| 欧美大学生性色视频| 欧美国产先锋| 欧美日韩三级视频| 国产精品xvideos88| 国产精品chinese| 国产精品成人va在线观看| 国产精品美女久久| 国产精品综合av一区二区国产馆| 国产日韩精品综合网站| 国内成+人亚洲| 在线日韩成人| 99国产精品久久| 亚洲男女自偷自拍| 欧美一区二区日韩| 亚洲激情女人| 一本色道久久88综合亚洲精品ⅰ | 1769国产精品| 91久久夜色精品国产九色| 最新亚洲电影| 一级成人国产| 午夜精品视频一区| 亚洲国产美国国产综合一区二区| 亚洲精品久久久久久久久久久久| 99国产精品视频免费观看| 亚洲小说欧美另类婷婷| 香蕉av777xxx色综合一区| 欧美在线二区| 麻豆精品一区二区av白丝在线| 欧美精品免费看| 欧美午夜三级| 国产综合久久久久久鬼色| 亚洲二区三区四区| 一区二区三区www| 欧美一区二区啪啪| 日韩一本二本av| 性高湖久久久久久久久| 麻豆精品精品国产自在97香蕉| 欧美精品日韩综合在线| 国产精品视频一区二区高潮| 韩国自拍一区| 99精品国产高清一区二区| 午夜日韩在线| 日韩视频免费| 欧美在线在线| 欧美日本韩国一区二区三区| 国产欧美日韩高清| 91久久精品美女| 亚洲欧美文学| 日韩一级在线观看| 久久精品99国产精品酒店日本| 欧美激情国产日韩| 国产日韩欧美成人| 9国产精品视频| 亚洲第一色中文字幕| 亚洲欧美激情视频| 欧美粗暴jizz性欧美20| 国产精品一区二区在线| 亚洲国产99| 午夜视频精品| 亚洲少妇在线| 欧美aⅴ99久久黑人专区| 国产精品日韩久久久| 91久久精品日日躁夜夜躁欧美| 亚洲欧美日韩精品久久| 99视频一区二区| 久久久亚洲国产天美传媒修理工| 欧美三级电影精品| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲一区二区欧美| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美激情一区二区三级高清视频| 国产日韩在线不卡| 一本色道久久综合亚洲精品婷婷 | 国产精品成人aaaaa网站| 在线国产亚洲欧美| 亚洲免费婷婷| 亚洲在线成人| 欧美日韩国产色视频| 亚洲电影专区| 亚洲国产高清aⅴ视频| 欧美在线播放一区| 国产精品老女人精品视频| 亚洲人成在线免费观看| 国内一区二区三区| 一区二区三区色| 亚洲乱码一区二区| 免费成人你懂的| 国产亚洲二区| 亚洲免费在线电影| 亚洲影视九九影院在线观看| 欧美日韩国产综合视频在线| 亚洲福利国产| 亚洲国产毛片完整版| 久久亚洲私人国产精品va| 国产精品亚洲精品| 亚洲视频图片小说| 中文一区字幕| 欧美日本一区二区视频在线观看| 亚洲黄色小视频| 亚洲老板91色精品久久| 欧美激情久久久久| 亚洲国产日韩一区二区| 亚洲日本免费| 欧美成人综合网站| 亚洲日本理论电影| 99精品久久久| 欧美日韩成人免费| 一本久久综合亚洲鲁鲁| 中文网丁香综合网| 欧美视频在线视频| 一区二区三区日韩精品视频| 亚洲伊人久久综合| 国产精品日韩在线播放| 亚洲免费综合| 久久久不卡网国产精品一区| 国内精品模特av私拍在线观看| 欧美在线免费看| 久久综合久久综合这里只有精品 | 亚洲欧美视频一区二区三区| 国产精品久久久久久福利一牛影视| 亚洲深夜福利| 欧美一区2区三区4区公司二百| 国产精品一区二区久久久| 欧美一区二区三区成人| 麻豆免费精品视频| 最新日韩在线视频| 亚洲视频综合在线| 国产精品日韩在线| 久久成人av少妇免费| 免费黄网站欧美| 亚洲精品孕妇| 午夜精品福利在线| 激情久久五月天| 亚洲精品社区| 国产精品久久久久久久久久久久久| 亚洲欧美偷拍卡通变态| 欧美/亚洲一区| 99精品国产99久久久久久福利| 午夜久久久久| 国内精品国语自产拍在线观看| 亚洲精品资源美女情侣酒店| 国产精品久久久久国产a级| 欧美亚洲一区| 欧美激情精品久久久久| 亚洲一区中文| 免费观看成人网| 一本色道久久88精品综合| 欧美一区二区三区精品电影| 在线观看视频一区| 亚洲视频导航| 国产亚洲欧洲一区高清在线观看| 亚洲日本aⅴ片在线观看香蕉| 欧美视频不卡中文| 久久精品国产一区二区三区免费看| 欧美精品亚洲精品| 亚洲欧洲av一区二区| 欧美国产在线电影| 亚洲欧美日韩一区二区| 欧美福利精品| 亚洲欧美色婷婷| 欧美日韩高清不卡| 欧美亚洲一级片| 欧美日韩在线综合| 久久精品99久久香蕉国产色戒| 欧美日韩一区二区三区在线看| 欧美在线观看日本一区| 欧美日韩精品免费观看视一区二区| 午夜精品久久久99热福利| 欧美激情一区二区三区在线视频观看| 在线亚洲成人| 免费在线成人av| 午夜一区二区三区不卡视频| 欧美精品少妇一区二区三区| 久久av一区二区三区| 国产精品第十页| 亚洲精品久久在线| 国产主播在线一区| 亚洲免费视频网站| 亚洲黄一区二区三区|