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

编码器CRC6校验计算异常:C语言实现与传感器结果不符

编码器CRC6计算始终无法匹配传感器返回值的问题

我尝试计算编码器输出数据的CRC6值,但始终无法得到正确结果。该传感器使用的CRC多项式为0x43,我最初的C语言实现代码如下:

//CRC6 calculation
static uint8_t crc6(uint8_t *data, uint8_t len)
{
    uint8_t i = 0;
    uint8_t j = 0;
    uint8_t crc = 0;

    for(i = 0; i < len; i++) {
        crc ^= data[i];  // Initial XOR with input data
        for(j = 0; j < 8; j++) {  // Process each bit of the current byte
            if (crc & 0x20)  // Check the MSB of the crc
            {
                crc = (crc << 1) ^ CRC6_POLY;  // Shift left and XOR with polynomial if the bit is set
            }
            else
            {
                crc <<= 1;  // Just shift left
            }
            crc &= 0x3F;  // Ensure crc remains 6-bit
        }
    }

    return crc;
}

我提取了部分样本数据,对比了自计算CRC与传感器返回的实际CRC值(上方为十进制,下方为十六进制):
样本数据对比

二者始终不一致,我不清楚问题出在哪里。


编辑1:根据 datasheet 说明,CRC数据是反转的,但修改后仍未解决问题。我调用CRC函数的方式如下:

uint8_t crc1 = crc6(enc1_data, 3);
uint8_t crc2 = crc6(enc2_data, 3);
uint8_t crc1_is = ~(enc1_data[3] >> 2) & 0x3F; //crc is inverted!
uint8_t crc2_is = ~(enc2_data[3] >> 2) & 0x3F; //crc is inverted!

编辑2:补充该传感器 datasheet 链接(第49页为CRC6相关内容):
IC-PZ系列传感器文档


编辑3:至今仍未解决问题,但我获取了厂商提供的示例。我的SPI_CRCS寄存器初始值为0x00,设置应该正确。
厂商提供的示例

我修改后的CRC计算代码如下:

//CRC6 calculation
static uint8_t crc6(uint8_t *data, uint8_t len)
{
    uint8_t i = 0;
    uint8_t j = 0;
    uint8_t crc = (0x00 << 2); //Start value in SPI_CRCS register

    for(i = 0; i < len; i++) {
        crc ^= data[i];  // Initial XOR with input data
        for(j = 0; j < 8; j++)  // Process each bit of the current byte
        {
            crc = crc & 0x80 ? (crc << 1) ^ (0x43 << 2) : crc << 1;
        }
    }

    return crc;
}

调用方式为:

uint8_t crc1 = crc6(enc1_data, 4); //CRC should be zero to be correct

按预期最终应得到crc=0x00,但实际仍得到随机值。


内容的提问来源于stack exchange,提问作者Hans Lüthi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:28:12