Расчет CRC16 не совсем правильный

Я работаю с http://www.ross.net/crc/download/crc_v3.txt и с использованием 16-битного полинома 0x8005.

Мое сообщение 0xAE.

Этот сайт http://www.lammertbies.nl/comm/info/crc-calculation.html генерирует правильный расчет на основе других данных, которые у меня есть.

Это результат моего кода, описывающий каждый шаг.

Poly: 1010000000000001
Initial message: 01110101
Message: 011101010000000000000000 24
crcreg: 0000000000000000
crcreg: 0000000000000001
crcreg: 0000000000000011
crcreg: 0000000000000111
crcreg: 0000000000001110
crcreg: 0000000000011101
crcreg: 0000000000111010
crcreg: 0000000001110101
crcreg: 0000000011101010
crcreg: 0000000111010100
crcreg: 0000001110101000
crcreg: 0000011101010000
crcreg: 0000111010100000
crcreg: 0001110101000000
crcreg: 0011101010000000
crcreg: 0111010100000000
crcreg: 1110101000000000
crcreg: 1101010000000000  //Here we had a 1 pop off the shift reg, so we XOR in the poly.
^poly:  1010000000000001
=crcreg:0111010000000001

crcreg: 1110100000000010
crcreg: 1101000000000100
^poly:  1010000000000001
=crcreg:0111000000000101

crcreg: 1110000000001010
crcreg: 1100000000010100
^poly:  1010000000000001
=crcreg:0110000000010101

crcreg: 1100000000101010
crcreg: 1000000001010100
^poly:  1010000000000001
=crcreg:0010000001010101

CRC:    0010000001010101

4 aa
R-CRC:  1010101000000100   //Reversed, just in case MSB/LSB display got hosed.

55 20

Ожидаемый CRC16 - 0xBC81


person Paul Nathan    schedule 21.01.2011    source источник


Ответы (1)


Ваш полином перевернут: вам нужны коэффициенты для более высоких степеней x, которые будут представлены крайними левыми битами. Попробуйте поменять местами биты вашего многочлена (представив его как 1000000000000101), и я думаю, вы получите правильный результат.

Вам также может потребоваться реверсировать ввод и вывод, в зависимости от того, как определена конкретная реализация CRC, которую вы используете (LSB-first или MSB-first).

person interjay    schedule 21.01.2011
comment
+1. Этот CRC16 отмечен в самом конце раздела 15: входные данные отражаются (они уже отражены), и выходные данные также отражаются (т.е. ожидайте 1000000100111101). Но полином не должен отражаться. - person Matthew Slattery; 22.01.2011
comment
Реализация CRC, которую я подбираю, - это сначала LSB. - person Paul Nathan; 22.01.2011