欢迎来到天天文库
浏览记录
ID:14311369
大小:559.50 KB
页数:87页
时间:2018-07-27
《第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;i8、暂时把这个问题先放一下。for(i=0;i<4;i+
8、暂时把这个问题先放一下。for(i=0;i<4;i+
此文档下载收益归作者所有