注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 循环冗余校验 CRC  

2015-09-29 11:21:30|  分类: 串行通信 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
         在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验(Cyclic  Redundancy Check)其特点是:检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。 

        CRC的本质是模-2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式来表示。
CRC是根据ISO/IEC 13239计算出的。
         初始登记内容应该全是1:'FFFF'。
         在每一帧内EOF前的两字节CRC附加于每一次请求和应答。CRC的计算作用于SOF后的所有字节,但不包括CRC域。
        当收到来自VCD的一次请求,VICC将校对CRC的值是否有效。假如无效,VICC将丢掉该帧
1.设置CRC寄存器,并给其赋值FFFF(hex)。 
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。  
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。 
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。  
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。  
6.重复第2至第5步直到所有数据全部处理完成。 
7.最终CRC寄存器的内容即为CRC值。 
      常用的CRC循环冗余校验标准多项式如下:  
CRC(12位) =X12+X11+X3+X2+X+1  
CRC(16位) = X16+X15+X2+1 
CRC(CCITT) = X16+X12 +X5+1  
CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1  
       以CRC(16位)多项式为例,其对应校验二进制位列为1 1000 0000 0000 0101。  注意:这儿列出的标准校验多项式都含有(X+1)的多项式因子;各多项式的系数均为二进制数,所涉及的四则运算仍遵循对二取模的运算规则。
  
(注:对二取模的四则运算指参与运算的两个二进制数各位之间凡涉及加减运算时均进行XOR异或运算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1,0 XOR 1=1,即相同为0,不同为1)。




  评论这张
 
阅读(85)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017