ISO7816中的ATR簡介

2021-07-09 11:10:18 字數 896 閱讀 5234

智慧卡(此處主要指接觸式cpu卡)本身始終處於被動的狀態,所以終端裝置在和智慧卡進行資料互動的時候,需要首先給智慧卡發指令,智慧卡才會對應地給出應答。而智慧卡告訴終端的第一句話就是atr,亦即「復位應答」。

想象一下,如果讓你為智慧卡設計乙個通訊協議,該怎麼設計?

因為atr是智慧卡上電後說的第一句話,所以一定要確保這句話被準確地接收。在設計通訊協議的時候有必要設計乙個可以讓收發雙方進行「握手」的「同步頭」,如果接收方能夠正確解析同步頭資料,那麼雙方就可以在預設的引數下正確地進行後續的通訊。atr裡面的第乙個字元ts就相當於這個「同步頭」。如果終端給卡片上電後,能夠收到第乙個字元並解析出「3b」或者「3f」就表示卡和終端在預設引數下的通訊已經建立起來了。

在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裡給出的資訊表明其可以支援若干種通訊協議,終端該如何和它打交道呢?相當於卡片用預設的「英語」告訴終端「ican speak english, chinese, japanese, french。」

STM32模擬ISO7816智慧卡協議筆記

本人在同stm32晶元模擬iso7816協議的時候,在釋放觸點的函式中發現其中乙個被配製成復用開漏的io管腳怎麼都無法拉低。其 如下 釋放智慧卡觸腳 void psam deinit 經過本人反覆實驗,發現將 釋放usart與gpio管腳 的兩行 與 失能gpio,usart和復用時鐘 的兩行 順序...

ISO7816 T1協議簡介

之前說過的t 0協議基本上相當於是透明的資料,也就是說從應用的角度看,通過t 0傳遞的tpdu資料資訊大都可以直接轉換為對應的apd命令響應資料,位元組 是t 0協議最小的資料傳輸單元。對於t 1協議而言,最小的資料傳輸單元是 資料塊 這個資料塊由若干個位元組組成,其中有些位元組是必須的,有些位元組...

ISO中七層用的協議

層名 協議 應用層 dhcp dns ftp gopher http imap4 irc nntp xmpp pop3 sip smtp snmp ssh telnet rpc rtcp rtp rtsp sdp soap gtp stun ntp ssdp 表示層 http html ftp te...