国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于UART的智能卡接口IP核設(shè)計

2012-08-27 08:32:52楊勝姚王鵬武宏偉劉金福
關(guān)鍵詞:智能卡空閑字節(jié)

楊勝姚,王鵬,武宏偉,劉金福

(北京萬集科技股份有限公司,北京100085)

引 言

智能卡以其安全、靈活、通用等特點(diǎn),被廣泛應(yīng)用在金融、交通以及其他安全終端設(shè)備上[1]。目前許多讀卡器都采用單片機(jī)來實現(xiàn),而在一些特殊應(yīng)用中,同時需要多張甚至10張以上的智能卡。由于卡片嚴(yán)格的時序要求[2],僅用單片機(jī)已經(jīng)很難實現(xiàn)多卡的并行操作。FPGA 具有硬件并行性和可編程等優(yōu)點(diǎn),很容易實現(xiàn)并行且對時序邏輯要求較高的操作,同時IP核的應(yīng)用又給基于FPGA 的開發(fā)帶來了極大的便利,能減少大量開發(fā)時間[3-4]。

本文首先介紹了智能卡的基本規(guī)范,著重分析字符傳輸協(xié)議(T=0)的操作流程。然后分析了Altera公司提供的UART IP核的結(jié)構(gòu),在此基礎(chǔ)上給出了智能卡接口IP核的設(shè)計,并結(jié)合智能卡的操作流程,給出了傳輸協(xié)議的狀態(tài)轉(zhuǎn)換圖以及實現(xiàn)方法。最后對IP核進(jìn)行仿真分析和實際測試。

1 智能卡操作流程簡介

智能卡是IC卡的一種,帶有微處理器、存儲單元以及芯片操作系統(tǒng),不僅具有數(shù)據(jù)存儲功能,同時還具有命令處理和數(shù)據(jù)安全保護(hù)等功能[5]。智能卡采用異步半雙工通信方式,其傳輸協(xié)議分為字符傳輸協(xié)議(T=0)和塊傳輸協(xié)議(T=1)[2]。本文重點(diǎn)討論字符傳輸協(xié)議(T=0),它是目前使用較廣泛的通信協(xié)議。

圖1 復(fù)位操作流程圖

智能卡主要有復(fù)位操作和指令操作。復(fù)位操作是將智能卡的復(fù)位引腳拉低若干周期,拉高后智能卡回復(fù)1 個數(shù)據(jù)幀,提供了協(xié)議選擇、時鐘轉(zhuǎn)換因子、波特率調(diào)整因子等參數(shù),可供后續(xù)操作使用。該幀的長度在第2個字節(jié)中體現(xiàn),因此先接收2個字節(jié),再接收固定長度的數(shù)據(jù),操作流程圖如圖1所示。

T=0時,指令操作主要有4種情況,如表1所列[2]。

表1 T=0命令的4種情況

根據(jù)中國金融集成電路(IC)卡規(guī)范的規(guī)定,可在情況1后面補(bǔ)0,組成5 字節(jié)指令。這時,4 種情況都可歸納為:發(fā)送前5字節(jié),等待接收1字節(jié)回復(fù),由回復(fù)決定后續(xù)的操作。

1字節(jié)的回復(fù)分為過程字節(jié)和狀態(tài)字節(jié)兩類,過程字節(jié)主要有INS(或INS補(bǔ)碼)、60、61、6C;除過程字節(jié)以外的其他回復(fù)都屬于狀態(tài)字節(jié)。收到過程字節(jié)后須執(zhí)行對應(yīng)操作。接收到狀態(tài)字節(jié)后須再等待接收1字節(jié)狀態(tài)回復(fù),將兩個狀態(tài)字節(jié)上傳給控制器,終止本次操作。T=0時的指令操作流程圖如圖2所示。

圖2 T=0時的指令操作流程圖

2 智能卡接口IP核的設(shè)計與實現(xiàn)

2.1 UART核分析

UART 接口已經(jīng)很成熟,已有許多現(xiàn)成的IP核可使用,利用UART 進(jìn)行智能卡接口IP核的設(shè)計可減少大量的開發(fā)時間。本文以Altera公司的Avalon總線接口的UART 核[6-7](下文中所有UART 核均指該核)為基礎(chǔ)進(jìn)行設(shè)計。

UART 核主要有三大模塊:發(fā)送模塊(TX)、接收模塊(RX)、寄存器模塊(REG)。與CPU 連接端為Avalon總線接口,與外部連接端為txd和rxd。其主要結(jié)構(gòu)和信號連接如圖3所示。

圖3 UART結(jié)構(gòu)和主要信號連接圖

REG 模塊通過tx_wr_strobe把數(shù)據(jù)tx_data寫到TX模塊中,TX模塊按照設(shè)定的波特率往txd串行發(fā)送數(shù)據(jù),同時把發(fā)送寄存器和發(fā)送移位寄存器的狀態(tài)通過tx_ready和tx_shift_empty傳回REG 模塊。

RX模塊根據(jù)設(shè)定的波特率對rxd進(jìn)行采樣接收,當(dāng)接收到1字節(jié)有效數(shù)據(jù)時置rx_char_ready有效,REG 模塊通過rx_rd_strobe讀取接收的數(shù)據(jù)。

REG 模塊中包含控制寄存器、狀態(tài)寄存器、波特率寄存器、數(shù)據(jù)寄存器,還包含Avalon總線接口邏輯以及各種寄存器的操作邏輯。

2.2 智能卡接口IP核結(jié)構(gòu)設(shè)計

智能卡的引腳有電源、地、復(fù)位、時鐘、數(shù)據(jù),其中只有復(fù)位和數(shù)據(jù)線與操作有關(guān),因此在IP核中只需要復(fù)位線和數(shù)據(jù)線。

智能卡操作過程中,接收的數(shù)據(jù)和發(fā)送的指令都需要暫存在IP核內(nèi),因此要在UART 核上增加發(fā)送和接收緩沖。除此之外,還需要增加協(xié)議處理模塊用于操作過程中的判斷和交互,增加收發(fā)切換模塊實現(xiàn)異步半雙工的切換,增加發(fā)送控制模塊用于發(fā)送不同的數(shù)據(jù)?;赨ART 核的智能卡接口IP核結(jié)構(gòu)如圖4所示。

圖4 基于UART核的智能卡接口IP核結(jié)構(gòu)

圖4中,保留UART 的RX和TX 模塊不變,在REG模塊中增加了RX_BUF、TX_BUF、緩沖區(qū)長度寄存器,還增加了清緩沖區(qū)等功能。

在UART 核的基礎(chǔ)上增加協(xié)議處理模塊,它是操作智能卡的核心。協(xié)議處理模塊從RX 模塊直接截取數(shù)據(jù)并處理,根據(jù)流程進(jìn)行各種操作。協(xié)議處理模塊可以清除接收緩沖區(qū)中的過程數(shù)據(jù)、清除無效的發(fā)送指令,協(xié)議處理模塊還控制收發(fā)的切換、控制發(fā)送指令、控制IC 卡復(fù)位。

發(fā)送控制根據(jù)協(xié)議處理中的狀態(tài)和命令,發(fā)送不同的指令到智能卡中。

2.3 協(xié)議處理的實現(xiàn)

在圖4中,協(xié)議處理模塊是實現(xiàn)CPU 與智能卡交互的關(guān)鍵,本文采用狀態(tài)轉(zhuǎn)換的方法來實現(xiàn)。根據(jù)復(fù)位操作(圖1)和指令操作(圖2)的流程,可將智能卡的操作總結(jié)為7種狀態(tài):空閑狀態(tài)、復(fù)位狀態(tài)、接收1字節(jié)狀態(tài)、接收定長數(shù)據(jù)狀態(tài)、收到0x61 狀態(tài)、收到0x6c狀態(tài)、其他狀態(tài)。狀態(tài)轉(zhuǎn)換的主要條件是接收到特定的數(shù)據(jù)或接收到特定個數(shù)的數(shù)據(jù),輔助條件是當(dāng)前的狀態(tài)和其他參數(shù)。狀態(tài)轉(zhuǎn)換圖如圖5所示。

圖5 協(xié)議處理狀態(tài)轉(zhuǎn)換圖

空閑狀態(tài):剛上電或無操作時處于空閑狀態(tài),IP核等待CPU 的命令。

復(fù)位狀態(tài):在空閑狀態(tài)下收到復(fù)位命令后,復(fù)位智能卡并進(jìn)入復(fù)位狀態(tài),等待接收數(shù)據(jù)。根據(jù)前2字節(jié)的回復(fù)設(shè)置接收數(shù)據(jù)長度,然后進(jìn)入接收定長數(shù)據(jù)狀態(tài)。

接收定長數(shù)據(jù)狀態(tài):根據(jù)前一狀態(tài)的設(shè)置,等待接收固定個數(shù)的數(shù)據(jù),當(dāng)接收到設(shè)定個數(shù)的數(shù)據(jù)時,向CPU 發(fā)送中斷請求并跳轉(zhuǎn)到空閑狀態(tài)。

接收1字節(jié)狀態(tài):在空閑狀態(tài)下當(dāng)有效指令操作下發(fā)時,發(fā)送5字節(jié)命令頭,進(jìn)入接收1字節(jié)狀態(tài)。在該狀態(tài)下,收到0x60則不進(jìn)行任何處理;收到INS時需判斷LC,若LC不為0則發(fā)送剩余指令,若LC 為0則設(shè)置接收長度進(jìn)入到接收定長數(shù)據(jù)狀態(tài);接收到0x61或0x6c則分別進(jìn)入到相應(yīng)狀態(tài);接收到其他回復(fù)則設(shè)置固定接收長度為2,并進(jìn)入接收定長數(shù)據(jù)狀態(tài)。

收到0x61狀態(tài):接收1字節(jié)數(shù)據(jù)為0x61時進(jìn)入該狀態(tài),在該狀態(tài)下等待接收1字節(jié)數(shù)據(jù)并將該數(shù)據(jù)加到00 C0 00 00后一起發(fā)送,同時回到接收1字節(jié)狀態(tài)。

收到0x6c狀態(tài):與收到0x61過程基本一樣,將接收到的數(shù)據(jù)加到CLA INS P1P2后面發(fā)送。

設(shè)計時,在非空閑狀態(tài)下設(shè)定超時計數(shù)器,計數(shù)器溢出后無條件返回到空閑狀態(tài),同時清除接收和發(fā)送緩沖,表示本次操作失敗。另外,所有的過程字節(jié)在狀態(tài)處理時都被清除。

2.4 智能卡接口IP核的實現(xiàn)

由于篇幅有限,本文只介紹狀態(tài)轉(zhuǎn)換和指令的實現(xiàn)方法。

用變量state表示當(dāng)前的狀態(tài),有效值為0~5,其他值均為無效狀態(tài),在無效狀態(tài)下將直接跳轉(zhuǎn)到空閑狀態(tài)。狀態(tài)與state的對應(yīng)關(guān)系如表2所列。

表2 狀態(tài)變量對應(yīng)關(guān)系

本文所使用的收發(fā)緩沖模塊為SCFIFO[8],所有下發(fā)指令都先寫入到發(fā)送FIFO,所有接收的數(shù)據(jù)都進(jìn)入到接收FIFO。

表1中,4種指令長度都大于4,為實現(xiàn)復(fù)位操作,定義復(fù)位指令長度為1。實現(xiàn)時,為便于判斷指令,在指令之前先將指令長度寫到發(fā)送FIFO 中。定義復(fù)位操作指令為01 01,其他操作指令為LEN(指令長度)+CMD(指令本身)。IP核先取出指令長度,當(dāng)FIFO 數(shù)據(jù)達(dá)到該長度時表示一個完整的指令已經(jīng)下發(fā),這時才可對智能卡進(jìn)行操作。

3 仿真與實際測試

3.1 Modelsim 仿真分析

為驗證智能卡接口IP核的正確性,在Modelsim ASE 6.6d上進(jìn)行了仿真分析。仿真時,測試程序模擬CPU 向IP核發(fā)送指令,同時模擬智能卡給IP核回復(fù)數(shù)據(jù)。

3.1.1 復(fù)位操作仿真

測試程序模塊CPU 向發(fā)送緩沖區(qū)寫復(fù)位指令01 01,再模擬智能卡回復(fù)3b7d94 00 00 57 44 37 51 90 86 93 85 3e97 06 2e24(數(shù)據(jù)來源于實際PSAM 卡)。圖6是復(fù)位操作的Modelsim 仿真圖。

圖6 復(fù)位操作Modelsim 仿真圖

圖6中,收到01 01指令后,IP 核清空發(fā)送緩沖(tx_buf_clr=1),使IC卡復(fù)位(ic_reset=0),并跳轉(zhuǎn)到復(fù)位狀態(tài)(state=5)。由圖中可以看出,IP核接收到2字節(jié)后計算出回復(fù)的總長度為18,狀態(tài)變?yōu)榻邮斩ㄩL數(shù)據(jù)狀態(tài)(state=4)。當(dāng)接收到的數(shù)據(jù)個數(shù)達(dá)到設(shè)定長度時(rx_buf_len=18),向CPU 申請中斷(irq=1),同時回到空閑狀態(tài)(state=0)。

由仿真看出,復(fù)位操作時序正確。

3.1.2 取隨機(jī)數(shù)操作仿真

測試程序模擬CPU 向發(fā)送緩沖區(qū)寫取隨機(jī)數(shù)指令05 00 84 00 00 08,再模擬智能卡回復(fù)84 11 22 33 44 55 66 77 88 90 00(8字節(jié)隨機(jī)數(shù)任意填寫)。圖7是取隨機(jī)數(shù)操作的Modelsim 仿真圖。

圖7 取隨機(jī)數(shù)操作Modelsim 仿真圖

圖7中,取隨機(jī)數(shù)指令下發(fā)后,IP核將數(shù)據(jù)線切換為發(fā)送(t_r_sel=0),發(fā)送指令并跳轉(zhuǎn)到接收1 字節(jié)狀態(tài)(state=1)。當(dāng)?shù)?個字節(jié)等于INS(84)且LC=0時,清空接收緩沖區(qū)中的過程響應(yīng)(rx_buf_clr=1),設(shè)置接收長度為10(rx_const_len=0a),跳轉(zhuǎn)到接收定長數(shù)據(jù)狀態(tài)(state=4)。當(dāng)接收到10個數(shù)據(jù)(rx_buf_len=00a)后跳轉(zhuǎn)到空閑狀態(tài),同時向CPU 申請中斷(irq=1)。

由仿真看出,取隨機(jī)數(shù)據(jù)操作時序正確。

3.2 實際測試

對本文設(shè)計的IP核進(jìn)行了實際測試。采用Altera公司的Nios II CPU 作為控制器,EP3C40F484I7N 為FPGA芯片,用10 張PSAM 卡作為測試的IC 卡,CPU 時鐘為88.473 6 MHz,PSAM 時鐘為5.529 6 MHz。

測試操作過程為:

①返回根目錄3f00;

②取PSAM 卡序列號;

③進(jìn)入文件目錄df01;

④初始化加密認(rèn)證;

⑤取認(rèn)證碼;

⑥取隨機(jī)數(shù)。

6個操作為1輪,每秒對10張PSAM 卡進(jìn)行一輪測試。共測了201 803輪,耗時20 908s,平均每秒9.65輪,所有操作全部成功。

由此驗證,該IP核設(shè)計正確,運(yùn)行穩(wěn)定。

結(jié) 語

本文分析了UART 核與智能卡接口的結(jié)構(gòu),對T=0時的操作進(jìn)行歸納,設(shè)計出基于UART 的智能卡接口IP核。由于不需要重新設(shè)計UART 的接收、發(fā)送以及相關(guān)寄存器等功能,使開發(fā)周期縮短了至少一半。將該IP核用在多卡系統(tǒng)中,能大量減輕CPU 的負(fù)擔(dān),提高CPU 的效率。

[1]蔣曉華,黃光周,于繼榮.基于ISO7816-3標(biāo)準(zhǔn)的智能卡接口控制器的設(shè)計[J].今日電子,2005(2):62-63.

[2]中國人民銀行.中國金融集成電路(IC)卡規(guī)范2.0,2005.

[3]李蘭黃.Nios II嵌入式軟核——SOPC 設(shè)計原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.

[4]王剛,張瀲.基于FPGA 的SOPC 嵌入式系統(tǒng)設(shè)計與典型實例[M].北京:電子工業(yè)出版社,2009.

[5]陳峰,尹寒.CPU 卡的接口特性、傳輸協(xié)議與讀寫程序設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(3):17-20.

[6]Altera Corporation.Avalon Interface Specifications,2011.

[7]Altera Corporation.Embedded Peripherals IP User Guide,2010.

[8]Altera Corporation.SCFIFO and DCFIFO Megafunctions User Guide,2010.

猜你喜歡
智能卡空閑字節(jié)
恩賜
詩選刊(2023年7期)2023-07-21 07:03:38
No.8 字節(jié)跳動將推出獨(dú)立出口電商APP
東方磁卡李曉東:進(jìn)擊的智能卡研發(fā)巨子
時代人物(2019年27期)2019-10-23 06:11:58
“鳥”字謎
小讀者之友(2019年9期)2019-09-10 07:22:44
No.10 “字節(jié)跳動手機(jī)”要來了?
彪悍的“寵”生,不需要解釋
基于STC89 單片機(jī)的非接觸智能卡讀寫機(jī)設(shè)計
電子制作(2017年17期)2017-12-18 06:40:36
簡談MC7字節(jié)碼
WLAN和LTE交通規(guī)則
CHIP新電腦(2016年3期)2016-03-10 14:09:48
臨沂機(jī)頂盒智能卡升級方案介紹
金山区| 鄯善县| 常山县| 唐海县| 贵定县| 白沙| 北流市| 兰坪| 平罗县| 扎兰屯市| 韩城市| 德江县| 增城市| 禹城市| 灵宝市| 邳州市| 巍山| 常德市| 竹溪县| 界首市| 汽车| 株洲县| 河曲县| 武城县| 赫章县| 平定县| 九江市| 株洲县| 乌鲁木齐市| 克什克腾旗| 西畴县| 民和| 砚山县| 黄平县| 得荣县| 措美县| 西畴县| 吴川市| 嘉荫县| 治多县| 周宁县|