如何理解IR校验和
How to understand IR checksum
我想了解如何计算无品牌空调遥控器的以下数据包的crc。它的最后 4 位似乎是 crc,数据包长 8 个字节。我能理解如何提取数据包,但不能理解 crc。前 3 位是固定的。
数据模式例如 1) 0010 0100 0100 0011 0000 0000 0000 0000 0000 0000 1110
数据模式例如 2) 0010 1000 0101 0011 0000 0000 0000 0000 0000 0000 1101
数据模式例如 3) 0010 1000 0110 0011 0000 0000 0000 0000 0000 0000 1100
数据模式例如 4) 0010 1000 0111 0011 0000 0000 0000 0000 0000 0000 1011
数据模式例如 5) 0010 1000 1000 0011 0000 0000 0000 0000 0000 0000 1010
数据模式例如 6) 0010 1000 1001 0011 0000 0000 0000 0000 0000 0000 1001
数据模式例如 7) 0010 1000 1010 0011 0000 0000 0000 0000 0000 0000 1000
数据模式例如 8) 0010 1000 1011 0011 0000 0000 0000 0000 0000 0000 0111
数据模式 eg 9) 0010 1000 0000 0011 0000 0000 0000 0000 0000 0000 0010
数据模式例如 10) 0010 1000 0001 0011 0000 0000 0000 0000 0000 0000 0001
数据模式例如 11) 0010 1000 0010 0011 0000 0000 0000 0000 0000 0000 0000
数据模式 例如 12) 0010 1000 0011 0011 0000 0000 0000 0000 0000 0000 1111
sample image
我认为这可能只是一个倒数。
将除最后 4 位以外的所有位相加,然后 ((x&1111)^1111)
:
0010 + 0100 + 0100 + 0011 = 1101 -> 0010*
0010 + 1000 + 0101 + 0011 = 10010 -> 1101
0010 + 1000 + 0110 + 0011 = 10011 -> 1100
0010 + 1000 + 0111 + 0011 = 10100 -> 1011
0010 + 1000 + 1000 + 0011 = 10101 -> 1010
0010 + 1000 + 1001 + 0011 = 10110 -> 1001
0010 + 1000 + 1010 + 0011 = 10111 -> 1000
0010 + 1000 + 1011 + 0011 = 11000 -> 0111
0010 + 1000 + 0000 + 0011 = 1101 -> 0010
0010 + 1000 + 0001 + 0011 = 1110 -> 0001
0010 + 1000 + 0010 + 0011 = 1111 -> 0000
0010 + 1000 + 0011 + 0011 = 10000 -> 1111
请注意,第一个样本不正确(应为 1110),但其余样本匹配。我不确定这是我的算法错误,还是输入数据错误(看照片,我没有看到 0010 0100 出现在哪里)。
另请注意,提供的样本非常相似(如果我们排除第一个样本,只有 8、9、10、11 位不同),因此可能有很多方法可以得到 "a solution"。
我想了解如何计算无品牌空调遥控器的以下数据包的crc。它的最后 4 位似乎是 crc,数据包长 8 个字节。我能理解如何提取数据包,但不能理解 crc。前 3 位是固定的。
数据模式例如 1) 0010 0100 0100 0011 0000 0000 0000 0000 0000 0000 1110
数据模式例如 2) 0010 1000 0101 0011 0000 0000 0000 0000 0000 0000 1101
数据模式例如 3) 0010 1000 0110 0011 0000 0000 0000 0000 0000 0000 1100
数据模式例如 4) 0010 1000 0111 0011 0000 0000 0000 0000 0000 0000 1011
数据模式例如 5) 0010 1000 1000 0011 0000 0000 0000 0000 0000 0000 1010
数据模式例如 6) 0010 1000 1001 0011 0000 0000 0000 0000 0000 0000 1001
数据模式例如 7) 0010 1000 1010 0011 0000 0000 0000 0000 0000 0000 1000
数据模式例如 8) 0010 1000 1011 0011 0000 0000 0000 0000 0000 0000 0111
数据模式 eg 9) 0010 1000 0000 0011 0000 0000 0000 0000 0000 0000 0010
数据模式例如 10) 0010 1000 0001 0011 0000 0000 0000 0000 0000 0000 0001
数据模式例如 11) 0010 1000 0010 0011 0000 0000 0000 0000 0000 0000 0000
数据模式 例如 12) 0010 1000 0011 0011 0000 0000 0000 0000 0000 0000 1111
sample image
我认为这可能只是一个倒数。
将除最后 4 位以外的所有位相加,然后 ((x&1111)^1111)
:
0010 + 0100 + 0100 + 0011 = 1101 -> 0010*
0010 + 1000 + 0101 + 0011 = 10010 -> 1101
0010 + 1000 + 0110 + 0011 = 10011 -> 1100
0010 + 1000 + 0111 + 0011 = 10100 -> 1011
0010 + 1000 + 1000 + 0011 = 10101 -> 1010
0010 + 1000 + 1001 + 0011 = 10110 -> 1001
0010 + 1000 + 1010 + 0011 = 10111 -> 1000
0010 + 1000 + 1011 + 0011 = 11000 -> 0111
0010 + 1000 + 0000 + 0011 = 1101 -> 0010
0010 + 1000 + 0001 + 0011 = 1110 -> 0001
0010 + 1000 + 0010 + 0011 = 1111 -> 0000
0010 + 1000 + 0011 + 0011 = 10000 -> 1111
请注意,第一个样本不正确(应为 1110),但其余样本匹配。我不确定这是我的算法错误,还是输入数据错误(看照片,我没有看到 0010 0100 出现在哪里)。
另请注意,提供的样本非常相似(如果我们排除第一个样本,只有 8、9、10、11 位不同),因此可能有很多方法可以得到 "a solution"。