搜索
bottom↓
回复: 12

请问CRC8=X8+X5+X4+1是怎么出来的?有没有公式什么的!

[复制链接]

出0入0汤圆

发表于 2008-8-5 15:54:33 | 显示全部楼层 |阅读模式
请问CRC8=X8+X5+X4+1
      CRC-CCITT=X16+X12+X5+1
      CRC16=X16+X15+X5+1
      CRC12=X12+X11+X3+X2+1
      CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
这些是怎么出来的?有没有公式什么的!

以下蓝色文字由站长:armok 于:2008-08-14,14:48:58 加入。
你的原标题:“<font color=black>关于CRC!
” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
 ①你是在请教问题,还是在介绍有关的知识?
 ②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-8-5 16:23:24 | 显示全部楼层
有公式, 你可以看看书, 什么是crc, 是怎么来的. 从简单的做起. 很容易就会了

比如8位奇校验,  就是把8位的每一位都加起来, 看是不是奇数

出0入0汤圆

 楼主| 发表于 2008-8-5 16:35:32 | 显示全部楼层
谢谢老月姐姐!哈哈!我去看书!

出0入0汤圆

 楼主| 发表于 2008-8-7 12:00:03 | 显示全部楼层
郁闷!都看了几天书了,感觉还是没头绪呢?
  我现在也知道CRC是怎么算的,大概方法就是:
    如果要算0x02,也就是0000 0010的crc7
    CRC7的多项式是:G(x)= x7+x3+1,也就是:0x89即:1000 1001
    那么计算步骤是:
    1,先将0x02左移7位,也就是在它右边加7个0.结果是:0000 0010 0000 000.
  2,然后将0000 0010 0000 000与10001001相除,最后得到的余数就是CRC.
   
               __________________1_
    1000 1001 | 0000 0010 0000 000
                        1 0001 001
             ________________________
                          1110 111

    那么CRC7就是110111,
    结果最后传输的数据就是:0000 0010 1101 111,请问我的理解是不是对的?错的话,错在哪里?谢谢了!

出0入0汤圆

发表于 2008-8-7 12:23:39 | 显示全部楼层
这是gcc的CRC的C部分代码,式一下

uint8_t
    _crc_ibutton_update(uint8_t crc, uint8_t data)
    {
        uint8_t i;

        crc = crc ^ data;
        for (i = 0; i < 8; i++)
        {
            if (crc & 0x01)
                crc = (crc >> 1) ^ 0x8C;
            else
                crc >>= 1;
        }

        return crc;
    }

出0入0汤圆

 楼主| 发表于 2008-8-7 13:50:58 | 显示全部楼层
4、CRC校验码软件生成方法:
    借助于多项式除法,其余数为校验字段。
例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
      假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
      x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
   采用多项式除法: 得余数为: 1010     (即校验字段为:1010)

发送方:发出的传输字段为: 1 0 1 1 0 0 1  1 0 10
                          信息字段      校验字段

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确,

请问:10110010000 和 11001 进行多项式除法的结果 余数怎么是 1010 ,我算了几遍怎么是11000呢?希望高手指点指点!

出0入0汤圆

发表于 2008-8-12 16:19:12 | 显示全部楼层
同问,我看得也是这个例子,算得和楼主一样

出0入0汤圆

发表于 2008-8-14 14:38:41 | 显示全部楼层
明白了一点,crc中的除法是不带借位的减法,即逻辑上的异或,也就是说碰到被减位为0,减数为1时,结果直接为1,不用向高位借位,算完了就是1010

出0入0汤圆

 楼主| 发表于 2008-8-20 17:19:22 | 显示全部楼层
此问题已经解决!呵呵!

出0入0汤圆

发表于 2008-12-13 13:31:01 | 显示全部楼层
X7+X6+X5+X2+1

怎么算啊?

出0入0汤圆

发表于 2010-10-26 11:50:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-18 11:40:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-5-4 16:05:22 | 显示全部楼层
mcu5i51 发表于 2008-8-7 12:23
这是gcc的CRC的C部分代码,式一下

uint8_t

0x8c是怎么来的?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 17:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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