本文转载自:

smartcard T0 T1 T14协议区别

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两种数据状态

智能卡 7816协议【转】相关推荐

  1. 智能卡 7816协议

    smartcard T0 T1 T14协议区别 1) T0 异步半双工字符传输协议 停止位是2, T1是1. 2) T1是异步半双工块传输协议. 有起始域,信息域, 中止域 组成一个 块. 3) T1 ...

  2. 使用 Saleae LLC 监控 7816 协议数据

    复位应答 正常 APDU 通讯 7816速率计算公式: 注意规范有规定复位应答期间,Fi 和 Di 必须为默认值(否则双方如何确定要用多少速率通讯). Fi = 372 | Di = 1 1 etu ...

  3. 深入理解7816协议(1)---- 关于F/D和etu

    对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置以及对应的etu的时候,会觉得有些复杂和难以理解. 其实从 ...

  4. 智能卡 14443A 协议 读卡器 和智能卡 数据传输协议

    在14443协议 中,读卡器 和智能卡 之间 建立了 连接之后,互相是怎么通信的呢? 它使用的是 半双工分组传输协议 PCB 有三种协议: I-block R-block S-block I-bloc ...

  5. 智能卡 ISO14443 协议 解读

    MFRC522 芯片手册 参考资料: <MFRC522数据手册.pdf> <MFRC522中文.pdf> <IC卡与RFID标签(第三版)王爱英.pdf> < ...

  6. STM32 IO口模拟ISO7816(PSAM卡)协议

    单片机:stm32f103c8t6   实现方式:纯IO口模拟(RST.I/O.CLK均为普通IO口) 实现功能:接触式CPU卡.PSAM.SIM读(写) 网上有很多相关的代码,有的是用自带的智能卡接 ...

  7. 智能卡应用的开发流程

    原文地址:http://blog.csdn.net/javacardsolutions/article/details/5736760 在我看来,无论是上层的应用程序开发还是底层的譬如驱动程序的开发, ...

  8. IC卡(智能卡)基础知识简介

    目录 IC卡(智能卡)基础知识简介 1.何为IC卡(智能卡) 2.IC卡的相关规范 3.智能卡如何管理其存储器 4.智能卡如何对信息存取过程进行控制 IC卡(智能卡)基础知识简介 IC卡(智能卡)基础 ...

  9. SIM卡与IEC 7816

    SIM卡与IEC 7816 SIM,Subscriber Identification Module,又被称为用户身份识别卡.智能卡.SIM卡是一种物理载体,而相关的性能以及协议的规定都包含在IEC ...

最新文章

  1. java视频播放器制作_java创建简易视频播放器
  2. .net mvc actionresult 返回字符串_.NET架构师知识普及
  3. python语言入门z-python基础语法_8循环语句
  4. CRMEB开发文档及目录结构
  5. Kafka MirrorMaker 跨集群同步工具
  6. vue watch监听对象
  7. GWT EJB3 Maven JBoss 5.1集成教程
  8. 09.07 jQuery 随意整理
  9. Android录制音频的三种方式
  10. 16 年前,Google 为何花 5000 万美元买下 Android?
  11. java 对象equals_浅谈Java对象的equals方法
  12. 拼多多332亿美金市值超网易,黄铮离目标又近了一步!
  13. sqlplus配置连接mysql_sqlplus连接远程数据库
  14. 黑客教父郭盛华:11个IDA Pro反汇编程序的替代品
  15. Python 查找算法_众里寻他千百度,蓦然回首那人却在灯火阑珊处(线性、二分,分块、插值查找算法)
  16. Simulink视频和图像处理模块介绍
  17. Huffman文件压缩之文件夹压缩
  18. 来自学长师兄们的应届校招经验
  19. 自己电脑中安装黑群辉NAS
  20. mxGraph画图区域使用鼠标滚轮实现放大/缩小

热门文章

  1. 阅读 | 《娱乐至死》笔记 | Part1
  2. 海盗分金币的问题,代码
  3. PayPal 注册和使用详解
  4. iPhone系统升级后怎么恢复以前的系统
  5. click事件不生效
  6. 常用模块fractions基本使用
  7. 华为通话录音怎么备份到云盘_华为手机录音文件在哪?华为查看录音文件及备份教程...
  8. 一本书读懂财报 | 利润表(损益表)剖析
  9. 观echat的一个例子后有感
  10. 创业板、融资融券被寄予厚望