//ATR = 3B FF 18 35 FF B1 11 66 F1 FE 4D 00 1F C7 00 31 38 64 47 90 EC C2 73 14 01 50 82 90 00 C1
//--ATR 总长 0x1E(30) 字节
//复位应答信号以字符为单位(称为字符帧)进行传送
//
//----在传送字符前,I/O处于Z状态
//----每个字符由10位组成,起始位(1位)状态为A
//--------8位数据位ba ~ bh, 第10位bi为偶校验
//----复位应答期间,1etu = 372个clock
//----一个数据字节由b1-b8组成,b1为LSB,b8为MSB。接收方在每一位的中间采样,采样时间应该小于0.2etu。
//----两连续字符之间的延时(两起始位下降沿之间)至少为12个etu,包括字符宽度10(+/-0.2)个etu和一段保护时间。
//----两连续字符之间的延时(两起始位下降沿之间)最大不超过9600个etu,这个最大值称为
//----------初始等待时间。
//----在保护时间内,读卡器和卡都处于接收状态,I/O线处于状态Z。
//----发送方在下降沿开始后的第11个etu处检查I/O状态,
//--------当奇偶校验不正确时,从起始位下降沿之后的10.5个etu开始,
//--------接收方发送状态A做为出错信息,该信号宽度为1-2个etu。
//--------如果发送方检查I/O状态为Z,则表示接收是正确的,反之则认为是错误的,
//--------接收方希望重新发送此字节。
//--------对于T=0的卡必须重发,对于其他卡是可以选择的
//------------------------------------------------------------
//----------<<<在TS之后发送的字符数不超过32个,复位应答格式如下>>>
//-- - T0 ................... Format character (Mandatory)
//-- - TAi, TBi, TCi, TDi ... Interface characters (Optional)
//-- - T1, T2, ... ,TK ...... Historical characters (Optional)
//-- - TCK .................. Check character (Conditional)
//
//-- TS : Initial character
//-- TO : Format character
//-- TAi : Interface character [ codes FI,DI ]
//-- TBi : Interface character [ codes II,PI1 ]
//-- TCi : Interface character [ codes N ]
//-- TDi : Interface character [ codes Yi+1, T ]
//-- T1, ... , TK : Historical characters (max,15)
//-- TCK : Check character
//--------------------------------------------------------------------------------
//TS( The Initial character ) = 3B
//
//--- 正向约定:Z表示1,A表示0,传输时先传输LSB,则TS应该是
//----(Z)AZZAZZZAAZ,0 1 1 0 1 1 1 0 0 1 即16进制数3B
//----bd, be, bf为ZZZ。
//--- 反向约定:Z表示0,A表示1,传输时先传输MSB,则TS应该是
//----(Z)AZZAAAAAAZ,1 0 0 1 1 1 1 1 1 0 即16进制数3F
//----bd, be, bf为AAA。
//----此字节表示 正向约定,高电平为1,低电平为0,传输时先传输LSB,最后传输MSB
//--------------------------------------------------------------------------------
//T0( The Format character ) = FF
//--
//--Y1 : 接口字符是否存在的指示符
//-- b4 = 1,发送TA1
//-- b5 = 1,发送TB1
//-- b6 = 1,发送TC1
//-- b7 = 1,发送TD1
//--K : 历史字节数(0~15)
//-- 格式字符 T0 提供的信息
//--T0表示接口字符的个数和历史字节的数量
//----其高4位有几个bit为1,则表示后续有几个接口字符,其低4位表示有多少个历史字节(0-15)
//--------高4位 = F( 1 1 1 1 )表示后续字符中存在 TA1 TB1 TC1 TD1
//--------------------( TA1, TB1, TC1, TA2, TB2 是全局接口字符,TC2是专用接口字符 )
//----低4位 = F,表示后面有15个历史字节
//--------------------------------------------------------------------------------
//TA1 = 18
//----表示有增强的波特率,公式 "baudrate = f / ( F / D )"
//------其中,f是读卡器提供的时钟,常用 f = 3571200(单位HZ)
//--------F由TA1的高4位(FI)查表得出,D由TA1的低4位(DI)查表得出
//----FI = 01 ,查下表,则F = 372
//------
//----DI = 08 ,查下表,则D = 12
//------
//----复位之后推荐波特率为 115200
//--------------------------------------------------------------------------------
//TB1 = 35
//----TB1现在已经废除,在早期规范中其bit 6-0 用来表示卡片编程电压和电流
//------在2006版之后,如果出现TB1,其值应该为0,表示该卡不使用专用触点 C6 来提供编程电压
//------TB1的最高位应该为0,若不为0,应该视为0
//----TB1 bit 6, 5(base 0)指定最大编程电流因子 I
//--------bit 4-0(base 0)最大编程电压因子 P,定义了VPP的工作状态
//------
//--------bit 6, 5 = 1( 0 1 )
//--------bit 4-0 = 15( 1 0 1 0 1 )( 21 )
//----编程电压为 10.2 V(出现TB2,由TB2指出),电流为 50 毫安
//--------------------------------------------------------------------------------
//TC1 = FF
//----指示出额外保护时间N
//------额外保护时间是两个字符发送的起始下降沿之间的最小间隔
//--------N = 255(0xFF),额外保护时间EGT = 11 etu
//--------------------------------------------------------------------------------
//TD1 = B1
//--TD1 : 高4位是后续接口字符是否存在的指示器
//-- b4 = 1,发送TA2
//-- b5 = 1,发送TB2
//-- b6 = 1,发送TC2
//-- b7 = 1,发送TD2
//-- 低4位是通讯协议
//-- TD1 提供的信息
//--------高4位 = B( 1 0 1 1 ),表示后续字符中存在 TA2 TB2 TD2
//--------低4位 = 1,表示通讯协议是T = 1
//--------------------------------------------------------------------------------
//TA2 = 11
//---------- 二进制 0 0 0 1 0 0 0 1
//--TA2存在,表明卡处于专用模式
//----TA2的 bit 7( based 0 )为0,则表明卡片有更改模式的能力
//----TA2的 bit 4( based 0 )为1,则使用事先约定的F,D
//----低4位表示使用的协议 T = 1
//----专用模式,卡片有更改模式的能力,使用默认的通讯速率,通讯协议 T = 01
//--------------------------------------------------------------------------------
//TB2 = 66
//----TB2是全局参数,自2006版以来已经废除,如果存在TB2,应该忽略
//------在1997版中,TB2取值应该在50-250之间(更早的版本中TB2不存在)
//------以0.1V的精度取代TB1的编程电压
//----编程电压为 10.2 V
//--------------------------------------------------------------------------------
//TD2 = F1
//--TD2 : 高4位是后续接口字符是否存在的指示器
//-- b4 = 1,发送TA3
//-- b5 = 1,发送TB3
//-- b6 = 1,发送TC3
//-- b7 = 1,发送TD3
//-- 低4位是通讯协议
//-- TD2 提供的信息
//--------高4位 = F( 1 1 1 1 ),表示后续字符中存在 TA3 TB3 TC3 TD3
//--------低4位 = 1,表示通讯协议是T = 1
//--------------------------------------------------------------------------------
//TA3 = FE
//----TA3指示了卡端信息字段长度(IFSC)
//------IFSC是T = 1协议下,卡片接收数据域的最大长度
//------TA3在 01 - FE 之间有效,00 和 FF保留
//--------
//----T = 1协议下信息域的最大长度是 254
//--------------------------------------------------------------------------------
//TB3 = 4D
//----TB3 指示了T = 1协议下,BWI和CWI的值
//------高4位是BWI,低4位是CWI
//--------BWI是块传输中,两个块之间最大的等待参数
//----------BWI默认值为4(有效值0-9)
//----------BWT = 11 etu + ( 2^BWI * 960 * Fd / f )
//------------当前BWI = 4(0x04)
//--------------Fd = 1, 表示 372 个clock
//--------------一个etu = 31.0 个clock
//----块等待时间BWT = 11 + ( 2^4 * 960 * 372 ) / 31.0 = 184331.0 个etu
//--------CWI是块传输中,块内两个字符之间最大的等待参数
//----------CWI默认值为13(有效值0-15)
//----------CWT = (11 + 2^CWI) etu
//------------当前CWI = 13(0x0D)
//----块内字符等待时间CWT = 11 + 2^13 = 8203 个etu
//--------------------------------------------------------------------------------
//TC3 = 00
//----T = 1块传输块校验机制
//------LRC 纵向冗余校验
//--------从NAD到LRC所有字节异或运算时结果应该为0
//------CRC 循环冗余校验
//--------见 ISO/IEC 13239
//----校验方式为 LRC 纵向冗余校验
//--------------------------------------------------------------------------------
//TD3 = 1F
//--TD3 : 高4位是后续接口字符是否存在的指示器
//-- b4 = 1,发送TA4
//-- b5 = 1,发送TB4
//-- b6 = 1,发送TC4
//-- b7 = 1,发送TD4
//-- 低4位是通讯协议
//-- TD3 提供的信息
//--------高4位 = 1( 0 0 0 1 ),表示后续字符中存在 TA4
//--------低4位 = F,表示通讯协议是T = 15, T = 15不属于传输协议,仅指明了全局接口字节的类型
//--------------------------------------------------------------------------------
//TA4 = C7
//----TA4是T = 15时,用于指出 时钟停止 以及 卡片电压支持 的参数
//------
//------
//----------二进制 = 1 1 0 0 0 1 1 1
//----bit 7,6 = 11,时钟停止无优先级
//----bit 5-0 = 7,支持A, B 和 C类(5.0V, 3.0V, 1.8V)
//--------------------------------------------------------------------------------
//00 31 38 64 47 90 EC C2 73 14 01 50 82 90 00
//----是历史字节
//----类型指示符编码 = 00
//------压缩TLV数据对象
//----------31 --- Tag: 3, Len: 1(卡片服务数据字节card service data byte)
//------------卡片服务数据字节Card service data byte: 38
//--------------bit 5 = 1, EF.DIR中支持BER-TLV数据对象
//--------------bit 4 = 1, EF.ATR中支持BER-TLV数据对象
//--------------EF.DIR 和 EF.ATR 访问服务:
//----------------bit 3-1 = 100, 使用 READ BINARY 命令
//--------------bit 0 = 0, 卡片有MF
//----------64 --- Tag: 6, Len: 4(预发数据pre-issuing data)
//------------数据: 47 90 EC C2 "G退숀"
//----------73 --- Tag: 7, Len: 3(卡片能力card capabilities)
//------------选择方法: 14
//--------------bit 4 = 1, 支持使用FILE ID选择DF
//--------------bit 2 = 1, 支持短文件标识
//------------数据编码字节: 01
//--------------Write功能行为:
//----------------bit 6,5 = 00, 一次性写入
//--------------BER-TLV第一个tag字节为FF:
//----------------合法
//--------------Data unit in quartets: 1
//------------命令链,数据域长度和逻辑通道: 50
//--------------bit 6 = 1, 扩展LC和LE
//--------------逻辑通道分配:
//----------------bit 4,3 = 10, 由卡决定
//--------------最大逻辑通道数: 1
//----------必备的状态指纹器(至少3字节)
//------------LCS (卡片生命周期-life card cycle): 82
//--------------专有的
//------------状态码: 90 00
//--------------90 00 是返回状态,表示--- 成功
//--------------------------------------------------------------------------------
//TCK = C1
//--TCK值正确