Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2159499
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: Android平台

2015-04-07 14:16:40

看了《SIM卡基础技术规范》不形象,下面用两个ATR来说明一下:

上图截取自《sim卡基础技术规范》


1. 第1个atr

这个atr是网上广泛流传的解析,不过对于我等菜鸟来说还是不够详细,在这儿补充一下:
3B FA 13 00 00 81 31 FE 45 4A 43 4F 50 34 31 56 32 32 31 96
3B: TS( The Initial character )
FA:  T0( The Format character )
   高4位 = f( 1 1 1 1 )表示后续字符中存在TA1(bit5) TB1(bit6) TC1(bit7) TD1(bit8)
   低4位 = A(1010)   表示历史字节存在的数量=10个字节
13: TA1 表示增强的波特率,公式 3571200 / ( Fi / Di )
      Fi由TA1的高4位(F)查表得出,  1--> 372
      Di由TA1的低4位(D)查表得出, 3-->4
      3571200/(372/4)= 38400
00:TB1 表示编程电流 I /电压 P,高2位表示电流I,低6位表示电压P
00: TC1 表示额外保护时间N = 0
81: TD1 指明了协议类型,以及是否存在后继接口字符
      高4位=8(1000) 代表后续的TAi,TBi,TCi,TDi是否存在, 8说明后面接个TD2
      低4位=1(0001) 代表协议类型是1
31: TD2 指明了协议类型,以及是否存在后继接口字符
      高4位=3(0011) 代表后续的TAi,TBi,TCi,TDi是否存在, 3说明后面接个TA3与TB3
      低4位=1(0001)代表协议类型是1
FE: TA3
45: TB3
4A 43 4F 50 34 31 56 32 32 31: 10个历史字节(T0:FA中的A)
96: 异或校验的结果,其中3B不参与运算:  ?是ubuntu计算器中的异或表示符
     fa?13?00?00?81?31?fe?45?4a?43?4f?50?34?31?56?32?32?31=96

2. 第2个atr

3B 9F 94 80 1F C7 80 31 E0 73 FE 21 1B 64 40 90 61 00 82 90 00 72  3B: TS( The Initial character )
3B: TS   Using Direct Convention
9F:  T0( The Format character )
     高4位 = 9( 1 0 0 1 )表示后续字符中存在TA1(bit5) TD1(bit8)
     低4位 = F(1111)  表示历史字节存在的数量=15个字节
94:TA1 表示增强的波特率,公式 3571200 / ( Fi / Di )
      Fi由TA1的高4位(F)查表得出,  9--> 512
      Di由TA1的低4位(D)查表得出, 4-->8
      3571200/(512/8)= 55800
80:TD1 指明了协议类型,以及是否存在后继接口字符
      高4位=8(1000) 代表后续的TAi,TBi,TCi,TDi是否存在,8说明后面接个TD2
      低4位=0(0000) 代表协议类型是0
1F: TD2 指明了协议类型,以及是否存在后继接口字符
      高4位=1(0001) 代表后续的TAi,TBi,TCi,TDi是否存在,1说明后面接个TA3
      低4位=F(1111) 代表协议类型是F
C7:TA3
 - Clock stop indicator (X) = 3, class indicator (Y) = 7
 -- Clock stop supported. No preference on the CLK when clock is stopped
 - Class Support: A(5V) B(3V) C(1.8V)
Historical bytes: 80 31 E0 73 FE 21 1B 64 40 90 61 00 82 90 00 
80 31 e0 73 fe 21 13 57 17 ae 11 00 01 00 00: 15个历史字节(T0:9F中的F)
Check Byte: TCK = 72
CE:是校验位,其中3B不参与运算:  ?是ubuntu计算器中的异或表示符
9f?94?80?1f?c7?80?31?e0?73?fe?21?13?57?17?ae?11?00?01?00?00=43


附TA1的表:
| F  | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| Fi | 372   | 372   | 558  | 744   | 1116 | 1488 | 1860 | RFU  |RFU    | 512  | 768   | 1024 | 1536 | 2048 | RFU  | RFU |

| D | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| Di | RFU  | 1      | 2      |  4     |   8    | 16    | 1860 | RFU  | RFU  | 512  | 768   | 1024 | 1536 | 2048 | RFU  | RFU |

附modem与sim的交互流程
  1. a. 复位
  2.    ME-->SIM发送复位
  3.    SIM-->ME发复位应答ATR
  4. b. PPS过程
  5. 如果在复位应答中TA1的值不等于缺省值则进行PPS过程
  6.    ME-->SIM发送PPS(F=512,D=8时发FF 10 94 7b)
  7.    SIM-->ME回应PPS(F=512,D=8时回FF 10 94 7b) -->控制变波特率与不变波特率
  8. c.APDU
  9.    ME-->SIM发送APDU(00 a4 00 04 02)
  10.    SIM-->ME回应APDU(a4)
  11.    ME-->SIM发送APDU(3f 02)
  12.    SIM-->ME回应APDU(a4)
  13.    ME-->SIM发送APDU(61 29)

阅读(2028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~