6

16ビットCRCを生成する必要があるデバイスを使用しています。

デバイスのデータシートには、次のCRC定義が必要であると記載されています。

CRCタイプ長さ多項式方向プリセット残差
CRC-CCITT16ビットx16+x12 + x5 + 1フォワードFFFF(16)1D0F(16)

ここで、preset = FFFF(16ビット)およびResidue = 1D0F(16ビット)

CRCアルゴリズムを検索したところ、次のリンクが見つかりました: http ://www.lammertbies.nl/comm/info/crc-calculation.html

両方があります。CRC-CCITT(0xFFFF)CRC-CCITT(0x1D0F)

プリセットと残差の違いは何ですか?

4

3 に答える 3

6

メッセージをフィードする前に、CRC レジスタをプリセットで初期化します。

剰余は、メッセージをフィードした後に CRC レジスタに残すべきものと、その正しい CRC です。

メッセージを送信するだけの場合、剰余値は表示されません。ただし、デバイスがメッセージ + CRC を CRC アルゴリズムで再度実行すると、送信エラーがなければ最終値 0x1D0F が表示されます。


また、デバイスを使用せずにこれを自分で実証することもできます。これは、アルゴリズムが少なくとも CRC に似た動作をしていることを確認するのに役立ちます。

  • まず、メッセージの CRC を計算します。
  • メッセージとその CRC を追加し、全体を新しい CRC 計算に渡します (最初にプリセット値にリセットすることを忘れないでください)。
  • すべてがうまくいけば、CRC レジスタに剰余値が含まれているはずです。

私が今まで見つけた中で最高のCRCの説明はここにあります:

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

于 2008-10-28T03:33:10.003 に答える
0

違いは、アルゴリズムが 2 つの値をどう処理するかにあります。CRC アルゴリズムを自分で調べたところ、非常に単純に見えます。

プリセットは最初の値で、剰余は最後の値と XOR されます。

ここで、プリセットと残差に特定の値を選択する理由はわかりません。

于 2008-10-28T00:47:20.493 に答える
0

何かがおかしい。

16 ビットの CRC を探していますが、24 ビットのプリセットとレジデューを指定しています。見ているデバイスのデータシートへのリンクを投稿してください。

ちなみに、CRC 情報の最良の情報源は、Ross Williams の CRC ガイドです。

編集:ああ、「24ビット」プリセットはテーブルのフォーマットだけだったようです。

于 2008-10-28T00:52:24.133 に答える