我正在尝试找出对以下数据流的错误检查。该数据来自用于对电热水器进行编程的商用遥控器。
我广泛地研究了大多数的IR协议(RC5,NEC等),从我可以看出它不适合任何协议。然而,我不能确认它不是IrDA。
我使用的硬件是一个标准的Vishay IR 38 the接收器,连接到运行WinLIRC的旧PC上,所以我可以看到原始的脉冲/空间序列,并通过各种测试/调整确认了配置中的基本参数(如时间戳,分辨率到秒),数据从IR出来为10位,一个起始位,8位数据字节和一个停止位。
我的一个症结是我认为是错误校验的最后一个字节,我之所以知道这一点,是因为我已经设置了一个测试装置来发送具有不同错误校验的数据,而加热器不接受它,并且使用记录的正确值被接受。
下面是数据流,然后是两次迭代,但每种情况的时间戳都提前了1秒。我可以看到错误校验之间在数学上的一些相似之处,但我已经尝试了所有8位CRC/校验和XOR,加,减等解码方法,也使用了reveng,但没有产生答案。
这方面的任何帮助都是非常感谢的!
第一轮数据
二进制十六进制十进制纸币
11111111 FF 255
00000000 0 0
00001111 F 15
10110011 B3 179
01001100 4C 76
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000000 0 0
00000011 3 3
00000000 0 0
00000000 0 0
00000011 3 3
00000010 2小时
00010010 12 18分钟
00000000 0 0秒
01101011 6B107 CRC校验?
第二轮数据与第一轮相同,直到时间戳秒数:-
00000001 11秒
00110101 35 53 CRC校验?
第3轮数据与第1轮相同,直到时间戳秒:-
00000010 2秒11010111 D7 215CRC校验?
第4轮数据与第1轮相同,直到时间戳秒数:-
00000011 33秒
10001001 89 137 CRC校验?
第5轮数据与第1轮相同,直到时间戳秒:-
00000100 4 4秒
00001010 A 10 CRC校验?
第6轮数据与第一轮相同,直到时间戳秒:-
00000101 5 5秒
01010100 54 84 CRC校验?
第7轮数据与第一轮相同,直到时间戳分钟:-
00011000 18 24分钟
00001101 D 13秒
01110001 71113 CRC校验?
第8轮数据与第一轮相同,直到时间戳分钟:-
00011011 1B 27分钟
00111011 3B 59秒
01000111 47 71 CRC校验?
发布于 2017-12-02 00:22:58
CRC RevEng可以很容易地找到原始问题集的解决方案。这是一个紧凑的Bash命令行:-
reveng -w 8 -s ff000fb34c00000003000000000003000000000003000000000003000000\
00000300000000000300000000000300000302\
{12006b,120135,1202d7,120389,12040a,120554,180d71,1b3b47}
它返回:-
width=8 poly=0x31 init=0xa5 refin=true refout=true xorout=0x00 check=0x67 residue=0x00 name=(none)
由于所有流的长度相同,CRC RevEng不能同时计算初始化和异或输出。xorout=0x00
是一种猜测,它迫使init=0xa5
正确地计算问题集中的流。长度不是52个字节的流需要这两个参数,找到一个参数就可以计算它们。
poly=0x31
在CRC-8/MAXIM
下的目录中只出现一次,这也会反映出来,但有init=0x00
;如果这确实是正在使用的算法,那么init=0xa5
就是一个不应该出现在算法中的字节图像(即前n个字符不会出现在CRC-8/MAXIM
中);不幸的是,我找不到任何与初始值0xa5
相等的数据流前缀。
如果您需要代码来计算这些CRC,可以使用其他软件包将CRC RevEng输出的Rocksoft™模型转换为C语言,例如pycrc或Mark Adler的CRC。
发布于 2017-12-02 03:19:01
谢谢,谢谢!你做到了!太棒了!我又试了一次复仇,但仍然什么也得不到,甚至抄袭了你的例子。所以我在这个网站上试了一下:
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
包括最后一个字节,还有你找到的poly和init和bingo!
我的数据流总是相同的大小,52字节。
再次,非常感谢所有帮助我格式化等的人,当然还有答案!
AaronT。
https://stackoverflow.com/questions/47532262
复制相似问题