<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > CPU卡中T=0通訊協(xié)議的分析與實(shí)現

CPU卡中T=0通訊協(xié)議的分析與實(shí)現

作者: 時(shí)間:2011-04-28 來(lái)源:網(wǎng)絡(luò ) 收藏

IC卡的應用越來(lái)越廣泛,從存儲卡到邏輯加密卡,目前卡已經(jīng)逐漸在應用中占據主導地位。卡根據可分為兩種:接觸式和非接觸式。接觸式卡主要采用兩種:T=0和T=1。T=0是異步半雙工字符傳輸協(xié)議,T=1是異步半雙工塊傳輸協(xié)議。目前T=0通訊協(xié)議的應用較為廣泛,國內外大多數CPU卡都支持該協(xié)議,在金融交易中也采用這種通訊協(xié)議。為了便于說(shuō)明問(wèn)題,本文從T=0協(xié)議的功能出發(fā),將該協(xié)議分為四個(gè)層次:物理層、數據鏈路層、終端傳輸層和應用層,見(jiàn)圖1。

本文引用地址:http://dyxdggzs.com/article/156347.htm

由于該協(xié)議的特殊性,終端傳輸層與應用層聯(lián)系非常緊密,起來(lái)比較繁瑣,在CPU,這些任務(wù)通過(guò)卡片操作系統(COS)來(lái)。終端在與卡的信息交換中,始終處于主動(dòng)地位,終端向卡發(fā)送符合T=0協(xié)議的命令字節,的COS完成對數據的處理并將處理結果返回給終端。下面對T=0協(xié)議的四個(gè)層次進(jìn)行詳述。

1 T=0協(xié)議的物理層描述

終端與智能卡之間通過(guò)改變I/O傳輸線(xiàn)上的電平來(lái)交換信息。由于T=0協(xié)議是面向字符的傳輸協(xié)議,這里先定義字符幀的結構,并對組成字符幀位的信息表示作了具體描述。字符幀的結構如圖2所示。

字符幀由1個(gè)起始位S、8個(gè)數據位和1個(gè)偶校驗位P共10位組成。在數據傳輸中每一位的持續時(shí)間稱(chēng)為基本時(shí)間單元etu(elementary time unit),etu的值由時(shí)鐘頻率決定,etu與時(shí)鐘頻率呈現性關(guān)系:

1etu=(F/D) ×(1/f) (1)

其中F稱(chēng)為時(shí)鐘頻率轉換因子,D稱(chēng)為波特率調整因子。時(shí)鐘頻率的范圍為1MHz~5MHz,正常的工作頻率為3.57MHz,數據傳輸的波特率采用9600bps,根據國際標準的取值范圍,取F=372,D=1,代入式(1),可得:

1etu=372/f=372 (2)

即一個(gè)基本時(shí)間單元為372個(gè)時(shí)鐘周期。將工作頻率定為3.57MHz,可以保證數據傳輸的波特率為9600bps。如果要提高數據的傳輸率,可以調整參數F來(lái)確定傳輸率。對每一位電平采用三次采樣來(lái)確定,在位持續時(shí)間的中間和左右15%的間隔各取樣一次,取樣點(diǎn)如圖3所示。當有兩次以上電平為低,則判斷該位為0;否則該位為1,這樣確保了取樣值的可靠性。由于數據位的持續時(shí)間是用匯編語(yǔ)句來(lái)控制的,可以通過(guò)延時(shí)語(yǔ)句調整采樣的時(shí)間間隔。但采樣的最基本匯編語(yǔ)句的執行時(shí)間不能再縮短,因此數據傳輸率有一上限。當每一位取樣三次時(shí),數據傳輸率最高可達到57600bps。如果再提高速率,取樣時(shí)序將無(wú)法保證。字符幀的起始位為低電平,起始位的檢測是通過(guò)周期性地對I/O傳輸線(xiàn)進(jìn)行采樣來(lái)得到。國際標準中規定采樣時(shí)間間隔不得大于0.2etu,實(shí)際上起始位的采樣時(shí)間間隔只有幾個(gè)時(shí)鐘周期,完全滿(mǎn)足要求。

2 T=0協(xié)議的數據鏈路層實(shí)現

數據鏈路層描述了字符交換的時(shí)序要求和差錯控制以及終端對面向傳輸的錯誤的處理,在邏輯上保證終端和卡片之間能夠正確可靠地通訊。

采用上述的字符幀,終端與卡之間進(jìn)行數據將交換,字符之間有嚴格的時(shí)序,時(shí)序是通過(guò)匯編程序語(yǔ)句的執行時(shí)間來(lái)控制的。從終端到卡發(fā)送的連續字符的起始位下降沿之間的最小時(shí)間間隔由復位應答信息通知終端,其值在12etu~266etu之間。從卡發(fā)送到終端的連續字符的起始位下降沿之間的最小時(shí)間間隔應為12etu。

如果字符接收不正確或字符接收正確但校驗位不正確,接收端需要在字符起始位下降沿后的(10.5±0.2個(gè)etu時(shí)刻將I/O線(xiàn)置為低電平約1~2個(gè)etu,見(jiàn)圖4,用于向發(fā)送端指明錯誤;發(fā)送端在(11±0.2)個(gè)etu時(shí)刻檢測I/O線(xiàn)。如為高電平則表示字符已經(jīng)正確接收;如果發(fā)送端檢測到錯誤,則在檢測到錯誤那一刻起,2個(gè)etu后重發(fā)該字符,但重復發(fā)送同一字符的次數不得超過(guò)3次。如果最后一次發(fā)送失敗,當終端是接收端時(shí),則終端應該在無(wú)效字符的起始位下降沿后的960個(gè)etu時(shí)間范圍內啟動(dòng)釋放序列;當終端是發(fā)送端時(shí),在卡片檢測到字符的偶校驗錯誤后960個(gè)etu時(shí)間范圍內,終端啟動(dòng)釋放序列。

命令的執行總是由終端應用層(TAL)啟動(dòng),通過(guò)終端傳輸層(TTL)送給卡片。TTL與卡片進(jìn)行命令字節和數據字節交換時(shí),要保證能夠有序正確地進(jìn)行。因此,在數據交換過(guò)程中,在任何時(shí)刻TTL和卡片都應該隱含地知道哪一方是發(fā)送者,哪一方是接收者。當卡片接收到5個(gè)字節的命令字節后,需要向TTL返回一個(gè)過(guò)程字節或兩個(gè)字節的狀態(tài)字節,具體含義如表1、表2所示。

表1 終端對過(guò)程字節的處理

過(guò)程字節TTL執行的操作
與INS字節相同TTL向卡片發(fā)送或從卡片接收所有數據
INS字節的補碼TTL向卡片發(fā)送或從卡片接收下一個(gè)字節
'60'TTL延長(cháng)等待時(shí)間
'61'TTL等待第二個(gè)過(guò)程字節'xx'并根據'xx'發(fā)
GET RESPONSE命令取回數據
'6C'TTL等待第二個(gè)過(guò)程字節'xx'并根據'xx'重發(fā)上一條命令

表2 卡返回的狀態(tài)字節編碼

第一個(gè)狀態(tài)字節值TTL執行的操作
'6'或'9x'(除表1中的值外)TTL等待第二個(gè)過(guò)程字節SW2

當返回的過(guò)程字節或狀態(tài)字節均不是表中規定的值時(shí),終端在接收到的無(wú)效字符的起始位降沿開(kāi)始的9600個(gè)etu時(shí)間范圍內啟動(dòng)釋放序列。

3 T=0協(xié)議的終端傳輸層和應用層的實(shí)現

數據鏈路層保證了TTL與卡片正常的數據交換。在此基礎上,TTL定義了命令和響應APDU(Application Protocol Data Unit)通過(guò)TTL和卡片之間的數據傳輸機制,因此該層協(xié)議定義了APDU到TPDU(Transport Protocol Data Unit)的映射機制以及TPDU和卡片之間如何來(lái)完成數據的交換。根據命令和響應APDU包含的數據情況,共有四種不同的APDU,TTL應能夠對四種情況進(jìn)行處理,完成終端和卡之間的數據交換。由于T=0協(xié)議的特殊性,終端傳輸層和應用層并沒(méi)有完全隔離開(kāi)。為了便于說(shuō)明問(wèn)題,先簡(jiǎn)要描述一下應用層,然后將終端傳輸層和應用層結合起來(lái)進(jìn)行說(shuō)明。

應用層協(xié)議定義了C-APDU和R-APDU的具體結構。應用層之間的數據交換都是由一個(gè)命令-響應對完成的,TAL通過(guò)TTL將C-APDU送給集成電路卡(ICC),ICC處理完后將處理結果組成R-APDU通過(guò)TTL送給TAL。APDU由命令報文和響應報文共同組成,根據C-APDU和R-APDU是否包含數據域,APDU有四種情況,見(jiàn)表3。

表3 APDU包含數據的情況

 命令APDU數據域響應APDU數據域
1無(wú)無(wú)
2無(wú)
3無(wú)
4

C-APDU由一個(gè)強制性的四字節命令頭CLA、INS、P1、P2和一個(gè)可變長(cháng)度的條件體組成。CLA為命令類(lèi)型字節;INS為命令代碼字節;P1和P2為命令參數;條件體包括命令數據域長(cháng)度字節Lc,命令數據域和響應返回的最大長(cháng)度字節Le。根據不同的命令,條件體的組成也不相同,C-APDU有四種情況,見(jiàn)表4。

表4 C-APDU的結構

情 況C-APDU結構
1CLA INS P1 P2
2CLA INS P1 P2 Le
3CLA INS P1 P2 Lc Data
4CLA INS P1 P2 Lc Data Le

R-APDU由一個(gè)最大長(cháng)度為L(cháng)e的數據域和一個(gè)強制性的兩字節狀態(tài)代碼組成,狀態(tài)代碼給出了IC卡對當前命令的處理結果。

對于C-APDU,終端先將其映射成T=0傳輸層的格式,然后通過(guò)TTL傳送給卡片,卡片返回的數據和狀態(tài)先返回給TTL,再映射成R-APDU返回給TAL。這里根據四種不同的情況,了C-APDU到C-TPDU以及R-APDU到R-TPDU的映射方法,并對情況2和情況4時(shí),如何使用GET RESPONSE命令進(jìn)行了說(shuō)明。C-APDU到C-TPDU的映射根據命令的情況決定,卡片返回的數據和狀態(tài)到R-APDU的映射要根據返回數據的長(cháng)度來(lái)判斷。對于卡片返回的過(guò)程字節“61xx”和“6Cxx”,將用于TTL和卡片之間進(jìn)行數據交換,當卡片返回“61xx”時(shí),表示命令沒(méi)有結束,TTL不將過(guò)程字節返回給TAL,而是從TTL直接向卡片發(fā)出GET RESPONSE命令,取回上一條命令應該返回的數據。并返回給TAL。當卡片返回“6Cxx”時(shí),TTL將根據“xx”的值調整并重發(fā)上一條命令。下面分別對四種命令情況進(jìn)行。

(1)當C-APDU和R-APDU均不含有數據時(shí),將C-APDU的CLA、INS、P1、P2映射為C-TPDU的CLA、INS、P1、P2、C-TPDU的P3置為“00”,卡片接收到C-TPDU后,根據命令頭決定該命令所含數據的情況。TTL接收到卡片返回的狀態(tài)后,該命令完成,TTL將狀態(tài)字節強制性地加到R-APDU的尾部。

(2)當C-APDU不含有數據而R-APDU含有數據時(shí),將C-APDU的CLA、INS、P1、P2、Le映射為C-TPDU的CLA、INS、P1、P2、P3,其中P3可以置為“00”,也可以置為需要返回的數據字節數,卡片接收到C-TPDU后,如果命令處理失敗,卡片直接將狀態(tài)代碼通過(guò)TTL返回給TAL;當命令能夠正常處理時(shí),如果P3指定的字節數能夠正確返回,待卡片內部應用數據處理完成后,這時(shí)卡片首先返回給TTL該命令的過(guò)程字節,通知TTL準備接收卡片數據緩沖區中的數據,然后卡片直接將P3字節的數據和狀態(tài)字節通過(guò)TTL返回給TAL,否則,卡片只將過(guò)程字節“6Cxx”或“61xx”返回給TTL這一層。當過(guò)程字節為“6Cxx”時(shí),TTL根據xx重發(fā)命令取回數據,當過(guò)程字節為“61xx”時(shí),TTL發(fā)GET RESPONSE命令取回數據。

(3)當C-APDU含有數據而R-APDU不含數據時(shí),將C-APDU的CLA、INS、P1、PS、Lc映射為C-TPDU的CLA、INS、P1、P2、P3,待卡片對C-TPDU檢查通過(guò)后,卡片直接將過(guò)程字節返回給TTL,TTL根據返回的過(guò)程字節繼續向卡片發(fā)送P3字節的后續數據。待數據接收完后,卡片對應用數據進(jìn)行處理,然后將處理結果以狀態(tài)字節的方式通過(guò)TTL返回給TAL。

(4)當C-APDU和R-APDU均含有數據時(shí),將C-APDU的CLA、P1、P2、Lc映射為C-TPDU的CLA、INS,P1、P2、P3,待卡片對C-TPDU檢查通過(guò)后,卡片直接將過(guò)程字節返回給TTL,TTL根據返回的過(guò)程字節繼續向卡片發(fā)送P3字節的后續數據。待數據接收完后,卡片對應用數據進(jìn)行處理,如果命令處理失敗,卡片直接將狀態(tài)代碼返回給TTL。當命令正常處理時(shí),卡片返回給TTL過(guò)程字節“6Cxx”或“61xx”,當為“6Cxx”時(shí),TTL根據xx重發(fā)命令取回數據。當過(guò)程字節為“61xx”時(shí),TTL發(fā)GET RESPONSE命令取回數據。

(1)由于T=0協(xié)議字符級檢錯重發(fā),與面向塊的傳輸協(xié)議T=1相比,在出現傳輸錯誤時(shí),T=0協(xié)議可以不必整個(gè)數據報文全部重發(fā),節省了時(shí)間。

(2)在編程過(guò)程中,對位幀進(jìn)行采樣時(shí),采用了三次采樣判決的方式,避免了由于采樣時(shí)的偶然誤差而造成誤碼。

(3)T=0協(xié)議是應用于智能的第一個(gè)接觸式通訊協(xié)議,但該協(xié)議并沒(méi)有考慮傳輸中斷和檢測到傳輸錯誤碼后卡和讀寫(xiě)器的再同步問(wèn)題。唯一的檢錯機制就是奇偶位校驗。對錯誤的處理就是對出錯的字節重新發(fā)送一次,這樣極有可能導致無(wú)限次的循環(huán)狀態(tài)。

(4)T=0協(xié)議并沒(méi)有與應用層完全分割開(kāi),應用層的命令解釋器必須告訴傳輸層當前命令是接收還是發(fā)送數據。由于這個(gè)原因,這兩個(gè)模塊在命令處理過(guò)程中需要交互操作,在程序中能夠提取出一個(gè)通用的傳輸層,供應用層調用來(lái)負責完成數據的傳輸。這種情況給編程和調試帶來(lái)了不便。同時(shí)造成模塊的可重用性較差。

(5)對于命令報文中包含數據域,同時(shí)又需要卡片返回數據的命令,T=0協(xié)議不能用一條命令來(lái)實(shí)現,必須分為兩步實(shí)現:第一條命令為卡片提供數據,然后用另外一條相關(guān)的命令來(lái)取回數據。這樣給卡片的編程帶來(lái)很大麻煩,同時(shí)卡片內存中必須保留上一次操作需要返回的數據。這時(shí)如果不及時(shí)發(fā)送取數據命令而發(fā)送其它命令,可能會(huì )將敏感數據泄漏,并產(chǎn)生其它問(wèn)題。這些都是T=0協(xié)議考慮不周的地方。

(6)終端傳輸層需要根據卡片返回的子程字節和狀態(tài)字節執行相應的操作,使終端對數據的處理復雜化。

(7)由于目前大多數接觸式終端只支持T=0通訊協(xié)議,因此該協(xié)議仍將得到廣泛的應用。隨著(zhù)智能卡芯片功能的增強,對于數據傳輸量較大的應用,該協(xié)議將不再適用,面向塊的異步半雙工接觸式傳輸協(xié)議T=1將體現出優(yōu)勢.

數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>