第20讲 自己动手学习单片机系列讲座-crc算法详解

第20讲 自己动手学习单片机系列讲座-crc算法详解

ID:14311369

大小:559.50 KB

页数:87页

时间:2018-07-27

第20讲 自己动手学习单片机系列讲座-crc算法详解_第1页
第20讲 自己动手学习单片机系列讲座-crc算法详解_第2页
第20讲 自己动手学习单片机系列讲座-crc算法详解_第3页
第20讲 自己动手学习单片机系列讲座-crc算法详解_第4页
第20讲 自己动手学习单片机系列讲座-crc算法详解_第5页
资源描述:

《第20讲 自己动手学习单片机系列讲座-crc算法详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第20讲CRC算法详解青岛科技大学王泽华13969742518基本思想发送端根据要传送的m位二进制码序列,以一定的规则产生校验用的r位CRC码,并附在信息后边,构成一个新的二进制码序列,共(m+r)位,发送出去。接收端,将接收到的二进制序列数(m+r位)除以多项式,如果余数为0,则说明传输中无错误发生。用软件计算CRC码时,接收方可以将接收到的信息码求CRC码,与接收到的CRC码比较是否相同来判断传输数据是否有误。一CRC基本概念二进制数与多项式任意一个二进制数都对应一个多项式例:1011,0001对应的多项式为1·x7+0·x6+1·x5+1·x4+0·x

2、3+0·x2+0·x1+1·x0即x7+x5+x4+1生成多项式任一种CRC校验都对应着一个生成多项式;生成多项式最高幂次和最低幂次的系数始终为1。名称生成多项式16进制数应用举例CRC4x4+x+1ITUG.704CRC8/MAXIMx8+x5+x4+10x31MAXIM芯片CRC16x16+x15+x2+10x8005MODBUSCRC16-ITU*x16+x12+x5+10x1021ISOHDLCCRC32x32+x26+···+x2+x+10x04C11DB7ZIP,RAR,IEEE1394CRC32Cx32+x28+···+x8+x6+10x1ED

3、C6F41SCTP*CRC16-ITU以前称作CRC16-CITT二CRC算法基本原理CRC的本质是模-2除法的余数。求CRC码所采用模2加减运算法则,即是不带进位和借位的按位加减,这种加减运算实际上是逻辑上的异或运算,加法和减法等价;乘法和除法运算与普通代数式的乘除法运算是一样。假定要发送的二进制数对应的多项式为K(x),生成多项式为G(x),最高幂次为r。设xr·K(x)/G(x)得到的余数多项式为R(x)。则R(x)对应的二进制数即为CRC校验码,位数为r位。用数学表达式表示为xr·K(x)=G(x)·Q(x)+R(x)其中Q(x)为得到的整数商多项式

4、。举例:采用CRC4校验,传送的信息码为0101,1001,生成多项式为x4+x+1。解:信息码0101,1001对应多项式为x6+x4+x3+1,乘以x4得x10+x8+x7+x4,对应二进制10110010000生成多项式x4+x+1对应被除数10011。10011101100100001001110101000010011110000010011101100100111010101011异或运算异或运算余数余数余数CRC码异或运算异或运算为0不做处理为0不做处理算法特点m位信息码添加r位0构成要处理的码块每次处理5位,可设置一个5位寄存器,初始值为0。

5、信息码左移一位进入REG0检测寄存器中的最高位REG4为1,将寄存器与10011异或运算,为0返回步骤3若没处理完m+r位,返回步骤3;否则取REG3…0作为CRC码REG4REG3REG2REG1REG010110010000左移左移缺点:算法用到5位寄存器,不方便简单改进m位信息码添加r位0构成要处理的码块每次处理4位,可设置一个4位寄存器,初始值为0。信息码左移一位进入REG0,同时检测寄存器中的移出位为1,将寄存器与0011异或运算,为0返回步骤3若没处理完m+r位,返回步骤3;否则寄存器内容为CRC码REG3REG2REG1REG010110010

6、000左移左移生成多项式最高位始终为1,可省掉该位左移待检测的标志位crcReg实际只用4位16位crcReg=0x0000;实际编程时的考虑crcReg寄存器为16位,Bit0-7位存储加载的信息码字节crcReg寄存器的Bit7-11用于crc码,Bit12用于检测左移出的值为1或0。加载要处理的8位信息码Bit0Bit7Bit8Bit11Bit9Bit10Bit12/********************simpcrc40.c**************************************/#includetypedef

7、unsignedcharuint8;typedefunsignedshortintuint16;uint8simpCrc4(uint8*p,intn){uint16crcReg=0x0000;//初始值inti,j;for(i=0;i

8、暂时把这个问题先放一下。for(i=0;i<4;i+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。