CRC8 OneWire的总和

时间:2014-09-22 19:26:53

标签: crc 1wire

试图理解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

现在需要crc8 141第一个加上第二个。使用在线计算器https://ghsi.de/CRC/index.php?Polynom=100110001&Message=141,我看到crc8的{​​{1}}必须为141。但0xF8将为0x31 + 0xC。错误在哪里?

1 个答案:

答案 0 :(得分:0)

首先,CRC不会这样添加。在运行0x01之后,您需要获取寄存器值,这将给出0x31,并在馈送0x41时将其用作起始寄存器值。您需要排除 - 或0x410x31作为第一步,结果为0x70。鉴于此,八个步骤可以为您提供0xf8

但是你还没有到达OneWire CRC-8。 CRC-8以相反方向计算,向下移动而不是向上移动并使用多项式(不包括x 8 )反转。不同于你所做的和网站的做法,这一点正在向上移动。更重要的是,消息是向后反馈的。