Попытка понять crc8
. Это мои расчеты:Сумма CRC8 OneWire
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
. Где ошибка?
Это сработало :) Thx. '1. \t 011100000 << 1 = 111000000 2. \t 111000000^100110001 = 011110001 << 1 = 111100010 3. \t 111100010^100110001 = 011010011 << 1 = 110100110 4. \t 110100110^100110001 = 010010111 << 1 = 100101110 5. \t 100101110^100110001 = 000011111 << 1 = 000111110 6. \t 000111110 << 1 = 001111100 7. \t 001111100 << 1 = 011111000 8. \t 011111000 << 1 = 111110000 == 11111000' О-Wire , Как я понимаю, вместо сдвига влево 1, я должен перейти вправо 8? Если исходное сообщение «123456789», для OneWire оно должно быть «987654321». Но что делать с поли? – cask
Для каждого шага сдвиг вправо один, эксклюзивный с полиномом, если бит сдвинут, один. Полином обратный, поэтому '10001100'. –