激活時(shí)序

在激活過(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)字符 |

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