Предметом патентных прав является антиколлизия (раздел 8 настоящего стандарта).
Следует иметь в виду, что некоторые другие положения настоящего стандарта тоже могут быть объектом патентных прав. ИСО и МЭК не несут ответственности за идентификацию таких прав.
Международный стандарт ИСО/МЭК 15693-3 подготовлен подкомитетом N 17 "Карты и идентификация личности" совместного технического комитета N 1 ИСО/МЭК "Информационные технологии".
Настоящий стандарт устанавливает:
- протокол и команды,
- другие параметры, необходимые для инициации обмена информацией между картами на интегральных схемах удаленного действия и терминальным оборудованием,
- методы обнаружения и поддержания связи с одной картой среди нескольких карт ("антиколлизия"),
- дополнительные средства упрощения и ускорения выбора одной из нескольких карт на основе критериев применения.
В настоящем стандарте использованы нормативные ссылки на следующие стандарты <1>:
--------------------------------
<1> Следует применять последнее издание указанных стандартов, включая все последующие изменения.
ИСО/МЭК 7816-6:2004 Карты идентификационные. Карты на интегральных схемах. Часть 6. Элементы данных для межотраслевого обмена (ISO/IEC 7816-6:2004, Identification cards - Integrated circuit cards - Part 6: Interindustry data elements for interchange)
ИСО/МЭК 13239 Информационные технологии. Телекоммуникации и обмен информацией между системами. Высокоуровневые протоколы управления каналом передачи данных (HDLC) (ISO/IEC 13239, Information technology - Telecommunications and information exchange between systems - High-level data link control (HDLC) procedures)
ИСО/МЭК 15693-1 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты удаленного действия. Часть 1. Физические характеристики (ISO/IEC 15693-1, Identification cards - Contactless integrated circuit(s) cards - Vicinity cards - Part 1: Physical characteristics)
ИСО/МЭК 15693-2 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты удаленного действия. Часть 2. Воздушный интерфейс и инициализация (ISO/IEC 15693-2, Identification cards - Contactless integrated circuit cards - Vicinity cards - Part 2: Air interface and initialization)
В настоящем стандарте использованы термины и определения по ИСО/МЭК 15693-1 и ИСО/МЭК 15693-2, а также следующие термины с соответствующими определениями:
3.1.1 цикл антиколлизии (anticollision loop): Алгоритм, используемый для подготовки и обработки диалога между терминальным оборудованием и одной или несколькими картами из числа присутствующих в возбуждающем электромагнитном поле устройства.
3.1.2 байт (byte): Строка, состоящая из 8 бит, обозначенных от b1 до b8, от старшего значащего бита (MSB, b8) до младшего значащего бита (LSB, b1).
AFI - идентификатор семейства приложений (application family identifier);
CRC - циклическая проверка четности с избыточностью (cyclic redundancy check);
DSFID - идентификатор формата хранения данных (data storage format identifier);
EOF - конец кадра (end of frame);
LSB - младший значащий бит (least significant bit);
LSByte - младший значащий байт (least significant byte);
MSB - старший значащий бит (most significant bit);
MSByte - старший значащий байт (most significant byte);
RFU - зарезервировано для будущего использования (reserved for future use);
SOF - начало кадра (start of frame);
UID - уникальный идентификатор (unique identifier);
VCD - терминальное оборудование для карт удаленного действия (vicinity coupling device);
VICC - карта на интегральных схемах удаленного действия (vicinity integrated circuit card).
fc - частота рабочего поля (несущая частота).
Карты на интегральных схемах удаленного действия (VICC) (далее - карты) однозначно идентифицируются с помощью уникального идентификатора (UID) из 64 бит. Данный идентификатор используется для адресации каждой такой карты однозначно и индивидуально в течение цикла антиколлизии и обмена типа "один к одному" между терминальным оборудованием (VCD) и картой.
Уникальный идентификатор (UID) должен быть установлен изготовителем интегральной схемы (ИС) в соответствии с рисунком 1:
Рисунок 1 - Формат уникального идентификатора UID
UID включает:
- старший значащий байт MSByte (биты 64 - 57), который должен быть 'E0';
- код изготовителя ИС (биты 56 - 49) согласно ИСО/МЭК 7816-6;
- уникальный серийный номер (биты 48 - 1), назначенный изготовителем ИС.
Идентификатор семейства приложений (AFI) представляет тип приложения, на которое нацелено устройство связи, и используется для выделения из всех имеющихся карт только тех, которые удовлетворяют требуемым критериям приложений (см. рисунок 2).
AFI можно программировать или блокировать соответствующими командами.
AFI кодируется на 1 байт, который составлен из 2 полубайтов по 4 бита в каждом.
Старший значащий полубайт AFI используется для кодирования одного специального семейства или всех семейств приложений, как определено в таблице 1.
Младший значащий полубайт AFI используется для кодирования одного специального или всех подсемейств приложений. Коды подсемейств, отличающиеся от 0, являются закрытыми.
Таблица 1
Примечание - X = от '1' до 'F', Y = '1' до 'F'.
Поддержка AFI картой VICC не является обязательной.
Если карта VICC не поддерживает AFI и если установлен флажок AFI, то карта не должна отвечать, какое бы ни было значение AFI в запросе.
Если AFI поддерживается картой VICC, то она должна отвечать в соответствии с правилами согласования, которые показаны в таблице 1.
![]() Примечание - Под "ответом" подразумевается, что карта VICC должна реагировать на запрос инвентаризации.
Идентификатор формата хранения данных (DSFID) показывает, как данные структурированы в памяти карты.
Данный идентификатор можно программировать и блокировать соответствующими командами. Он кодируется на одном байте, позволяет мгновенно получать сведения о логической организации данных.
Если программирование данного идентификатора не поддерживается картой, то эта карта должна выдавать в ответ нулевое значение ('00').
Алгоритм циклической проверки четности должен быть вычислен в соответствии с требованиями ИСО/МЭК 13239.
Исходное содержание регистра должно быть одинаковым: 'FFFF'.
Два байта CRC присоединяются к каждому запросу и каждому ответу в рамках каждого кадра и перед концом кадра (EOF). CRC вычисляется на всех байтах после начала кадра (SOF) до поля CRC, но без включения этого поля.
При получении запроса от терминального оборудования VCD карта VICC должна проверить достоверность значения CRC. Если это значение не является достоверным, то карта должна исключить этот кадр и не отвечать на запрос (не модулировать).
При получении ответа карты VICC рекомендуется, чтобы терминальное оборудование VCD осуществило проверку достоверности CRC. Если эта проверка показывает, что CRC не является достоверной, то действия, которые должны выполняться, осуществляет по своему усмотрению разработчик терминального оборудования VCD.
В CRC первым передается младший значащий байт (см. рисунок 3).
В каждом байте сначала передается младший значащий бит.
В командах, определенных в настоящем стандарте, имеется допущение, что физическая память организуется блоками данных (или страницами) фиксированного размера:
- можно обращаться к адресам до 256 блоков;
- размер блока может быть до 256 бит;
- это приводит к максимальному объему памяти до 8 килобайтов (64 килобит).
Примечание - Данная структура позволяет осуществлять в перспективе расширение максимального объема памяти.
Команды, описанные в настоящем стандарте, обеспечивают поблочный допуск (считывание и запись). Отсутствуют неявные или явные ограничения, касающиеся другого метода доступа (например, по байтам или логическим объектам в последующем пересмотре настоящего стандарта или в пользовательских командах).
Состояние безопасности блока передается обратно картой VICC как параметр в ответе на запрос терминального оборудования VCD согласно определению в разделе 10 (например, блок только для считывания). Он кодируется одним байтом.
Состояние безопасности блока является элементом протокола. Отсутствуют неявные или явные допущения, что 8 бит действительно реализованы в физической структуре памяти карты.
Таблица 2
Состояние безопасности блока
Протокол передачи (или протокол) определяет механизм обмена инструкциями и данными между терминальным оборудованием VCD и картой VICC в обоих направлениях.
Он базируется на концепции "терминальное оборудование VCD спрашивает первым". Это означает, что любая карта не должна начинать передачу (т.е. модулирование в соответствии с ИСО/МЭК 15693-2) до тех пор, пока не получит и правильно не декодирует инструкцию, переданную терминальным оборудованием VCD.
a) В основе протокола лежит обмен следующей информацией:
- запрос терминального оборудования VCD карте VICC;
- ответ карты VICC терминальному оборудованию VCD.
Условия, при которых карта VICC передает свой ответ на запрос, определены в разделе 10.
b) Каждый запрос и каждый ответ содержатся в кадре. Ограничители кадра (SOF, EOF) заданы в ИСО/МЭК 15693-2.
c) Каждый запрос состоит из следующих полей:
- поля флажков;
- поля кода команд;
- обязательных и дополнительных полей параметров, зависимых от команды;
- полей данных приложений;
- поля CRC.
d) Каждый ответ состоит из следующих полей:
- поля флажков;
- обязательных и дополнительных полей параметров, зависимых от команды;
- полей данных приложений;
- поля CRC.
e) Протокол является бит-ориентированным. Число бит, передаваемых в кадре, является кратным восьми (8), т.е. целому числу байтов.
f) В однобайтовом поле первым передается младший значащий бит (LSBit).
g) В многобайтовом поле первым передается младший значащий байт (LSByte), в каждом байте первым передается младший значащий бит (LSBit).
h) Установка флажков указывает на присутствие дополнительных полей. При установке флажка в состояние 1 дополнительное поле присутствует. Если флажок возвращается в состояние 0, то это поле отсутствует.
i) Флажки RFU должны быть установлены в состояние 0.
Термин "режим" относится к механизму определения в запросе установок в картах, которые должны отвечать на запрос.
Если флажок адреса Address_flag устанавливается в состояние 1 (адресный режим), то запрос должен содержать уникальный идентификатор ID (UID) адресуемой карты VICC.
Любая такая карта VICC, принимающая запрос с флажком Address_flag в состоянии 0, должна сравнивать принятый ID (адрес) со своим идентификатором ID.
При совпадении карта должна выполнить запрос (если возможно) и передать свой ответ обратно терминальному оборудованию VCD, как определено в описании команды.
Если идентификаторы не совпадают, то карта не должна реагировать.
Если флажок адреса Address_flag устанавливается в состояние 0 (безадресный режим), то запрос не должен содержать уникальный ID.
Любая карта VICC, принимающая запрос с флажком Address_flag в состоянии 0, должна выполнить запрос (если возможно) и передать свой ответ обратно терминальному оборудованию VCD, как определено в описании команды.
Если флажок выбора Select_flag устанавливается в состояние 1 (режим выбора), то запрос не должен содержать уникальный ID карты VICC.
Карта VICC в состоянии выбора, принимающая запрос с флажком выбора Select_flag, установленным на 1, должна выполнить запрос (если возможно) и передать свой ответ обратно терминальному оборудованию VCD, как определено в описании команды.
Карта VICC только в состоянии выбора должна отвечать на запрос, имеющий флажок выбора, установленный на 1.
Запрос состоит из следующих полей:
- поле флажков;
- поле кода команды (см. раздел 10);
- поля параметров и данных;
- поле CRC (см. 4.4).
Общий формат запроса представлен на рисунке 4.
Рисунок 4 - Общий формат запроса
В запросе полевые "флажки" задают действия, которые должна выполнять карта VICC, и показывают присутствие или отсутствие соответствующего поля.
Таблица 3
Определение флажков запроса с 1 по 4
Примечание 1 - Флажок Sub-carrier_flag ссылается на коммуникационное взаимодействие между картой и терминальным оборудованием VICC-VCD, как определено в ИСО/МЭК 15693-2.
Примечание 2 - Флажок Data_rate_flag ссылается на коммуникационное взаимодействие между картой и терминальным оборудованием VICC-VCD, как определено в ИСО/МЭК 15693-2.
Таблица 4
когда флажок инвентаризации не установлен
Таблица 5
когда установлен флажок инвентаризации
Ответ состоит из следующих полей:
- поля флажков;
- одного или больше полей параметров;
- поля данных;
- поля CRC (см. 4.4).
Общий формат ответа представлен на рисунке 5.
Рисунок 5 - Общий формат ответа
Флажок ответа показывает, как карта VICC выполнила действия, а также присутствие или отсутствие соответствующего поля.
Флажок ответа состоит из восьми бит (см. таблицу 6).
Таблица 6
Определение флажков ответа с 1 по 8
При установке картой VICC флажка ошибки Error_flag поле кода ошибки должно быть включено в карту, чтобы предоставлять информацию о возникающих ошибках. Коды ошибки определены в таблице 7.
Если карта VICC не поддерживает специфический(е) код(ы), перечисленные в таблице 7, то она должна отвечать с кодом ошибки '0F' ("Ошибка без информации").
Таблица 7
Карта VICC может находиться в одном из следующих состояний:
- отключения (Power-off);
- готовности (Ready);
- покоя (Quiet);
- выбора (Selected).
Диаграмма перехода между этими состояниями показана на рисунке 6.
Поддержка состояний отключения, готовности и покоя является обязательной.
Поддержка состояния выбора является дополнительным свойством.
![]() Примечание 1 - Смысл метода перехода состояния - наличие только одной карты VICC, которая должна быть в состоянии выбора (Selected) в данный момент времени.
Примечание 2 - Диаграмма перехода состояний карты VICC показывает только допустимые переходы. Во всех других случаях текущее состояние карты остается без изменения. Если карта не может обработать запрос терминального оборудования (например, ошибка CRC и т.д.), то она должна находиться в своем текущем состоянии.
Примечание 3 - Состояние выбора (Selected) представлено пунктиром, чтобы показать, что поддержка со стороны карты VICC является необязательной.
Карта VICC находится в состоянии отключения, когда она не может быть активизирована терминальным оборудованием VCD.
Карта VICC находится в состоянии готовности, когда она активизируется терминальным оборудованием VCD. Она должна обрабатывать любой запрос, если нет флажка выбора.
Карта VICC в состоянии покоя должна обрабатывать любой запрос, если флажок Inventory_flag не установлен, а флажок Address_flag установлен.
Только в состоянии выбора карта VICC должна обрабатывать запросы, имеющие установленный флажок выбора Select_flag.
Назначение алгоритма антиколлизии - это инвентаризация карт VICC, присутствующих в поле терминального оборудования, по их уникальным идентификаторам (UID).
Терминальное оборудование VCD является главным звеном в коммуникационном взаимодействии с одной или несколькими картами VICC. Оно инициирует связь карты запросом на инвентаризацию.
Карта VICC должна дать ответ в соответствующем слоте или не отвечать, подчиняясь алгоритму, описание которого дано в 8.2.
При подаче команды на инвентаризацию терминальное оборудование VCD должно установить флажок Nb_slots_flag в необходимое положение и добавить после командного поля длину и значение маски.
Длина маски показывает число значащих бит значения маски. Она может иметь любое значение от 0 до 60 при использовании 16 слотов и любое значение от 0 до 64 при использовании 1 слота. Первым передается младший значащий бит (LSB).
Значение маски содержится в целом числе байтов. Первым передается младший значащий бит (LSB).
Если длина маски не является кратной 8 (битам), то значение маски старшего значащего бита (MSB) должно быть заполнено необходимым числом нулевых бит (установка на 0) так, чтобы значение маски содержалось в целом числе байтов.
Следующее поле начинается на границе следующего байта (см. рисунок 7).
Рисунок 7 - Формат запроса инвентаризации
На рисунке 8 длина маски - 12 бит. Значение маски старшего значащего бита (MSB) заполнено четырьмя битами, установленными на 0.
Рисунок 8 - Пример заполнения маски
Должно присутствовать поле идентификатора семейства приложений AFI, если установлен флажок AFI_Flag.
Импульс должен генерироваться в соответствии с определением конца кадра EOF по ИСО/МЭК 15693-2.
Первый слот стартует сразу после приема запроса конца кадра EOF.
Для переключения на следующий слот терминальное оборудование VCD передает конец кадра EOF. Правила, ограничения и синхронизация описаны в разделе 9.
С получением правильного запроса карта должна обработать его путем исполнения последовательных операций, заданных далее по тексту курсивом.
Последовательность этапов также графически представлена на рисунке 9.
NbS - общее число слотов (1 или 16)
SN - номер текущего слота (от 0 до 15)
Длина SN_length устанавливается на 0 при использовании одного слота и на 4 при использовании 16 слотов
Функция LSB (значение, n) возвращает n значений младших значащих бит
"& "- оператор соединения
Slot_Frame - это или SOF (начало кадра), или EOF (конец кадра)
SN=0
if Nb_slots_flag then
NbS =1 SN_length=0
else NbS = 16 SN_length=4
endif
label1: if LSB(UID, SN_length + Mask_length) = LSB(SN, SN_length)&LSB(Mask,
Mask_length) then
transmit response to inventory request
endif
wait (Slot_Frame)
if Slot_Frame= SOF then
Stop anticollision and decode/process request
exit
endif
if SN<NbS-1 then
SN = SN + 1
goto label1
exit
endif
exit
![]() Примечание - Если номер слота 1 (Nb_slots_flag установлен на 1), то сравнение делается только по маске (без заполнения).
номером слота и UID
На рисунке 10 показаны основные случаи, которые могут возникать в типичном алгоритме антиколлизии при количестве слотов, равном 16.
Различают следующие этапы антиколлизии:
a) терминальное оборудование VCD посылает запрос инвентаризации (в кадре), который заканчивается концом кадра (EOF). Число слотов равно 16;
b) карта VICC 1 передает свой ответ в слоте 0. Только одна эта карта передает ответ, поэтому коллизия не возникает и терминальное оборудование VCD принимает и регистрирует UID карты;
c) терминальное оборудование VCD посылает конец кадра (EOF), что означает переключение на следующий слот;
d) в слоте 1 карты VICC 2 и 3 передают свои ответы, при этом возникает коллизия. Терминальное оборудование VCD обнаруживает эту ситуацию и запоминает, что коллизия была обнаружена в слоте 1;
e) терминальное оборудование VCD посылает конец кадра (EOF), что означает переключение на следующий слот;
f) в слоте 2 ни одна из карт VICC не передает свой ответ. Следовательно, терминальное оборудование VCD не обнаруживает начало кадра (SOF) карты VICC и решает переключиться на следующий слот, посылая конец кадра (EOF);
g) в слоте 3 возникает другая коллизия, вызванная ответами карт VICC 4 и 5;
h) терминальное оборудование VCD решает послать адресуемый запрос (например, Read Block) в карту VICC 1, чей UID уже правильно принят;
i) все карты VICC обнаруживают начало кадра (SOF) и выходят из алгоритма антиколлизии. Они обрабатывают этот запрос, и поскольку он адресован только карте VICC 1, то именно эта карта передает свой ответ;
j) все карты VICC готовы принять другой запрос. Если это будет команда на инвентаризацию, порядок нумерации слотов вновь начинается с 0.
Примечание - Решение прервать алгоритм антиколлизии принимает терминальное оборудование VCD. Оно могло бы продолжать передачу конца кадра (EOF) до 15-го слота и затем послать запрос карте VICC 1.
![]() Примечание - Значения t1, t2 и t3 заданы в разделе 9.
Терминальное оборудование VCD и карта VICC должны соответствовать техническим требованиям к синхронизации, приведенным в данном разделе.
9.1 Время ожидания карты VICC до передачи своего ответа после приема EOF от терминального оборудования VCD
Когда карта VICC обнаружит конец кадра (EOF) верного запроса терминального оборудования VCD или когда этот конец кадра (EOF) есть в последовательности верного запроса VCD, то она должна ждать в течение t1, прежде чем начинать передачу своего ответа на запрос терминального оборудования VCD или прежде чем переключиться на следующий слот в случае процесса инвентаризации (см. 8.2 и 8.3).
Время t1 начинается с момента обнаружения нарастающего фронта EOF, принятого от терминального оборудования VCD (см. ИСО/МЭК 15693-2).
Примечание - Синхронизация нарастающего фронта EOF от терминального оборудования VCD к карте (VCD-к-VICC) необходима для обеспечения требуемого согласования по времени ответов карты VICC.
Минимальное значение t1 есть t1min = 4320/fc (318,6 мкс).
Номинальное значение t1 есть t1nom = 4352/fc (320,9 мкс).
Максимальное значение t1 есть t1max = 4384/fc (323,3 мкс).
Время t1max не применяется к запросам типа Write ("запись"). Режим синхронизации для запросов типа Write ("запись") определяется в описаниях команд.
Если карта обнаруживает модуляцию несущей в течение времени t1, то она должна вернуть свой таймер на 0 и снова ожидать в течение t1, прежде чем начинать передачу своего ответа на запрос терминального оборудования VCD или переключаться на следующий слот в случае процесса инвентаризации.
Если карта VICC обнаруживает конец кадра (EOF) верного запроса терминального оборудования VCD или если EOF присутствует в последовательности верного запроса терминального оборудования VCD, то она должна пропустить 10% любой принятой модуляции в течение времени игнорирования модуляции tmit.
Время tmit начинается с момента обнаружения нарастающего фронта EOF, принятого от терминального оборудования VCD (см. ИСО/МЭК 15693-2).
Минимальное значение tmit есть tmitmin = 4384/fc (323,3 мкс) + tnrt,
где tnrt - номинальное время ответа карты.
Время tnrt зависит от скорости обмена данными между терминальным оборудованием VCD и картой VICC (VCD-к-VICC), а также режима модуляции поднесущей (см. ИСО/МЭК 15693-2).
Примечание - Синхронизация нарастающего фронта EOF от терминального оборудования VCD к карте VICC (VCD-к-VICC) необходима для обеспечения требуемого согласования по времени ответов карты.
a) Если терминальное оборудование VCD примет ответ карты VICC на предыдущий запрос, кроме случаев инвентаризации и состояния покоя (Inventory and Quiet), то оно должно ждать в течение времени t2, прежде чем посылать следующий запрос. Время t2 начинается с момента приема EOF от карты VICC.
b) Если терминальное оборудование VCD послало запрос о состоянии покоя (который не вызывает ответ карты VICC), то оно должно ждать в течение времени t2 до отправки следующего запроса. Время t2 начинается с момента окончания EOF в запросе о состоянии покоя (нарастающий фронт EOF плюс 9,44 мкс, см. ИСО/МЭК 15693-2).
Минимальное значение t2 есть t2min = 4192/fc (309,2 мкс).
Примечание 2 - После активации питания терминальное оборудование VCD должно ждать по меньшей мере 1 мс, прежде чем посылать первый запрос, чтобы обеспечить готовность карт VICC к приему первого запроса (см. ИСО/МЭК 15693-2).
c) Если терминальное оборудование VCD посылает запрос на инвентаризацию, то оно включается в процесс инвентаризации (см. 9.4).
9.4 Время ожидания терминального оборудования VCD перед переключением на следующий слот во время процесса инвентаризации
Процесс инвентаризации начинается с момента отправки терминальным оборудованием VCD запроса на инвентаризацию (см. 8.2, 8.3, 10.3.1).
Чтобы переключиться на следующий слот, терминальное оборудование VCD может передать модулированный на 10% или 100% EOF, независимо от индекса модуляции, используемого терминальным оборудованием VCD для передачи своего запроса к карте VICC после периода ожидания, заданного в 9.3, перечисления a), b).
В течение процесса инвентаризации, когда терминальное оборудование VCD начало принимать один или более ответов карт VICC (т.е. обнаружило SOF карты и/или коллизию), оно должно выполнить следующее:
- ждать полного завершения приема ответов карты VICC (т.е. когда принят EOF карты VICC или время номинального ответа tnrt карты VICC истекло);
- ждать дополнительно в течение t2;
- затем передать модулированный на 10% или 100% EOF, чтобы переключиться на новый слот.
Время t2 начинается с момента приема EOF от карты VICC (см. ИСО/МЭК 15693-2).
Минимальное значение t2 есть t2min = 4192/fc (309,2 мкс).
Время номинального ответа tnrt зависит от скорости обмена данными между картой VICC и терминальным оборудованием VCD (VICC-к-VCD) и режима модуляции поднесущей (см. ИСО/МЭК 15693-2).
Во время процесса инвентаризации, когда терминальное оборудование VCD не получило ответ карты VICC, оно должно ждать время t3, прежде чем посылать следующий EOF, чтобы переключиться на следующий слот.
Время t3 начинается с момента, когда терминальное оборудование VCD осуществило генерацию нарастающего фронта последнего отправленного EOF.
a) Если устройство связи посылает модулированный на 100% EOF, то минимальное значение t3 есть t3min = 4384/fc (323,3 мкс) + tsof.
b) Если терминальное оборудование VCD посылает модулированный на 10% EOF, то минимальное значение t3 есть t3min = 4384/fc (323,3 мкс) + tnrt + t2min,
где tsof - продолжительность времени для карты VICC, чтобы передать SOF терминальному оборудованию VCD;
tnrt - номинальное время ответа карты VICC.
Значения tsof и tnrt зависят от скорости обмена данными между картой VICC и терминальным оборудованием VCD (VICC-к-VCD) и режима модуляции поднесущей (см. ИСО/МЭК 15693-2).
Определены четыре типа команд: обязательные, дополнительные, пользовательские и закрытые.
Все карты VICC с одним и тем же кодом изготовителя ИС (интегральной схемы) и одним и тем же номером версии ИС должны функционировать аналогичным образом.
Коды обязательных команд находятся в диапазоне от '01' до '1F'.
Все карты VICC должны поддерживать данные команды.
Коды дополнительных команд находятся в диапазоне от '20' до '9F'
Карты VICC могут поддерживать данные команды по выбору пользователя. В случае поддержки форматы запроса и ответа должны соответствовать описанию, которое дано в настоящем стандарте.
Если карта VICC не поддерживает дополнительную команду и если установлены флажки адреса Address_flag или выбора Select_flag, то она может выдать в ответ код ошибки ("Не поддерживается") или не реагировать. При отсутствии установок флажков Address_flag или Select_flag карта VICC не должна реагировать на дополнительные команды.
Если дополнительная команда имеет разные режимы, то карта VICC может их поддерживать, в противном случае возвратом должен быть код ошибки.
Коды пользовательских команд находятся в диапазоне от 'A0' до 'DF'.
Карты VICC поддерживают данные команды по выбору пользователя, чтобы реализовать специальные функции, заложенные производителем. Функция флажков (включающая резервные биты) не должна изменяться, кроме функции флажка Option_flag. Только поля параметров и данных могут быть изменены по желанию пользователя.
Любая пользовательская команда содержит в качестве первого параметра код изготовителя ИС. Это дает возможность изготовителям ИС реализовать пользовательские команды без риска дублирования командных кодов и, следовательно, ложной интерпретации.
Если карта VICC не поддерживает пользовательскую команду и если установлены флажки адреса Address_flag или выбора Select_flag, то она может выдать в ответ код ошибки ("Не поддерживается") или не реагировать. Если ни один их флажков Address_flag или Select_flag не установлен, то карта VICC не должна реагировать на пользовательские команды.
Если пользовательская команда имеет разные режимы, то карта VICC может их поддерживать, в противном случае возвратом должен быть код ошибки.
Коды закрытых команд находятся в диапазоне от 'E0' до 'FF'.
Данные команды используют изготовители ИС и карт VICC для различных целей, например испытаний, программирования информационных систем и т.д. Они не указаны в настоящем стандарте. Изготовитель ИС может документировать или не документировать их по своему усмотрению. Допускается блокировать данные команды после изготовления ИС и (или) карты VICC.
Коды команд представлены в таблице 8.
Таблица 8
Коды команд
Код команды = '01'
С получением запроса инвентаризации (Inventory) карта VICC должна выполнить алгоритм антиколлизии.
Запрос инвентаризации включает следующее (см. рисунок 11):
- флажки;
- код команды инвентаризации;
- идентификатор семейства приложений AFI, если установлен флажок AFI;
- длину маски;
- значение маски;
- CRC.
Флажок инвентаризации (Inventory_flag) должен быть установлен на 1.
Значение флажков с 5 по 8 в соответствии с таблицей 5.
![]() Ответ должен содержать следующее (см. рисунок 12):
- идентификатор формата хранения данных DSFID;
- уникальный идентификатор ID.
Если карта VICC обнаруживает ошибку, то она не должна реагировать на запрос.
![]() Код команды = '02'
С получением команды "состояние покоя" (Stay quiet) карта VICC должна находиться в этом состоянии и не давать ответ.
На команду "состояние покоя" ответа нет.
В состоянии покоя карта VICC:
- не должна обрабатывать никакого запроса, если установлен флажок инвентаризации Inventory_flag;
- должна обрабатывать любой адресный запрос.
Карта VICC должна выходить из состояния покоя в следующих случаях:
- возврат в исходное положение (отключено питание);
- прием запроса выбора (Select). Она должна перейти в состояние выбора, если это состояние поддерживается, или возвратить ошибку, если состояние не поддерживается;
- прием запроса о возврате в состояние готовности (Reset to ready). Карта должна перейти в состояние готовности (Ready).
Формат запроса состояния покоя показан на рисунке 13.
![]() Рисунок 13 - Формат запроса состояния покоя
Параметр запроса:
UID (обязательный)
Команда "состояние покоя" (Stay quiet) должна всегда выполняться в адресном режиме (Addressed mode) (Select_flag установлен на 0 и Address_flag - на 1).
Код команды = '20'
В случае приема команды на считывание единичного блока данных (Read single block) карта VICC должна считать запрашиваемый блок и передать обратно его значение в своем ответе.
Если в запросе установлен флажок Option_flag, то карта VICC должна передать обратно состояние безопасности блока, за которым следует значение этого блока.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно только значение блока.
Формат запроса на считывание единичного блока показан на рисунке 14.
![]() Рисунок 14 - Формат запроса на считывание единичного блока
Параметр запроса:
UID (дополнительный)
Номер блока
Форматы ответа на считывание единичного блока, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 15 и 16.
![]() Рисунок 15 - Формат ответа на считывание единичного блока,
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag),
если Error_flag не установлен
Состояние безопасности блока (если Option_flag установлен в запросе)
Данные блока
Код команды = '21'
В случае приема команды на запись единичного блока (Write single block) карта VICC должна записать запрашиваемый блок с данными, содержащимися в запросе, и сообщить об успешном выполнении операции в своем ответе.
Если флажок Option_flag не установлен, то карта VICC должна передать свой ответ после завершения операции записи, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и с получением EOF должна передать обратно свой ответ.
Формат запроса на запись единичного блока показан на рисунке 17.
![]() Рисунок 17 - Формат запроса на запись единичного блока
Параметр запроса:
UID (дополнительный)
Номер блока
Данные
Форматы ответа на запись единичного блока, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 18 и 19.
![]() Рисунок 18 - Формат ответа на запись единичного блока,
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и код ошибки (Error code), если установлен Error_flag)
Код команды = '22'
В случае приема команды "блокировать блок" (Lock block) карта VICC должна всегда блокировать запрошенный блок.
Если флажок Option_flag не установлен, то карта VICC должна передать свой ответ после завершения операции блокирования, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и с получением EOF передать свой ответ.
Формат запроса на блокирование единичного блока показан на рисунке 20.
![]() Рисунок 20 - Формат запроса на блокирование единичного блока
Параметр запроса:
UID (Дополнительный)
Номер блока
Форматы ответа на команду "блокировать блок", если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 21 и 22.
![]() Рисунок 21 - Формат ответа на команду "блокировать блок",
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '23'
В случае приема команды на считывание набора блоков (Read multiple blocks) карта VICC должна считать запрошенный(ые) блок(и) и передать обратно их значение в своем ответе.
Если флажок Option_flag установлен в запросе, то карта VICC должна передать обратно состояние безопасности блоков, за которым следует значение блоков, последовательно блок за блоком.
Если флажок Option_flag не установлен в запросе, то карта VICC должна передать обратно только значение блоков.
Блоки нумеруются от '00' до 'FF' (0 - 255).
Число блоков в запросе меньше числа блоков (на один блок), которые карта VICC должна передать обратно в своем ответе.
Пример - Значение '06' в поле "Number of blocks" (число блоков) требует считать 7 блоков. Значение '00' требует считать единичный блок.
Формат запроса на считывание набора блоков показан на рисунке 23.
![]() Рисунок 23 - Формат запроса на считывание набора блоков
Параметр запроса:
UID (дополнительный)
Номер первого блока
Число блоков
Форматы ответа на считывание набора блоков, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 24 и 25.
![]() Рисунок 24 - Формат ответа на считывание набора блоков,
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и код ошибки (Error code), если установлен Error_flag),
если Error_flag не установлен (следующий порядок должен соблюдаться в ответе карты VICC)
Состояние безопасности блока N (если Option_flag установлен в запросе)
Значение блока N
Состояние безопасности блока N+1 (если Option_flag установлен в запросе)
Значение блока N+1
и т.д.,
где N есть первый запрошенный (и переданный обратно) блок.
Код команды = '24'
В случае приема команды на запись набора блоков (Write multiple blocks) карта VICC должна записать запрошенный(ые) блок(и) с данными, содержащимися в запросе, и сообщить об успешной операции в своем ответе.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно свой ответ после завершения операции записи, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и, приняв его, передать обратно свой ответ.
Блоки нумеруются от '00' до 'FF' (от 0 до 255).
Число блоков в запросе меньше числа блоков (на один блок), которые должна записать карта VICC.
Пример - Значение '06' в поле "Число блоков" требует записать 7 блоков. Поле "Данные" должно содержать 7 блоков. Значение '00' в поле "Число блоков" требует записать один блок. Поле "Данные" должно содержать 1 блок.
Формат запроса на запись набора блоков показан на рисунке 26.
![]() Параметр запроса:
UID (дополнительный)
Номер первого блока
Число блоков
Данные блоков (могут повторяться, как показано на рисунке 26)
Форматы ответа на запись набора блоков, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 27 и 28.
![]() Рисунок 27 - Формат ответа на запись набора блоков,
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '25'
В случае приема команды выбора (Select) возможны следующие варианты:
- если UID равен собственному UID карты VICC, то она должна войти в состояние выбора и передать ответ;
- если UID отличается и карта VICC находится в состоянии выбора, то она должна вернуться в состояние готовности (Ready) и не передавать ответ. Команда выбора (Select) должна всегда выполняться в адресном режиме (Addressed mode). (Флажки Select_flag и Address_flag установлены на 0 и 1 соответственно.);
- если DID отличается и карта VICC не находится в состоянии выбора, то она должна оставаться в своем состоянии и не должна передавать ответ.
Формат запроса выбора показан на рисунке 29.
![]() Рисунок 29 - Формат запроса выбора
Параметр запроса:
UID (обязательный)
Форматы ответа на команду выбора, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 30 и 31.
![]() Рисунок 30 - Формат ответа на команду выбора,
если флажок ошибки Error_flag установлен
![]() если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '26'
В случае приема команды на возврат в состояние готовности (Reset to ready) карта VICC должна вернуться в состояние готовности (Ready).
Формат запроса на возврат в состояние готовности показан на рисунке 32.
![]() Рисунок 32 - Формат запроса на возврат
в состояние готовности
Параметр запроса:
UID (дополнительный)
Форматы ответа на команду возврата в состояние готовности, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 33 и 34.
![]() Рисунок 33 - Формат ответа на команду возврата в состояние
готовности, если флажок ошибки Error_flag установлен
![]() готовности, если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '27'
В случае приема запроса на запись идентификатора семейства приложений (Write AFI) карта VICC должна записать значение AFI в свою память.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно свой ответ после завершения операции записи, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и, приняв его, передать обратно свой ответ.
Формат запроса на запись идентификатора семейства приложений AFI показан на рисунке 35.
![]() Рисунок 35 - Формат запроса на запись идентификатора
семейства приложений AFI
Параметр запроса:
UID (дополнительный)
AFI
Форматы ответа на запись идентификатора семейства приложений AFI, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 36 и 37.
![]() Рисунок 36 - Формат ответа на запись идентификатора
семейства приложений AFI, если флажок ошибки
Error_flag установлен
![]() семейства приложений AFI, если флажок ошибки
Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '28'
В случае приема запроса на блокирование идентификатора семейства приложений (Lock AFI) карта VICC должна окончательно блокировать значение AFI в своей памяти.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно свой ответ после завершения операции блокирования, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и, приняв его, передать обратно свой ответ.
Формат запроса на блокирование идентификатора семейства приложений AFI показан на рисунке 38.
![]() Рисунок 38 - Формат запроса на блокирование идентификатора
семейства приложений AFI
Параметр запроса:
UID (дополнительный)
Форматы ответа на блокирование идентификатора семейства приложений AFI, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 39 и 40.
![]() Рисунок 39 - Формат ответа на блокирование идентификатора
семейства приложений AFI, если флажок ошибки
Error_flag установлен
![]() семейства приложений AFI, если флажок ошибки
Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '29'
В случае приема запроса на запись идентификатора формата хранения данных (Write DSFID) карта VICC должна записать значение DSFID в свою память.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно свой ответ после завершения операции записи, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и, приняв его, передать обратно свой ответ.
Формат запроса на запись идентификатора формата хранения данных DSFID показан на рисунке 41.
![]() Рисунок 41 - Формат запроса на запись идентификатора
формата хранения данных DSFID
Параметр запроса:
UID (дополнительный)
Форматы ответа на запись идентификатора формата хранения данных DSFID, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 42 и 43.
![]() Рисунок 42 - Формат ответа на запись идентификатора формата
хранения данных DSFID, если флажок ошибки
Error_flag установлен
![]() хранения данных DSFID, если флажок ошибки
Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '2A'
В случае приема запроса на блокирование идентификатора формата хранения данных (Lock DSFID) карта VICC должна окончательно блокировать значение DSFID в своей памяти.
Если флажок Option_flag не установлен, то карта VICC должна передать обратно свой ответ после завершения операции блокирования, начиная с момента:
t1nom [4352/fc (320,9 мкс), см. 9.1.1] + кратное 4096/fc (302 мкс) с общим допуском +/- 32/fc и самое позднее через 20 мс с момента обнаружения нарастающего фронта конца кадра (EOF) в запросе терминального оборудования VCD.
Если флажок Option_flag установлен, то карта VICC должна ожидать приема EOF от терминального оборудования VCD и, приняв его, передать обратно свой ответ.
Формат запроса на блокирование идентификатора формата хранения данных DSFID показан на рисунке 44.
![]() Рисунок 44 - Формат запроса на блокирование идентификатора
формата хранения данных DSFID
Параметр запроса:
UID (дополнительный)
Форматы ответа на блокирование идентификатора формата хранения данных DSFID, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 45 и 46.
![]() Рисунок 45 - Формат ответа на блокирование идентификатора
формата хранения данных DSFID, если флажок ошибки
Error_flag установлен
![]() формата хранения данных DSFID, если флажок ошибки
Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
Код команды = '2B'
Данная команда (Get system information) позволяет извлекать значение системной информации из карты VICC.
Формат запроса на получение системной информации показан на рисунке 47.
![]() Рисунок 47 - Формат запроса на получение
системной информации
Параметр запроса:
UID (дополнительный)
Форматы ответа на запрос о получении системной информации, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 48 и 49.
![]() Рисунок 48 - Формат ответа на запрос о получении системной
информации, если флажок ошибки Error_flag установлен
![]() информации, если флажок ошибки Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag)
если Error_flag не установлен
Флажок информации
UID (обязательный)
Информационные поля в порядке их соответствующего флажка, как показано на
рисунке 49 и в таблице 9, если их соответствующий флажок установлен.
Таблица 9
Определение информационных флажков
Информация об объеме памяти карты VICC приведена в таблице 10.
Таблица 10
Информация об объеме памяти карты VICC
Размер блока данных выражается числом байтов на 5 бит, что позволяет задавать до 32 байтов, т.е. 256 бит. Это на один байт меньше действительного числа байтов.
Пример - Значение '1F' обозначает 32 байта, значение '00' - 1 байт.
Число блоков в 8 битах позволяет задавать до 256 блоков. Это на один блок меньше действительного числа блоков.
Пример - Значение 'FF' обозначает 256 блоков, значение '00' - 1 блок.
Три старших значащих бита оставлены в резерве для будущего использования и должны быть установлены на 0.
Ссылка на интегральную схему составлена из 8 бит, ее значение определяется производителем ИС.
Код команды = '2C'
С получением запроса команды на получение состояния безопасности набора блоков (Get multiple block security status) карта VICC должна передать обратно состояние безопасности блоков данных.
Блоки нумеруются от '00' до 'FF' (от 0 до 255).
Число блоков в запросе на один меньше, чем число блоков состояния безопасности, которые должна передать карта VICC в своем ответе на запрос.
Пример - Значение '06' в поле "Число блоков" требует, чтобы карта передала 7 блоков состояния безопасности. Значение '00' в поле "Число блоков" требует от карты передачу состояния безопасности единичного блока.
Формат запроса на получение состояния безопасности набора блоков показан на рисунке 50.
![]() Рисунок 50 - Формат запроса на получение
состояния безопасности набора блоков
Параметр запроса:
UID (дополнительный)
Номер первого блока
Число блоков
Форматы ответа на запрос о получении состояния безопасности набора блоков, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 51 и 52.
![]() Рисунок 51 - Формат ответа на запрос о получении состояния
безопасности набора блоков, если флажок ошибки
Error_flag установлен
![]() безопасности набора блоков, если флажок ошибки
Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag),
если Error_flag не установлен
Состояние безопасности блоков (возможен повтор, как показано на рисунке 52)
Формат пользовательской команды является стандартным, и это дает возможность каждому изготовителю карт VICC присваивать однозначный атрибут кодам пользовательских команд.
Код пользовательской команды - комбинация кода команды пользователя и кода изготовителя карты VICC.
Изготовитель карты VICC отвечает за определение параметров запроса пользователя.
Формат запроса пользователя представлен на рисунке 53.
![]() Рисунок 53 - Формат запроса пользователя
Параметр запроса:
Код производителя ИС в соответствии с ИСО/МЭК 7816-6:2004.
Форматы ответа пользователя, если флажок ошибки Error_flag установлен и не установлен, показаны на рисунках 54 и 55.
![]() Рисунок 54 - Формат ответа пользователя, если флажок ошибки
Error_flag установлен
![]() Error_flag не установлен
Параметр ответа:
Error_flag (и Error code, если установлен Error_flag),
если Error_flag не установлен
Параметры пользователя
В настоящем стандарте не определен формат данных команд.
(справочное)
СОВМЕСТИМОСТЬ С ДРУГИМИ СТАНДАРТАМИ НА КАРТЫ
Настоящий стандарт не исключает применение других стандартов на карты VICC, например ИСО/МЭК 7816, а также перечисленных в библиографии.
(справочное)
ПСЕВДОКОД ТЕРМИНАЛЬНОГО ОБОРУДОВАНИЯ ДЛЯ АНТИКОЛЛИЗИИ
Данный псевдокод курсивным шрифтом описывает, как можно реализовать антиколлизию в терминальном оборудовании VCD, используя рекурсивность. В данном случае отсутствует описание механизма коллизии.
; длина адреса должна быть 4 бита
pop (mask, address)
mask = address & mask ; генерирует новую маску
; посылает запрос
mode = anticollision
send_Request (Request_cmd, mode, mask length, mask)
for address = 0 to (2
if no_collision_is_detected then ; произведена инвентаризация VICC
store (VICC_UID)
else ; запомнить, что коллизия была обнаружена
push(mask,address)
endif
pulse_next_pause
next sub_address
; если коллизия была обнаружена, но еще не обработана, функция
; вызывает себя рекурсивно для обработки последней записанной коллизии
if stack_not_empty then poll_loop (sub_address_size)
end poll_loop
main_cycle:
mask = null
address = null
push (mask, address)
poll_loop(sub_address_size)
end_main_cycle
(справочное)
ЦИКЛИЧЕСКАЯ ПРОВЕРКА ЧЕТНОСТИ С ИЗБЫТОЧНОСТЬЮ (CRC)
C.1 Метод обнаружения ошибки, используя CRC
Циклическая проверка четности с избыточностью (CRC) проводится по всем данным, содержащимся в сообщении от начала флажков и до конца данных. Данная проверка CRC используется от терминального оборудования VCD к карте VICC и наоборот (см. таблицу C.1).
Таблица C.1
Определение CRC
Чтобы обеспечить дополнительную защиту от ошибок сдвига, дальнейшее преобразование осуществляется по вычисленному значению CRC. Значение, прикрепленное к сообщению для передачи, является дополнением вычисленного значения циклической проверки четности с избыточностью (CRC). Это преобразование показано в примере, приведенном ниже.
Для проверки принятых сообщений два байта CRC также часто включаются для перерасчета и облегчения использования метода. В этом случае остаток для ожидаемого генерируемого значения CRC составляет 'F0B8'.
Приведем пример, который иллюстрирует метод вычисления CRC на языке C по заданному набору байтов, составляющих сообщение.
#include <stdio.h>
#define POLYNOMIAL 0x8408 // x
#define PRESET_VALUE 0xFFFF
#define CHECK_VALUE 0xF0B8
#define NUMBER_OF_BYTES 4 // Пример: 4 байта данных
#define CALC_CRC 1
#define CHECK_CRC 0
void main()
{
unsigned int current_crc_value;
unsigned char array_of_databytes[NUMBER_OF_BYTES + 2] = {1, 2, 3, 4, 0x91, 0x39};
int number_of_databytes = NUMBER_OF_BYTES;
int calculate_or_check_crc;
int i, j;
calculate_or_check_crc = CALC_CRC;
// calculate_or_check_crc = CHECK_CRC; // Может быть другой пример
if (calculate_or_check_crc == CALC_CRC)
{
number_of_databytes = NUMBER_OF_BYTES;
}
else // проверка CRC
{
number_of_databytes = NUMBER_OF_BYTES + 2;
}
current_crc_value = PRESET_VALUE;
for (i = 0; i < number_of_databytes; i++)
{
current_crc_value = current_crc_value
for (j = 0; j < 8; j++)
{
if (current_crc_value & 0x0001)
{
current_crc_value = (current_crc_value >> 1)
}
else
{
current_crc_value = (current_crc_value >> 1);
}
}
}
if (calculate_or_check_crc == CALC_CRC)
{
current_crc_value = ~current_crc_value;
printf ("CRC согласно ИСО/МЭК 13239 {1, 2, 3, 4} есть '3991'\n");
printf ("Полученный CRC - '%04X'\n", current_crc_value);
printf ("Младший значащий байт (переданный первым): '%02X'\n",
current_crc_value & 0xFF);
printf("Старший значащий байт (переданный вторым): '%02X'\n",
(current_crc_value >> 8) & 0xFF);
printf("Исполнение этой программы при CHECK_CRC дает: 'F0B8'\n");
// current_crc_value is now ready to be appended to the data stream
// (first LSByte, then MSByte)
}
else // check CRC
{
if (current_crc_value == CHECK_VALUE)
{
printf ("Checked CRC is ok (0x%04X)\n", current_crc_value);
}
else
{
printf ("Checked CRC is NOT ok (0x%04X)\n", current_crc_value);
}
}
При выполнении приведенной выше C-программы распечатка содержит следующие сообщения:
CRC согласно ИСО/МЭК 13239 {1, 2, 3, 4} есть '3991';
Полученный CRC - '3991';
Младший значащий байт (переданный первым): '91';
Старший значащий байт (переданный вторым): '39';
Исполнение этой программы при CHECK_CRC дает: 'F0B8'.
C.2 Пример вычисления CRC
Данный пример ссылается на запрос считать единичный блок (Read single block) при считывании блока '0B'.
Режимы, выбранные терминальным оборудованием VCD: одна поднесущая, высокая скорость передачи данных от карты VICC к терминальному оборудованию VCD, запрос по адресу.
Универсальный идентификатор UID карты VICC: 'E0 04 AB 89 67 45 23 01'.
Поэтому запрос состоит из следующих полей:
- флажки: '22';
- код команды: '20';
- UID: 'E0 04 AB 89 67 45 23 01', где 'E0' - старший значащий байт;
- номер блока: '0B';
- CRC: 'BAE3', где 'BA' - старший значащий байт.
CRC вычисляется на полях запроса, собранных в кадре согласно правилам передачи, определенным настоящим стандартом:
'22' '20' '01' '23' '45' '67' '89' 'AB' '04' 'E0' '0B'.
Примечание 1 - UID передается первым в младшем значащем байте.
Примечание 2 - В таблице C.2 дано описание разных этапов вычисления.
Тогда запрос передается следующим образом:
SOF '22' '20' '01' '23' '45' '67' '89' 'AB' '04' 'E0'
'0B' 'E3' 'BA' EOF.
Примечание 1 - CRC передается первым в младшем значащем байте.
Примечание 2 - В каждом байте первым передается младший значащий бит.
Таблица C.2
(справочное)
НАЦИОНАЛЬНЫМ СТАНДАРТАМ РОССИЙСКОЙ ФЕДЕРАЦИИ
Таблица ДА.1
Вернуться в "Каталог нормативных документов"
Источник информации: https://xn--c1ad2agd.xn--p1ai/documents/prod/gost-r_gosudarstvennyj-standart/41/gost_39386.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||