Предустановка CRC и остаток - PullRequest
6 голосов
/ 28 октября 2008

Я работаю с устройством, которое требует от меня генерировать 16-битный CRC.

В спецификации устройства указано следующее определение CRC:

CRC Type    Length    Polynomial           Direction  Preset      Residue
CRC-CCITT   16 bits   x16 + x12 + x5 + 1   Forward    FFFF (16)   1D0F (16)

, где предустановка = FFFF (16 бит) и остаток = 1D0F (16 бит)

Я искал алгоритм CRC и нашел эту ссылку: http://www.lammertbies.nl/comm/info/crc-calculation.html

На нем есть оба. CRC-CCITT (0xFFFF) CRC-CCITT (0x1D0F)

В чем разница между пресетом и остатком?

Ответы [ 3 ]

5 голосов
/ 28 октября 2008

Вы инициализируете регистр CRC с помощью предустановки перед подачей сообщения.

Остаток - это то, что следует оставить в регистре CRC после передачи сообщения плюс его правильный CRC.

Если вы просто хотите отправить сообщение, вы не увидите значение остатка. Но когда устройство снова выполнит ваше сообщение + CRC через алгоритм CRC, оно увидит окончательное значение 0x1D0F, если не было ошибок передачи.


Вы также можете продемонстрировать это себе, не подключая устройство. Это может помочь вам подтвердить, что ваш алгоритм выполняет что-то, что, по крайней мере, напоминает CRC.

  • Сначала рассчитайте CRC для вашего сообщения.
  • Добавьте ваше сообщение и этот CRC, а затем пропустите все через новое вычисление CRC (не забудьте сначала сбросить до заданного значения).
  • Если все прошло успешно, ваш регистр CRC должен содержать значение остатка.

Лучшее объяснение CRC, которое я когда-либо нашел, здесь:

https://archive.org/stream/PainlessCRC/crc_v3.txt

0 голосов
/ 28 октября 2008

Что-то здесь не так.

Вы ищете 16-битный CRC, но вы указали 24-битный пресет и остаток. Опубликуйте ссылку на таблицу для устройства, которое вы просматриваете.

Кстати, лучшим источником информации о CRC является Руководство Росса Уильямса по CRC.

edit: А-а-а, я вижу, что «24-битная» предустановка была просто форматированием таблицы.

0 голосов
/ 28 октября 2008

Разница в том, что алгоритм делает с двумя значениями. Я только что посмотрел на алгоритм CRC, и он выглядит довольно просто.

Предустановка - это значение, с которого она начинается, а остаток равен XOR со значением в конце.

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

...