【问题标题】:Sum of CRC8 OneWireCRC8 OneWire 之和
【发布时间】:2014-09-22 19:26:52
【问题描述】:

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

现在需要crc8141 第一个加上第二个。使用在线计算器https://ghsi.de/CRC/index.php?Polynom=100110001&Message=141 我看到141 中的crc8 必须是0xF8。但是0x31 + 0xC 将是3D。哪里出错了?

【问题讨论】:

    标签: crc 1wire


    【解决方案1】:

    首先,CRC 不是这样添加的。您需要在运行0x01 后获取寄存器值,得到0x31,并在输入0x41 时将其用作起始寄存器值。您需要将0x410x31 排他或作为第一步,得到0x70。鉴于此,八个步骤可以按预期为您提供0xf8

    但是,您还没有到达 OneWire CRC-8。 CRC-8 是按相反的方向计算的,向下移动而不是向上移动,并使用反转的多项式(不包括 x8)。与您所做的和该网站所做的不同,后者正在向上移动。更重要的是,消息是向后馈送的。

    【讨论】:

    • 成功了 :) 谢谢。 1. 011100000 &lt;&lt; 1 = 111000000 2. 111000000 ^ 100110001 = 011110001 &lt;&lt; 1 = 111100010 3. 111100010 ^ 100110001 = 011010011 &lt;&lt; 1 = 110100110 4. 110100110 ^ 100110001 = 010010111 &lt;&lt; 1 = 100101110 5. 100101110 ^ 100110001 = 000011111 &lt;&lt; 1 = 000111110 6. 000111110 &lt;&lt; 1 = 001111100 7. 001111100 &lt;&lt; 1 = 011111000 8. 011111000 &lt;&lt; 1 = 111110000 == 11111000 关于 OneWire。据我了解,而不是左移 1,我必须右移 8?如果原始消息是 123456789,对于 OneWire,它必须是 987654321。但是poly怎么办?
    • 对于每一步右移一位,如果移出的位为 1,则与多项式异或。多项式反转,所以10001100.
    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2021-12-19
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多