English version

Домой   Новости   Радио   Карточки   Кодграберы   Мобилки   Телефония   АТС   Пейджинг   Транки   Жучки   Форум


Google

Обмен данными со смарт-картой ISO 7816-3

Данное описание построено на основе стандарта ISO 7816-3

Оборудование

Для работы с картами я использовал интерфейс Smart Mouse, известный также под названиями Phoenix или Dumb Mouse. Схему такого интерфейса можно найти во многих местах. Этот интерфейс работает через COM-порт компьютера. Кроме этого, существует ряд схем интерфейса, использующих принтерный порт, но я не рекомендовал бы это. Хотя такой интерфейс и имеет ряд неоспоримых преимуществ, спалить принтерный порт гораздо легче, чем RS232.

Немного о интерфейсе Smart Mouse.

В настоящее время этот интерфейс выпусается многими фирмами, по большей части китайскими. Его стоимость - около 40 USD, как правило, он не сопровождаетсмя никакими драйверами.

Назначение

Контакт DB9

Направление

Передаваемые данные

3-TxD

---->карта

Принимаемые данные

2-RxD

<----карта

Сброс

7-RTS

----->карта

Питание *

4-DTR

----->карта

Наличие карты

8-CTS

<----карта

* к устройству может быть подведено внешнее питание 5-9 вольт, "-" в центре разьема.

Устройство имеет собственный тактовый генератор частотой 3.579545 MГц.

Если внешнее питание не подано - питание на карту подается по линии DTR установкой на ней "1". Сразу же после подачи питания начинает работать тактовый генератор. Сброс карты формируется линией RTS. Для обеспечения работы карты на контакте ISO:C2 должна быть "1", что выполняется подачей "1" на RTS. Сброс карты происходит в момент, когда на ISO:C2 - "0". Линия CTS связана с датчиком наличия карты. При отстутствии карты на CTS "0".

Обратите внимание - интерфейс имеет внутренее эхо - то есть все выводимые вами данные одновременно поступают в буфер ввода RS232. Это следует учитывать при анализе откликов карты.

Активация и деактивация Карты

Единица измерения времени

Все временные характеристи при работе с картами выражаются в ETU - Elementary Time Unit. Для карт с внутренним тактовым генератором ETU=1/9600 сек, для карт с внешним тактовым генератором ETU=372/частота_генератора_в_гц, однако эти параметры могут быть изменены специальной процедурой согласования параметров интерфейса - см.ниже.

Стандарт ISO рекомендует применять для тактового генератора наиболее распространенные кварцевые резонаторы 3.579545 MГц и 4.9152 МГц. В интерфейсе Smart Mouse генератор внешний, частота 3.579545 MГц, то есть ETU=0.1039 миллисекунды.

Сброс карты

Для обмена с картой необходимо ее активизировать, сформировав сигнал Reset

По ISO он формируется такой последовательностью сигналов:

  1. RST(ISO:C2) Низкое

  2. Питание (ISO:C1) Установить

  3. I/O (ISO:C7) Готовность_к_приему

  4. VPP (ISO:C6) Низкое

  5. Такт_частота (ISO:C3) Подать

  6. RST (ISO:C2) Высок.

В SmartMouse эти сигналы формируются с помощью линий RS232:

  1. Включить питание ISO:C1=+5v - DTR=1

  2. Сигнал сброса RST(ISO:C2)=1 - RTS=1

  3. Тактовая частота подается на ISO:C3 вместе с питанием +5v

  4. Напряжение программирования VPP на ISO:C6 всегда равно напряжению питания.

Сразу же оговорим и процедуру деактивации карты:

  1. RST(ISO:C2) Низк.

  2. Такт_частота (ISO:C3) Снять

  3. VPP (ISO:C6) Низк.

  4. I/O (ISO:C7) Низк.

  5. Питание (ISO:C1) Низк.

Последовательный Ввод/Вывод

Для начала обратимся к схеме передачи байта в RS232:

Байт, обозначение битов которого приведено ниже:

b8

b7

b6

b5

b4

b3

b2

b1

в интерфейсе RS232 передается так:

Бит четности добавляется к битам данных для обнаружения ошибок. Возможны фактически пять видов установок: по нечетности (Odd), по четности (Even) и дополнительные : Нет (None), '1' (Mark), '0' (Space).

Когда установлен Контроль по четности (Even) то бит четности принимает такое значение, чтобы вместе с ним (не считая стартовые и стоповые) число '1' (Mark) в байте было четно .

Когда установлен Контроль по нечетности (Odd) то бит четности принимает такое значение, чтобы вместе с ним (не считая стартовые и стоповые) число '1' (Mark) в байте было нечетно .

Дополнительные установки - Нет - бит отсутствует, Mark - бит всегда '1', Space - бит всегда '0'.

Схема передачи байта в ISO7816

Стандарт ISO 7816 предусматривает очень похожую схему передачи байта:

Первое отличие от RS232 - обратный порядок следования битов - то есть, если в RS232 первым передается младший бит, то в ISO первым передается старший бит В отличие от RS232, где уровни обозначены как M(ark)=high и S(pace)=low в ISO уровни обозначены как Z и A. Их соответствие мы рассмотрим ниже.

Скорость передачи

Стандартная длительность бит = ETU +/-0.2ETU . В случае, когда ETU=0.1039 миллисекунды это вполне соотвествует скорости интерфейса 9600 бит/сек (длительность бита 0.1041 мс).

Интервал

Стандарт определяет интервал между последовательными байтами длиной в два бита. Это соответствует установке в RS232 2-х стоп-бит.

Контроль четности

Стандартом предусматривается контроль по четности (Even) - то есть бит четности устанавливается так, чтобы число "1" в байте вместе с битом четности было четно.

При асинхронной посимвольной передаче имеется небольшая проблема с диагностикой ошибок. ISO 7816-3 осуществляет обнаружение ошибок и операцию восстановления (обязательные для T=0) так, что это не может обнаруживаться нормальным UART.

Когда карта обнаруживает ошибку четности при приеме, по стандарту она сбрасывает линию I/O в состояние S(pace)=low в середине первого бита интервала. Однако, RS232 в это время продолжает работу и формирует два стоп-бита.

Передача данных без ошибок:

Передача данных с ошибкой четности:

Когда такое состояние возникает, интерфейс должен повторно передать ошибочный символ.
Однако, передатчик, формирующий в этот момент стоп-биты, уровень которых M(ark)=high, никак не может обнаружить сигнал ошибки и, как следствие, в случае ошибки - повторить ошибочный байт.

ATR-Answer To Reset

После сброса карты она формирует ATR - Answer To Reset в таком виде:

Например: карты, применяемые в системе D2MAC/Eurocrypt спутникового телевидения формируют такой ATR:

3F 67 2F 00 11 14 00 03 68 90 00

карты, применяемые в сотовых телефонах GSM (компания North-West GSM, Санкт-Петербург):

3F 2F 00 80 69 AF 02 01 01 35 00 01 0A 0E 83 1E

TS - наиболее важный байт "Инициирующий Символ".

Возможно два варианта этого байта:

1. Вариант - "ИНВЕРСНАЯ ПЕРЕДАЧА"

В этом варианте все биты инвертированы так, что A='1', Z='0'

Диаграмма передачи TS в этом случае выглядит так:

При чтении байта через RS232 это Hex 03 (00000011) - вспомните про обратную последовательность битов (инверсия последовательности - 11000000 ). На самом деле - это Hex 3F (инверсия битов 00111111 ).

В Hex 3F (00111111) число '1'=6, то есть бит четности следует установить в '0', чтобы общее количество '1' было четным, то есть Бит_четности=Z. Однако, с точки зрения RS232 в последовательности 00000011+Бит_четности=1 нечетное количество бит, и при установке контроля Even, принятого в ISO, возникнет ошибка.
В данном варианте контроль четности следует установить обратный - то есть Odd.

2. Вариант - "ПРЯМАЯ ПЕРЕДАЧА"

В этом варианте A='0', Z='1'

Диаграмма передачи TS в этом случае выглядит так:

При чтении байта через RS232 это это Hex 3B ( 00111011) - вспомните про обратную последовательность битов (инверсия последовательности - 11011100 ). В Hex 3B (00111011) число '1'=5, то есть бит четности следует установить в '1',то есть Бит_четности=Z. C точки зрения RS232 контроль такой же - по четности - Even.

Прочитав через RS232 первый байт ATR (TS) можно сделать вывод об интерпретации последующих байтов.

В случае TS=03 - "ИНВЕРСНАЯ ПЕРЕДАЧА", и на самом деле TS=3F
В случае TS=3B - "ПРЯМАЯ ПЕРЕДАЧА".

T0 - Байт формата

Бит-карта в старших 4-х битах определяют передачу последующих байт TA1-TD1:

Старшие четыре бита - число Y1 - определяют передачу байт TA1-TD1. Младшие 4 бита - число K - количество т.н. "Исторических байт", которые описывают конкретную карты - время ее жизни, дату выпуска.

Возвращаясь к карте системы Eurocrypt, где T0=67, отметим:

Набор следующих байтов TAi TBi TCi TDi описывает детальные параметры протокола карты, причем байты TA1 TB2 TC3 TD4 принято называть глобальными интерфейсными.

Байт TA1

Старшая половина байта TC1 содежит параметр FI, который используется для вычисления ETU при использовании внешнего генератора:

ETU=F/частота_генератора_в_гц

По умолчанию - FI=1, F=372 (таблицу соответствия FI->F можно найти в ISO). Младшая половина байта TC1 содежит параметр DI, который используется для вычисления ETU при использовании внутренннего генератора:

ETU=D/9600 сек.

По умолчанию - DI=1, D=1 (таблицу соответствия DI->D можно найти в ISO).

Байт TB1

Старший бит байта TB1 всегда 0.

Остальные содежат:

Байт TC1

Байт TC1 содежит параметр N - дополнительное увеличение интервала между байтами, требуемое картой. По умолчанию N=0.

Байт TD1

Бит-карта в старших 4-х битах определяют передачу дополнительных байт TA2-TD2 также, как и в T0. Четыре младших бита в TD1 описывают тип протокола.

Могут быть следующие значения:

0 = T0 - асинхронный полудуплексный посимвольный протокол
1 = T1 - асинхронный полудуплексный блочный протокол

остальные значения пока зарезервивированы.

Если TD1 вообще не передается - принимается TD1=0 - то есть протокол T0.

Байт TA2

Байт TA2 индицирует возможность настройки параметров протокола карты в процессе работы.

Если TA2 отсутствует в ATR - принимается TA2=0

"Исторические байты"

Исторические байты описывают конкретную карту - время ее жизни, дату выпуска и т.п. Их значение определяется производителем карты.

Рабочее время ожидания - WI

Этот параметр определяется TC2. Если TC2 в ATR не был передан - считается WI=10. Рабочее время ожидания используется для ограничения времени ответа карты и интерфейса. Интервал между старт-битом текущего байта и старт-битом предыдущего байта не может превышать 960*WI Etu, причем текущий байт может исходить из карты, а предыдущий - из интерфейса и наоборот. (в нашем примере MaxTime=997.44 миллисекунды)

Байт контроля TCK

Контрольный байт. Вычисляется так: Исключающее_Или всех байтов ATR, включая байты, равные нулю (или не переданные) должно равняться 0;
В протоколе T0 он не передается.
В протоколе T1 он завершает последовательность ATR.

Итак, теперь мы знаем, что означают байты в нашем примере ATR:

3F 67 2F 00 11 14 00 03 68 90 00

TS=3F ;
T0=67 ;
TA1=0 (не передан) +> ETU=372/частота_генератора_в_гц или ETU=1/9600 сек ;
TB1=2F => II1=2 , PI1=15 => I=100 ma, P=15 v. ;
TC1=0 => N=0 , дополнительное увеличение интервала меджу байтами не треб.;
TD1=0 (не передан) => Протокол T0 - асинхронный полудуплексный посимвольный;
TC2=0 (не передан) => Возможна смена параметров протокола;
TA2=0 (не передан) => Рабочее время ожидания WI=10 Etu ;
"Исторические байты" = 11 14 00 03 68 90 00

Приложение 1

Возможные значения делителя тактовой частоты внешнего генератора

FI

0000

0001

0010

0011

0100

0101

0110

0111

F

Встр.генератор

372

558

744

1116

1488

1860

RFU

FI

1000

1001

1010

1011

1100

1101

1110

1111

F

RFU

512

768

1024

1536

2048

RFU

RFU

RFU - зарезервировано

Возможные значения делителя тактовой частоты внутреннего генератора

DI

0000

0001

0010

0011

0100

0101

0110

0111

D

RFU

1

2

4

8

16

RFU

RFU

DI

1000

1001

1010

1011

1100

1101

1110

1111

D

RFU

RFU

1/2

1/4

1/8

1/16

1/32

1/64

Настройка параметров протокола (PTS)

Если карта допускает настройку параметров протокола, то это должно быть сделано непосредственно после ATR. В процессе настройки параметров протокола возможна переустановка параметров F и D для согласования скоростей работы карты и интерфейса.

Запрос PTS - настройка параметров протокола выполняется шестью байтами:

PTSS

PTS0

PTS1

PTS2

PTS3

PCK

Назначение этих байт:

PTSS

Инициирующий байт. Всегда FF Hex

PTS0

Байт формата. Бит-карта в битах 5-6-7 значением '1' определяет последуют ли байты PTS1,PTS2,PTS3. В четырех младших битах - значение типа протокола 0-T0 или 1-T1

PTS1

содержит запрашиваемые значения FI (в старшей половине байта) и DI (в младшей половине байта)

PTS2

зарезервировано для последующего применения

PTS3

зарезервировано для последующего применения

PCK

Контрольный байт. Вычисляется так: Исключающее_Или всех байтов от PTSS до PCK, включая байты, равные нулю (или не переданные) должно равняться 0

В подтверждение запроса карта отвечает точно такой же последовательностью. Однако, если бит 5 в байте PTS1 равен '1' - карта все равно использует значения FI и DI по умолчанию. Очень редкие карты допускают изменение протокола.

Структура и обработка команд в субпротоколе Т0

После получения ATR и возможного согласования параметров интерфейса (если TC2 не передан или был равен нулю) возможна передача команд и данных.

Команда всегда инициализируется интерфейсом. Интерфейс сообщает о том, что делать в заголовке из 5 байт:

CLA

INS

P1

P2

P3

Принимается, что карта и интерфейс знают априорно направление передачи данных, чтобы разобраться в командах для входящей передачи данных и команд для исходящей передачи данных.

* Заголовок Команды.

CLA

класс команды. Значение FF зарезервировано для PTS

INS

команда в классе команд. Значение команды имеет следующие ограничения: младший бит всегда 0, и старшая половина байта не является ни 6, ни 9

P1, P2

дополонительные параметры (например адрес) завершающие команду

P3

число байт данных (D1, ..., Dn) которые должны быть переданы в этой команде. Направление движения этих данных определяется командой. Причем, если передача данных из карты, P3=0 представляет передачу 256 байт из карты. При передачи данных карте, P3=0 означает отсутствие данных

После передачи заголовка в 5 байтов, устройство интерфейса ждет байт процедуры.

* Байт Процедуры

Посылается картой и определяет действие, запрошенное у интерфейса. Возможны три варианта байта процедуры :

В каждом байте процедуры карта может ответить ACK-байтом, NULL-байтом, ничего не ответить или закончить команду последовательностью SW1-SW2.

Интерпретация байта процедуры

Всего возможно шесть ситуаций:

Ситуация

Байт

Значение

Что сообщается интерфейсу

0

NULL

$ 60

Никакого действия с VPP. Устройство интерфейса ждет нового байта процедуры

1

SW1

SW1

VPP не требуется. Интерфейс ждет байт SW2

2

ACK

INS

VPP не требуется. Можно передавать все остающиеся байты данных (Di, ..., Dn)

3

INS + 1

Требуется VPP. Можно передавать все остающиеся байты данных (Di, ..., Dn)

4

/INS

VPP не требуется. Можно передавать один следующий байт данных

5

/(INS + 1)

Требуется VPP. Можно передавать один следующий байт данных

(примечание - надчеркивание означает инверсию)

Внимание: Любая смена состояния VPP должена произойти за время прохождения байта процедуры, или за время специального ожидания.

Выполнив запрошенные действия интерфейс ждет новый байт процедуры.

Интерпретация Байта Состояния

SW1 = $6x или $9x, исключая $ 60
SW2 = любое значение

Конечная последовательность SW1-SW2 определяет состояние карты в конце команды.

Нормальное окончание - SW1=$90, SW2=$00.

Если старшая половина байта SW1 - $ 6, то значение SW1 не зависит от прикладной программы. Определены следующие пять значений SW1 в таком случае:

Другие значения зарезервированы для будущего использования ISO7816.

Если SW1 не равен $6E и не равен $6D, то карта поддерживает переданную команду.
Стандарт ISO7816 не оговаривает ни значения байт SW1=$9х , ни значения байт SW2, это касается прикладной программы карты.

Известны следющие комбинации:

SW1

SW2

Значение

62

81

Returned data may be corrupted

62

82

The end of the file has been reached before the end of reading

62

84

Selected file is not valid

65

01

Memory failure. There have been problems in writing or reading the EEPROM. Other hardware problems may also bring this error

68

00

The request function is not supported by the card

6A

00

Bytes P1 and/or P2 are incorrect

6A

80

The parameters in the data field are incorrect

6A

82

File not found

6A

83

Record not found

6A

84

There is insufficient memory space in record or file

6A

87

The P3 value is not consistent with the P1 and P2 values

6A

88

Referenced data not found

6C

XX

Incorrect P3 length

Структура и обработка команд в субпротоколе Т1

На момент написания статьи только одна из известных карт поддерживала субпротокол Т1 - карта спутниковой системы Dishnetwork.

© Александр Борзов. 1998.