2011-01-21 50 views
1

私はhttp://www.ross.net/crc/download/crc_v3.txtから作業しており、16ビットの多項式0x8005を使用しています。CRC16の計算が正しくない

私のメッセージは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

答えて

2

です:あなたは、一番左のビットで表現されるように、xの高出力のための係数を必要とします。多項式のビット(1000000000000101)を逆にしてみてください。正しい結果が得られると思います。

CRCの特定の実装が定義されている方法(LSBファーストまたはMSBファースト)に応じて、入力と出力を逆にする必要があります。

+0

+1。このCRC16は、セクション15の最後に記載されたものです。入力が反映されており、出力も反映されています(つまり、 '1000000100111101'が必要です)。しかし多項式は反映されてはならない。 –

+0

私がマッチングしているCRCの実装は、LSBが最初です。 –

関連する問題