[经验分享] CRC校验原理

[复制链接]
8287|24
 楼主| David_ming 发表于 2010-6-6 23:11 | 显示全部楼层 |阅读模式
本帖最后由 David_ming 于 2011-3-2 17:06 编辑

:L 修正下:

CRC的常用多项式如下:

          CRC-4               x4+x+1                 
          CRC-8               x8+x5+x4+1         
          CRC-8               x8+x2+x1+1           
          CRC-8               x8+x6+x4+x3+x2+x1     
          CRC-12             x12+x11+x3+x+1      
          CRC-16             x16+x15+x2+1           
          CRC16-CCITT    x16+x12+x5+1

         首先,我们要发送一串数字,比如说是 s(x)=101 (3个bit,再多了不好笔算),首先,我们先确定我们要采用的CRC算法是哪种,这里举例用 CRC8(注:也可以采用CRC4,但是抗干扰能力是不同的)
假设我们用 CRC8=x8+x5+x4+1 作为多项式

那么对应的硬件如图crc.jpg

时序为:
     1:输入data的第一个bit与最左边的T触发器异或,结果由上面的异或门输出
     2:1步的异或门输出在与多项式中的异或门进行异或,结果同时给到最右边异或门
           的输入,注意,1步与2步是并行的。
     3:clock线来一个时钟该时钟使得T触发器锁住了输入信号,这样一直下去,直到
          输入数据流结束。
     4:当最后一个bit与最左边的触发器输出异或完成后,此时在来一个clock,将整
          个数据再左移一个bit。
     5:此时,读总线动作,读出数据,图中右边是LSB,左边是MSB。

注意,1.初始状态的 T 触发器全部为 0.
         2.多项式中的X8,X5,X4意思是这几位的值是由它  相邻 LSB 与
            dataIN异或门输出来决定的。X5 代表第5位(相对最低位bit0)

下面是数据流“101”的运算过程:

          假设发送低位先,那么101最低位是 1 此时它与输入的异或门相异或(左上角标出了dataIN,异或门的另一端是0),结果输出 1,用这个结果与多项式中的 X5的低字节邻位(即X4)相异或,结果输出到 T 触发器的输入端(注意此时还没有时钟过来),于此同时,这个输出的1与X4的低字节邻位相异或(即X3)结果输出到 T的输入端,再于此同时,这个输出的1送到最低LSB的触发器输入端。此时过来一个时钟,每个T触发器的值组成了:   
                        00110001B   

继续上面的步骤,数据变成了:

                        01100010B
在继续,变成了:

                        11110101B

此时整个位流全部完成运算,读数据总线动作,那么我们把上面这个结果放到 101 后边一起传送出去就OK了,要注意顺序,即:1010 1111 101

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yzhj 发表于 2010-6-7 21:56 | 显示全部楼层
我一直用一个简单的查表函数处理。
guita 发表于 2010-6-7 22:15 | 显示全部楼层
LZ厉害啊,像LZ学习
yidou 发表于 2010-6-7 22:54 | 显示全部楼层
楼主很善于钻研那
麻辣鸭脖子 发表于 2010-6-7 23:06 | 显示全部楼层
支持原创!
yuq_quan 发表于 2010-6-9 09:55 | 显示全部楼层
:victory:
azeale123 发表于 2010-9-3 10:10 | 显示全部楼层
麻烦把您的查表法发下,给我解释一下吧 !!!
dandan5241 发表于 2010-9-7 14:24 | 显示全部楼层
1# David_ming 好,
yao1314520shi 发表于 2010-9-27 16:04 | 显示全部楼层
路过路过路过啊
逆序排列 发表于 2010-10-1 12:50 | 显示全部楼层
zilaifun 发表于 2010-10-12 15:28 | 显示全部楼层
我用的是查表法,对于单片机来说比较适合。
高勇 发表于 2010-11-25 10:15 | 显示全部楼层
非常好.
chengli2011 发表于 2011-3-4 16:21 | 显示全部楼层
学习!
yinyouyu 发表于 2011-4-6 11:14 | 显示全部楼层
天南星雨 发表于 2011-7-26 21:26 | 显示全部楼层
唉,学无止境啊
dingy 发表于 2011-7-27 11:17 | 显示全部楼层
是啊,感谢楼主
ooljo 发表于 2011-8-1 21:45 | 显示全部楼层
真是酷帖呀
ooljo 发表于 2011-8-1 21:46 | 显示全部楼层
谢谢楼主分享、
ooljo 发表于 2011-8-1 21:46 | 显示全部楼层
:handshake
aa_001 发表于 2011-8-2 11:54 | 显示全部楼层
路过,受用啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名::“哥洒脱如此”

22

主题

762

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部