【发布时间】:2014-11-27 12:32:47
【问题描述】:
我正在使用一个文档记录不完善的系统,其中我需要修改的结构中需要 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,但不确定字节顺序。我的测试代码理所当然地测试了这两种字节序。
[编辑:] 我发现这个其他问题很有帮助: CRC16 and data communications
【问题讨论】:
-
首先,CRC16 与 CRC16 CCITT 不同 - 那么您为什么希望它能够工作呢?其次,this page 表示损坏的实现很常见,因此您可能希望从找到的任何正确实现中找到一两个产生不同结果的结果,并查看它们中的任何一个是否与您的产品使用的相匹配。第三,为什么要使用 [c++]、[c] 和 [embedded] 标签? -1 不诚实地吸引观众!
-
@Tony D,对 C++ 和 C 标签感到抱歉,我删除了它们。至于嵌入式,这是一个诚实的嵌入式平台,我不能说出它的名字,因为我害怕因为提供如此糟糕的支持而羞辱他们。
-
@Bamaco:我的 -1 消失了(虽然嵌入可能是真的,但表面上与所提出的问题无关),但如果他们在整个软件中广泛使用这种 CRC 方法,命名它们可能成为获得实际经验和帮助的最实用的方式......
-
@Bamaco 是的 - 我对你有感觉 - 情况很糟糕。最终可能不得不以某种方式从他们那里“社会工程”出精确的 CRC 代码/算法......祝你好运!
-
尝试将您的数据输入到在线 CRC 计算器中,例如 this one。如果您可以将格式正确的数据剪切并粘贴到该字段中,那么它将自动计算各种 CRC 算法。
标签: embedded reverse-engineering crc