0

理解しようとしていますcrc8。これは私の計算です:

poly 100110001 #  OneWire

bin 00000001 #  1

1.  000000010 << 1 = 000000100
2.  000000100 << 1 = 000001000
3.  000001000 << 1 = 000010000
4.  000010000 << 1 = 000100000
5.  000100000 << 1 = 001000000
6.  001000000 << 1 = 010000000
7.  010000000 << 1 = 100000000
8.  100000000 ^ 100110001 = 000110001 << 1 = 001100010 == 00110001 #  8 digits

crc8 = 0x31 #  online calc true

bin 01000001 #  41

1.  010000010 << 1 = 100000100
2.  100000100 ^ 100110001 = 000110101 << 1 = 001101010
3.  001101010 << 1 = 011010100
4.  011010100 << 1 = 110101000
5.  110101000 ^ 100110001 = 010011001 << 1 = 100110010
6.  100110010 ^ 100110001 = 000000011 << 1 = 000000110
7.  000000110 << 1 = 000001100
8.  000001100 << 1 = 000011000 == 00001100

crc8 = 0xC #  online calc true

今必要なcrc8141は最初のものと2番目のものです。オンライン計算機の使用https://ghsi.de/CRC/index.php?Polynom=100110001&Message=141crc8は で141なければならないことがわかります0xF8。しかし、0x31 + 0xCなります3D。エラーはどこにありますか?

4

1 に答える 1

0

まず、CRC はそのように追加しません。を実行した後にレジスタ値を取得する必要があります0x01。これにより、 が得られ、それを0x31を供給するときの開始レジスタ値として使用されます0x41。最初のステップとして を排他的論理和にする必要があり、結果は に0x41なります。それを考えると、8 つのステップで期待どおりの結果が得られます。0x310x700xf8

ただし、OneWire CRC-8 にはまだ到達していません。その CRC-8 は逆方向に計算され、上ではなく下にシフトし、逆の多項式 ( x 8を除く) を使用します。あなたが行ったことと、そのウェブサイトが行っていることの両方とは異なり、シフトアップしています。さらに、メッセージは逆方向にフィードされます。

于 2014-09-23T02:56:18.127 に答える