ГО С Т Р ИСО/МЭК15693-3— 2011
currenl_crc_value = PRESETJVALUE:
for (i = 0: i < number_of_databytes: i*+)
{
current_crc_vatue = current_crc_value
л
((unsigned int)array_of_databytes(i]):
for (j
=
0:j < 8:j++)
{
if (currerit_crc_value & 0x0001)
{
current_crc_value
=
(current_crc_value »
1)
A
POLYNOMIAL:
}
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} есть 3991W ):
pnntf (’Полученный CRC
- ’%04XVi".
current_crc_value):
printf
С
Младший значащий байт (переданный первый): ’%02Х\п\
current_crc_value & OxFF):
printf("Cmapujuu значащий байт (переданный вторым): ’%02XVi".
(currenl_crc_value » 8) & OxFF):
printf(’Исполнение этой программы при CHECK^CRC дает: ’FOBS-’/)’):
//current_crc_yaiue is novr ready to be appended to the data stream
//(FirstLSByte. then MSByte)
}
else //check CRC
{
if (current_crc_value
==
CHECKJVALUE)
{
printf (’Checked CRC is ok (0x%04X)\n’. current_crc_value):
}
else
{
printf ("Checked CRC is NOT ok (0x%04X)’n‘, current_crc_value):
}
)
При выполнении приведенной выше С-программы распечатка содержит следующие сообщения:
CRC
согласно
ИСОМЭК 13239 {1. 2. 3. 4} есть 399Г:
Полученный CRC — ‘3991
Младший значащий байт (переданный первым): ’91’:
Старший значащий байт (переданный вторым): ’39’:
Исполнение этой программы при CHECK_CRC дает: ’F0BB’.
С.2 Пример вычисления CRC
Данный пример ссылается на запрос считать единичный блок (Read single block) при считывании
блока ’0В’.
Режимы, выбранные терминальным оборудованием VCD: одна поднесущая, высокая скорость передачи
данных от карты VICC к терминальному оборудованию VCD. запрос по адресу.
Универсальный идентификатор UID карты VICC: ‘Е0 04 АВ 89 67 45 23 01’.
Поэтому запрос состоит из следующих полей:
- флажхи: ’22’:
- код команды: ’20’:
- UID: Е0 04 АВ 89 67 45 23 01’. где ’Е0’— старший значащий байт;
- номер блока: ’0В’;
- CRC; ВАЕЗ’. где ВА’ — старший значащий байт.
35