找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7500|回复: 0
打印 上一主题 下一主题
收起左侧

CRC校验的原理及CRC硬件电路的模拟

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-13 02:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位 监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检 验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”,一般用g(x)表示。

以下用实例来说明:

设一个被校验的数为1010011,生成多项式g(x)=x^5+x^4+x+1,转化为二进制数即110011,宽w即g(x)最高位的阶数,此处为5,那么我们在1010011后加5个0,然后以g(x)为除数作模2除,如下图

   模2除不需要向高位借位,只需每位作异或运算,得到的余数即CRC码,那么发送时应当是1100100011000
,如果传输无误,作和g(x)作模二除,则不会有余数。





   此图为DS18B20的CRC生成器的硬件框图,它的工作过程是,这个生成器寄存器里的位开始都初始化为0,在一个时钟作用下,INPUT输入一个bit,生成器寄存器右移一位,那么最低位(LSB)被移出,输入的bit异或,异或结果与原(右移前)的第5位和第4位异或,得到的结果通过右移到了第4位和第3位,然后输入下一个bit,最后生成器寄存器的值称为CRC,这个叫CRC-8-Dallas/Maxim,X^8+X^5+X^4+1(1-Wirebus)。

程序如下:
uchar Calulate_CRC(uchar dat,ucharCRC_Value)//模拟CRC-8-Dallas/Maxim硬件电路X^8+X^5+X^4+1{//0^0==0,0^1==1,1^0==1,1^1==0,说明0与某位异或某位保持不变,1与某位异或要重新计算
uchar i;
bit shift_bit;
for(i=0;i<8;i++)
{
  shift_bit=(bit)((CRC_Value^dat)&0x01);//LSB与输入的bit异或
  if(shift_bit)
  CRC_Value^=0x18;//如果shift_bit是1,那么将它与CRC_Value的第5位和第4位异或,结果写在这两位上
                  //其它位保持不变
  CRC_Value>>=1;
  if(shift_bit)
  CRC_Value|=0x80;//1的话把最高位写1
  dat>>=1;//接着输入第2位
}
return(CRC_Value);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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