crc校验码计算例题

crc校验码计算例题
crc校验码计算例题

crc校验码计算例题

1、若信息码字为11100011,生成多项式G(X)=X5+X4+X+1,则计算出的CRC 校验码为?x的最高次幂5则信息码(被除数)补五个0为:1110001100000 除数为110011

------------10110110

---------------------

110011/1110001100000

-------110011

------------------

---------101111

---------110011

------------------

----------111000

----------110011

------------------

------------101100

------------110011

------------------------

-------------111110

-------------110011

-------------------------

---------------11010

2、信息码为101110101,生成多项式X4+X2+1,求冗余位???

算法同上被除数补四个0 为:1011101010000 除数为:10101

答案:1100

7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E

方法如下:

CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从

高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。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(16位)多项式为X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

CRC标准及计算过程

CRC标准及计算过程 根据应用环境与习惯的不同,CRC又可分为以下几种标准: ①CRC-8码; ②CRC-12码; ③CRC-16码; ④CRC-CCITT码; ⑤CRC-32码。 CRC-12码通常用来传送6-bit字符串。 CRC-16及CRC-CCITT码则是用来传送8-bit字符串,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。 CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。 生成过程 下面以最常用的CRC-16为例来说明其生成过程。 CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。 计算过程 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)的基本原理是:在K 位信息码后再拼接R位的校验码,整个编码长度为N 位,因此,这种编码又叫( N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x) 。根据G(x) 可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x) 左移R位,则可表示成C(x)*2 的R次方,这样C(x) 的右边就会空出R位,这就是校验码的位置。通过C(x)*2 的R次方除以生成多项式G(x) 得到的余数就是校验码。编辑本段几个基本概念 1、多项式与二进制数码 多项式和二进制数有直接对应关系:x 的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x 的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x) 。如生成多项式为 G(x)=x^4+x^3+x+1 ,可转换为二进制数码11011。而发送信息位1111 ,可转换为数据多项式为C(x)=x^3+x^2+x+1 。 2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2 除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2 除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息( CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。 3 CRC码的生成步骤 1、将x 的最高次幂为R的生成多项式G(x) 转换成对应的R+1位二进制数。 2、将信息码左移R位,相当与对应的信息多项式C(x)*2 的R次方。 3、用生成多项式(二进制数)对信息码做除,得到R 位的余数。 4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。 例】假设使用的生成多项式是G(x)=x^3+x+1 。4 位的原始报文为1010, 求编码后的报文。 解:

计算法简单实现crc校验

计算法简单实现crc校验 计算法简单实现crc校验 前一段时间做协议转换器的时间用到CRC-16校验,查了不少资料发现都不理想。查表法要建表太麻烦,而计算法觉得那些例子太罗嗦。最后只好自己写了,最后发现原来挺简单嘛:)两个子程序搞定。这里用的多项式为:CRC-16=X16+X12+X5+X0=2 +2 +2+2 =0x11021 因最高位一定为“1”,故略去计算只采用0x1021即可 CRC_Byte:计算单字节的CRC值 CRC_Data:计算一帧数据的CRC值 CRC_HighCRC_Low:存放单字节CRC值 CRC16_HighCRC16_Low:存放帧数据CRC值; ------------------------------------------------------------- ;Functi on:CRConebyte ;Input:CRCByte ;Output:CRC_HighCRC_Low ; ------------------------------------------------------------- CRC_Byte: clrfCRC_Low clrfCRC_High movlw09H movwfv_Loop1 movfCRCByte,w movwfCRC_High CRC: decfszv_Loop1;8次循环,每一位相应计算 gotoCRC10 gotoCRCend CRC10 bcfSTATUS,C rlfCRC_Low rlfCRC_High btfssSTATUS,C   ;gotoCRC;为0不需计算movlw10H;若多项式改变,这里作相应变化xorwfCRC_High,f movlw21H;若多项式改变,这里作相应变化 xorwfCRC_Low,f gotoCRC CRCend: nop nop return ; ------------------------------------------------------------- ;CRCone byteend ; ------------------------------------------------------------- ; ------------------------------------------------------------- ;Functi on:CRCdate ;Input:BufStart(A,B,C)(一帧数据的起始地址)v_Count(要做CRC的字节数);Output:CRC16_HighCRC16_Low(结果); ------------------------------------------------------------- CRC_Data: clrfCRC16_High clrfCRC16_Low CRC_Data10 movfINDF,w

CRC32 冗余校验码的计算

题目: 校验码的计算 姓名: 周小多 学号:2013302513 班号:10011302 时间:2015.11.1

计算机学院 时间: 目录 摘要 1 目的 (1) 2 要求 (1) 3 相关知识 (1) 4 实现原理及流程图.......................... 错误!未定义书签。 5 程序代码 (7) 6 运行结果与分析 (7) 7 参考文献 (8)

题目:

的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R除以生成多项式G(x)得到的余数就是校验码。 任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 4、实现原理及流程图 CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。其实现步骤如下: (1)设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位。 (2)用生成多项式g(x)去除,求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。 (3)用以模2的方式减去y(x),得到二进制多项式。就是包含了CRC校验码的待发送字符串。

crc校验码计算例题

crc校验码计算例题 1、若信息码字为11100011,生成多项式G(X)=X5+X4+X+1,则计算出的CRC 校验码为?x的最高次幂5则信息码(被除数)补五个0为:1110001100000 除数为110011 ------------10110110 --------------------- 110011/1110001100000 -------110011 ------------------ ---------101111 ---------110011 ------------------ ----------111000 ----------110011 ------------------ ------------101100 ------------110011 ------------------------ -------------111110 -------------110011 ------------------------- ---------------11010 2、信息码为101110101,生成多项式X4+X2+1,求冗余位??? 算法同上被除数补四个0 为:1011101010000 除数为:10101 答案:1100 7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下: CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从

CRC校验原理及步骤

C R C校验原理及步骤 This model paper was revised by the Standardization Office on December 10, 2020

CRC校验原理及步骤 什么是CRC校验 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 CRC校验原理: 其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 模2除法: 模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。 例: CRC校验步骤:

CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。 具体步骤: 1. 选择合适的除数 2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。 3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。 CRC校验码计算示例: 现假设选择的CRC生成多项式为G(X)= X4+ X3+ 1,要求出二进制序列的CRC校验码。下面是具体的计算过程: ①将多项式转化为二进制序列,由G(X)= X4+ X3+ 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001 ②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为,然后使用模2除法除以除数11001,得到余数。【补几位0与x的最高次幂相同,模除就是进行异或】

查表法计算CRC

在硬件实现中,CRC 通常采用线性反馈移位寄存器实现。其中一个单元对应CRC 的每一比特,图3-2给出了8比特寄存器。对于移位寄存器中的每一单元,如果在发生器多项式中D 的某次幂为1,那么到下一个单元的连接要经过一个异或门(XOR)。对于每一传输块,首先将移位寄存器置零;接传输块数据输入移位寄存器,当传输块的所有比特全部输入移位寄存器后,移位寄存器的存储内容就是所要求的CRC 比特。这些比特以倒序传输,如图3-2,首先传输在最左寄存器中的CRC 比特。 图3-2 8比特CRC 生成移位寄存器 对于上述算法,当输入1个比特时,要经过一系列的异或和移位,才能完成。上图只是8比特CRC 的实现图,考虑到g CRC24A (D)的多项式,实现更为复杂。而下行峰值速率又相对很高,采用这种方法显然是达不到需求的速率的。下面介绍一种更为高效的查表法[17],多核DSP 计算CRC 也使用了查表法。 设传输块有k 比特,CRC 比特数为k n -;下面是按4比特查表计算24比特CRC 的过程。对于传输块中的二进制序列,可以用下面的多项式表示: ()1011222k k k k m x m m m m --=++++ 式(3-1) 将上式每4个比特组合在一起,如下所示: ()44(1)4011222n n n n m x m m m m --=++ ++ 式(3-2) 求此序列的24比特CRC 时,先乘以242(左移24位)后,再除以CRC 的生成多项式()x g ,所得到的余数即为所求的CRC 码。如下式所示: ()()()() () 242424 2444(1) 01222222n n n m x m m m g x g x g x g x -=+++ 式(3-3) 设:()()()()24 0002r x m Q x g x g x =+ ,其中()0r x 为24位二进制余数;将它代入式(3-3)可得: ()()()()()()()()()()()()2424 24044(1)1042424 044(1)102222222222 n n n n n n m x r x m m Q x g x g x g x g x r x m m Q x g x g x g x --??=++++??? ?????=++++?????? 式(3-4) 因为,()()()()()4204244000002[2]222h l h l r x r x r x r x r x =+=+ 式(3-5)

modbus_rtu_crc计算方法

MODBUS RTU模式下的CRC方法 使用RTU模式,消息包括了一基于CRC方法的错误检测域。CRC域检测了整个消息的内容。 CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。 CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。 CRC产生过程中,每个8位字符都单独和寄存器内容相或(O R),结果向最低有效位方向移动,最高有效位以0填充。L SB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的C RC值。 CRC添加到消息中时,低字节先加入,然后高字节。CRC简单函数如下: unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg ; /* 要进行CRC校验的消息 */ unsigned short usDataLen ; /* 消息中字节数 */ { unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */ unsigned uIndex ; /* CRC循环中的索引 */ while (usDataLen--) /* 传输消息缓冲区 */

CRC16校验码如何计算

CRC16校验码如何计算 比如我有一个16进制只字符串 7E 00 05 60 31 32 33 要在末尾添加两个CRC16校验码校验这7个16进制字符请写出算法和答案 7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下: CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1; 0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。 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(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

CRC_校验码的计算方法

CRC 校验码的计算方法 CRC从原理到实现=============== 作者:Spark Huang(hcpp@https://www.360docs.net/doc/286290606.html,) 日期:2004/12/8 摘要:CRC(Cyclic Redundancy Check)被广泛用于数据通信过程中的差错检测,具有很强的检错能力。本文详细介绍了CRC的基本原理,并且按照解释通行的查表算法的由来的思路介绍了各种具体的实现方法。 1.差错检测 数据通信中,接收端需要检测在传输过程中是否发生差错,常用的技术有奇偶校验(Parity Check),校验和(Checksum)和CRC(Cyclic Redundancy Check)。它们都是发送端对消息按照某种算法计算出校验码,然后将校验码和消息一起发送到接收端。接收端对接收到的消息按照相同算法得出校验码,再与接收到的校验码比较,以判断接收到消息是否正确。 奇偶校验只需要1位校验码,其计算方法也很简单。以奇检验为例,发送端只需要对所有消息位进行异或运算,得出的值如果是0,则校验码为1,否则为0。接收端可以对消息进行相同计算,然后比较校验码。也可以对消息连同校验码一起计算,若值是0则有差错,否则校验通过。 通常说奇偶校验可以检测出1位差错,实际上它可以检测出任何奇数位差错。 校验和的思想也很简单,将传输的消息当成8位(或16/32位)整数的序列,将这些整数加起来而得出校验码,该校验码也叫校验和。校验和被用在IP协议中,按照16位整数运算,而且其MSB(Most Significant Bit)的进位被加到结果中。 显然,奇偶校验和校验和都有明显的不足。奇偶校验不能检测出偶数位差错。对于校验和,如果整数序列中有两个整数出错,一个增加了一定的值,另一个减小了相同的值,这种差错就检测不出来。 2.CRC算法的基本原理------------------- CRC算法的是以GF(2)(2元素伽罗瓦域)多项式算术为数学基础的,听起来很恐怖,但实际上它 的主要特点和运算规则是很好理解的。 GF(2)多项式中只有一个变量x,其系数也只有0和1,如: 1*x^7 + 0*x^6 + 1*x^5 + 0*x^4 + 0*x^3 + 1*x^2 +1*x^1 + 1*x^0

CRC校验原理分析

CRC校验 校验原理: 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R 位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=x R m(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g 0+g 1 x+g 2 x2+...+g (R-1) x(R-1)+g R x R 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC 码字。 4、CRC校验码软件生成方法: 借助于多项式除法,其余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1010 (即校验字段为:1010)

发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确,

CCITT CRC-16计算原理与实现

CCITT CRC-16计算原理与实现 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 差错控制理论是在代数理论基础上建立起来的。这里我们着眼于介绍CRC的算法与实现,对原理只能捎带说明一下。若需要进一步了解线性码、分组码、循环码、纠错编码等方面的原理,可以阅读有关资料。 利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。 1 代数学的一般性算法 在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。例如 1100101 表示为 1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即 x6+x5+x2+1。 设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。 发送方编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以 G(x),所得余式即为R(x)。用公式表示为 T(x)=xrP(x)+R(x) 接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。 举例来说,设信息码为1100,生成多项式为1011,即P(x)=x3+x2,G(x)=x3+x+1,计算CRC的过程为 xrP(x) x3(x3+x2) x6+x5 x -------

16位CRC校验码计算程序

/*************************************************************** 16位CRC计算方法 1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器; 3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;4.如果移出位为0:重复第3步(再次右移一位); 如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理; 7.将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC; *****************************************************************/ /**************************************************************************** 名称: UART_CRC16_Work() 说明: CRC16校验程序 参数: *CRC_Buf:数据地址 CRC_Leni:数据长度 返回: CRC_Sumx:校验值 *****************************************************************************/ unsigned int UART_CRC16_Work(unsigned char *CRC_Buf,unsigned char CRC_Leni) { unsigned char i,j; unsigned int CRC_Sumx; CRC_Sumx=0xFFFF; for(i=0;i>=1; CRC_Sumx^=0xA001; } else

CRC计算方法

1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接 收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之 前就已通过附加一个数,做了“去余”处理(也就已经 能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但 它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不 同则结果为“1”。如100101除以1110,结果得到 商为11,余数为1,如图5-9左图所示。如 11×11=101,如图5-9右图所示。

图5-9 “模2除法”和“模2乘法”示例 具体来说,CRC校验原理就是以下几个步骤: (1)先选择(可以随机选择,也可按标准选择, 具体在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码 方法,这个多项式也称之为“生成多项式”)。 (2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1 位“0”,然后以这个加了k-1个“0“的新帧(一共是 m+k-1位)以“模2除法”方式除以上面这个除数,所 得到的余数(也是二进制的比特串)就是该帧的 CRC校验码,也称之为FCS(帧校验序列)。但要 注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。 (3)再把这个校验码附加在原数据帧(就是m位 的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端,最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没

CRC校验码计算详解

CRC校验码计算详解 以实例说明:2008年下半年上午试题(18)。 采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是: A. 0000 B. 0100 C. 0010 D.1111 【分析】 符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如 G(X)= X4+X+1 G(X)=10011 1.已知条件如下: 原码字记做M(X),即:M(X) = 10110 生成多项式记做G(X),即:G(X) = 10011 G(X)的最高阶数记做r,此处r = 4 2.计算步骤 (1)计算XrM(X) 也就是把M(X)的尾部添加r个0 XrM(X) = 10110 0000 (2)计算XrM(X)长除G(X),余数记做Y(X) 这里的“长除”计算方法如下: 10110 0000 10011 001010000 10011 0011100 10011 01111 注意Y(X)的位数为r(此处为4),所以Y(X) = 1111 Y(X)即是CRC校验码。 (3) 计算传输码字T(X) = XrM(X)-Y(X) 计算方法:在M(X)末尾连接上Y(X)即可 即:T(X) = 10110 1111 【答案】 此题只要计算出校验码Y(X)即可。正确答案为:D XrM(X) 10110 0000 -- G(X) 10011 (注意位对应方式,对应位进行异或运算即可) 00101 0000 -- G(X) 100 11 (计算方法同上) 001 1100 -- G(X) 100 11 01111 (此数已经小于G(X),计算到此为止,即Y(X))

CRC校验算法-程序例子

变量定义 rtrig1:R_TRIG; execute: BOOL; command:ARRAY[0..255] OF BYTE; number: BYTE; command_temp: ARRAY [0..255] OF WORD; CRCHi: WORD; CRCLo: WORD; CRC_temp: WORD:=16#FFFF; i:INT; j:INT; k:INT; result: ARRAY [0..255] OF BYTE; CRC: WORD; 程序(绿色字体为CRC校验代码)rtrig1(CLK:=execute); IF rtrig1.Q THEN CASE command[1] OF 01,02,03,04,05,06: number:=6; 15,16: number:=7+command[6]; END_CASE; FOR i:=0 TO number BY 1 DO command_temp[i]:=BYTE_TO_WORD(command[i]); END_FOR; FOR j:=0 TO number BY 1 DO CRCHi:=CRC_temp AND 16#FF00; CRCLo:=CRC_temp AND 16#00FF; CRC_temp:=CRCHi OR (CRCLo XOR command_temp[j]); FOR k:= 0 TO 7 BY 1 DO IF CRC_temp.0 = 1 THEN CRC_temp:=SHR(CRC_temp,1); CRC_temp:=CRC_temp XOR 16#A001; ELSE CRC_temp:=SHR(CRC_temp,1); END_IF; END_FOR; END_FOR; CRC:=(CRCLo*16#0100) OR (CRCHi/16#0100); ELSE

CRC16查表计算

CRC16查表计算 参数1:要进行CRC计算的数组地址 参数2:要进行CRC计算的数组长度 /************************************************************************************* ************/ uint16 crc16(uint8 *puchMsg, uint16 usDataLen) { uint8 uchCRCHi = 0xFF ; /* 高CRC字节初始化*/ uint8 uchCRCLo = 0xFF ; /* 低CRC 字节初始化*/ uint32 uIndex ; /* CRC循环中的索引*/ while (usDataLen--) /* 传输消息缓冲区*/ { uIndex = uchCRCLo ^ *puchMsg++ ; /* 计算CRC */ uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex] ; uchCRCHi = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } const uint8 code auchCRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

CRC校验码计算过程

C R C校验码计算过程 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

CRC 校验码 问题1设发送信息为,生成多项式g(x)=x5+x3+x2+1,求CRC 校验码。 解答:发送数据为f(x)=,多项式g(x)=101101 11111100 01100000000 001100 ___ __________000000 000110 ___ __________101101 101110 ___ __________101101 111010 ___ __________101101 110000 ___ __________101101 110101 ___ __________101101 110111 ___ __________101101 000 1101101100101101aaaaaaaa aaaaaaa aaaaaaa aaaaaa aaaaaa aaaaa aaaaa aaaa aaaa aaa aaa aa aa a a 所以校验字段R(x)=01100 则接受数据为f `(x)=; 验证接受的正确性:

11111100 000000_____________101101 101101 _____________101101 111011 _____________101101 110000 _____________101101 110101 _____________101101 110111 _____________101101 100 1101101101101101aaaaaa aaaaa aaaaa aaaa aaaa aaa aaa aa aa a a

CRC校验码计算过程#(精选.)

CRC 校验码 问题1设发送信息为11011011,生成多项式g(x)=x5+x3+x2+1,求CRC 校验码。 解答:发送数据为f(x)=11011011,多项式g(x)=101101 11111100 01100000000 001100 _____________000000 000110 ___ __________101101 101110 ___ __________101101 111010 ___ __________101101 110000 ___ __________101101 110101 ___ __________101101 110111 ___ __________101101 000 1101101100101101aaaaaaaa aaaaaaa aaaaaaa aaaaaa aaaaaa aaaaa aaaaa aaaa aaaa aaa aaa aa aa a a 所以校验字段R(x)=01100 则接受数据为f `(x)=1101101101100; 验证接受的正确性:

11111100 000000 ___ __________101101 101101 _____________101101 111011 ___ __________101101 110000 ___ __________101101 110101 ___ __________101101 110111 ___ __________101101 100 1101101101101101aaaaaa aaaaa aaaaa aaaa aaaa aaa aaa aa aa a a 最新文件 仅供参考 已改成word 文本 。 方便更改

一种CRC并行计算原理及实现方法

电子学报 ACTA ELECTRONICA SINICA 1999年第4期第27卷 Vol.27 No.41999 一种CRC并行计算原理及实现方法 朱荣华 【提要】 本文提出一种通用的CRC并行计算原理及实现方法,适于不同的CRC生成多项式和不同并行度(如8位、16位、及32位等),与目前已采用的查表法比较,不需要存放余数表的高速存储器,减少了时延,且可通过增加并行度来降低高速数传系统的CRC运算时钟频率. 关键词:循环冗余码的并行计算,CRC余数,高速数传系统 The Principle and Implementation of a Parallel CRC Computing Zhu Ronghua (Optical Fiber Communication National Key Lab of UESTC,Chengdu 610054) Abstract: The principle and implementation of a general parallel Cyclic Redundancy Code,or CRC computing are described in the paper.It is suitable for any generator polynomial and any parallel degree of generator polynomial between 1 and https://www.360docs.net/doc/286290606.html,pare with Table Lookup Algorithm,it need not the high speed RAM which was used to store the remainder table,and decrease the delay.Thus,we can increase properly parallel degree to decrease the clock frequency of CRC computing in high-speed digital systems. Key words: CRC parallel computing,CRC remainder,High-speed digital system 一、引 言 循环冗余校验码简称为循环冗余码或CRC码(Cyclic Redundancy Check),是一种检出概率高、且易于用硬件实现的检错码.CRC码由一个生成多项式(最高次幂为k)产生,k次幂的生成多项式可产生k-1位的冗余码.适当选取生成多项式可以使CRC码能检出所有奇数位的随机误码,以及突发长度小于等于k-1的突发误码[1,3]. CRC码的编码过程如下: 设待校验的信息码有n位,M=(m n-1,m n-2,…,m1,m0),用多项式M(x)表示: M(x)=m n-1X n-1+…+m1X1+m0 (1) 如果所采用的生成多项式g(x)的最高次幂为k,则先在式(1)的两端乘以X k,变成:

相关文档
最新文档