1-SIM卡復(fù)位ATR解析

激活時(shí)序

image

在激活過(guò)程結(jié)束(接口設(shè)備中 RST 處于 L 狀態(tài),VCC 上電,I/O 進(jìn)入接收模式,CLK 已被提供了一個(gè)匹配并穩(wěn)定的時(shí)鐘信號(hào))時(shí),卡片已就緒,可以進(jìn)行冷復(fù)位??ㄆ诶鋸?fù)位之前的內(nèi)部狀態(tài)不做規(guī)定。

根據(jù)圖 1,在 Ta 時(shí)間點(diǎn)上時(shí)鐘信號(hào)應(yīng)用于 CLK。卡片應(yīng)當(dāng)在時(shí)鐘信號(hào)應(yīng)用于 CLK(在 Ta+ta 時(shí)間點(diǎn))之后的 200 個(gè)時(shí)鐘周期(ta時(shí)延)內(nèi)將 I/O 設(shè)置為 H 狀態(tài)。冷復(fù)位是在時(shí)鐘信號(hào)應(yīng)用于CLK(在 Ta+tb 時(shí)間點(diǎn))之后,將 RST 維持至少 400 個(gè)時(shí)鐘周期(tb 時(shí)延)的結(jié)果。接口設(shè)備應(yīng)當(dāng)在 RST 處于 L 狀態(tài)時(shí)忽略 I/O 上的狀態(tài)。

在 Tb 時(shí)間點(diǎn)上,RST 被置為 H 狀態(tài)。I/O 上的應(yīng)答應(yīng)當(dāng)在 RST 上信號(hào)上升沿后(在 Tb+tc時(shí)間點(diǎn))的 400 和 40000 個(gè)時(shí)鐘周期之間(tc 時(shí)延)開(kāi)始。如果應(yīng)答沒(méi)有在 RST 處于 H 狀態(tài)后 40000個(gè)時(shí)鐘周期內(nèi)開(kāi)始,接口設(shè)備應(yīng)當(dāng)執(zhí)行一個(gè)去激活。

void SIM_Cold_Reset(uint8_t ChannelID)
{
    Set_Sim_Io(ChannelID, SIM_VCC, 1);    //初始時(shí),電源電壓先上電             
    Delay_400_CLK();                      //待電壓穩(wěn)定
    Set_SimData_Direction(ChannelID, 1);  //將I/O端口置為接收方式
    Set_SimClk_Status(ChannelID, 1);      //啟動(dòng)獨(dú)立波特率發(fā)生器開(kāi)始計(jì)數(shù)工作,對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻輸出
    Delay_400_CLK();                      //RST復(fù)位信號(hào)需在提供CLK信號(hào)后400個(gè)時(shí)鐘周期內(nèi)保持低電平
    Set_Sim_Io(ChannelID, SIM_RST, 1);    //之后才可置為高電平
}

以4M的時(shí)鐘為基準(zhǔn),一個(gè)時(shí)鐘為1/4us,則400個(gè)時(shí)鐘用100us,40000個(gè)時(shí)鐘為10ms。

ATR基本應(yīng)答數(shù)據(jù)如下

數(shù)據(jù)元 說(shuō)明
TS 起始字符
T0 格式字符
TA1,TB1,TC1,TD1,... 接口字符
T1,T2,... ,TK 歷史字符
TCK 校驗(yàn)字符

下面以ATR:3B9F94801FC78031E073FE21135758485553494D01F9為例,進(jìn)行說(shuō)明

數(shù)據(jù)元 說(shuō)明
TS 起始字符
T0 格式字符
TA1,TB1,TC1,TD1,... 接口字符
T1,T2,... ,TK 歷史字符
TCK 校驗(yàn)字符
ATR.jpg

1.起始字符TS


TS是ATR的強(qiáng)制部分,總是必須送出的。此字節(jié)只允許有兩種編碼:3B為正向約定,3F為反向約定。使用反向邏輯約定時(shí), I/O的低電平狀態(tài)等效于邏輯1,且該數(shù)據(jù)字節(jié)的最高位在起始位之后首先發(fā)送。使用正向邏輯約定時(shí), I/O的高電平狀態(tài)等效于邏輯1,且該數(shù)據(jù)字節(jié)的最低位在起始位之后首先發(fā)送。

上例ATR的TS為3B

2.格式字符T0


格式字符T0含有一組位表明將要傳送哪個(gè)接口字符,它同時(shí)也指出后繼歷史字符的個(gè)數(shù)。像TS一樣,每個(gè)ATR中都必須有這個(gè)字節(jié)。

高半字節(jié)( b5-b8) 表示后續(xù)字符TA1到TD1是否存在。(b5對(duì)應(yīng)TA1,b8對(duì)應(yīng)TD1);

低半字節(jié)( b1-b4) 表明可選歷史字符的數(shù)目( 0到15);

上例ATR的T0為9F
表明存在TA1和TD1,歷史字符為15個(gè)。

當(dāng)沒(méi)有TD1時(shí),T=0,則TCK不存在。

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


這些字節(jié)在ATR中是可選的,由格式字符T0的高半字節(jié)決定。

3.1 全局接口字符TA1

TA1高半字節(jié) FI 用于確定 F 的值, F 為時(shí)鐘速率轉(zhuǎn)換因子。用于修改復(fù)位應(yīng)答之后終端所提供的時(shí)鐘頻率。低半字節(jié) DI 用于確定 D 的值, D 為位速率調(diào)節(jié)因子。用于調(diào)整復(fù)位應(yīng)答之后所使用的位持續(xù)時(shí)間。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:(沒(méi)有意義了)

TB1傳送PI1和II的值,PI1 在 b1 到 b5 位中定義,用于確定IC卡所需的編程電壓 P 值;II 在 b6 和 b7位中定義,用于確定IC卡所需的最大編程電流I值。一般情況下ATR中必須包含TB1=00,表示IC卡不使用VPP。

上例ATR的TB1為空
3.2 全局接口字符TC1:(沒(méi)有意義了)
上例ATR的TC1為空
3.2 全局接口字符TD1

TD1字符比較關(guān)鍵,看上面的ATR數(shù)據(jù)結(jié)構(gòu)圖可知,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.歷史字符


很長(zhǎng)一段時(shí)間,沒(méi)有任何標(biāo)準(zhǔn)對(duì)歷史字符做出規(guī)定,結(jié)果是隨操作系統(tǒng)生產(chǎn)者而不同,它們包含了變化廣泛的數(shù)據(jù)。

上例ATR的歷史字符為
8031E073FE21135758485553494D01。

5.校驗(yàn)字符TCK


TCK具有一個(gè)檢驗(yàn)復(fù)位應(yīng)答期間所發(fā)送數(shù)據(jù)完整性的值。TCK的值應(yīng)使從T0到包括TCK在內(nèi)的所有字節(jié)進(jìn)行異或運(yùn)算的結(jié)果為零。

當(dāng)沒(méi)有TD1時(shí),T=0,則TCK不存在。

如果在ATR中僅指出了T=0協(xié)議,TCK校驗(yàn)和可以不在ATR的尾部出現(xiàn)。在這種情況下,完全沒(méi)有發(fā)送它,因?yàn)橛闷媾夹r?yàn)已經(jīng)知道了差錯(cuò)字節(jié)而在T=0協(xié)議中重復(fù)發(fā)送出錯(cuò)字節(jié)又是強(qiáng)制性的。相反,在T=1協(xié)議中,TCK字節(jié)必須出現(xiàn),校驗(yàn)和的計(jì)算從字節(jié)T0開(kāi)始,結(jié)束于最后的接口字符,如果有則是最后的歷史字符。

上例ATR的TCK為F9,
將9F94801FC78031E073FE21135758485553494D01進(jìn)行異或處理即可得到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:卡片數(shù)據(jù)服務(wù)
E0:通過(guò)全DF名稱(chēng)的直接應(yīng)用選擇、通過(guò)部分DF名稱(chēng)的選擇數(shù)據(jù)對(duì)象在DIR文件中有效
73:卡能力標(biāo)簽
FE:DF選擇(通過(guò)全DF名稱(chēng)、通過(guò)部分DF名稱(chēng)、通過(guò)路徑、通過(guò)文件標(biāo)識(shí))
EF管理(所支持的短EF標(biāo)識(shí)符、所支持的記錄號(hào))
21:數(shù)據(jù)編碼類(lèi)型
13:邏輯通道最大數(shù)4
TS=3B
T0=9F
TA1=94
TD1=80
TD2=1F
TA3=C7(時(shí)鐘停止休止符:無(wú)優(yōu)先 級(jí)別指示符: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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • fpga規(guī)范 工作過(guò)的朋友肯定知道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對(duì)于大的設(shè)計(jì)(無(wú)論軟件還是硬件),不按照規(guī)范走幾乎...
    Michael_Johnson閱讀 2,026評(píng)論 1 4
  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,088評(píng)論 1 13
  • 10#數(shù)據(jù)類(lèi)型 合并數(shù)組和非合并數(shù)組 合并數(shù)組:存儲(chǔ)方式是連續(xù)的,中間沒(méi)有閑置空間。例如,32bit的寄存器,可以...
    constant007閱讀 33,627評(píng)論 0 18
  • 歲寒百木枯,然后知青松。 但有青云志,天地獨(dú)驍勇。 17.11.14
    樓臺(tái)花舍閱讀 309評(píng)論 0 0
  • 先生說(shuō)他起初就知道我是如何給自己取了這么個(gè)名字,背后深意在他眼里不過(guò)一張透明紙。 我憤憤著他簡(jiǎn)直將我看穿的樣子, ...
    阿舊姑娘閱讀 515評(píng)論 0 0

友情鏈接更多精彩內(nèi)容