我使用的是一个文档贫乏的系统,其中需要在我需要修改的结构中使用CRC16。除非我提供正确的校验和,否则修改不会生效。
技术支持已经表明他们使用的是标准的CRC16,但是使用CRC16 CCITT不会给我结果。
我有一小部分数据和它应该有的校验和。
有人能帮我找到合适的CRC16参数(多项式,初始值)来匹配我的数据集吗?
还有一件事。在所讨论的平台上,每个地址用16位字来组织地址,所以我尝试了原始字节顺序和反向字节顺序。
Data Set # 1
crc 0xb19f
data @b306: 7a b1 74 44 9f 84 74 5b
length 8 bytes
Data Set # 2
crc 0x447b
data @0036 00 43 e2 05 5b 03 00 02 00 16 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
12 c0 00 00 00 07 f7 ff 3f e5 ff ff 3f ff 75 30
3a 98 00 01 00 9d 00 0f 00 09 00 0a 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 0a 80 0f
47 44 09 6d 0a 35 09 c4 f0 00 00 40 10 00 00 01
07 d0 27 10 00 00 ff 38 00 5a ff 06 0a fd 00 05
length 128 bytes我知道我现在知道什么,当我选择没有提供太多技术支持的组织时,我选择的很差,我现在知道了。
编辑:处理器是~ 8051,但不确定是endianness。当然,我的测试代码会测试这两种类型的endianness。
编辑:我发现另一个问题很有用:CRC16与数据通信
发布于 2014-10-03 18:39:26
在您自己的答案中链接的代码似乎包含许多不相关的代码,但是16位CRC函数提到了两个多元素:
x^16+x^5+x^2+1.
x^16+x^12+x^5+1但是,提到这些的评论表明,作者还没有意识到其中一个只是另一个的相反版本,这可能就是为什么在文档上存在混乱。无论哪种方式,它都是CRC-16-CCITT多项式(如X.25,V.41,HDLC,XMODEM,蓝牙,SD,许多其他;称为CRC-CCITT)。当然,这并不是说它的实现是正确的,也不是说它的评论是正确的。
它看起来像是多个来源的代码的粗糙集合。你必须想知道,一个供应商依赖的代码和算法的未知来源和明显的混乱!
顺便说一句,代码中的32位CRC使用CRC-32多项式(如ISO 3309、ANSI X3.66、FIPS PUB 71、FED-STD-1003、ITU V.42、以太网、SATA、MPEG-2、Gzip、PKZIP、POSIX cksum、PNG、ZMODEM)。
稍后编辑:
我已经找到了,使用这个网站:http://www.zorc.breitbandkatze.de/crc.html和大量的尝试和错误。不幸的是,该站点接受ASCII中的数据,所以我使用http://www.rapidtables.com/convert/number/hex-to-ascii.htm将8字节的示例转换为文本(这将产生"z±tDt[“--注意字符串包含一些非打印字符,但是从站点复制和粘贴它们似乎包括了它们,因为它报告了8个字节,而这里的字符串是6-不要从这个帖子复制和粘贴它们)。
生成数据示例中给出的结果的配置如下所示:

设置如下:
发布于 2014-10-03 12:59:03
结果,我从嵌入式芯片制造商那里得到了答复。
这里的代码链接
在我看来,这并不像一个标准的CRC16,我对收入无法确定正在使用的CRC算法并不感到惊讶。
https://stackoverflow.com/questions/26162188
复制相似问题