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