IC卡的传输协议(1)-字符传输协议T=0【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172022.HTM
在异步半双工传输协议中,主要定义了终端为实现传输控制和特殊需要发出的命令及这些命令的处理过程。
在传输协议中定义了两种协议:字符传输协议(T=0)和块传输协议(T=1)。IC卡可以选择支持T=0协议或者T=1协议,终端一般都支持这两种协议。在ATR中的TD1规定了后续传输中所采用的传输协议(T=0或T=1),如果TD1在ATR中不存在的话则假定采用T=0。如果在ATR之后卡片与终端之间没有参数协商的PTS过程的话(详细细节可参考ISO7816相关部分),由IC卡指定的协议将在复位应答之后立即被采用。
传输协议按照如下的模型进行定义。
* 物理层
定义了位交换,是两种协议的公共部分。
* 数据链路层
包括如下定义:
字符帧,定义了字符交换,是两种协议的公共部分;
T=0时的字符交换
对T=0的检错纠错
T=1时的块交换
对T=1的检错纠错
* 传输层
定义了针对每个协议的面向应用的报文传输。
* 应用层
根据相同的应用协议,定义了报文交换的内容。
1、物理层
在T=0和T=1协议中,均使用了物理层和字符帧。
2、数据链路层
2.1 字符帧
详见http://www.iccos.cn/scoscn/html/dev/2007-10-25dev44.html,适用于IC卡和终端之间所有的报文交换。
2.2 字符协议T=0
(1)特定选项--用于T=0的时段分配
在复位应答中,ATR中的TC1值决定了终端发送到IC卡的两个连续字符起始位上升沿之间的最小时间间隔在12~266个etu之间。
IC卡发送到终端的两个连续字符起始位上升沿之间的最小时间间隔为12etu。
在IC卡发送的任意字符的起始位上升沿与IC卡或终端发送的前一个字符的起始位上升沿之间的最大时间间隔(工作等待时间)将不超过960×D×WI=9600个etu(设位速率转换因子D为默认值,WI为默认值10)。
相反方向发送的两个连续字符的起始位上升沿之间的最小时间间隔不小于16etu。
要特别注意的是,由终端向IC卡发送的两个连续字符起始位上升沿之间的最小时间间隔由TC1值控制,可以小于相对发送的两个连续字符之间所允许的最小时间间隔(16个etu)。
(2)命令头
命令由终端应用层(Terminal Application Layer,简称TAL)发出,它包括一个由5Byte组成的命令头。每个命令头由5个连续字节CLA、INS、P1、P2和P3组成。
* CLA(Class Byte of the Command Message)表示命令类别。
* INS(Instruction Byte of the Command Message)表示指令代码。
* P1(Parameter 1)和P2(Parameter 2)表示命令的两个附加参数。
* 根据不同的INS,P3(Parameter 3)指明了发送给IC卡的命令的字节长度或者期待IC卡回送响应的最大数据长度。
对于T=0,这些字节和通过命令发送的数据一起构成命令传输协议数据单元(Command Transport Protocol Data Unit,简称C-TPDU),命令应用协议数据单元(Command Application Protocol Data Unit,简称C-APDU)到C-TPDU的映射将在后续文章中学习。
终端传输层(Terminal Transport Layer,简称TTL)传送发送5Byte的命令头给IC卡并等待一个过程字节。
(3)过程字节
IC卡接收到命令头以后,向TTL回送一个过程字节。过程字节向TTL指明了下一步该做什么,其编码与TTL行为的对应关系如下所示:
终端对过程字节的响应:
过程字节值 步骤
1 与INS字节值相同 所有余下的数据将要由TTL传送或者准备接收所有来自IC卡的数据。
2 与INS字节值的补码相同 下一个数据字节将由TTL传送或者准备接收来自IC卡的下一下数据字节。
3 0x60 TTL提供根据额外的工作等待时间。
4 0x6X或者0x9X(除0x60以外) TTL将等待下一个过程字节或者状态码SW2。
在情况1、2、3中,操作完成后TTL将等待另一个过程字节。
在情况4中,第二个过程字节或状态码SW2已被收到后,TTL将要做如下事情。
* 如果过程字节为0x61,TTL将向IC卡发送一个最大长度为0xXX的Get Response命令头,XX为SW2值。
* 如果过程字节为0x6C,TTL将立即向IC卡重发一个命令的命令头,其长度为XX,XX是SW2的值。
* 如果过程字节为0x6X(除0x60、0x61、0x6C以外)或者0x9X(即状态),TTL将在响应APDU中向TAL回送状态码,并等待下一个C-APDU。
TTL与IC卡之间交换命令和数据时,TTL和IC卡必须清楚地知道数据流向和I/O的驱动者,即是终端向IC卡发送数据还是IC卡向终端发送数据。
(4)C-APDU的传输
采用T=0协议时,只包含送向IC卡的命令数据或只包含IC卡响应数据的C-APDU,可直接映射到C-TPDU。不包含不回送数据的C-APDU,以及要求IC卡接收数据和发送给IC卡数据的C-APDU将通过相关的传输规则进行传输。
2.3 T="0时的错误检测与纠错"
若字符没有正确地接收到或者接收正确但校验不正确,接收方应在字符起始位的上升沿脉冲之后的(10.5±0.2)个etu内,向I/O端口发送持续时间为1~2个etu的低电平信号,表示前面的传输中有错误发生。
相应的,发送方应该在字符起始位上升沿脉冲发出后的(11±0.2)个etu内,检测I/O端口的电平状态,此时若I/O端口为高电平状态,则表明字符已经被正确接收。
若发送方检测到错误,就应在检测出错误以后至少延迟2个etu,并重复发送一次有错误嫌疑的字符,最多只发送3次。
IC卡的传输协议(1)-字符传输协议T=0【转】的更多相关文章
- IC卡的传输协议(2)-块传输协议T=1【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172024.HTM 2.4 块传输协议T=1 T=1协议中,在TAL和IC卡之间传送的命令.R-APDU和传输控制信息 ...
- IC卡复位应答ATR的数据元和它们的意义
ISO/IEC 7816-3标准中对ATR的数据串和数据元做了规定和描述.ATR的数据元和它们的意义: 数据元 说明 TS 起始字符 T0 格式字符 TA1,TB1,TC1,TD1,... 接口字符 ...
- 智能IC卡与终端(读卡器)之间的传输协议
1.有两种协议 T=0,异步半双工字符传输协议 T=1,异步半双工块传输协议 终端一般都支持这两种协议,IC卡可以选择支持其中的一种.(因为终端可能需要面对各种类型的卡片,所以必须两种协议都支持,而卡 ...
- IC卡的传输协议(2)-块传输协议T=1续【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172025.HTM (3)容错操作 先来看一下容错的规则定义. * 复位应答后,第一个数据块是由终端发往IC卡的,而且 ...
- IC卡的传输协议(3)【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172027.HTM 3.终端传输层 本节描述了在终端和 IC 卡之间传输的命令和响应 APDU 的机制 ...
- Android网络编程系列 一 TCP/IP协议族之传输层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...
- IP协议和网络传输中的封装与分用。
关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html 因为四层模型用的比较多,这里只拿四层模型来分析. 1.四层模型中的最下层是链 ...
- IC卡T0协议中的过程字与状态字
T0协议中,IC卡收到命里头以后向TTL回传过程字或状态字SW1.SW2: TTL和IC卡在二者之间的命令和数据交换的任何时刻都必须知道数据流的方向和IO线路由谁驱动. 摘录参考:<中国金融集成 ...
- vsftpd-基于ftp协议的文件传输服务器软件
第一部分:在Linux上部署vsftpd服务 1. vsftpd简介 1.1 vsftpd是什么? ftp(File Transfer Protocol)文件传输协议.(实现不同操作系统之间文件的传输 ...
随机推荐
- 寻找完全数(C++)
[问题描述] 输入一个大于 1 的正整数 n,请你将大于 1 和小于或等于 n 的所有完全数输出.所谓完全数就是因子(不算其本身)之和等于它本身的数.例如 1+2+4+7+14=28,所以 28 是完 ...
- 3.爬虫 urlib库讲解 总结
urllib库的总结: 用ProcessOn(安利这个软件,够用了)根据前面的几节内容做了个思维导图. urllib库一共有四个模块: request:它是最基本的模块,可以用来模拟发送请求 erro ...
- Python 3 学习笔记之——变量作用域、模块和包
1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...
- 以太坊 生成助记词和infuru插件
https://iancoleman.io/bip39/ https://infura.io google faucet : https://faucet.rinkeby.io/ 登录google账号 ...
- python json模块 超级详解
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...
- django之上传文件和图片
文件上传:文件上传功能是网站开发中必定会使用到的技术,在django项目中也是如此,下面会详细讲述django中上传文件的前端和后端的具体处理步骤: 前端HTML代码实现: 1.在前端中,我们需要填入 ...
- [转]如何清空Chrome缓存和Cookie
当您使用浏览器(例如 Chrome)时,浏览器会将网站中的一些信息保存在其缓存和 Cookie 中. 清除这些内容可以解决某些问题,例如网站上的加载或格式设置问题. 在 Chrome 中 在计算机上打 ...
- larbin之哈希之谈
由于工作原因,打算对larbin的源码进行分析一番 用的是2.6.3版本的larbin源码,由于这是业余,会断断续续的分析上传,已做记录笔记 今天我们分析一下larbin的哈希表 这个哈希表结构比较简 ...
- [BinaryTree] 二叉搜索树(二叉查找树、二叉排序树)
二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树BinarySort Tree)或者是一棵空树,或者是具有下列性质的二叉树: (1)若它的左子树不为空,则左子树上所有结点 ...
- Dubbo 项目与传统项目
1.什么是传统工程 单工程 MVC 架构 控制层通过调用服务层完成业务逻辑处理 业务层调用持久层进程数据操作 2.什么是分布式工程 将传统项目的单工程结构,拆分成多工程 一般会有这几个工程: 父工程: ...