zoukankan      html  css  js  c++  java
  • 和菜鸟一起学linux总线驱动之smartcard复位应答ATR

     

           通过根据定义,复位应答是一系列字节的值,这些字节是由卡作为对复位的应答发送给接口设备的。通过卡对接口设备作为复位的应答的字节传送的顺序的值在I/O电路上,每个字节通过异步字符来运送。

    每个成功的复位操作都会在在I/O上产生,一个初始字符TSTS后面按下列次序紧跟有最多32个字符,见图。

    T0-----------------------------------------格式字符,必备的

    TA(i) TB(i) TC(i) TD(i)----------------接口字符,任选的

    T1 T2TK------------------------------.历史字符,任选的

    TCK---------------------------------------校验字符,有条件的

    • 初始字符建立解码每个后续字符的约定用以设置条件以编译每个后面的字符。

    • 格式字符显示用以告之第一组接口字符和所有历史字符。

    • 接口字符的出现通过格式字符所启动的位图技术指出。

    • 历史字符的出现通过编码在格式字符中的1个数指出。

    • 校检字符的出现依赖于某些接口字符中参数T的值。

    为了记法简化,以后T0TA(i)T1TCK不但表示字节而且也表示运送这些字节的字符

     

    1、参数T

    参数T指传输协议和/或限定接口字节数。在每个字节TD(i)TA(2)PPS0(见7.3)中,位b4~b1编码参数T的值。

    ——       T=0               异步半双工字符传输。

    ——       T=1               异步半双工块传输。

    ——       T=2T=3     保留用于将来的全双工操作。

    ——       T=4               保留用于增强的异步半双工字符传输。

    ——       T=5T=13   保留待将来使用。

    ——       T=14              指未由ISO/IEC JTC1 SC17进行标准化的传输协议

    ——       T=15              不指某一种传输协议,仅限定了全局接口字节。

     

    2、格式字节T0

    按照图,字节T0由两部分组成:

    ——       b8b5构成Y(1);每个等于1的位指示了后续接口字节的存在;

    ——       b4b1构成KK编码了历史字节的个数,从015

     

    3、  接口字节TA(i) TB(i) TC(i) TD(i)

    3.1 TD(i)

    按照图,字节TD(i)含有两部分:

    ——       b8b5构成Y(i+1);每个等于1的位指示后续接口字节的存在;

    ——       b4b1构成参数T的值。

    因此,T0运送Y(1)TD(i)运送Y(i+1)。在运送Y(i)的字节中,位b8b5表示与b5对应的TA(i)、与b6对应的TB(i)、与b7对应的TC(i)、与b8对应的TD(i)按照这个次序运送Y(i)的字节之后是否存在(取决于相关的位是否等于1)。

    如果TD(i)不存在,则接口字节TA(i+1)TB(i+1)TC(i+1)TD(i+1)也不存在。

    如果两个或更多个参数T的值存在于TD(1)TD(2)……中,它们应当按照数字升序存在。如果存在,T=0应是第一个,T=15应是最后一个。TD(1)中禁止值T=15

    “第一次提供的协议”定义如下:

    ——       如果TD(1)存在,则第一次提供的协议是T

    ——       如果TD(1)不存在,则提供的唯一的协议是T=0

     

    3.2 TA(i) TB(i) TC(i)

    接口字节TA(i)TB(i)TC(i)i=123,…)是全局的或特定的。

    ——       有关卡上集成电路参数的全局接口字节。

    ——       有关卡提供的传输协议的参数的特定接口字节。

    接口字节TA(1)TB(1)TC(1)TA(2)TB(2)是全局的。接口字节TC(2)是特定的;它是为T=0定义的。i>2时对接口字节TA(i)TB(i)TC(i)的解释依赖于TD(i-1)中参数T的值。

    ——       如果T15,则接口字节是协议T特定的。

    ——       如果T=15,则接口字节是全局的。

    如果为参数T的同一个值定义了超过三个的接口字节TA(i)TB(i)TC(i),并且这些接口字节在复位应答中出现,则它们应相继出现于指明相同T值的TD(i-1)TD(i)…(i>2)之后;因此,当这些接口字节在TD(i-1)i>2时)中的T第一次、第二次或第n次出现之后出现,就被无二义性地识别出来。

     

    4、历史字节T1 T2……TK

    历史字节指明一般信息,例如卡制造商、插入卡内的芯片、芯片的掩膜ROM、卡的寿命状态。GB/T 16649.4规定了历史字节的内容。

    如果K不为0,则复位应答在K个历史字节T1 T2……TK上继续。

     

    5、校验字节TCK

    字节TCK的值应是这样的,以致使它与T0TCK的所有字节(包括T0TCK)的异或运算结果为0

    如果只有T=0存在(可能通过默认来指明),则字节TCK应不存在。如果T=0T=15都存在,或者在其他所有情况下时,字节TCK应存在。

     

    6、全局接口字节的内容

    字节TA(1)TB(1)TC(1)TA(2)TB(2)TD(i-1)i>2)中T=15第一次出现后的字节TA(i)。这些字节以二进制的形式对无符号整数FIDIIIPI1NPI2XIUI进行编码,这些无符号整数等于或用于计算此后出现的参数FDNPIXU的值。

    ——       如果出现,为正确处理任一协议应解释该字节;

    ——       如果该字节不出现,则当需要时,对于相关参数使用默认值。

    TA(1)对以下内容进行编码

    ——       FI,对位b8b5上的时钟速率转换因子的引用。

    ——       DI,对位b4b7上波特率调节因子的引用。

    b8=0TB(1)对以下内容进行编码

    ——       II,对位b7b6上最大编程电流的引用,。

    ——       PI1,对位b5b1上编程电压的值。

    注:       接口设备可以忽略TB(1)的位b8

    TC(1)对以下内容进行编码

    ——       N,对计算8位上的额外保护时间的引用。

    TA(2)是特定方式字节

    TB(2)使用8位上的编程电压值PI2代替PI1进行编码。

    TA(i)TD(i-1)i>2)中的T=15第一次出现后对以下内容进行编码

    ——       XI,对位b8b7上的时钟停止指示符的引用。

    ——       UI,对位b6b1上的类别指示符的引用。

     

    6.1、传输因子FD

    参数FD分别是时钟速率转换因子和波特率调整因子。在I/O电路上所使用的etu依赖于传输因子FD的实际值。etu应等于F/D时钟周期。

    etu = F/D×(1/f)

    频率f的最小值应为1MHz。最大值作为FI的函数在表7中给出。默认最大值是5MHz

    为了计算etuFD因子对应当采用下面三对值之一:

    ——       FiDi,由卡按照在TA(1)中给出;如果TA(1)不存在,则FiDi置为默认值;

    ——       FdDd,默认值为3721

    ——       FnDn,由成功的PPS交换在FdFiDdDi范围内协商所得的值。

    在复位应答期间,应使用FdDd。复位应答后,FD的值取决于操作方式。

    ——       在可协商方式中,应继续使用FdDd,直到PPS交换成功完成。PPS成功交换后,应立即使用FnDn

    ——       在特定方式中

         如果TA(2)b5=0,则在复位应答成功完成之后应立即使用FiDi

         如果TA(2)b5=1,则应使用隐含值。

     

    6.2、额外保护时间N

    参数N是将字符从接口设备发送到卡的额外保护时间。没有额外保护时间用来将字符从卡发送到接口设备。默认值N=0

    0254范围内,N表示在准备好接收下一字符之前,卡要求从前一个字符(也是由卡或接口设备发送的)的起始沿开始的下列延迟:

     etu +Q×(N/f)

    公式中,Q应取下面两个值中的一个:

    ——       F/D,即用于计算etu的值,当T=15不存在于复位应答中时,

    ——       Fi/Di,当T=15存在于复位应答中时。

    N=255表示在传输协议期间,两个连续字符的起始沿之间的最小延迟在传输的两个方向上是相同的。这个最小延迟值是

    ——       T=0时,12etu

    ——       T=1时,11etu

     

    6.3、编程参数PI

           编程参数PI分别是编程电压和最大编程电流;它们定义了触点VPP上的编程状态。

    ——       编程电压:VPP=PV

    ——       最大编程电流:IPP=ImA

    525范围内,PI1给出了P的值,单位为伏。PI1=0表示在卡中VPP在电路上未连接,卡使用触点VCC提供的电源在内部生成编程电压。PI1的任何其他值保留作将来使用。

    50250范围内,PI2给出了P的值,单位是十分之一伏。PI2的任何其他值保留作将来使用。如果PI2存在,则PI1的值应被忽略。

    如果T=15不存在于复位应答中,默认值是P=5I=50。如果T=15存在,则VPP在卡中不连接,除非TB(1)/TB(2)存在。

     

    6.4、时钟停止指示符X

    参数X表示卡支持(XI00)或不支持(XI=00)时钟停止,以及支持时,当时钟停止时,在CLK上优先选用哪个电气状态。默认值是X=“不支持时钟停止”。

     

    6.5、类别指示符U

    参数U表示了卡所接受的操作条件的类别。UI的每个位代表了4.2.1中定义的一个操作条件类别:b1对应A类,b2对应B类。默认值是U=“仅支持A类”。

     

    6.6、特定方式字节TA(2)

    TA(2)是特定方式字节。按照图,它描述了卡操作的特定方式的相关特征

     

     

     

    我得到的ATR数据时:3b 6c 00 00 4e 54 49 43 30 27 73 00 4a 03 00 00

    13b  表示正向卡(3f表示反向卡,这个定死的)

    26c  0110 1100,其中6表示TB1TC1存在,TA1TD1不存在,所以由此可以

    推定传输协议T=0,没有TCK。其中的c表示历史字节为12

    300 00:表示TB1TC1的值

    44e 54 49 43 30 27 73 00 4a 03 00 00 :历史字节0x0c

     

  • 相关阅读:
    提升应用崩溃时的用户体验——去掉烦人的“很抱歉”提示框
    Activity与DialogFragment交互的方法
    取之有道——巧用Root权限 启动其他APP中的Activity
    巧用Handler获取View控件信息
    关于遍历javascript 中的json串浏览器输出的结果不统一的情况
    PHP usort 函数底层排序
    IO多路复用小故事
    不知道写的是啥
    GC算法-增量式垃圾回收
    GC算法-分代垃圾回收
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300043.html
Copyright © 2011-2022 走看看