下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、CRC-1616CRC校验算法代码 位循环冗余码校验英名称为CyclicalRedundancy Check,简称CRC。它是利除法及余数的原理来作错误侦测(ErrorDetecting)的。实际应时,发送装置计算出CRC值并随数据同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相较,若两个CRC值不同,则说明数据通讯出现错误。根据应环境与习惯的不同,CRC常的些标准如下:CRC-4/ITUCRC-5/EPC CRC-5/ITU CRC-5/USBCRC-6/ITUCRC-7/MMCCRC-8 CRC-8/ITU CRC-8/ROHC CRC-8/MAXIMCRC-16/I
2、BM CRC-16/MAXIM CRC-16/USB CRC-16/MODBUS CRC-16/CCITT CRC-16/CCITT-FALSECRC-16/X25 CRC-16/XMODEM CRC-16/DNPCRC-32 CRC-32/MPEG-2等CRC-16及CRC-CCITT码则是来传送8-bit字符,其中CRC-16为美国采,CRC-CCITT为欧洲国家所采。CRC-32码都被采在种称为Point-to-Point的同步传输中。CRC-16码由两个字节构成,在开始时CRC寄存器的每位都预置为1,然后把CRC寄存器与8-bit的数据进异或,之后对CRC寄存器从到低进移位,在最位(M
3、SB)的位置补零,最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进异或,否则如果 LSB为零,则需进异或。重复上述的由低的移位8次,第个8-bit数据处理完毕,此时CRC寄存器的值与下个8-bit数据异或并进如前个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。任意个由进制位串组成的代码都可以和个系数仅为0和1取值的多项式对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,多项式为x5+x3+x2+x+1对应的代码101111。常的CRC16-CCITT多项式为x16+x12+x5+1,0 x1021进制为10
4、001000000100001。成多项式的最位固定的1,故在简记式中忽略最位1了,如0 x1021实际是0 x11021。多项式需要满:最位和最低位都是1当被传送信息任何位发错误时,P(X)不被T(X)整除不同位发错误时,余数应该不同对余数继续做模除法时,应该使余数循环标准CRC成多项式见末附表。以CRC16-CCITT为例进说明,CRC校验码为16位,成多项式17位。假如数据流为4字节:BYTE3、BYTE2、BYTE1、BYTE0;数据流左移16位,相当于扩256256倍,再除以成多项式0 x11021,做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。发送时的数据流为6字
5、节:BYTE3、BYTE2、BYTE1、BYTE0、CRC1、CRC0; 1)将扩后的数据流(6字节)16位(BYTE3、BYTE2)放个长度为16的寄存器;2)如果寄存器的位为1,将寄存器左移1位(寄存器的最低位从下个字节获得),再与成多项式的简记式异或;否则仅将寄存器左移1位(寄存器的最低位从下个字节获得);3)重复第2步,直到数据流(6字节)全部移寄存器;4)寄存器中的值则为CRC校验码CRC1、CRC0。 的把按字节排列的数据流表成数学多项式,设数据流为BYTEnBYTEn1BYTEn2、BYTE1BYTE0,表成数学表达式为BYTEn256n+BYTEn-1256(n-1)+.+BY
6、TE1*256+BYTE0,在这+表为异或运算。设成多项式为G17(17bit),CRC码为CRC16。则,CRC16(BYTEn256n+BYTEn-1256(n-1)+.+BYTE1256+BYTE0)2562/G17,即数据流左移16位,再除以成多项式G17。先变换BYTEn-1、BYTEn-1扩后的形式,CRC16BYTEn256n2562/G17+BYTEn-1256(n-1)2562/G17+.+BYTE12562562/G17+BYTE02562/G17(Zn+Yn/G17)256n+BYTEn-1256(n-1)2562/G17+.+BYTE12562562/G17+BYTE0
7、2562/G17Zn256n+Yn256/G17+BYTEn-12562/G17256(n-1)+.+BYTE12562562/G17+BYTE02562/G17Zn256n+(YH8n256+YHLn)256/G17+BYTEn-12562/G17256(n-1)+.+BYTE12562562/G17+BYTE02562/G17Zn256n+YHLn256/G17+(YH8n+BYTEn-1)2562/G17256(n-1)+.+BYTE12562562/G17+BYTE02562/G17这样就推导出,BYTEn-1字节的CRC校验码为YHLn256/G17+(YH8n+BYTEn-1)25
8、62/G17,即上字节CRC校验码Yn的8位(YH8n)与本字节BYTEn-1异或,该结果单独计算CRC校验码(即单字节的16位CRC校验码,对单字节可建表格,预先成对应的16位CRC校验码),所得的CRC校验码与上字节CRC校验码Yn的低8位(YL8n)乘以256(即左移8位)异或。然后依次逐个字节求出CRC,直到BYTE0。字节型算法的般描述为:本字节的CRC码,等于上字节CRC码的低8位左移8位,与上字节CRC右移8位同本字节异或后所得的CRC码异或。字节型算法过程如下:1)CRC寄存器组初始化为全0(0 x0000)。(注意:CRC寄存器组初始化全为1时,最后CRC应取反。)2)CRC
9、寄存器组向左移8位,并保存到CRC寄存器组。3)原CRC寄存器组8位(右移8位)与数据字节进异或运算,得出个指向值表的索引。4)索引所指的表值与CRC寄存器组做异或运算。5)数据指针加1,如果数据没有全部处理完,则重复步骤2)。6)得出CRC。查表算法代码例:/*CRC16 Coding & Decoding G(X) = X16+X12+X5+1*/quint16 CRC_Calculate:CRC16_cal(quint8 *ptr, quint32 len, quint16 crc_init)crc = crc_init;temp=(crc8)&0 xff;oldcrc16=crc16_
10、tab*ptrtemp;crc=(crc8)oldcrc16;ptr+;return(crc); 位CRC16标准算法很多,般不同多项式对应不同表,不同的算法有不同的函数,这样不太便,下给出个通函数quint16 CRC_Normal:calculate_crc16(quint16 wCRCin,quint16 wCPoly,quint16 wResultXOR,bool input_invert,bool ouput_invert,const char *puchMsg, int usDatawChar|=0 x01=1;wCRCin = (wCRCin 1) wCPoly;elseif(o
11、uput_invert)quint16 temp_short = wCRCin;wCRCin=0;for(int i=0;i16;+i)if(temp_short&0 x01)wCRCin|=0 x01=1;return (wCRCinwResultXOR);CRC-16/CCITT由本函数实现则填充参数如下:calculate_crc(0,0 x1021,0,true,true,puchMsg,usDataLen)其它使情况参数参考下表如计算CRC-16/MODBUS:calculate_crc(0 xffff,0 x8005,0,true,true,puchMsg,usDataLen)ca
12、lculate_crc(0,0 x1021,0,false,false,puchMsg,usDataLen)结果异或值输反转输出反转CRC算法名称多项式公式宽度多项式初始值CRC-4/ITUCRC-5/EPCx4 + x + 145030900090000truetruex5 + x3 + 1falsefalse5150000truetruetruefalsefalsefalsetruetruetruetruetruetruetruefalsetruefalsetruetruetruefalsefalsefalsetruetruetruetruetruetruetruefalsetruefalse5051F1F6030000709000080700008070055807FF00831000016161616161616168005800580058005102110211021102100000000FFFFFFFF0000FFFFFFFF00000000FFFFFFFF000000000000FFFF0000 x16 + x13 + x12 + x11 + x10 + x8 + x6 +x5 + x2 + 116323D650000FFFFtr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京保洁公司合同范例
- 包子定购合同范例
- 2024年度环保技术研究与推广合同
- 农村耕地置换合同模板
- 公租房ppp合同模板
- 2024年保证合同条款精解
- 临水临电合同模板
- 合同范例私人教练
- 商场出售合同范例
- 地皮转让协议合同范例
- 《民航英语口语》课程标准
- 2023年陕西投资集团有限公司校园招聘笔试题库及答案解析
- 大一法理学的复习资料总结和考试重点
- 科目二考试成绩单
- 《锲而不舍金石可镂》-完整版课件
- 《红楼梦》考点总汇
- 人教版高一英语必修第一册-unit-3-reading-and-thinking-课件
- 创建文明城市主题班会PPT创建文明城市我们一起行动PPT课件(带内容)
- 百变扭扭棒 课件
- 复旦大学数学物理方法讲义
- 上海破产管理人扩容考试参考题库(含答案)
评论
0/150
提交评论