2. Вариант - "ПРЯМАЯ ПЕРЕДАЧА"
------------
В этом варианте A='0', Z='1'
Диаграмма передачи TS в этом случае выглядит так:
Z ____ _____ ________ __ _.....__ _ RS232-Mark -12V
| | | | | | | | | | | |
| С| 1 2| 3| 4 5 6| 7 8| Ч|Интервал| С|
A |__| |__| |__|__| |__|_ RS232-Space+12V
При чтении байта через 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:
,----,----,----,----,----,----,----,----,
| ba | bb | bc | bd | be | bf | bg | bh |
'----'----'----'----'----'----'----'----'
^ ^ ^ ^ <-- значение K -->
| | | |_________ если 1 - TA1 передается (см.выше)
| | |_____________ если 1 - TB1 передается
| |__________________ если 1 - TС1 передается
|_______________________ если 1 - TD1 передается
Старшие четыре бита - число Y1 - определяют передачу байт TA1-TD1.
Младшие 4 бита - число K - количество т.н. "Исторических байт",
которые описывают конкретную карты - время ее жизни, дату выпуска.
Возвращаясь к карте системы Eurocrypt, где T0=67, отметим:
- последуют интерфейсные байты TB1 и TC1 (всего два)
- будет всего 7 "Исторических байт".
Набор следующих байтов 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.
,----,----,----,----,----,----,----,----,
|ba=0| bb | bc | bd | be | bf | bg | bh |
'----'----'----'----'----'----'----'----'
<--II1 -> < -------- PI1 -------->
Остальные содежат:
- параметр PI1, который определяет значение P - величину напряжения
программирования VPP.
PI1=0 означает, что карта использует собственное питание для
напряжения программирования.
Значения PI1 от 5 до 25 определяет величину напряжения программирования
так P=PI1 volt.
- параметр II1, который определяет значение I максимальное потребление
тока при программировнии.
Может принимать три значения: II1=00 - I=25 ma, II1=01 - I=50 ma, II1=10 - I=100 ma.
По умолчанию P=5 , I=50 .
Байт TC1
--------
Байт TC1 содежит параметр N - дополнительное увеличение интервала меджу
байтами, требуемое картой. По умолчанию N=0.
Байт TD1
--------
Бит-карта в старших 4-х битах определяют передачу дополнительных байт
TA2-TD2 также, как и в T0.
Четыре младших бита в TD1 описывают тип протокола.
Могут быть следующие значения:
0 = T0 - асинхронный полудуплексный посимвольный протокол
1 = T1 - асинхронный полудуплексный блочный протокол
остальные значения пока зарезервивированы.
Если TD1 вообще не передается - принимается TD1=0
- то есть протокол T0.
Байт TA2
--------
Байт TA2 индицирует возможность настройки параметров протокола карты
в процессе работы.
,----,----,----,----,----,----,----,----,
| ba | bb | bc | bd | be | bf | bg | bh |
'----'----'----'----'----'----'----'----'
| <-Резерв->
|
---- 0 - возможна смена параметров протокола
1 - смена параметров невозможна
Если 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 - F --------------------------
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-D --------------------
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;
PTSO - Байт формата. Бит-карта в битах 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 байтов, устройство интерфейса ждет
байт процедуры.
* Байт Процедуры
================
Посылается картой и определяет действие, запрошенное у интерфейса.
Возможны три типа байт процедуры :
- NULL: (= $ 60) Этот байт посылается картой при перезапуске,
чтобы предупредить о последующем байт процедуры.
Не запрашивает никакого действия ни с VPP, ни с данными.
- SW1 (= $6x или $9x, исключая $60): устройство интерфейса убирает VPP
и ждет байт SW2 завершающий команду.
- ACK: Определяет управление VPP (напряжением программирования)
и передачей дальнейших данных.
В каждом байте процедуры карта может ответить ACK-байтом, NULL-байтом,
ничего не ответить или закончить команду последовательностью SW1-SW2.
Интерпретация байта процедуры
=============================
Всего возможно шесть ситуаций:
Ситуация | Байт | Значение | Что сообщается интерфейсу
---------+----- + -------- + ---------------------------------------
0 | NULL | $ 60 | Никакого действия с VPP. Устройство интерфейса
| | | ждет нового байта процедуры
---------+----- + ------- + ---------------------------------------
1 | SW1 | SW1 | VPP не требуется. Интерфейс ждет байт SW2
---------+----- + ------- + ---------------------------------------
2 | | INS | VPP не требуется. Можно передавать все
| | | остающиеся байты данных (Di, ..., Dn).
| | |
3 | | INS + 1 | Требуется VPP. Можно передавать все остающиеся
| | | байты данных (Di, ..., Dn).
| ACK | ___ |
4 | | INS | VPP не требуется. Можно передавать один
| | | следующий байт данных.
| | _______ |
5 | | INS + 1 | Требуется VPP. Можно передавать один
| | | следующий байт данных.
(примечание - надчеркивание означает инверсию)
Внимание: Любая смена состояния VPP должена произойти за время прохождения
байта процедуры, или за время специального ожидания.
Выполнив запрошенные действия интерфейс ждет новый байт процедуры.
Интерпретация Байт Состояния
============================
SW1 = $6x или $9x, исключая $ 60
SW2 = любое значение)
Конечная последовательность SW1-SW2 определяет состояние карты
в конце команды.
Нормальное окончание - SW1=$90, SW2=$00 .
Если старшая половина байта SW1 - $ 6, то значение SW1 не зависит от
прикладной программы. Определны следующие пять значений SW1 в таком
случае:
- $6E плата не поддерживает класс команды.
- $6D команда не запрограммирована или недопустима.
- $6B неправильная ссылка (P1/P2).
- $67 неправильная длина.
- $6F Точная диагностика не дана.
Другие значения зарезервированы для будущего использования 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