之前說過的t=0協議基本上相當於是透明的資料,也就是說從應用的角度看,通過t=0傳遞的tpdu資料資訊大都可以直接轉換為對應的apd命令響應資料,「位元組」是t=0協議最小的資料傳輸單元。
對於t=1協議而言,最小的資料傳輸單元是「資料塊」,這個資料塊由若干個位元組組成,其中有些位元組是必須的,有些位元組是可選的。每個資料塊最多可以包含多少個位元組(也就是資料塊的大小)可以通過三種途徑確定:1)atr中對應協議t=1的專有介面位元組指出;2)使用預設的值;3)在資料傳輸過程中協商。
乙個資料塊其實就是乙個「資料報」,其中包頭的3個位元組(nad1位元組+ pcb 1位元組+ len 1位元組)和包尾1個或者2個位元組(如果採用lrc校驗就是1位元組,採用crc校驗就是2位元組)是必須的,中間的資訊資料域inf則是可選的。其中nad代表節點位址,基本不用,可以設定為「00」;pcb代表協議控制位元組,用來指明資料塊的型別(分為:傳遞資訊域資料的i-塊,應答響應的r-塊,負責通訊引數協商的s-塊)、序列號、是否存在後續的鏈結塊、是否有校驗錯誤、額外超時等待請求、資訊資料域大小的協商等。
和t=0協議最明顯的不同是t=1協議按照osi的參考模型進行了分層,分別是:物理層、資料鏈路層和應用層。物理層主要是資料字元的傳輸,資料鏈路層主要是資料塊的傳輸,而應用層主要是apdu的互動傳輸。apdu的互動與資料字元的傳輸,這些和t=0協議裡面描述的大體相同,關鍵的就是資料鏈路層定義的資料塊傳輸。因為這個資料鏈路層的定義,使得t=1協議基本具備了可以實現複雜網路資料傳輸的全部特徵,相比而言t=0協議簡直就等同於「裸傳」了。
資料鏈路層主要進行的是3類資料塊的互動傳輸,基本的原則是:第乙個資料塊一定是從終端發給卡片的i-塊或者s-塊;i-塊可以用r-塊或者i-塊來應答,而s-塊的請求只能用s-塊的響應來應答;i塊和r-塊會包含有「0」和「1」的序列號,序列號的初始值為「0」,重新同步之後也是再次從「0」開始,之後在「0」和「1」之間交替切換;如果一條應用資料大於資料塊資訊域的最大長度,則需要分割為若干個鏈結的資料塊來傳輸;和t=0協議卡片傳送「0x60」類似,如果卡片需要較長時間進行命令處理,可以用延長等待時間的wtx請求s-塊讓終端繼續等待;一旦傳輸過程中出現錯誤,可以通過資料塊重發、重新同步、卡片復位等動作來進行糾錯。
對於各種正常和異常資料傳輸的處理,7816定義了若干的規則(rules)明確而詳細地說明了終端和卡片在資料塊傳輸過程中應該遵循的流程。
在實際應用中,接觸式卡片遵循7816 t=1協議的不是很多,但是非接觸的14443 t=cl協議,在資料傳輸方面和7816的t=1協議如出一轍,而且在檢測過程中,最容易出現軟體問題的地方也正是非接觸協議這部分。
ISO7816中的ATR簡介
智慧卡 此處主要指接觸式cpu卡 本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是atr,亦即 復位應答 想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?因為atr是智慧卡上電後說的第一句話,所...
深入理解7816協議(3) 關於T 0
卡片和終端之間的資料傳輸是通過命令響應的方式進行的,卡片只能被動地接收命令,並且給出響應。所有的命令都是以命令頭開始,而該命令被完整地執行後 無論結果對錯 必須以包含狀態字 sw1 sw2 的響應結束。卡片和終端之間如何具體進行資料傳輸的,就依靠不同的通訊協議來實現,其中主要有t 0 t 1 t c...
STM32模擬ISO7816智慧卡協議筆記
本人在同stm32晶元模擬iso7816協議的時候,在釋放觸點的函式中發現其中乙個被配製成復用開漏的io管腳怎麼都無法拉低。其 如下 釋放智慧卡觸腳 void psam deinit 經過本人反覆實驗,發現將 釋放usart與gpio管腳 的兩行 與 失能gpio,usart和復用時鐘 的兩行 順序...