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