智慧卡 7816協議

2021-07-30 22:57:37 字數 4161 閱讀 1341

1) t0 非同步半雙工字元傳輸協議 停止位是2, t1是1。

2) t1是非同步半雙工塊傳輸協議。 有起始域,資訊域, 中止域 組成乙個 塊。

3) t14叫做私有協議。t14沒有奇偶校驗, atr期間時鐘因子也不同。像irdeto是620。

4、通訊協議說明(字元傳輸)

smart card的字元傳輸採用的是非同步半雙工模式,這種非同步的模式很像個人電腦上的rs232通訊。傳輸乙個字元時,除了8bits的資料外,還加了以下幾個bits:

起始位 -- 用於字元幀的同步

校驗位 -- 用於校驗檢測

guard time -- 兩個字元間的間隔時間

guard time一般為兩個bit的時鐘週期,這一點很像pc上的uart的通訊,用兩個停止位來間隔相連的字元。

復位應答(atr):

當rst訊號被觸發,即將rst管腳被拉低400~4000個時鐘週期,smart card檢測到這個訊號後,將會回傳「復位應答」atr訊號出來,atr最多包含33個位元組,有以下幾個段:

l 初始化字元(ts)

l 格式化字元(to)

l 介面字元(tai, tbi, tci, tdi) (i=0/1)

l 歷史字元(t1, t2, t3 … tk)

l 校驗字元(tck)

它們包含哪些意思呢?請看下面的解析:

首先,ts初始化字元展示了電平的邏輯,反向約定(inverse convention即負邏輯)和正向約定(direct convention即正邏輯)。那麼一般來說,回傳ts有兩個可能的hex值0x3f和0x3b,0x3f代表反向約定,0x3b代表正向約定。

格式化字元to段分為兩個部分,bit map和no of history bytes,各佔4個bits。

介面字元的tai定義了串列埠傳輸中最基本的特性,其中包含兩個4-bits的di和fi,當中的fi時鐘頻率的轉換因子,di則是定義了位元率的調節因子。通過這兩個因子,我們可以通過以下的公式驗算出work etu的大小:

work etu = 1/d*f/f sec (f為工作的時鐘頻率)

正常來說,乙個etu(elementary time unit),乙個bit的時間週期。因此我們計算得出,傳輸乙個字元幀為12個etu=1 start + 8 data + 1 parity + 2 guardtime。

接下來,便會有個問題了,字元通訊是需要d和f這個兩個調節因子,保證其工作時序,而這兩個因子又是smart card復位後,由通過字元傳輸回傳的atr獲得的,那麼誰來保證atr傳輸的時序呢?原因是這樣的,card復位時,會有d和f的兩個初始值,分別 d=1,f=372。而且,復位時時鐘頻率f會在1~5mhz範圍之內,比較常見的是3.579545mhz。

我們可以計算得出default etu = 1/1*372/3579545 sec;

baud rate = 1/default etu = 9600s/s;

tc提供的guard time也是如此,default值為2個bit的時鐘週期。

td則是要說明的是傳輸協議的型別,標準裡羅列了16種,但是常用也就是兩種t0和t1,即非同步半雙工位元組傳輸和非同步半雙工塊傳輸。

因此,我們知道多數smart card復位時,是工作在3.579545mhz和9600s/s上的,一旦復位後,就根據atr的值重新進行配置工作時鐘頻率、波特率和guard time。使其能更高效的通訊。

t=0 傳輸協議:

ifd和smart card之間存在主從裝置關係。在通訊之前,我們知道atr中協議是多於乙個,因此介面裝置會發乙個pts訊號,以便確認通訊協議的型別。

cla - 指令集 (ff 是預留給 pts)

ins - 指令碼 (例如,讀記憶體)

p1 - 指令跟的引數1 (例如,記憶體位址)

p2 - 指令引數2

p3 - 資料長度

另外,再說說smart card的兩個狀態字sw1和sw2。它們是用來通知上位裝置目前smart card的工作狀態,如果工作正常,則返回值如下所示:

sw1,sw2 = 0x90, 0x00

如果工作異常了,也能通過這兩個狀態字獲得一些資訊,如:

sw1= 6e - card 不支援該款指令集

= 6d - 無效的指令碼

integrated circuit card  積體電路卡,也叫ca卡或智慧卡,將乙個微電子晶元嵌入符合iso 7816標準的卡基內,做成卡片形式,也是乙個嵌入式小系統。由cpu,rom,ram及e2prom及序列通行單元組成。

其作業系統稱為cos,一般帶有自已的安全體系,其安全性是衡量cos的重要指標。其功能包含有傳輸管理,檔案管理,安體體系及命令解釋。

一般stb機頂盒與智慧卡連線圖如下:

i/o 序列輸入輸出

clk 時鐘訊號

rst 復位訊號

vcc 供電電壓 一般5v

gnd 接地

智慧卡與cpu之間按照非同步方式傳送位元組,其具有統一的字元傳輸格式,乙個字由連續的10個etu完成傳送,期間傳送1個起始位,8個資料位和1個奇偶檢驗位。其資料幀傳輸格式:10bit

atr結構及內容:

ts初始位元組定義隨後字元的邏輯電平及位序

0x3b 表示高電平為邏輯'1', lsbf

0x3c 表示低電平為邏輯'1', msbf

t0格式字元,標記協議引數,協議型別

協議引數:

其基本的讀寫流程圖如下:

下面重點說一下smartcard驅動編寫主要邏輯:

1、設定卡工作頻率

開啟裝置的時候需要設定頻率引數,而晶元實際給sci 的時鐘是由外部傳入的

時鐘頻率引數計算的分頻因子分頻得來,因為計算公式會捨棄計算的分頻因子的小數部分,

所以通過系統時鐘分頻之後給卡的時鐘會存在增量誤差,實際配置考慮與需求最接近的值來

設定和權衡

具體演算法:

fsci_clk = frefclk/((clkicc+1)*2);

其中frefclk是系統96m時鐘?fsci_clk 是外部需要設定的sci時鐘,實際要配入暫存器分頻因子

clkicc = frefclk/(2*fsci_clk) -1;

clkicc 有時候計算出來是浮點數,但只取整,所以設定的頻率與實際頻率有偏差。

一般來說,其值設定:

對於t0,t1卡,支援頻率1mhz~5mhz;對於t14卡,只支援6mhz。單位為khz

2、etu 串列埠波特率 elementary time unit

etu = f / (clk * d) 其中 f 和 d 為調整因子,在ta1中,初值為372和1

則 etu = 372 / (clk * 1) 則波特率為9600則clk值為 3.57112mhz

對於暫存器設定如下:

etu = ((1 + baud) / f(refclk) ) * value etu範圍:5~255

f(refclk) 參考時鐘頻率,一般為 96000ul

band 為 sci_baud 配置的值 (波特率晚鐘分頻值暫存器)

value 為 sci_value配置的值 (etu內sci_baud 週期數暫存器)

以上的兩個引數可能會導致資料傳送成功但卻無法收到資料的情況!天柏ca就比較特別需要設為[372,2]

3、中斷接收資料

利用gpio作為irq中斷線用於資料處理

request_irq(irq_sci,smartcard_isr,irqf_disabled,null,null); 註冊中斷

利用中斷可檢測到 card in/out和 rx 接收資料

對於atr資料的接收與正常的機**訊資料同樣操作的,只不過card的狀態不同時的操作而已。

init->card in->wait atr->read atr->ready--> 後面就是rx/tx兩種資料狀態

STM32模擬ISO7816智慧卡協議筆記

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

RFID與智慧卡

rfid與智慧卡 智慧卡 smartcard 區別於早期的磁卡,是一張上面封裝了整合電 路晶元的塑料卡片,用於儲存和處理資料。智慧卡可以分為一般儲存卡 加密儲存卡 cpu卡和整合了多種功能的超級智慧卡。智慧卡的分類和標 準很多,這裡只對和 rfid 物聯網相關的非接觸式 contactless 智慧...

智慧卡的電源電流

智慧卡的微控制器是通過它的觸點電極c1來獲得其電源電壓的。根據gsm 11.11規範,此電流不能超過10nuaoiso標準的現行版本規定值為200ma,從技術上來說這是過時的,將肯定要改變以反映目前的技術狀態。智慧卡的功率消耗是50mw,即5v的電源電壓和假定的10ma的電源消耗。即使這樣的功率損耗...