1

嗨,我一直在尝试为要为其编写软件接口的设备计算 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

使用revengwithreveng -w 16 -s和上述数据集我得到:

宽度=16 多边形=0x1021 初始化=0x1e69 优化=真 refout=真 xorout=0x0000 检查=0x3da6 名称=(无)

当我拦截来自控制器的 a 命令时,我得到:

X: 96 10 01 E1 (EE) 01 FF 10 17 | 5F A0 | FE 10 06 E1 96 FE -- 命令前的最后一行
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

使用revengwithreveng -w 16 -s和上述数据集我得到:

宽度=16 多边形=0x1021 初始化=0xd313 优化=真 refout=真 xorout=0x0000 检查=0x295f 名称=(无)

多项式是相同的,但 init 和 check 不同,很抱歉,很长的帖子,但这里是我的问题的摘要:

1)说设备使用相同的多项式但不同的init并检查控制器是否常见?

2) 来自设备的常量计数字符串是否用于偏移用于计算校验和的变量字节?如果是这样,这种机制称为什么,可以使用哪些方法来得出计数和字节之间的关系?

3)我是在正确的轨道上还是在途中迷路了?

感谢您花时间阅读本文,非常感谢您朝着正确的方向前进。

4

1 回答 1

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"
于 2013-05-09T03:56:44.373 回答