chxgzl4862 发表于 2008-8-5 15:54:33

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

请问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 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。
./bbs_upload/files_6/armok01122228.gif

laoyue 发表于 2008-8-5 16:23:24

有公式, 你可以看看书, 什么是crc, 是怎么来的. 从简单的做起. 很容易就会了

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

chxgzl4862 发表于 2008-8-5 16:35:32

谢谢老月姐姐!哈哈!我去看书!

chxgzl4862 发表于 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,请问我的理解是不是对的?错的话,错在哪里?谢谢了!

mcu5i51 发表于 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;
    }

chxgzl4862 发表于 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呢?希望高手指点指点!

wacc1314 发表于 2008-8-12 16:19:12

同问,我看得也是这个例子,算得和楼主一样

wacc1314 发表于 2008-8-14 14:38:41

明白了一点,crc中的除法是不带借位的减法,即逻辑上的异或,也就是说碰到被减位为0,减数为1时,结果直接为1,不用向高位借位,算完了就是1010

chxgzl4862 发表于 2008-8-20 17:19:22

此问题已经解决!呵呵!

mfkqqw 发表于 2008-12-13 13:31:01

X7+X6+X5+X2+1

怎么算啊?

xiaovwei 发表于 2010-10-26 11:50:49

mark

tonydh 发表于 2011-1-18 11:40:14

mark

free_code 发表于 2012-5-4 16:05:22

mcu5i51 发表于 2008-8-7 12:23 static/image/common/back.gif
这是gcc的CRC的C部分代码,式一下

uint8_t


0x8c是怎么来的?
页: [1]
查看完整版本: 请问CRC8=X8+X5+X4+1是怎么出来的?有没有公式什么的!