对于 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 与通信相关。通常 CRC16 用于通信,但 CCITT 也用于某些系统。
另一方面,如果这是 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 中排除。