Calcolo CRC16 che non va
Domanda
sto lavorando da http://www.ross.net/crc/download/ crc_v3.txt , e utilizzando il 16 bit 0x8005
polinomiale.
Il mio messaggio è 0xAE
.
Questo sito http://www.lammertbies.nl/comm/info/ crc-calculation.html genera un calcolo corretto dagli altri dati che ho.
Questa è l'uscita dal mio codice, descrivendo ogni passo.
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
Il CRC16 atteso è 0xBC81
Soluzione
Il polinomio è invertito: È necessario i coefficienti per alte potenze di x per essere rappresentati dai bit più a sinistra. Provare a invertire i bit del polinomio (che rappresenta il più 1000000000000101) e penso che si otterrà il risultato corretto.
Si può anche avere bisogno di invertire il vostro ingresso e di uscita, a seconda di come la particolare implementazione di CRC che si sta utilizzando è definito (LSB-primo o MSB-prima).