和菜鸟一起学linux总线驱动之smartcard传输协议

协议T=0,异步半双工字符传输协议

 

协议在复位应答或成功的PPS交换之后启动。

1、  字符级

字符帧同对复位应答所定义的一样,使用TS所建立的约定,同时按照操作模式来考虑。ICCIFD应按照使用错误信号和字符重发。

由过程字节触发的VPP上的任何跃变都应在从字符上升开始的12etu内发生。

特定接口字节TC(2)对它的8位进行编码以得到整数WI的值。空值留待将来使用。如果在复位应答中没有TC(2)出现,则WI的默认值为10。由IFD发出的任何一个字符的前沿和由ICCIFD发出的前一个字符起始沿之间的时间间隔应不超过960×WI×(Fi/f)。这个最大延迟称为“工作等待时间”。

—旦超过工作等待时间,VPP应被置为暂停状态或被保持暂停状态。

2、  命令的结构和处理

接口设备通过发送5个字节报头,告诉卡做什么来启动每个命令。在卡发送的过程字节控制下,该命令处理在一个方向上继续运送不定量的数据字节。

为了区分用于输入数据的命令(其中处理数据字节时该数据字节进入卡)和用于输出数据的命令(其中处理数据字节时该数据离开卡),假设卡和接口设备预先知道数据运送方向。

 

2.1、命令头  

       该命令头是5个字节的系列,这5个字节指定为CLAINSP1P2P3

       CLA:是指令类别,值‘FF’被保留给PPS

       INS:是指令类别中的指令代码。指令代码仅当位b8~b5不等于‘6’和‘9’时才有效。

       P1P2:是一个完成指令代码的参考(例如地址)。

       P30:对命令期间被传送的数据字节D(1)~D(n)的数目n进行编码。

       在输出数据的传送命令中,P3=0表示从卡传输256个字节。 

       在输入数据的传送命令中,P3=0表示不从卡传输数据。

发送该命令头之后,接口设备应等待一个运送过程字节的字符。

2.1、过程字节

       有三种类型的过程字节:

       NULL等于‘60’。

ACK中,位b8~b2应与INS中的位b8~b2相一致或为互补,但INS的这些位的值应不等于‘6X’和‘9X’。

       SW1等于‘6X’或‘9X’,但不等于‘60’。

就每一个过程字节而言,卡可以由一个ACKNULL字节来使命令继续进行下去,或由结束序列SW1 SW2来结束这个命令,或变成不响应来表示不赞同。

2.1.1 NULL字节

NULL既不请求VPP状态上的进一步动作也不请求数据传送的进一步动作。IFD应仅等待运送过程字节的字符。

2.1.2响应字节

ACK字节用来控制数据传送和VPP状态。

如果INS字节与ACK字节进行异或运算结果为‘00’或‘FF’,则VPP应置为或保持在暂停状态。

如果INS字节与ACK字节进行异或运算结果为‘01’或‘FE’,则VPP应置为或保持在编程状态。

如果ACK字节中的位b8~b2INS字节中的那些位的值相同,则如果还有剩余数据字节,则应继续传送所有剩余的数据字节D(i)~D(n)

如果ACK字节中的位b8~b2INS字节中的那些位互补,则如果还有剩余数据字节,则只有下一个数据字节D(i)应被传送。

在这些动作完成之后,接口设备等待一个运送过程字节的字符

2.1.3 状态字节

SW1请求将VPP置为或保持在暂停状态。IFD等待一个运送SW2字节的字符。这里对SW2的值无限制。

SW1SW2构成结束序列,结束序列在命令的结尾处指示卡的状态。SW1 SW2=9000’表示正常结束。

本部分没有解释当SW1的位b8~b5等于‘9’时的其他结束序列,这些结束序列与应用本身相关。

SW1的位b8~b5等于‘6’时,SW1的含义是与应用无关的。

6E   卡不支持指令类别;

6D   指令代码没有被编程或者无效;

6B   引用不正确;

67    长度不正确;

6F   没有给出准确的诊断。

其他值保留给将来使用。

如果SW1既不等于‘6E’,也不等于‘6D’,则卡支持该指令。

 

协议 T=1,异步半双工块传输协议

 

块传输协议在复位应答或一个成功的PPS交换之后开始。其协议的主要特征如下:

              协议从IFD发送的第一个块开始;该协议伴随在交替发送一个块的全程中。

              块是可交换的最小数据单位。块可以用来运送

              对传输协议透明的应用数据;

     包括传输差错处理的传输控制数据。

              块结构允许在处理运送的数据之前检验收到的块。

本协议应用了OSI参考模型的分层原则,特别注意到了将跨越各边界的交互作用减到最小。被定义的有三层:

              物理层传输以异步字符组织的时间段;

              数据链路层,包括字符成分和块成分。

     字符部分处理块标识(识别块的开始和结束)并且确保对于9.6的控制。

              应用层,处理命令,这些命令包括在每一方向上交换至少一个块或块链。

 

1、  术语

  block

由定义为起始字段,信息字段和终止字段的两个或三个字段组成的字节序列。

信息块  information block

主要用于运送应用层信息的块。

接收就绪块  receive ready block

一个块,它运送期望的I块的个数,用作肯定确认或否定确认

监控块  supervisory block

运送传输控制信息的块。

差错检测代码  error detection code

由应用于起始字段和信息字段中的所有字节的差错校验方法所产生的终止字段中的内容。

字段  field

块的三个组成部分之一,块被定义为起始字段、信息字段和终止字段。

起始字段  prologue field

块的第1个字段,它运送下列子字段:结点地址字节、协议控制字节和长度字节。

信息字段  information field

块的一个字段,用于运送数据,通常是应用数据。

终止字段  epilogue field

块的最后一个字段,它运送差错检测代码。

子字段  subfield

一个字段中的功能部分

结点地址字节  node address byte

起始字段中的一个子字段,它指示块的目的地址和源地址并控制VPP状态。

目的结点地址字节  destination node address byte

子字段结点地址的一部分,用于识别块的预期接收者。

源结点地址字节  source node address byte

结点地址子字段的一部分,用于标识块的发送者。

协议控制字节  protocol control byte

起始字段中的一个子字段,它包含传输控制信息。

长度字节  length byte

起始字段中的一个子字段,它包含在块的信息字段中被发送的字节个数。

传输控制  transmission control

用来控制接口设备和集成电路卡之间数据传输的功能。它包含VPP状态控制、顺序控制的块传输、同步的块传输以及传输差错恢复。

 

2、块帧

块是指一序列字节:每个字节由异步字符来运送。如图所示块由下列字段组成。

              起始字段是必备的;它由结点地址字节、协议控制字节和长度字节组成;

              信息字段是任选的;它由0-254个字节组成;

              终止字段是必备的;它由一个或两个字节组成。

和菜鸟一起学linux总线驱动之smartcard传输协议_第1张图片

本协议定义了三种块类型:

              信息块(I块)用来运送应用层用的信息。另外,它还运送肯定或否定确认。

              接收就绪块(R块)用来运送肯定或否定确认。它的信息字段应不出现。

              监控块(S块)用来交换IFDICC之间的控制信息,S块的信息字段的存在随其控制功能而定。

 

2.1、起始字段

2.1.1、结点地址字节

结点地址(NAD)允许标识块的源点和预期目的地;NAD可用来区分共存的多逻辑连接。

b1b3是指源结点地址SAD,位b5b7指目的结点地址DAD,位b4b8用于VPP状态控制。

在不使用编址时,SADDAD的值都应被置为0。当SADDAD的值相同时,NAD的任何其他值留待将来使用。

在由IFD发送的第一个块中,通过将地址SADDAD联系起来,NAD建立了一个逻辑连接。随后的块中的NAD包含相同的地址对SADDAD,这些块也被连接到相同的逻辑连接上。在信息交换期间,其他的逻辑连接可由其他的地址对SADDAD来建立。

2.1.2、协议控制字节(PCB

PCB运送控制传输所要求的信息。

PCB决定了块的类型,即该块是I块、R块还是S块。

              在每个I块的PCB中,位b8被置为0。位b7 b6如图所示使用。位b5b1留待将来使用并应置为0

              在每个R块的PCB中,位b8 b7被置为10。位b6b1如图所示使用;

              在每个S块的PCB中,位b8 b7被置为11。位b6b1如图所示使用

 和菜鸟一起学linux总线驱动之smartcard传输协议_第2张图片

和菜鸟一起学linux总线驱动之smartcard传输协议_第3张图片

和菜鸟一起学linux总线驱动之smartcard传输协议_第4张图片

 

 

 

2.1.3、长度字节

LEN表示块的信息字段中出现的字节的个数(见9.5.2)。编码应是:

值‘00’表示不存在信息字段。

01’至‘FE’的任何值表示信息字段中出现的字节的个数,对应为1254个。

FF’留待将来使用

 

2.1.4、信息字段(INF

INF的用途取决于块的类型。

              INF存在于I块中时,INF运送应用信息。

              R块中应该不存在INF

              INF存在于S块中时,INF运送非应用信息。

     当调节IFSWTX时,INF应以单个字节存在于S块中。

     当发出VPP状态差错信号,或管理链接放弃,或重新同步时,INF应不在S块中

 

2.1.5、终止字段

EDC运送块的差错检测代码。协议使用了LRC(纵向冗余校验)或CRC(循环冗余校验)。

              纵向冗余校验(LRC)由一个字节组成。它与块中的所有字节的异或运算结果为0

              循环冗余校验(CRC)由两个字节组成,关于它的值见ISO/IEC 3309

 

 

 

你可能感兴趣的:(和菜鸟一起学linux总线驱动之smartcard传输协议)