智能卡7816協議


最近項目涉及到了FPGA芯片與智能卡控制的系統級調試,記錄一下關於智能卡的7816協議。

概念

首先7816-3定義了智能卡(這里指的是接觸式CPU卡,對於邏輯加密卡以及非接觸IC卡不在此列)和讀寫設備之間的通訊協議,說白了就是數據位傳輸的格式。

 

這里提一下RS232協議,它屬於異步串行通訊接口(UART),通過RxD、TxD進行數據的收發,RS232曾經是PC機的標配,但是目前在多數PC上基本不復存在了(當然還可以通過USB-232轉換器來擴展)。

對比7816-3定義的通訊協議,其實基本上可以說是RS232的翻版並在此基礎上進行的改進,7816中只有一個IO同時兼具數據收發的功能,這點和RS232用RxD和TxD進行數據收發是不同的。

在RS232中我們有9600波特率、起始位、奇偶校驗位、停止位這些概念,而在7816-3中都完整地保留了下來。

 

通訊協議說明(字符傳輸)

智能卡的字符傳輸采用的是異步半雙工模式,這種異步的模式很像個人電腦上的RS232通信。傳輸一個字符時,除了8Bits的數據外,還加了以下幾個Bits:

  • 起始位 -- 用於字符幀的同步
  • 校驗位 -- 用於校驗檢測
  • Guard Time -- 兩個字符間的間隔時間

 

智能卡ETU

一般我們在理解UART通訊協議后,可以將UART協議與7816協議作為對比學習。

7816-3中引入了etu,沒有使用bps,但是基本原理是一致的。etu的定義可以更加精確地描述每個數據位在傳輸過程中收發雙方的職責和角色轉換。

根據定義在智能卡上電復位的時候 1 etu = 372 / f ,其中f = 讀寫設備通過CLK管腳提供給智能卡的時鍾頻率,通常在1--5 MHz之間。

ETU選擇    
0 372(默認值)  
1 64 FD=0x94
2 32 FD=0x95
3 16 FD=0x96

 

etu的單位是時間單位秒(毫秒、微秒),等同於傳輸每個數據位所需的時間。

對其取倒數得出來的就是每秒傳輸的數據位,也就是bps。我們取f = 3.579545 MHz,用3579545除以372結果等於9622.4約為9600 bps。

通用的etu計算公式: 1 etu = (F / D) * (1 / f) ,F和D的值根據7816-3規范中的約定來進行設置。對於上電復位時的取值 F = 372,D = 1即作為默認值Fd和Dd。如果智能卡支持其他速率則需要在ATR中的TA1來指出其他的F和D的值,比如設定F=372,可以把D分別設定為2/4,那么智能卡能支持的通訊速率可以分別為19200/38400。

那么為什么要選擇時鍾頻率為3.579545 MHz?為什么默認的F值選擇為372呢?首先3.579545 MHz 是常用石英晶振的標稱值,9600 * 372 = 3.5712 MHz,與之最為接近。再說為什么是372,372 = 12 * 31。標准的8051單片機每個指令周期為12個時鍾周期,而且定時/計數器也按照1/12 進行分頻后再計數的,這樣設定對於智能卡芯片來說可以比較容易實現對IO數據通訊的控制,也可以更好地和PC機串口9600速率配合(當然這是指上個世紀80年代的時候,對於現在的智能卡芯片設計技術而言實現任意分頻的控制都不是問題了)。

由此可見,這些參數的選擇都是為了能夠更好地利用當時既有的標准和技術,要知道7816-3在1989年的時候就已經制定了,按照當時的主流PC機配置把串口速率設為9600,用一個232接口芯片(比如Max232)再加上3.579545MHz的晶振,再配合幾片74系列的門電路外加5伏的直流電源和幾個阻容器件,這就是最基本的RS232串口讀卡器了。

 

 

智能卡上電后的相關配置流程

  1. System init
  2. ATR
  3. PPS(baud config)
  4. read file
  5. auth 鑒權

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM