摘 要: 嘗試在FPGA上實(shí)現(xiàn)對(duì)IC卡的控制,,運(yùn)用EDK中的IP開發(fā)工具生成一個(gè)智能卡控制器的IP核,用以實(shí)現(xiàn)對(duì)IC卡的硬件控制,。
關(guān)鍵詞: IC卡,;IP;FPGA
智能卡(Smart Card)又稱集成電路卡(Integrated Circuit Card),,即IC卡,目前大量使用的交通卡,、門禁卡,、銀行支付卡等都是智能卡。智能卡接口控制器是連接智能卡和主控設(shè)備的橋梁,,是智能卡處理設(shè)備中的最重要組成部分之一,。面對(duì)巨大的市場(chǎng)需求,越來越多的公司,、科研機(jī)構(gòu)都在研究此類控制器,。
FPGA具有可重構(gòu)性、開發(fā)周期短以及開發(fā)流程簡(jiǎn)單等優(yōu)點(diǎn),,越來越多的工程師選擇將FPGA作為工程設(shè)計(jì)的首選,。由于其內(nèi)嵌微處理器,F(xiàn)PGA在嵌入式方面也獲得了大量的運(yùn)用,。此外,,為縮短產(chǎn)品面市時(shí)間,F(xiàn)PGA廠商還會(huì)提供多種知識(shí)產(chǎn)權(quán)(IP)核,。這類IP核可以作為功能模塊運(yùn)用在不同的設(shè)計(jì)中,,方便了各種開發(fā)的推進(jìn)。本文嘗試在EDK中開發(fā)一個(gè)新的IP核,,其功能就是實(shí)現(xiàn)對(duì)IC卡的接口控制,。
1 用卡過程
正常的用卡過程可劃分為幾個(gè)階段:(1)將IC卡插入到接口設(shè)備IFD(Interface Device),并接通各觸點(diǎn),;(2)對(duì)IC卡進(jìn)行復(fù)位,,在終端和IC卡間建立通信;(3)執(zhí)行交易,;(4)釋放觸點(diǎn)并取出IC卡,。
2 字符的物理傳送
交易過程中,數(shù)據(jù)以異步半雙工方式經(jīng)I/O線在終端和IC卡之間雙向傳送,。由終端向IC卡提供時(shí)鐘信號(hào),,并以此來控制交易的時(shí)序,。
數(shù)據(jù)在I/O線上以字符幀傳送,一個(gè)字符幀包含著10個(gè)相連的數(shù)位:1 bit狀態(tài)為低(L)的起始位,、8 bit組成的數(shù)據(jù)字節(jié)和1 bit偶校驗(yàn)位,,如圖1所示。
Input AFIFO接收來自總線的命令,、地址和數(shù)據(jù)等,,依次存儲(chǔ)在FIFO中(深度為16 bit),Device Controller則讀取該FIFO中數(shù)據(jù),,并進(jìn)行相應(yīng)的操作,。
Output AFIFO用于接收Device(智能卡)返回的數(shù)據(jù),并將其傳輸給總線,。
Output Latch的作用是進(jìn)行狀態(tài)緩存與命令緩存,,主要是為了滿足相關(guān)時(shí)序的要求。
Device Controller是設(shè)計(jì)的核心環(huán)節(jié),,它主要有以下功能特征:
?。?)參數(shù)的傳遞以及協(xié)議的設(shè)定;
?。?)時(shí)鐘頻率的轉(zhuǎn)換,;
(3)功能的激活,;
?。?)時(shí)鐘的停止;
?。?)功能的釋放,;
(6)復(fù)位,;
?。?)應(yīng)用協(xié)議數(shù)據(jù)單元APDU(Application Protocol Data Unit)傳送;
?。?)PPS交換,。
該模塊通過PLB接收來自CPU(即Microblaze)的數(shù)據(jù),并將它們轉(zhuǎn)換成串行信號(hào),。智能卡(Device)接收這些串行信號(hào),,并作出相應(yīng)的響應(yīng)。CPU通過PLB總線讀取這些響應(yīng),。其中,,協(xié)議的選定是通過軟件來實(shí)現(xiàn)的,而且Device Controller的參數(shù)傳輸也是通過軟件來實(shí)現(xiàn)的。
根據(jù)該模塊的主要功能特征,,將該模塊細(xì)化成以下幾個(gè)小的模塊,。
(1)狀態(tài)機(jī)模塊:用于對(duì)通信狀態(tài)過程的轉(zhuǎn)換,;
?。?)計(jì)數(shù)器模塊:用于發(fā)送或接收數(shù)據(jù)的位數(shù)計(jì)算;
?。?)時(shí)鐘分頻模塊:產(chǎn)生合適的時(shí)鐘頻率,,用于與智能卡的通信;
?。?)信號(hào)接口模塊:接收并解碼總線數(shù)據(jù)(命令,、地址和數(shù)據(jù));
?。?)數(shù)據(jù)接收模塊:用于接收Device發(fā)送的數(shù)據(jù),,并封裝成32 bit格式。
3.2 IP核的頂層模塊
控制器的頂層模塊的結(jié)構(gòu)圖如圖3所示,。
在這個(gè)控制模塊中,,有6個(gè)輸入信號(hào)是本控制器接收來自主控制器(Microblaze)的信號(hào),,分別為總線時(shí)鐘信號(hào)Bus2IP_Clk,、總線復(fù)位信號(hào)Bus2IP_Reset、數(shù)據(jù)信號(hào)Bus2IP_Data,、總線選擇信號(hào)Bus2IP_BE,、總線讀使能信號(hào)Bus2IP_RdCE以及總線寫使能信號(hào)Bus2IP_WrCE。5個(gè)信號(hào)用于本控制器發(fā)送響應(yīng)給主控制器(Microblaze),,分別為IP發(fā)送數(shù)據(jù)信號(hào)IP2Bus_Data,、IP讀響應(yīng)信號(hào)IP2Bus_RdAck、IP寫響應(yīng)信號(hào)IP2Bus_WrAck,、IP報(bào)錯(cuò)信號(hào)IP2Bus_Error以及IP中斷信號(hào)IP2Bus_IntrEvent,。還有6個(gè)信號(hào)用于本控制器與智能卡之間的通信,分別為輸出給智能卡的時(shí)鐘信號(hào)SCID2SC_CLK,、復(fù)位信號(hào)SCID2SC_RST,、電壓信號(hào)SCID2SC_VPP、接收智能卡返回值SCID2SC_IO_I,、輸出信號(hào)給智能卡SCID2SC_IO_O,、輸入輸出選擇信號(hào)SCID2SC_IO_T。在時(shí)鐘頻率的選擇上,,由于Spartan-3A的工作頻率是62.5 MHz,,因此Bus2IP_Clk采用的是62.5 MHz,而智能卡在這樣的高頻下則無法有效工作,因此通過DCM來實(shí)現(xiàn)分頻,,最終選取IP_CLK的頻率為33.25 MHz,。
3.3 控制器的工作流程
當(dāng)此控制器IP核接收到來自總線的命令后,就將開始工作,,實(shí)現(xiàn)對(duì)智能卡的接口控制,,其工作的狀態(tài)轉(zhuǎn)換如圖4所示。
上電后,,該控制器開始處于起始狀態(tài)(INITIAL),,當(dāng)接收到來自總線的信號(hào)后,信號(hào)接收模塊便會(huì)識(shí)別信號(hào)中的命令,。當(dāng)命令為CMD_ACT,、CMD_RST、CMD_ATR時(shí),,則開始工作,;否則,繼續(xù)處于起始狀態(tài),。
開始工作后,,首先進(jìn)入到SIGNAL_ST_CLK狀態(tài),在這個(gè)狀態(tài)里,,時(shí)鐘生成模塊開始工作,,它將產(chǎn)生一個(gè)需要的時(shí)鐘頻率,作為控制器與智能卡進(jìn)行通信的工作頻率,。接著就要對(duì)智能卡進(jìn)行第一次復(fù)位(冷復(fù)位),,即進(jìn)入到SIGNAL_ST_RST狀態(tài),復(fù)位后進(jìn)入SIGNAL_ST_ATR狀態(tài)(ATR為復(fù)位應(yīng)答),,等待來自智能卡的返回信息,。當(dāng)智能卡發(fā)送信號(hào)有效時(shí),進(jìn)入到SIGNAL_ST_GET狀態(tài),,接收來自智能卡的響應(yīng),。如果返回值正確,則將進(jìn)入空閑狀態(tài)(IDLE),,等待下一命令,。如果返回值不正確,則需要智能卡重新發(fā)送,,并重新進(jìn)入到SIGNAL_ST_GET狀態(tài),。
在IDLE狀態(tài)下,控制器會(huì)根據(jù)總線后續(xù)的命令來進(jìn)行操作,,在本設(shè)計(jì)中主要是發(fā)送CMD_ATR,、CMD_APDU和CMD_PPS命令,,其過程是對(duì)智能卡進(jìn)行數(shù)據(jù)的發(fā)送。首先進(jìn)入到SIGNAL_ST_SEND狀態(tài),,每發(fā)完一組數(shù)據(jù)(10 bit)后,,都會(huì)對(duì)這組數(shù)據(jù)進(jìn)行檢查,即進(jìn)入SIGNAL_ST_CHECK狀態(tài),。
當(dāng)所有操作命令都完成,,就需要對(duì)此狀態(tài)機(jī)進(jìn)行釋放,進(jìn)入SIGNAL_ST_DACT狀態(tài),。釋放過程分為3步:首先對(duì)智能卡進(jìn)行復(fù)位操作,,然后要停止向智能卡輸出時(shí)鐘信號(hào),最后將控制器對(duì)智能卡的輸出信號(hào)拉低,。至此,,本次狀態(tài)轉(zhuǎn)換就結(jié)束了,對(duì)智能卡的一次控制也就完成了,。
4 FPGA的實(shí)現(xiàn)
在ISE 12.4開發(fā)環(huán)境中新建一個(gè)SmartCard控制器的工程,,并添加EDK開發(fā)模塊,運(yùn)用其IP生成功能來生成一個(gè)智能卡的控制IP核iso7816_intf_dev,,輸入相應(yīng)的Verilog HDL代碼,,并將生成的IP添加到EDK系統(tǒng)中。整個(gè)EDK系統(tǒng)的工作平臺(tái)如圖5所示,。
只需在將此工程生成相應(yīng)的比特流,,并下載到FPGA開發(fā)板上,就可以對(duì)智能卡進(jìn)行控制操作了,。
為了在硬件上實(shí)現(xiàn)該控制器的功能,,選用Xilinx公司的Spartan-3A系列XC3S700A-4FG484開發(fā)板來實(shí)現(xiàn)該控制器,。其內(nèi)部消耗資源概況如圖6所示,。
最后,借助于Xilinx的SDK對(duì)該控制器進(jìn)行測(cè)試,。在SDK中,,可以運(yùn)用函數(shù)Xil_Out32或者Xil_In32來進(jìn)行數(shù)據(jù)的發(fā)送與接收。
Xil_Out32(Base_Address+Offset,,command/data),,Xil_In32(Base_Address+Offset)。
驗(yàn)證此IP核能否正常工作,,主要需要驗(yàn)證ATR,、APDU和PPS這3個(gè)命令是否能夠正確地發(fā)送并接收正確的響應(yīng)。由于這3個(gè)命令的發(fā)送與接收都是運(yùn)用同樣的函數(shù),,只是命令符與地址不同,,因此只列出ATR的測(cè)試情況,。
運(yùn)用下面的函數(shù)向?qū)?yīng)的地址發(fā)送命令:
Xil_Out32(0xcce00004,0x03000003),;
Xil_Out32(0xcce00000,,0x00000101)。
運(yùn)用下面的函數(shù)接收來自智能卡的響應(yīng):
fpireg0=Xil_In32(0xcce0001c),;
xil_printf("data0:%x\r\n",,fpireg0)。
智能卡對(duì)此命令的響應(yīng)如下,,它返回12個(gè)字符:3B,,19,96,,00,,21,02,,00,,00,00,,F(xiàn)F,,90,00,。
這些響應(yīng)是符合此類智能卡的響應(yīng)規(guī)定,,因此,該IP核對(duì)于ATR功能是正確的,。
利用同樣的驗(yàn)證方法可以看出,,該IP核對(duì)于APDU以及PPS等命令的響應(yīng)都是完全正確的。
經(jīng)驗(yàn)證,,本方案所設(shè)計(jì)的智能卡控制器是可行的,。在進(jìn)行嵌入式設(shè)計(jì)時(shí),可以將該IP核直接添加到相關(guān)的EDK工程中去,,從而減少了設(shè)計(jì)的復(fù)雜度,。但是本設(shè)計(jì)還只是局限于將IP核運(yùn)用在FPGA上,以后需要繼續(xù)研究,,能夠?qū)⒃揑P核通用化,,這樣就可以添加到任何目標(biāo)系統(tǒng)中去,方便SoC的設(shè)計(jì),,這將是今后研究的重點(diǎn)所在,。
參考文獻(xiàn)
[1] International Standard ISO/IEC 7816-3[S].
[2] Xilinx公司. Spartan-3 FPGA Family Data Sheet[Z].
[3] Xilinx公司. Spartan-3 Starter Kit Board User Guide[Z].
[4] 夏宇聞,甘偉.Verilog HDL入門[M].北京:北京航空航天大學(xué)出版社,,2008.