Сумма CRC8 OneWire

Пытаясь понять 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 из 141 должно быть 0xF8, Но 0x31 + 0xC будет 3D, Где ошибка?

1 ответ

Решение

Во-первых, CRC не добавляются так. Вам нужно взять значение регистра после запуска 0x01 через, который дает 0x31и использовать это в качестве значения начального регистра при кормлении 0x41, Вам нужно исключить или 0x41 с 0x31 в качестве первого шага, в результате чего 0x70, Учитывая, что восемь шагов дают вам 0xf8 как и ожидалось.

Однако вы еще не прибыли в OneWire CRC-8. Этот CRC-8 вычисляется в обратном направлении, смещаясь вниз, а не вверх и используя обратный полином (исключая x8). В отличие от того, что вы сделали, и того, что делает этот сайт, который смещается вверх. Более того, сообщение подается в обратном направлении.

Другие вопросы по тегам