CRC について考慮すべき多くの変数があります。
Polynomial
No of bits (16 or 32)
Normal (LSB first) or Reverse (MSB first)
Initial value
How the final value is manipulated (e.g. subtracted from 0xffff), or is a constant value
典型的な CRC:
LRC: Polynomial=0x81; 8 bits; Normal; Initial=0; Final=as calculated
CRC16: Polynomial=0xa001; 16 bits; Normal; Initial=0; Final=as calculated
CCITT: Polynomial=0x1021; 16 bits; reverse; Initial=0xffff; Final=0x1d0f
Xmodem: Polynomial=0x1021; 16 bits; reverse; Initial=0; Final=0x1d0f
CRC32: Polynomial=0xebd88320; 32 bits; Normal; Initial=0xffffffff; Final=inverted value
ZIP32: Polynomial=0x04c11db7; 32 bits; Normal; Initial=0xffffffff; Final=as calculated
最初に行うことは、たとえば最後のバイトを変更して、いくつかのサンプルを取得することです。これは、CRC のバイト数を把握するのに役立ちます。
これは「自家製」のアルゴリズムですか?この場合、時間がかかる場合があります。それ以外の場合は、標準アルゴリズムを試してください。
最後のバイトの msb または lsb を変更してみて、CRC がどのように変化するかを確認してください。これにより、方向が示されます。
さらに困難にするために、通信媒体 (プロトコル) に影響を与えないように CRC を操作する実装があります。
RFIDに関するあなたのコメントから、CRCが通信関連であることを暗示しています。一部のシステムでは CCITT も使用されますが、通常は CRC16 が通信に使用されます。
一方、これが UHF RFID タグ付けである場合、CRC 方式はいくつかあります - 5 ビットのものと 16 ビットのものです。これらは、ISO 規格および IPX データ シートに記載されています。
IPX: Polynomial=0x8005; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6B: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6C: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
Data must be padded with zeroes to make a multiple of 8 bits
ISO CRC5: Polynomial=custom; 5 bits; Reverse; Initial=0x9; Final=shifted left by 3 bits
Data must be padded with zeroes to make a multiple of 8 bits
EPC class 1: Polynomial=custom 0x1021; 16 bits; Reverse; Initial=0xffff; Final=post processing of 16 zero bits
これがあなたの答えです!!!!
ログを調べた結果、CRC は CCITT のものです。最初のバイト 0xd6 は CRC から除外されます。