智慧卡(此處主要指接觸式cpu卡)本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是atr,亦即「復位應答」。
想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?
因為atr是智慧卡上電後說的第一句話,所以一定要確保這句話被準確地接收。在設計通訊協議的時候,有必要設計乙個可以讓收發雙方進行「握手」的「同步頭」,如果接收方能夠正確解析同步頭資料,那麼雙方就可以在預設的引數下正確地進行後續的通訊。atr裡面的第乙個字元ts就相當於這個「同步頭」。如果終端給卡片上電後,能夠收到第乙個字元並解析出「3b」或者「3f」就表示卡和終端在預設引數下的通訊已經建立起來了。
1)卡片支援的通訊協議是t=0還是t=1,或者是其他的t = x ?
2)除了預設引數,卡片是否還支援其他的通訊引數?
3)和某些行業應用有關的特殊資訊。
在atr的第二個字元t0中,就給出了這些必要的資訊是如何在atr中存在的。t0的高4位用來指出是否存在表示通訊協議以及通訊引數的「介面位元組」ta、tb、tc、td(當然如果不存在介面位元組,則使用預設的協議與通訊引數),t0的低4位則用來指出可以反映卡片自定義資訊的歷史位元組個數。
在某些行業應用規範裡,會對歷史位元組有明確的規定,用來區分晶元商、卡商、cos版本等,同時可能還會規定用某些歷史位元組來作為卡片金鑰分散的分散因子。
那麼這些通訊引數有哪些呢?主要包括通訊協議,字元傳輸速率,以及超時等待時間和資料塊的大小等。
介面位元組採用逐層巢狀的方式來表示的,第一層ta1、tb1、tc1、td1是否存在由t0的高4位決定,第二層ta2、tb2、tc2、td2是否存在則由td1的高4位決定,依此類推,每層的tdi的高4位都決定了下一層的ta(i+1)、tb(i+1)、tc(i+1)、td(i+1)是否存在。
如果卡片在atr裡給出的資訊表明其可以支援若干種通訊協議,終端該如何和它打交道呢?相當於卡片用預設的「英語」告訴終端「i can speak english, chinese, japanese, french。」
本文**: ,支援原創,傳播知識,僅供學習自用。
深入理解7816(2) 關於ATR
智慧卡 此處主要指接觸式 cpu卡 本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是 atr,亦即 復位應答 想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?因為 atr是智慧卡上電後說的第一句...
關於fflush的深入理解
求fflush stdin 和fflush stdout 用法 include void main 這樣的乙個問題。假如輸入的不是3個而是大於3個時候,是不是要清空緩衝區呢?輸出的時候是不是也要清空一下呢?謝謝您幫我解答。3q gfxiang 一般不用。btw fflush 似乎只對輸出緩衝區清空,...
關於C 的深入理解
1.關於引用和指標的理解 在我自己看來有兩個方面需要重視!第一是c 中,和 這兩個操作符的用法 1 可以作為宣告乙個指標 也可以用來作用為取值 代表位址指向的儲存單元 2 可以作為宣告乙個引用 也可以用來作用為取位址符號 第二是指標和引用的定義和性質區別 擷取自 inta 1 int p a int...