打印
[经验分享]

CRC校验原理

[复制链接]
7026|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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

crc.jpg (61.14 KB )

crc.jpg
沙发
yzhj| | 2010-6-7 21:56 | 只看该作者
我一直用一个简单的查表函数处理。

使用特权

评论回复
板凳
guita| | 2010-6-7 22:15 | 只看该作者
LZ厉害啊,像LZ学习

使用特权

评论回复
地板
yidou| | 2010-6-7 22:54 | 只看该作者
楼主很善于钻研那

使用特权

评论回复
5
麻辣鸭脖子| | 2010-6-7 23:06 | 只看该作者
支持原创!

使用特权

评论回复
6
yuq_quan| | 2010-6-9 09:55 | 只看该作者
:victory:

使用特权

评论回复
7
azeale123| | 2010-9-3 10:10 | 只看该作者
麻烦把您的查表法发下,给我解释一下吧 !!!

使用特权

评论回复
8
dandan5241| | 2010-9-7 14:24 | 只看该作者
1# David_ming 好,

使用特权

评论回复
9
yao1314520shi| | 2010-9-27 16:04 | 只看该作者
路过路过路过啊

使用特权

评论回复
10
逆序排列| | 2010-10-1 12:50 | 只看该作者
MARK

使用特权

评论回复
11
zilaifun| | 2010-10-12 15:28 | 只看该作者
我用的是查表法,对于单片机来说比较适合。

使用特权

评论回复
12
高勇| | 2010-11-25 10:15 | 只看该作者
非常好.

使用特权

评论回复
13
chengli2011| | 2011-3-4 16:21 | 只看该作者
学习!

使用特权

评论回复
14
yinyouyu| | 2011-4-6 11:14 | 只看该作者
:P

使用特权

评论回复
15
天南星雨| | 2011-7-26 21:26 | 只看该作者
唉,学无止境啊

使用特权

评论回复
16
dingy| | 2011-7-27 11:17 | 只看该作者
是啊,感谢楼主

使用特权

评论回复
17
ooljo| | 2011-8-1 21:45 | 只看该作者
真是酷帖呀

使用特权

评论回复
18
ooljo| | 2011-8-1 21:46 | 只看该作者
谢谢楼主分享、

使用特权

评论回复
19
ooljo| | 2011-8-1 21:46 | 只看该作者
:handshake

使用特权

评论回复
20
aa_001| | 2011-8-2 11:54 | 只看该作者
路过,受用啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

22

主题

762

帖子

2

粉丝