OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3603|回复: 14

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

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
发表于 2017-8-20 15:15:26 | 显示全部楼层 |阅读模式
5金钱
电机驱动上的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;
}

最佳答案

查看完整内容[请看2#楼]

我这里有一个CRC的文件,你看一下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-20 15:15:27 | 显示全部楼层
mrbbn 发表于 2017-8-21 13:59
那还有其他值呢,什么异或值之类的?

我这里有一个CRC的文件,你看一下。

4 CRC算法原理及C语言实现.pdf

35.26 KB, 下载次数: 246

把复杂的事,做简单!
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-20 23:15:57 | 显示全部楼层
CRC8,关键值是polynomial的值。
把复杂的事,做简单!
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
 楼主| 发表于 2017-8-21 13:59:25 | 显示全部楼层
月无缺 发表于 2017-8-20 23:15
CRC8,关键值是polynomial的值。

那还有其他值呢,什么异或值之类的?
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-21 15:13:50 | 显示全部楼层
mrbbn 发表于 2017-8-21 13:59
那还有其他值呢,什么异或值之类的?

异或值是0。
把复杂的事,做简单!
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2017-8-21 15:17:25 | 显示全部楼层
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]
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
 楼主| 发表于 2017-8-23 11:05:55 | 显示全部楼层
月无缺 发表于 2017-8-20 15:15
我这里有一个CRC的文件,你看一下。

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

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-23 11:14:13 | 显示全部楼层
本帖最后由 月无缺 于 2017-8-23 11:17 编辑
mrbbn 发表于 2017-8-23 11:05
我自己根据代码用vc写了个CRC校验小程序,结果是对的,但是网上有网页的校验,设置了还是不对,想问问为 ...

你的设置不对,你试着改一下设置看看。
把复杂的事,做简单!
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
 楼主| 发表于 2017-8-23 11:21:40 | 显示全部楼层
月无缺 发表于 2017-8-23 11:14
你的设置不对,你试着改一下设置看看。

怎么改?我就知道多项式和初始值该怎么设,其他都不太懂
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-23 11:43:19 | 显示全部楼层
mrbbn 发表于 2017-8-23 11:21
怎么改?我就知道多项式和初始值该怎么设,其他都不太懂

我按照我的程序改了设置,得到的CRC值确实是对的。你按照你程序改一下网页的设置;要么就按照网页的设置,改一下程序, 对比一下,看问题出在哪里。
CRC.png
把复杂的事,做简单!
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
 楼主| 发表于 2017-8-23 14:09:39 | 显示全部楼层
月无缺 发表于 2017-8-23 11:43
我按照我的程序改了设置,得到的CRC值确实是对的。你按照你程序改一下网页的设置;要么就按照网页的设置 ...

我也改不了程序,主楼里的crc校验码是电机驱动器自己带的,不能改,改了发消息给驱动它就收不到,但是改了网页的数值校验结果不对
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-23 16:05:17 | 显示全部楼层
mrbbn 发表于 2017-8-23 14:09
我也改不了程序,主楼里的crc校验码是电机驱动器自己带的,不能改,改了发消息给驱动它就收不到,但是改 ...

那我也不清楚怎么解决了,你用电机驱动程序算出来的值是多少?用网站算出来的值是少?用你VC算出来的值是多少?你对比一下看看,有什么不同的地方,有什么关联的地方。
把复杂的事,做简单!
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-8
在线时间
33 小时
 楼主| 发表于 2017-8-23 16:35:23 | 显示全部楼层
月无缺 发表于 2017-8-23 16:05
那我也不清楚怎么解决了,你用电机驱动程序算出来的值是多少?用网站算出来的值是少?用你VC算出来的值是 ...

我用vc算出来的,发给驱动器是对的,跟驱动器的上位机发出来的校验码是一样的,但是网页算出来是不一样的。
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2017-8-23 18:02:37 | 显示全部楼层
mrbbn 发表于 2017-8-23 16:35
我用vc算出来的,发给驱动器是对的,跟驱动器的上位机发出来的校验码是一样的,但是网页算出来是不一样的 ...

那就肯定是网页的设置不对嘛。一个个改网页上能改的设置,总会试出来的。
把复杂的事,做简单!
回复

使用道具 举报

8

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-6-1
在线时间
27 小时
发表于 2017-8-24 16:51:24 | 显示全部楼层
飞吧poly!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 16:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表