您好我一直在尝试为我想要编写软件界面的设备计算CRC。为简单起见,我会说X是设备而Y是硬件控制器。我正在寻找正确方向的推动我相信我在正确的轨道上只是有点困惑几点。
当设备空闲时,它每隔2秒左右发送以下数据串,看起来像是以十六进制计数:| |
之间的2个字节是我假设的CRC。 (XX)是变化的字节。
X: 96 10 01 E1 (E4) 01 FF 10 17 | F7 EC | 10 06 E1 96 FE X: 96 10 01 E1 (E6) 01 FF 10 17 | 7F FA | 10 06 E1 96 FE X: 96 10 01 E1 (E8) 01 FF 10 17 | C7 9B | 10 06 E1 96 FE X: 96 10 01 E1 (EA) 01 FF 10 17 | 4F 8D | FE 10 06 E1 96 FE X: 96 10 01 E1 (EC) 01 FF 10 17 | D7 B6 | FE 10 06 E1 96 FE X: 96 10 01 E1 (EE) 01 FF 10 17 | 5F A0 | FE 10 06 E1 96 FE
将reveng
与reveng -w 16 -s
和以上数据集一起使用:
width=16 poly=0x1021 init=0x1e69 refin=true refout=true xorout=0x0000 check=0x3da6 name=(none)
当我拦截来自控制器的命令时,我得到:
X: 96 10 01 E1 (EE) 01 FF 10 17 | 5F A0 | FE 10 06 E1 96 FE -- Last line before command Y: E1 10 01 96 (22) 05 01 C0 A8 35 00 10 17 |0B B8| FE 10 06 96 E1 FE
其中(22)是修饰语|0B B8|
是CRC。 22是如何从E4派生出来的?是另一个CRC?
当我多次发送同一命令时,我拦截了以下内容:
Y: E1100196220501C0A8350010170BB8FE100696E1FE Y: E11001962A0501C0A835001017C1C7FE100696E1FE Y: E11001962E0501C0909400101753C8FE100696E1FE Y: E1100196300501809094001017C3EEFE100696E1FE Y: E1100196360501C090940010170D48FE100696E1FE Y: E11001962A0501C09094001017B6F7FE100696E1FE Y: E11001962A0501C09094001017B6F7FE100696E1FE
将reveng
与reveng -w 16 -s
和以上数据集一起使用:
width=16 poly=0x1021 init=0xd313 refin=true refout=true xorout=0x0000 check=0x295f name=(none)
多项式是相同的,但初始化和检查有所不同,对于长篇帖子很抱歉,但这里是我的问题摘要:
1)设备使用相同的多项式但是不同的init并检查控制器是否常见?
2)来自用于偏移用于计算校验和的变量字节的设备的常量计数字符串是什么?如果是这样,这个机制被调用了什么,可以用什么方法来推导计数和字节之间的关系?
3)我是在正确的轨道上还是在途中迷路了?
感谢您花时间阅读本文,并且非常感谢您朝着正确的方向迈进。
答案 0 :(得分:2)
删除X和Y序列的第一个字节,然后你将得到两个:
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"
即便:
% reveng -w 16 -s 100196220501C0A8350010170BB8 1001962A0501C0A835001017C1C7 1001962E0501C0909400101753C8 100196300501809094001017C3EE 100196360501C090940010170D48 1001962A0501C09094001017B6F7
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"
% reveng -w 16 -s 1001E1E401FF1017F7EC 1001E1E601FF10177FFA 1001E1E801FF1017C79B 1001E1EA01FF10174F8D 1001E1EC01FF1017D7B6 1001E1EE01FF10175FA0
width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e name="X-25"