FR 100 型IC 卡讀寫器的研制
文章出處:http://xianjuhong.com 作者:葉樹林, 華蕊, 劉軍, 羅中良 人氣: 發(fā)表時(shí)間:2011年10月15日
IC 卡讀寫器是聯(lián)接IC 卡和應(yīng)用系統(tǒng)之間的信息橋梁, 是IC 卡應(yīng)用中至關(guān)重要的一個(gè)環(huán)節(jié)。作為IC 卡應(yīng)用系統(tǒng)中的一個(gè)關(guān)鍵性基礎(chǔ)設(shè)備, IC 卡讀寫器的性能對IC 卡應(yīng)用系統(tǒng)的開發(fā)進(jìn)程及整體使用性能具有重要的影響。隨著IC 卡應(yīng)用范圍的不斷擴(kuò)大及應(yīng)用水平的不斷提高, 對IC 卡讀寫器提出的要求也越來越高。因此開發(fā)出具有良好使用性能的IC卡讀寫器對IC 卡技術(shù)的推廣應(yīng)用具有重要的意義。
早期的IC 卡讀寫器一般只是簡單地將上位機(jī)的指令數(shù)據(jù)轉(zhuǎn)化成IC 卡可以接受的符合ISO 7816- 3 標(biāo)準(zhǔn)的數(shù)據(jù)格式, 不僅功能單一, 而且往往只能對一種或少數(shù)幾種卡進(jìn)行讀寫。隨著IC 卡技術(shù)水平和應(yīng)用水平的發(fā)展, 對IC 卡讀寫設(shè)備的性能提出了越來越高的要求, 雖然經(jīng)過多年的發(fā)展, IC 卡讀寫器的性能有了很大的提高, 但是由于技術(shù)保密及為了推銷IC 卡所采取的保護(hù)策略等原因, 目前市場上具有良好兼容性和開放性的IC 卡讀寫器還較少。
目前, IC 卡可以分為接觸式和非接觸式兩大類, 其中以接觸式IC 卡的應(yīng)用最為普及。本文研制的F100 型IC 卡讀寫器以接觸式IC 卡為讀寫對象, 該讀寫器采用89C51 單片機(jī)控制, 可以通過軟件來自動識別當(dāng)前IC 卡的類型, 并根據(jù)卡的類型來產(chǎn)生不同讀寫控制信號。
1 IC 卡的讀寫機(jī)制
雖然IC 卡的種類繁多, 不同的IC 卡在功能、觸點(diǎn)定義、讀寫機(jī)制方面都存在一定的差異, 但它們都共同遵守ISO 7816- 1, 2, 3, 4 標(biāo)準(zhǔn)協(xié)議。與IC 卡讀寫機(jī)制有直接關(guān)系的是ISO 7816- 2, 3 協(xié)議。其中ISO 7816- 2 協(xié)議規(guī)定了IC 卡各觸點(diǎn)的尺寸、位置和功能, 表1 列出了該協(xié)議對IC 卡8 個(gè)觸點(diǎn)功能的定義。ISO 7816- 3 協(xié)議則規(guī)定了IC 卡的傳輸協(xié)議,該協(xié)議對IC 卡的讀寫機(jī)制作了詳盡的描述, 它規(guī)定接口設(shè)備( IC 卡讀寫器) 和IC 卡之間的數(shù)據(jù)交換按以下操作步驟進(jìn)行:
( 1) 判斷卡是否插入; (2) 接口設(shè)備“激活”觸點(diǎn); (3) 卡的復(fù)位(Reset) ; (4) 卡對復(fù)位的應(yīng)答(A n sw er To Reset) ; (5) 在卡與接口設(shè)備之間連續(xù)進(jìn)行信息交換; (6) 接口設(shè)備" 釋放"觸點(diǎn);
接口設(shè)備“激活”觸點(diǎn)由以下操作順序?qū)崿F(xiàn);
(1) RST 處于L 狀態(tài); (2) V cc 供電; (3) 接口設(shè)備的“激活”觸點(diǎn);(3)卡的復(fù)位(reset);(4) Vpp 上升為空閑狀態(tài); (5) RST 處于H 狀態(tài)(同步傳輸) ; (6) 提供穩(wěn)定的CL K;
接口設(shè)備“釋放”觸點(diǎn)由以下操作順序?qū)崿F(xiàn):
(1) RST 為狀態(tài)L (低電平) ; (2) CL K 為狀態(tài)L (低電平) ; (3) Vpp 不起作用; (4) I/O為狀態(tài)A (空號) ; (5) V cc 不起作用;
從讀寫機(jī)制來看, IC 卡可以分為同步卡(如存儲卡、邏輯加密卡) 和異步卡(如CPU卡)。同步卡和異步卡在卡的復(fù)位、卡對復(fù)位的應(yīng)答以及卡與接口設(shè)備之間信息交換的方式等方面存在很大的差異。表2 簡述了兩種卡的讀寫機(jī)制。
過程同步卡異步卡
卡的復(fù)位
接口設(shè)備“激活”觸點(diǎn)后, RST信號上升, 要求RST 維持在狀態(tài)H至少50Ls。在RST 上升沿之后的5Ls 后, 加上時(shí)鐘脈沖CL K, CL K處于狀態(tài)H 的時(shí)間可在10~ 50Ls之間, 當(dāng)RST 處于狀態(tài)H 時(shí), 不允許加上1 個(gè)以上的時(shí)鐘脈沖。CL K與RST 下降沿之間的時(shí)間間隔不小于5Ls。
接口設(shè)備“激活”觸點(diǎn)后的200時(shí)鐘周期內(nèi), I/O 線將被置于狀態(tài)Z (傳號)。使用低電平復(fù)位的卡, 是依靠RST 維持在狀態(tài)L 來進(jìn)行復(fù)位的。RST 處于狀態(tài)L 至少40000個(gè)時(shí)鐘周期, 當(dāng)RST 從狀態(tài)L 變化到狀態(tài)H 之后的400~ 40000 個(gè)時(shí)鐘周期之間, I/O 線上的復(fù)位應(yīng)答將開始
過程同步卡異步卡
卡對復(fù)位的應(yīng)答
復(fù)位過程之后, 時(shí)鐘脈沖控制輸出信息, 在RST 下降沿后的10~100Ls 產(chǎn)生第一個(gè)時(shí)鐘脈沖, 從卡中讀取數(shù)據(jù)位??ǖ膹?fù)位應(yīng)答信息包含一個(gè)從卡發(fā)送到接口設(shè)備的標(biāo)頭, 標(biāo)頭的長度固定為32 位, 并由兩個(gè)8 位字段字段H1 和H2 開始。標(biāo)頭信息給出了該卡所采用的協(xié)議類型及協(xié)議參數(shù)等。復(fù)位應(yīng)答信號以字符幀進(jìn)行傳送。每個(gè)字符幀由10 位組成, 1 位起始位, 8 位數(shù)據(jù)位, 1 位偶校驗(yàn)位。復(fù)位應(yīng)答信息長度與卡的種類有關(guān),但不超過32 個(gè)字符。應(yīng)答信息按以下順序傳送: 初始字符TS、格式字符T 0、接口字符、歷史字符以及校驗(yàn)字符。應(yīng)答信息給出了該卡所采用的協(xié)議類型及有關(guān)參數(shù)等。
信息交換
按照標(biāo)頭信息給出的協(xié)議類型和參數(shù), 在同步脈沖CL K 的控制下,卡與接口設(shè)備之間按位進(jìn)行信息交換。
按照復(fù)位應(yīng)答信息所給出的協(xié)議類型和參數(shù), 卡與接口設(shè)備之間以一定的波特率進(jìn)行異步數(shù)據(jù)通訊。
2 讀寫器的硬件電路設(shè)計(jì)
FR100 型IC 卡讀寫器的硬件結(jié)構(gòu)框圖如圖1 所示。它由89C51 單片機(jī)、RS232 電平轉(zhuǎn)換電路、IC 卡讀寫控制電路、EEPROM、設(shè)置開關(guān)等組成。89C51 單片機(jī)是整個(gè)讀寫器的控制中心, 它一方面通過RS232 串行接口接收上位機(jī)的指令, 并對指令進(jìn)行解釋, 然后通過IC卡讀寫控制電路對IC 卡進(jìn)行相應(yīng)的操作, 并將操作結(jié)果通過RS232 串行接口傳送給上位機(jī)。
IC 卡讀寫控制電路由卡的插入?退出識別、電源供給、時(shí)鐘信號產(chǎn)生、信號隔離與驅(qū)動等電路組成, 它的功能是提供讀寫IC 卡所需的各種狀態(tài)和控制信號。由于不同類型的IC 卡在讀寫機(jī)制上存在著一定的差異, 為了使研制的FR100 型IC 卡讀寫器具有較好的兼容性,能夠正確讀寫各類存儲卡、邏輯加密卡和微處理器卡(CPU 卡) 等目前常用的接觸式IC 卡,讀寫控制電路各種控制信號的產(chǎn)生都受89C51 單片機(jī)的I/O 口控制, 因此可以通過軟件編程來產(chǎn)生讀寫不同種類的IC 卡所需的讀寫控制信號。例如, 采用圖2 所示的時(shí)鐘信號發(fā)生電路, 當(dāng)89C51 單片機(jī)的P1. 0、P1. 1 口輸出高電平時(shí), 該電路輸出頻率為3. 5712MHz 的穩(wěn)定時(shí)鐘信號, 可以滿足異步卡對CL K 信號的要求; 而當(dāng)P1. 0 口輸出低電平時(shí), 電路的輸出與P1. 1 口的狀態(tài)反相, 若通過軟件編程在P1. 1 口輸出一個(gè)同步脈沖, 則可以滿足同步卡
對CL K 信號的要求。
EEPROM 是用來存儲讀寫器的系統(tǒng)參數(shù)及下載用戶程序的。由于用89C51 的RD 信號和PSEN 信號相與后作為EEPROM 存儲器的RD 信號, 因此EEPROM 不僅可以存儲系統(tǒng)的一些數(shù)據(jù), 還可以用來存儲用戶程序代碼。設(shè)置開關(guān)是用來設(shè)置讀寫器工作方式的, 當(dāng)開關(guān)處于ON 狀態(tài)時(shí), EEPROM 的WR 線與89C51 的WR 線連通, 讀寫器工作在聯(lián)機(jī)工作方式, 此時(shí)用戶可以通過RS232 串行口來控制讀寫器的操作, 也可以下載用戶程序; 當(dāng)開關(guān)處于O FF 狀態(tài)時(shí), 讀寫器處于脫機(jī)工作方式, 此時(shí)讀寫器執(zhí)行用戶下載到EEPROM 中的程序, 讀寫器的操作完全由用戶程序決定。而且此時(shí)EEPROM 的WR 線與89C51 的WR線斷開, 可以防止EEPROM 中的用戶程序被非法修改。該讀寫器的用戶程序下載功能, 使其二次開發(fā)能力大大增強(qiáng), 提高了讀寫器的開放性。
3 讀寫器的軟件設(shè)計(jì)
FR100 型IC 卡讀寫器的軟件在設(shè)計(jì)上采用了模塊化的結(jié)構(gòu), 主要包括IC 卡類型判別模塊、讀寫控制模塊、與上位機(jī)的通訊接口模塊等。
IC 卡類型判別模塊是以IC 卡對復(fù)位的應(yīng)答信息(A TR ) 為依據(jù)來判斷當(dāng)前插入的IC卡的類型。從前面的分析可知, IC 卡在復(fù)位之后都要輸出A TR, 而且不同的IC 卡的A TR也是不同的,A TR 可以正確區(qū)分各類IC 卡。IC 卡類型判別程序的流程圖如圖3 所示。由于IC 卡有同步卡和異步卡之分, 因此在程序中首先以異步卡的操作方式對卡進(jìn)行復(fù)位操作并讀取A TR, 如果不能正確讀取A TR, 再以同步卡的操作方式對卡進(jìn)行復(fù)位操作并讀取A TR , 如果兩種方式都不能正確讀取A TR , 則表明該卡已經(jīng)損壞。圖3 中的RTNCODE 是返回代碼, 它等于0 表示讀寫器中沒有卡或卡沒有插到位, 等于1 表示卡已損壞, 等于11 表示該卡是異步卡, 等于12 表示該卡是同步卡; 當(dāng)返回代碼為11 和12 時(shí), 存儲在Buffer 中的A TR 可對卡的類型進(jìn)行進(jìn)一步的區(qū)分。
讀寫控制模塊根據(jù)調(diào)用IC 卡類型判別模塊所返回的RTNCODE 和Buffer 內(nèi)容檢索出該卡所遵循的讀寫方式和數(shù)據(jù)協(xié)議, 并依據(jù)此協(xié)議對讀寫控制電路的各個(gè)信號進(jìn)行控制和檢測, 完成IC 卡與讀寫器之間的數(shù)據(jù)交換。對于同步卡, 讀寫操作一般按下面的三個(gè)基本操作步驟進(jìn)行, 即: 復(fù)位、數(shù)據(jù)字段的定位、讀(或?qū)? 操作。每一操作步驟中的RST、CL K、I/O 、
圖3 IC 卡類型判別程序的流程圖
PGM 等信號的控制在該卡所遵循的操作協(xié)議中都有明確的規(guī)定。對于異步卡的讀寫操作實(shí)際上是以異步串行通訊的方式在接口設(shè)備與卡之間進(jìn)行命令的傳遞與應(yīng)答的過程。接口設(shè)備與卡之間的命令結(jié)構(gòu)和應(yīng)答結(jié)構(gòu)的一般形式為:
其中, CLA 是指令類別, IN S 是指令代碼, P1, P2 是命令參數(shù), P3 是編碼數(shù)據(jù)字節(jié)(D1?Dn) 的數(shù)量n, 而SW 1, SW 2 是卡返回的狀態(tài)字節(jié)。在實(shí)際程序中, 不同的異步卡有不同的指令( IN S) 集及相應(yīng)的參數(shù), 通過檢索即可得到。
與上位機(jī)的通訊接口模塊的功能是通過RS232 串行口接受上位機(jī)的命令, 將該命令轉(zhuǎn)換成對IC 卡的操作, 并將執(zhí)行結(jié)果傳回給上位機(jī)。該模塊實(shí)際上是一命令解釋執(zhí)行程序, 與IC 卡的具體操作無關(guān), 受篇幅所限, 在此不再贅述。
4 結(jié)束語
本文FR 100 型IC 卡讀寫器具有良好的兼容性、開放性, 通過對法國Sch lumberger 公司的payf lex 卡(CPU 卡) 和美國A TM EL 公司的A T 88SC102 卡(邏輯加密卡) 的讀寫試驗(yàn)表明, 該讀寫器對不同類型的IC 卡能夠自動識別和正確讀寫, 具有一定的推廣價(jià)值。
(文/佛山科學(xué)技術(shù)學(xué)院機(jī)電分院, 葉樹林, 華 蕊, 劉 軍, 羅中良)