gpt4 book ai didi

microcontroller - CRC16 校验和 : HCS08 vs. Kermit 与 XMODEM

转载 作者:行者123 更新时间:2023-12-01 19:11:04 29 4
gpt4 key购买 nike

我正在尝试向 Motorola HCS08 微 Controller 应用程序添加 CRC16 错误检测。但我的校验和不匹配。一online CRC calculator提供了我在 PC 程序中看到的结果和我在微型计算机上看到的结果。

它将微 Controller 的结果称为“XModem”,将 PC 的结果称为“Kermit”。

这两个古老协议(protocol)指定 CRC16 的使用方式有什么区别?

最佳答案

您可以使用相同的基本代码库实现 16 位 IBM、CCITT、XModem、Kermit 和 CCITT 1D0F。请参阅http://www.acooke.org/cute/16bitCRCAl0.html它使用 http://www.barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code 中的代码

下表显示了它们的不同之处:

name    polynomial  initial val  reverse byte?  reverse result?  swap result?
CCITT 1021 ffff no no no
XModem 1021 0000 no no no
Kermit 1021 0000 yes yes yes
CCITT 1D0F 1021 1d0f no no no
IBM 8005 0000 yes yes no

其中“反转字节”表示每个字节在处理之前进行位反转; ‘reverse result’表示将16位结果处理后进行位反转; ‘swap result’表示处理后结果中的两个字节被交换。

以上所有内容均通过测试向量针对 http://www.lammertbies.nl/comm/info/crc-calculation.html 进行了验证(如果这是错误的,我们都迷失了......)。

因此,在您的特定情况下,您可以通过对每个字节进行位反转、对最终结果进行位反转,然后交换结果中的两个字节,将 XModem 的代码转换为 Kermit。

[我相信,但尚未检查或计算出细节,反转每个字节相当于反转多项式(加上一些额外的细节)。这就是为什么您会在不同的地方看到对于基本相同的算法有截然不同的解释。

此外,上述方法效率不高,但适合测试。如果你想要高效,最好的办法是将上面的内容转换为查找表。]

编辑我上面所说的CCITT记录在RevEng catalogue中作为 CCITT-FALSE。有关详细信息,请参阅上面链接中我的博客文章的更新。

关于microcontroller - CRC16 校验和 : HCS08 vs. Kermit 与 XMODEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455257/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com