基于ISO7816-3標準的智能卡接口控制器的設計
文章出處:http://5052h112.com 作者:華南理工大學電子與信息學院 蔣曉華 黃光周 于繼榮 人氣: 發表時間:2011年09月17日
引言
---智能卡(SmartCard)又稱集成電路卡(Integrated Circuit Card,即IC卡),將微電子技術和計算機技術結合在一起,具有高的可靠性、安全性和靈活性,其廣泛地應用于電信、金融、交通及公共事業等領域。智能卡接口控制器是連接智能卡和主控設備的橋梁,是智能卡處理設備中的最重要組成部分之一。面對龐大的市場需求,各大芯片廠商都推出了各自的智能卡接口控制器芯片,例如,Philips的8007、Linear的LTC1755/6等。本文也提出一種實用的智能卡接口控制器的設計方案。
控制器工作原理
● 控制器的結構
---本方案的設計過程遵循集成電路設計的一般流程,采用自上而下的模塊化設計方法。該控制器由七個子模塊組成:卡激活復位模塊(RSTM)、串行數據收發模塊(RxTxM)、狀態中斷管理模塊(INTM)、定時模塊(TM)、時鐘管理模塊(CLKM)、寄存器地址管理模塊(AM)和主控制器接口(IF)。其結構如圖1所示,CLKC、IOC、PRESC、VDDC和RSTC為控制器同智能卡的接口,分別為輸出給智能卡的時鐘、雙向數據線、卡存在輸入信號、卡電源控制信號和輸出給卡的復位信號。本控制器同主控器(如CPU)的接口信號有:主時鐘輸入CLK、地址信號A、雙向并行數據線D、片選輸入信號CS、寫控制信號WR、讀控制信號RD、主復位信號RST和中斷輸出信號INT。
● 內部寄存器
---通常,用戶程序要通過對卡接口控制器寄存器的讀寫操作,才能實現同IC卡的交易,因此,智能卡控制器內部寄存器設置的合理性直接影響到該設計方案的可行性和將來實際產品使用的便利性。不同的智能卡控制器的寄存器設置一般不盡相同。同其他的智能卡控制器相比較,本方案所設置的寄存器數目相對較多,功能更加全面。表1列出了本控制器的寄存器及其地址分配情況。
---卡控制器使能寄存器EN像個總開關,用來使能或關閉整個控制器。當用戶系統暫時不需要用到卡控制器時,可以設置EN=0,便可關閉整個控制器內部的所有操作(包括內部分頻器的動作),這樣可以減少系統中不必要的功耗。時鐘預分頻參數寄存器PRSCL的設置可以在無需外加分頻器的情況下,使控制器方便地應用到高時鐘頻率的目標系統中去。目前其他絕大多數的卡控制器中都沒有設置功能與EN和PRSCL相同或者相似的寄存器。因此寄存器EN和PRSCL的設置是本方案的一大特點,若把此卡控制器作為一個IP用到SoC的設計中去,這一特點將顯得尤為重要。
---工作等待時間整數值寄存器WWT只對T=0類卡有效,字符等待時間整數值寄存器CWT和塊等待時間整數值寄存器BWT只對T=1類卡有效。本控制器同時設置了這三個寄存器,因此,其既可以和T=0類卡進行通信,又可以和T=1類卡進行通訊,這樣彌補了目前大多數的卡接口控制器只能同某一類卡進行通信的弊端。
---如表1所示,本控制器還設置其他寄存器,比如ETU、TXDB、STMR等,這樣做是為了更全面地滿足ISO7816-3標準地要求,能夠兼容各類型的IC卡,同時使得用戶軟件能夠更方便地干預同IC卡的交易過程,提高了交易過程的可控性和使用的便利性。
● 卡控制器的工作過程
---主控制器(HOST)通過主控制器接口(IF)向卡控制器發送命令(即操作卡控制器的寄存器),卡控制器各個模塊協同工作對此命令進行解析后,再通過IC卡接口對卡進行相應的操作,這樣就完成主控制器對IC卡的一次操作。同樣,從IC卡過來的命令或者狀態通過卡控制器的處理后,再將相關信息報告給主控制器。卡控制器就是這樣在IC卡和主控制器之間起著橋梁作用。下面將重點介紹串行數據收發模塊(RxTxM)工作過程。
---本方案所設計的卡控制器的串行數據收發模塊(RxTxM)負責接收IC卡發送過來的串行數據和將主控制器的命令以串行的方式發送給IC卡。其中串行數據接收器為一個狀態機,其狀態轉換圖如圖2所示。狀態機平時處于空閑狀態(idle),若IOC端口上沒有負跳變(NoFallingEdge),狀態機便一直處于此狀態。當檢測到IOC上有負脈沖(FallingEdge)時,狀態機便進入接收起始位狀態(startbit),若起始位不合法(StartBitInvalid,例如寬度不夠),狀態機便返回idle狀態,否則狀態機進入到接收數據狀態(data)。若還沒有收滿8位數據(CntBit<8),則繼續接收,若已經收滿了8位數據(CntBit=8),狀態機便進入接收和校驗奇偶的狀態(parity)。若奇偶校驗沒有結束(Checking),則繼續處理,否則狀態機返回idle狀態,至此控制器完成一次接收過程。
---若成功接收到1字節,便立即產生一個成功接收狀態量rcv_ok,提交給狀態中斷管理模塊(INTM);若接收的數據有錯誤,也會立即將接收錯誤的狀態rcv_error,提交給INTM,并且在IOC數據線上產生一個1~2位數據寬度的負脈沖,以請求IC卡重發剛才的字節。按照ISO7816標準的規定,這種對同1字節的重發請求最多只發送3次。因此,若RxTxM在第三次重發請求之后仍然接收到錯誤的字節,RxTxM立即產生一個重收次數超限的狀態RTO,報告給INTM。
---當主控器往本控制器的發數寄存器寫入1字節數據時,本控制器便會以串行的方式發送給IC卡,若發送成功且沒有檢測到IC卡的重發請求,便立即產生一個發送成功的狀態量tr_ok,報告給狀態中斷管理模塊;若檢測到IC卡的重發請求,便重發剛才的字節。同樣如果在第三次重發后仍然收到IC卡的重發請求,則立即報告給INTM一個重收次數超限的狀態。
設計的仿真及實現
● 控制器模型的時序仿真
---在Xilinx公司的ISE5集成開發環境下,用VHDL語言建立各個模塊的RTL模型,并模仿實際情況,用VHDL編寫了測試向量testbench,選用外部仿真軟件Modelsim進行仿真。由于篇幅關系,這里僅列出控制器接收IC卡發送過來的串行數據時的仿真時序波形,如圖3所示。
---由圖3可以看出,IC卡發過來的串行數據為1001001010(低位在前),共10位,除去起始位0和校驗位1,8位數據為00100101,與數據接收寄存器rxbuffer所接收到的內容相同,且校驗結果為0,滿足ISO 7816
● 設計的FPGA實現 ---為了進一步驗證本設計的正確性,將本控制器模型的接口改成AMBA總線的APB接口,把它作為一個外圍IP,連接到以AMBA總線作為內部總線的SoC的APB總線上,然后將此SoC系統編譯并下載到FPGA中,再嵌入實際的應用系統中,經驗證可以同IC卡進行交易。 結論
---根據綜合結果,目標器件選用Xilinx公司的Spartan2系列的xc2s30tq144-6,其內部資源概況在表2中列出。
---本方案所設計的IC卡控制器可行性已經在實際應用中得到了驗證,應用軟件通過對控制器內部的寄存器的操作,可以方便地與智能卡進行通信交易。本IC卡控制器不僅可以單獨下載到FPGA或CPLD器件中,應用到目標系統中去,也可以在對其外部接口稍做修改后,將其當作一個IP模塊,方便地應用到SoC系統的設計中去。由于沒有為其設計內嵌的給IC卡供電的電源模塊,所以在實際應用中,需要同外擴的電源模塊搭配起來使用,這點有待進一步改進和完善。