有许多的因素需要考虑的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之一。 CRC的第一个字节0xd6被排除在外。
你可以得到你想要的任何数据的校验和? – 2008-09-29 16:59:12
不,我不能。我可以使用与设备交谈的现有应用程序更改部分数据并生成校验和,但这不是整个数据包。 – dpavlin 2008-09-29 17:14:04
CCITT的标准指定与0x0000的XOR?那不总是一个没有操作? – unwind 2008-10-20 08:12:18