有关CRC校验,有人知道这种是什么CRC校验吗

2019-08-14 06:13发布

电机驱动上的CRC校验,网上找的计算工具好像都不太相符
uint8_t CalcCRCByte(uint8_t u8Byte, uint8_t u8CRC)
{
        uint8_t i;
        u8CRC = u8CRC ^ u8Byte;
        for (i = 0; i < 8; i++)
        {
                if (u8CRC & 0x01)
                {
                        u8CRC = (u8CRC >> 1) ^ polynomial;
                }
                else
                {
                        u8CRC >>= 1;
                }
        }
                return u8CRC;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
月无缺
1楼-- · 2019-08-14 08:36
mrbbn 发表于 2017-8-21 13:59
那还有其他值呢,什么异或值之类的?

我这里有一个CRC的文件,你看一下。
月无缺
2楼-- · 2019-08-14 10:24
CRC8,关键值是polynomial的值。
mrbbn
3楼-- · 2019-08-14 11:39
 精彩回答 2  元偷偷看……
月无缺
4楼-- · 2019-08-14 13:07
mrbbn 发表于 2017-8-21 13:59
那还有其他值呢,什么异或值之类的?

异或值是0。
aozima
5楼-- · 2019-08-14 18:09
CRC8 有多种poly

常用有两种

[mw_shl_code=c,true]/* crc8 poly = x8+x5+x4+1 = 0x131 */
static uint8_t crc8(const uint8_t *ptr, int len, uint8_t crc)
{
    uint8_t i;

    while(len--)
    {
       crc ^= *ptr++;
       for(i = 0;i < 8;i++)
       {
           if(crc & 0x01)
           {
               /* 0x31(0011 0001) ==> 0x8C(1000 1100) */
               crc = (crc >> 1) ^ 0x8C;
           }
           else
           {
               crc >>= 1;
           }
       }
    }

    return crc;
}[/mw_shl_code]

[mw_shl_code=c,true]/*
crc8 poly = 0x107 (x8+x2+x1+1)
*/
uint8_t crc8(const uint8_t *buf, uint32_t len)
{
    uint32_t i, j;
    uint8_t CRC = 0, _crc_poly = 0x07;

    for (j=0; j<len; j++)
    {
        CRC ^= buf[j];

        for(i = 0; i<8; i++)
        {
            if(CRC & 0x80)
                CRC = (CRC << 1) ^ _crc_poly;
            else
                CRC <<= 1;
        }
        //CRC &= 0xff;
    }

    return CRC;
}
[/mw_shl_code]
mrbbn
6楼-- · 2019-08-14 19:23
月无缺 发表于 2017-8-20 15:15
我这里有一个CRC的文件,你看一下。

我自己根据代码用vc写了个CRC校验小程序,结果是对的,但是网上有网页的校验,设置了还是不对,想问问为什么 微信截图_20170823110415.png

一周热门 更多>