找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8955|回复: 7
打印 上一主题 下一主题
收起左侧

CRC8的疑惑,如何算出0x01=0x5E的?

[复制链接]
跳转到指定楼层
楼主
ID:5052 发表于 2008-11-25 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问哪位老大能详细描述下 原码 0x01 如何以CRC8,标准多项式 X8+X5+X4+1 手工计算,算出CRC码 0x5E 的?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2016-4-7 03:54 | 只看该作者
循环冗余校验(CRC)算法入门引导:http://www.51hei.com/bbs/dpj-47737-1.html
最通俗的CRC校验原理剖析:http://www.51hei.com/bbs/dpj-47736-1.html
CRC8校验分析:http://www.51hei.com/bbs/dpj-47738-1.html
回复

使用道具 举报

板凳
ID:346116 发表于 2018-11-5 16:03 | 只看该作者
这个校验方法是属于CRC-8/MAXIM,多项式就是提到的X8+X5+X4+1(简记31),CRC初值为0x00。其步骤如下所述:
1)初值CRC=0x00
2)CRC与待验数据异或并判断最低位真假,若是真则执行第3步,若是假执行第4步
3)CRC与0x18异或再右移一位再与0x80按位或运算,执行第5步
4)CRC右移一位,执行第5步
5)待验数据右移一位,执行第6步
6)判断第5步是否已经执行8次,若8次,本次计算结束,若没够8次,执行第2步

这个步骤是对一个字节的校验。下面给出C的代码,可对一串数据进行校验。
#include <stdio.h>
#include <stdlib.h>
/*
函数名称:get_crc
说    明:对数据帧进行CRC-8MAXIM校验,多项式31(简记)
入    口:待校验数据字节地址msg,待校验数据个数msg_length
出    口:无
返    回:1个字节的CRC结果
*/
unsigned char get_crc(unsigned char *msg,unsigned char msg_length)
{
    unsigned char crc=0;//初值
    unsigned char data;//临时数据变量
    while (msg_length--)//待校验数据数量
    {
        data = *msg++;//更新需要检验的数据
        for (unsigned char i = 0;i < 8;i++)//一字节数据逐位校验
        {
            if((crc^(data))&0x01)
            {
                crc ^= 0x18;
                crc >>= 1;
                crc |= 0x80;
            }
            else
            {
                crc >>= 1;
            }
            data >>= 1;
        }
    }
    return crc;
}


int main()
{
    unsigned char crc = 0x01;
    crc = get_crc(&crc,1);
    printf("0x%02x\n",crc);//对0x01CRC8校验,结果为0x5e
    system("pause");
    return 0;
}
手动演算的你按照步骤来,不会有错的。有错也是你不够细心和没有耐心。祝你好运气!
回复

使用道具 举报

地板
ID:707914 发表于 2022-4-23 10:50 | 只看该作者
输入的数据要反转,计算出的结果也要反转,多项式:X8+X5+X4+1中的X8只是表达时更简洁隐藏了,但不等于这一位不要。所有模式的多项式这一位都隐藏了,计算时一定要加上。
回复

使用道具 举报

5#
ID:168971 发表于 2023-7-24 20:34 | 只看该作者
little4_su 发表于 2018-11-5 16:03
这个校验方法是属于CRC-8/MAXIM,多项式就是提到的X8+X5+X4+1(简记31),CRC初值为0x00。其步骤如下所述: ...

感谢大佬的无私奉献
回复

使用道具 举报

6#
ID:561623 发表于 2023-7-26 09:06 | 只看该作者
little4_su 发表于 2018-11-5 16:03
这个校验方法是属于CRC-8/MAXIM,多项式就是提到的X8+X5+X4+1(简记31),CRC初值为0x00。其步骤如下所述: ...

一直搞不明白crc效验原理,看了这个代码才明白,原来是统计数据中1的个数,
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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