You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法复现Maxim DOW CRC算法应用笔记中的示例结果求助

解决Maxim应用笔记27中CRC8计算匹配0xA2的问题

关键参数匹配

Maxim iButton/DS18B20使用的CRC8算法参数和多数在线工具默认值差异较大,必须严格设置以下参数才能得到0xA2的结果:

  • 生成多项式:X^8 + X^5 + X^4 + 1(二进制100110001,字节表示为0x31,需去掉最高位的1)
  • 初始CRC值:0x00
  • 输入字节处理:不反转位序(按高位到低位依次处理)
  • 输出CRC值:不反转位序
  • 最终异或值:0x00

验证示例(ROM数据为8字节0x00)

应用笔记中使用的测试数据是8字节全0的ROM代码,计算步骤如下:

  1. 初始化CRC寄存器为0x00
  2. 对每个字节(共8个0x00)执行CRC计算:
    • 将当前CRC值与输入字节异或
    • 对结果循环8次:若最高位为1,则CRC值左移1位后异或0x31;否则仅左移1位
  3. 8个字节处理完成后,CRC寄存器的值即为0xA2

可直接复用的C语言实现

uint8_t crc8_maxim(uint8_t *data, uint8_t len) {
    uint8_t crc = 0x00;
    uint8_t i;
    while (len--) {
        crc ^= *data++;
        for (i = 0; i < 8; i++) {
            if (crc & 0x80) {
                crc = (crc << 1) ^ 0x31;
            } else {
                crc <<= 1;
            }
        }
    }
    return crc;
}

调用该函数传入8个0x00的数组,返回值即为0xA2,完全匹配应用笔记的结果。

在线工具无法匹配的原因

多数在线CRC计算器默认使用**反射(RefIn/RefOut=true)**参数(比如常用的CRC8-CCITT),或初始值设为0xFF,这和Maxim的算法完全不兼容。若一定要用在线工具,必须手动修改所有参数为上述值才能得到正确结果。

内容的提问来源于stack exchange,提问作者Archie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:15:33