Embedded 从CRC16和数据集逆向工程CRC16算法
我使用的是一个缺乏文档记录的系统,其中我需要修改的结构中需要CRC16。 除非我提供正确的校验和,否则修改不会生效 技术支持人员表示他们使用的是标准CRC16,但使用CRC16 CCITT不会给出结果 我有一小段数据和它应该具有的校验和 有人能帮我找到适合我的数据集的CRC16参数(多项式、初始值)吗 还有一件事。在所讨论的平台上,每个地址都用16位字来组织地址,所以我尝试了原始字节顺序和反向字节顺序Embedded 从CRC16和数据集逆向工程CRC16算法,embedded,reverse-engineering,crc,Embedded,Reverse Engineering,Crc,我使用的是一个缺乏文档记录的系统,其中我需要修改的结构中需要CRC16。 除非我提供正确的校验和,否则修改不会生效 技术支持人员表示他们使用的是标准CRC16,但使用CRC16 CCITT不会给出结果 我有一小段数据和它应该具有的校验和 有人能帮我找到适合我的数据集的CRC16参数(多项式、初始值)吗 还有一件事。在所讨论的平台上,每个地址都用16位字来组织地址,所以我尝试了原始字节顺序和反向字节顺序 Data Set # 1 crc 0xb19f data @b306: 7a
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类型
[编辑:]
我发现另一个问题很有帮助:
原来我得到了嵌入式芯片制造商的回复
在我看来,它不像是标准的CRC16,我对无法确定正在使用的CRC算法并不感到惊讶。在您自己的答案中链接的代码似乎有很多不相关的代码,但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-T V.42、以太网、SATA、MPEG-2、Gzip、PKZIP、POSIX cksum、PNG、ZMODEM中所用)
稍后编辑: 我在这个网站上找到了它:经过大量的尝试和错误。不幸的是,该站点以ASCII格式获取数据,因此我使用将8字节的样本转换为文本(这会产生“
z±tDt[
”-注意,该字符串包含一些非打印字符,但从站点复制和粘贴这些字符似乎包括它们,因为它报告了8字节,而此处的字符串为6-不要从本文复制和粘贴)
生成数据示例中给出的结果的任何配置方式如下所示:
设置如下:
- 点击CRC-CCITT
- 将“初始值”设置为FFFF后,单击“转换!”(转换为“非直接”转换84CF的值)
- 将“最终异或”设置为FFFF
- 选中“反向数据字节”
- 以ASCII输入数据
- 单击“计算!”按钮