1-SIM卡复位ATR解析

激活时序

image

在激活过程结束(接口设备中 RST 处于 L 状态,VCC 上电,I/O 进入接收模式,CLK 已被提供了一个匹配并稳定的时钟信号)时,卡片已就绪,可以进行冷复位。卡片在冷复位之前的内部状态不做规定。

根据图 1,在 Ta 时间点上时钟信号应用于 CLK。卡片应当在时钟信号应用于 CLK(在 Ta+ta 时间点)之后的 200 个时钟周期(ta时延)内将 I/O 设置为 H 状态。冷复位是在时钟信号应用于CLK(在 Ta+tb 时间点)之后,将 RST 维持至少 400 个时钟周期(tb 时延)的结果。接口设备应当在 RST 处于 L 状态时忽略 I/O 上的状态。

在 Tb 时间点上,RST 被置为 H 状态。I/O 上的应答应当在 RST 上信号上升沿后(在 Tb+tc时间点)的 400 和 40000 个时钟周期之间(tc 时延)开始。如果应答没有在 RST 处于 H 状态后 40000个时钟周期内开始,接口设备应当执行一个去激活。

void SIM_Cold_Reset(uint8_t ChannelID)
{
    Set_Sim_Io(ChannelID, SIM_VCC, 1);    //初始时,电源电压先上电             
    Delay_400_CLK();                      //待电压稳定
    Set_SimData_Direction(ChannelID, 1);  //将I/O端口置为接收方式
    Set_SimClk_Status(ChannelID, 1);      //启动独立波特率发生器开始计数工作,对系统时钟进行分频输出
    Delay_400_CLK();                      //RST复位信号需在提供CLK信号后400个时钟周期内保持低电平
    Set_Sim_Io(ChannelID, SIM_RST, 1);    //之后才可置为高电平
}

以4M的时钟为基准,一个时钟为1/4us,则400个时钟用100us,40000个时钟为10ms。

ATR基本应答数据如下

数据元 说明
TS 起始字符
T0 格式字符
TA1,TB1,TC1,TD1,... 接口字符
T1,T2,... ,TK 历史字符
TCK 校验字符

下面以ATR:3B9F94801FC78031E073FE21135758485553494D01F9为例,进行说明

数据元 说明
TS 起始字符
T0 格式字符
TA1,TB1,TC1,TD1,... 接口字符
T1,T2,... ,TK 历史字符
TCK 校验字符
ATR.jpg

1.起始字符TS


TS是ATR的强制部分,总是必须送出的。此字节只允许有两种编码:3B为正向约定,3F为反向约定。使用反向逻辑约定时, I/O的低电平状态等效于逻辑1,且该数据字节的最高位在起始位之后首先发送。使用正向逻辑约定时, I/O的高电平状态等效于逻辑1,且该数据字节的最低位在起始位之后首先发送。

上例ATR的TS为3B

2.格式字符T0


格式字符T0含有一组位表明将要传送哪个接口字符,它同时也指出后继历史字符的个数。像TS一样,每个ATR中都必须有这个字节。

高半字节( b5-b8) 表示后续字符TA1到TD1是否存在。(b5对应TA1,b8对应TD1);

低半字节( b1-b4) 表明可选历史字符的数目( 0到15);

上例ATR的T0为9F
表明存在TA1和TD1,历史字符为15个。

当没有TD1时,T=0,则TCK不存在。

3.接口字符TA1,TB1,TC1,TD1,...


这些字节在ATR中是可选的,由格式字符T0的高半字节决定。

3.1 全局接口字符TA1

TA1高半字节 FI 用于确定 F 的值, F 为时钟速率转换因子。用于修改复位应答之后终端所提供的时钟频率。低半字节 DI 用于确定 D 的值, D 为位速率调节因子。用于调整复位应答之后所使用的位持续时间。etu =F/D * (1/f)

FI和DI编码如下:

FI F DI D
0000 372 0000 RFU
0001 372 0001 1
0010 558 0010 2
0011 744 0011 4
0100 1116 0100 8
0101 1488 0101 16
0110 1860 0110 32
0111 RFU 0111 RFU
1000 RFU 1000 12
1001 512 1001 20
1010 768 1010 RFU
1011 1024 1011 RFU
1100 1536 1100 RFU
1101 2048 1101 RFU
1110 RFU 1110 RFU
1111 RFU 1111 RFU
上例ATR的TA1为94
表明F=512,D=8。
3.2 全局接口字符TB1:(没有意义了)

TB1传送PI1和II的值,PI1 在 b1 到 b5 位中定义,用于确定IC卡所需的编程电压 P 值;II 在 b6 和 b7位中定义,用于确定IC卡所需的最大编程电流I值。一般情况下ATR中必须包含TB1=00,表示IC卡不使用VPP。

上例ATR的TB1为空
3.2 全局接口字符TC1:(没有意义了)
上例ATR的TC1为空
3.2 全局接口字符TD1

TD1字符比较关键,看上面的ATR数据结构图可知,TD1的高4位决定了是否有TA2/TB2/TC2/TD2。

同理,TD2的高4位决定了是否有TA3/TB3/TC3/TD3。

上例ATR的TD1为80,
可表明存在TD2=1F,TA2、TB2、TC2不存在

上例ATR的TD2为1F,
可表明存在TA3=C7,TB3、TC3、TD3不存在

4.历史字符


很长一段时间,没有任何标准对历史字符做出规定,结果是随操作系统生产者而不同,它们包含了变化广泛的数据。

上例ATR的历史字符为
8031E073FE21135758485553494D01。

5.校验字符TCK


TCK具有一个检验复位应答期间所发送数据完整性的值。TCK的值应使从T0到包括TCK在内的所有字节进行异或运算的结果为零。

当没有TD1时,T=0,则TCK不存在。

如果在ATR中仅指出了T=0协议,TCK校验和可以不在ATR的尾部出现。在这种情况下,完全没有发送它,因为用奇偶校验已经知道了差错字节而在T=0协议中重复发送出错字节又是强制性的。相反,在T=1协议中,TCK字节必须出现,校验和的计算从字节T0开始,结束于最后的接口字符,如果有则是最后的历史字符。

上例ATR的TCK为F9,
将9F94801FC78031E073FE21135758485553494D01进行异或处理即可得到F9
for(atrCount = 1; atrCount <21; atrCount++) 
{
    printf("atrXOR_old:%X,atr:%X\n",atrXOR,atr[atrCount]);
    atrXOR ^= atr[atrCount];
    printf("atrXOR_new:%X\n",atrXOR);
}

该ATR的解析如下:

ATR:3B9F94801FC78031E073FE21135758485553494D01F9
ATR分析:
正向约定 F=512 D=8 N=0(d)
Protocal=TO
AtrBinarySize=22
AtrHistorySize=15
AtrHistorySize=8031E073FE21135758485553494D01
31:卡片数据服务
E0:通过全DF名称的直接应用选择、通过部分DF名称的选择数据对象在DIR文件中有效
73:卡能力标签
FE:DF选择(通过全DF名称、通过部分DF名称、通过路径、通过文件标识)
EF管理(所支持的短EF标识符、所支持的记录号)
21:数据编码类型
13:逻辑通道最大数4
TS=3B
T0=9F
TA1=94
TD1=80
TD2=1F
TA3=C7(时钟停止休止符:无优先 级别指示符:A、B、和C)
TCK=F9

参考

http://www.cnblogs.com/utank/p/5463269.html
http://www.cnblogs.com/utank/p/5545750.html
http://blog.csdn.net/daidi1989/article/details/49883207
http://blog.csdn.net/u013566722/article/details/49306505

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容

  • fpga规范 工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎...
    Michael_Johnson阅读 1,887评论 1 4
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,956评论 1 13
  • 10#数据类型 合并数组和非合并数组 合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以...
    constant007阅读 32,944评论 0 18
  • 岁寒百木枯,然后知青松。 但有青云志,天地独骁勇。 17.11.14
    楼台花舍阅读 271评论 0 0
  • 先生说他起初就知道我是如何给自己取了这么个名字,背后深意在他眼里不过一张透明纸。 我愤愤着他简直将我看穿的样子, ...
    阿旧姑娘阅读 479评论 0 0