ГО С Т РИСО/М ЭК15693-3— 2011
Приложение С
(справочное)
Циклическая проверка четности
с избыточностью (CRC)
С.1 Метод обнаружения ошибки, используя CRC
Циклическая проверка четности с избыточностью (CRC) проводится по всем данным, содержащимся в
сообщении от начала флажков и до конца данных. Данная проверка CRC используется от терминального обору
дования VCD к карте V1CC и наоборот (см. таблицу С.1).
Т а б л и ц а С.1 — Определение CRC
ОпределениеCRC
ТипСЯС
ДлинаПолином
Направление
Начальная
установка
Остаток
ИСО/МЭК 13239
16 битХ,6+ Х12 + Х5 + 1
Обратное
FFFF’
’F0B8’
Чтобы обеспечить дополнительную защиту от ошибок сдвига, дальнейшее преобразование осуществляется
по вычисленному значению CRC. Значение, прикрепленное к сообщению для передачи, является дополнением
вычисленного значения циклической проверки четности с избыточностью (CRC). Это преобразование показано
в примере, приведенном ниже.
Для проверки принятых сообщений два байта CRC также часто включаются для перерасчета и облегчения
использования метода. В этом случав остаток для ожидаемого генерируемого значения CRC составляет
’F0B8’.
Приведем пример, который иллюстрирует метод вычисления CRC на языке С по заданному набору байтов,
составляющих сообщение.
«include <stdio.h>
«define NUMBER_OF_BYTES
« define CALC_CRC
« define CHECK_CRC
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:
inti.j;
calcutate_or_check_crc
=
CALC_CRC:
// calculate_or_check_crc
=
CHECK_CRC:// Может быть другой пример
if (ca!culate_or_check_crc
==
CALC_CRC)
{
number_of_databytes
=
NUMBER_OF_BYTES:
)
else//проверка CRC
{
number_of_databytes
=
NUMBER_OF_BYTES
+
2:
}
tidefine POLYNOMIAL 0x8408//хл16 + хл12 + хл5 * 1
«define PRESET_ VALUE OxFFFF
«define CHECK_VALUE 0xF0B8
4H Пример: 4 байта данных
1
О
34