CRC8单线的总和

CRC8单线的总和,crc,1wire,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.

试图理解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的crc8必须是0xF8。但是0x31+0xC将是3D的。错误在哪里?

首先,CRC不会这样添加。您需要在运行0x01到之后获取寄存器值,这将给出0x31,并在输入0x41时将其用作起始寄存器值。第一步需要使用0x31对0x41进行异或,结果是0x70。考虑到这一点,八个步骤按预期给出0xf8


然而,您尚未到达单线CRC-8。CRC-8的计算方向相反,向下移动而不是向上移动,并使用多项式(不包括x8反转)。与你所做的和那个网站所做的不同,它正在向上移动。更重要的是,信息是反向输入的。

它起作用了:Thx。1.01110000,每一步右移一位,如果位移出为一,则与多项式进行异或运算。多项式是反的,所以10001100。