Obr.3 Komunikace se SIM kartou a ošetřená paritní chyba
Rychlost komunikace na datovém rozhraní je 9600 bitů za vteřinu pro karty s vnitřním zdrojem hodin, nebo CLK/372 u karet, které vyžadují externí zdroj hodin. Když tedy použijeme externí zdroj hodin 3.58 MHz, bude karta s vnitřním zdrojem komunikovat stejnou rychlostí jako karta se zdrojem vnějším.
Data jsou přenášena sériově, po START-bitu v pořadí od nejnižšího do nejvyššího. Přenos je zabezpečen sudou paritou a následuje STOP-bit. Ten je dvojnásobné délky oproti ostatním a v jeho druhé polovině časového průběhu umožňuje hlášení chyb na straně příjemce. Případná chyba je ohlášena vysílajícímu stržením úrovně na vývodu DATA z 1 do hodnoty 0. Vysílající pak zopakuje tento špatně přijatý byte ještě jednou. Chyba se určí pomocí paritního bitu. Co se skrývá v ATR? Prvním bytem po události RESET, který SIM karta vyšle, je byte TS. Ten definuje způsob kódování následujících byte. Začíná vždy posloupností bitů "0110". Následující tři bity jsou buď 111 nebo 000 a rozlišuje se pomocí nich konvence, podle níž probíhá další komunikace s kartou. Stav 000 označuje inverzní konvenci, stav 111 konvenci přímou. Jaký je mezi nimi rozdíl? Přímá konvence má bity ve vyslaném byte seřazeny stejně jako při ATR - od nejnižšího k nejvyššímu - a logická 1 na vývodu DATA vyjadřuje stav 1, inverzní konvence je skutečně inverzní: datové bity jsou váhově otočeny, přenášejí se v opačném pořadí a logická 1 na vývodu DATA značí stav 0.
Další byte, který karta při ATR vyšle, je T0. Definuje strukturu ATR. Když má pátý bit v byte T0 nastaven do jedničky, je vysílán byte TA1, šestý bit v jedničce znamená vysílání TB1, sedmý TC1 a osmý TD1. Stejnou informaci pak ve své horní polovině nese byte TD1, takže se tyto znaky mohou v ATR několikrát opakovat. Ukončení vysílání těchto byte poznáme podle toho, že v TDn nejsou příslušné bity nastaveny do hodnoty jedna (jsou nulové), nebo není byte TDn vůbec vyslán. čtyři spodní bity byte T0 a TDn. V těch je v případě protokolu T0 (což je i případ SIM karty) počet byte T1...Tk, které se označují jako historářové. Zde by měly být uloženy informace o výrobci čipu, operačním systému a další služební data.
Obr.4 Struktura ATR
V ATR je ale zakleto více informací. Týkají se maximálního proudu Vpp, programovacího napětí a dalších záležitostí týkajících se hardware karty. Pro bližší informace odkazujeme na normu ISO7816. A jak se se SIMkou komunikuje dál? Dodržuje se příslušná konvence, která byla definovaná v ATR sekvenci. Protokol T0 staví SIM kartu jednoznačně do pasivní role, příkazy vždy zadává telefon (a jemu zas GSM síť nebo uživatel). Příkaz do karty se skládá z hlavičky, datové části a dvojice byte SW1 a SW2, které určují, jaký je stav operace po jejím provedení (indikace chyb). Hlavička má strukturu: CLA, INS, P1, P2, P3 CLA je třída instrukce, v případě GSM má vždy hodnotu A0. INS je instrukční kód, nejnižší bit tohoto byte je je vždy nulový, vyšší polovina nesmí obsahovat hodnotu šest nebo devět. P1, P2 závisí na typu instrukce a slouží k adresování. P3 určuje počet datových byte, které se budou přenášet. Zde je malá záludnost v tom, že při přenosu dat ze SIMky do telefonu nulová hodnota tohoto byte znamená přenos 256ti byte. V opačném směru pak nejsou přeášena žádná data (P3=0).
Příkaz |
INS |
P1 |
P2 |
P3 |
směr přenosu dat |
SELECT |
AČ |
00 |
00 |
02 |
I/O |
STATUS |
F2 |
00 |
00 |
délka |
O |
READ BINARY |
B0 |
offset vyšší |
offset nižší |
délka |
O |
UPDATE BINARY |
D6 |
offset vyšší |
offset nižší |
délka |
I |
READ RECORD |
B2 |
číslo záznamu |
mód |
délka |
O |
UPDATE RECORD |
DC |
číslo záznamu |
mód |
délka |
I |
SEEK |
A2 |
00 |
typ/mód |
délka |
I/O |
INCREASE |
32 |
00 |
00 |
03 |
I/O |
VERIFY CHV |
20 |
00 |
CHV1/2 |
08 |
I |
CHANGE CHV |
24 |
00 |
CHV1/2 |
10 |
I |
DISABLE CHV |
26 |
00 |
01 |
08 |
I |
ENABLE CHV |
28 |
00 |
01 |
08 |
I |
UNBLOCK CHV |
2C |
00 |
* |
10 |
I |
INVALIDATE |
04 |
00 |
00 |
00 |
|
REHABILITATE |
44 |
00 |
00 |
00 |
|
RUN GSM ALGORITHM |
88 |
00 |
00 |
10 |
I/O |
SLEEP |
FA |
00 |
00 |
00 |
|
GET RESPONSE |
C0 |
00 |
00 |
délka |
O |
TERMINAL PROFILE |
10 |
00 |
00 |
délka |
I |
ENVELOPE |
C2 |
00 |
00 |
délka |
I/O |
FETCH |
12 |
00 |
00 |
délka |
O |
TERMINAL RESPONSE |
14 |
00 |
00 |
délka |
I |
*) Pro CHV1=00; pro CHV2=02
Tabulka 1. Kódování příkazů pro SIM kartu
Nadřízený tedy pošle do karty hlavičku. Ta mu odpoví bytem ACK,NULL nebo SW1. Význam těchto byte je v tabulce:
Odpověď |
Hodnota byte |
Význam |
ACK |
INS
INS+1
NOT( INS) NOT(INS+1) |
Vpp neaktivní, následuje přenos všech dat (podle P3) Vpp aktivní, následuje přenos všech dat (podle P3) Vpp neaktivní, přenáší se 1 byte dat Vpp aktivní, následuje přenos 1 byte dat |
NULL |
60 |
bez přenosu dat, Vpp beze změn |
SW1 |
SW1 |
Vpp neaktivní, následuje přenos SW2 |
Tabulka 2. Odpověď karty, hodnoty byte ACK
Byte, který je přijat jako odpověď má význam pro telefon, který se podle jeho hodnoty a významu v daném okamžiku zachová (zapne nebo vypne programovací napětí, vyšle příslušný počet byte do karty ap.). Jak je vidět z tabulky, SIM karta si může říci o čas, jestliže je její procesor zaměstnán zpracováním dat. Už samotný zápis do paměti EEPROM totiž trvá nějakých 10ms, což může při zápisu do většího počtu buněk trvat poměrně dlouho. Dělá to tak, že odpoví bytem s hodnotou not (INS) nebo not (INS+1); telefon (nadřízený) pak může do karty poslat jen jeden byte. Ten karta kvituje opět tímto bytem. Má-li opět stejnou hodnotu, přenese se po datové lince opět jen jeden byte, a procesor v kartě tak získává čas. Když ale dojde v průběhu této komunikace ke změně ACK byte na hodnotu INS nebo (INS+1), dojde k přenosu všech zbylých dat (podle parametru P3).
Když karta zpracovává data, nebyl dokončen příkaz a všechna potřebná data byla již přenesena, signalizuje to vysíláním byte NULL. O průběhu zpracování příkazu vyšle karta návratový kód složený z byte SW1 a SW2. Obecně platí, že správně vykonaná instrukce vrátí tento kód s hodnotou 90 00. GSM11.11 pak definuje pro dobrý průběh ještě návratový kód 9F XX. V tomto případě je navíc k dispozici ještě odpověď, kterou lze získat instrukcí GET RESPONSE s délkou dat XX. Některé jiné hodnoty SW1 a SW2 a jejich významy jsou v tabulce níže:
hodnota SW1 |
hodnota SW2 |
Význam |
92 |
0X |
příkaz správně proveden, ale až po použití vnitřní UPDATE RETRY rutiny, která byla Xkrát spuštěna. (problémy při zápisu do EEPROM) |
92 |
40 |
problém s pamětí |
94 |
00 |
nebyl vybrán soubor EF |
94 |
02 |
špatná adresa (adresa mimo rozsah) |
94 |
04 |
nenalezen identifikátor souboru |
94 |
08 |
soubor nekonzistentní s příkazem |
98 |
02 |
neinicializovaný CHV (nebyl zadán příslušný PIN) |
98 |
04 |
- nespněná přístupová podmínka - neúspěšná verifikace CHVpři posledním pokusu - neúspěšná verifikace UNBLOCK CHVpři posledním pokusu - chyba autentizace |
98 |
08 |
v rozporu se stavem CHV |
98 |
10 |
v rozporu se stavem IVALIDATE |
98 |
40
|
- neúspěšná verifikace CHV, nezbývá žádný pokus - neúspěšný pokus o UNBLOCK CHV, nezbývá žádný pokus - CHV zablokován - UNBLOCK CHV zablokován |
98 |
50 |
INCREASE nemůže být provedena, Max. hodnota překročena |
67 |
XX |
nekorektní parametr P3 (špatná délka) |
6B |
XX # |
nekorektní parametr P1 nebo P2 ## |
6D |
XX # |
neznámý instrukční kód v příkazu |
6E |
XX # |
špatná třída instrukce v příkazu |
6F |
XX # |
technický problém bez bližší specifikace |
# Tyto hodnoty „XX“ jsou specifikovány v ISO/IEC; jejich hodnota je předdefinovaná a je vždy „00“.
## Pokud nastane chyba v P1 nebo P2 v případě adresování záznamu (mimo rozsah), je vyslán návratový kód 94 02. |
Tabulka 3. význam návratových kódů SW1, SW2