CAN总线中循环冗余校验码的原理及其电路实现
循环冗余校验原理及程序
ENDIF;
IFdtemp(7)='1'THEN
dtemp(7DOWNTO2):=dtemp(7DOWNTO2)XORPOLYNOMIAL;
ENDIF;
IFdtemp(6)='1'THEN
dtemp(6DOWNTO1):=dtemp(6DOWNTO1)XORPOLYNOMIAL;
rdata_r <=X"000";
dfinish_r <='0';
error01_r <='0';
ELSIFhrecv='1'THEN
rdatacrc <=datacrci;
rdtemp :=datacrci(16DOWNTO5);
IFrdtemp(11)='1'THEN
rdtemp(11DOWNTO6):=rdtemp(11DOWNTO6)XORPOLYNOMIAL;
while(--len>=0)
{
ch=*crcbuf++;ch<<=8;
for(i=0;i<8;i++)
{
crc<<=1;
if((ch&0x8000)!=0)crc|=1;
if(crc>=gx)crc∧=gx;
ch<<=1;
}
}
return((crc==0)?0∶1)
}
以上CRC编码和校验函数结构良好,调用接口清晰,执行效率很高,且具有良好的可
hsend<=hsend_r;
datacrco<=datacrco_r;
循环冗余校验码(crc)的基本原理
循环冗余校验码(CRC)的基本原理循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R 的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式f(X)表示,将f(x)左移R位(则可表示成f(x)*X R),这样f(x)的右边就会空出R 位,这就是校验码的位置。
通过f(x)* X R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式f(x)。
如生成多项式为G(x)=X4+X3+X+1,可转换为二进制数码11011。
而发送信息位1111,可转换为数据多项式为f(x)=X3+X2+X+1。
2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。
在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。
但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:N K 码距d G(x)多项式G(x)7 4 3 x3+x+1 10117 4 3 x3+x2+1 11017 3 4 x4+x3+x2+1 111017 3 4 x4+x2+x+1 1011115 11 3 x4+x+1 1001115 7 5 x8+x7+x6+x4+1 11101000131 26 3 x5+x2+1 10010131 21 5 x10+x9+x8+x6+x5+x3+1 11101101 00163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001 101011041 1024 x16+x15+x2+1 110000000000 00101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
循环冗余校验码的原理及应用
循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check,简称CRC)是一种在数据传输中用于错误检测的校验码。
CRC的原理是通过在发送数据时附加一个校验值,接收端在接收数据时计算校验值,然后与发送端传递的校验值进行比较,如果两者一致,则说明数据传输没有错误,否则则存在数据错误。
CRC的应用非常广泛,包括网络传输、存储介质、通信等领域。
下面将详细介绍CRC的原理和应用。
1.原理:(1)生成多项式:CRC使用一个生成多项式进行计算。
该多项式可以是任意的,但在应用中通常使用一些标准的多项式。
生成多项式的位数确定了校验码的位数,通常为32位或64位。
(2)数据附加:在发送数据前,发送端会通过生成多项式对数据进行计算,生成一个校验码。
然后将校验码附加在原始数据的末尾。
(3)接收端计算:接收端在接收到数据后,通过与发送端使用同样的生成多项式对接收到的数据进行计算,生成一个接收端的校验码。
(4)校验比较:接收端的生成校验码与发送端传递的校验码进行比较,若一致,则说明数据传输没有错误;若不一致,则说明数据传输存在错误。
2.应用:(1)数据传输:CRC主要应用在网络传输领域,如以太网、Wi-Fi和蓝牙等。
在数据包发送前,发送端会对数据包进行CRC计算,然后将计算得到的校验码附加在数据包中。
接收端在接收到数据包后,再进行CRC计算,然后将计算得到的校验码与接收到的校验码进行比较,以判断是否存在传输错误。
(2)存储介质:CRC也应用在存储介质中,如硬盘驱动器、光盘等。
在数据存储时,CRC会被计算并存储在磁盘或光盘的头部或尾部。
在数据读取时,通过计算CRC来确保数据的完整性。
(3)通信:通信设备通常会使用CRC来检测数据的传输错误。
例如,调制解调器在发送数据前会计算CRC并将其附加在数据中,接收端在接收到数据后计算CRC,并与接收到的CRC进行比较。
(4)校验和验证:CRC也可以用于验证数据的完整性。
循环冗余检验的原理说明
循环冗余检验的原理说明在数字通信和数据存储领域,为了确保数据的准确性和完整性,常常会使用各种校验方法。
其中,循环冗余检验(Cyclic Redundancy Check,简称 CRC)是一种被广泛应用的差错检测技术。
那什么是循环冗余检验呢?简单来说,它就像是数据的“质检员”,通过一系列复杂但又有规律的计算,来判断传输或存储的数据是否出现了错误。
要理解循环冗余检验的原理,我们先来看看它是怎么工作的。
假设我们要传输一段数据,比如说一串二进制数字。
在发送端,会根据预先设定好的一个生成多项式,对这串数据进行计算,得到一个余数,这个余数就是循环冗余码(CRC 码)。
然后,把这个 CRC 码附加在原始数据的后面,一起发送出去。
在接收端,收到数据后,同样根据那个生成多项式,对包括附加的CRC 码在内的整个数据进行计算。
如果计算得到的余数是零,那就说明数据在传输过程中没有出错;如果余数不是零,那就意味着数据出现了错误。
那这个神奇的生成多项式是怎么来的呢?它可不是随便选的。
生成多项式的选择直接影响到循环冗余检验的检错能力。
一般来说,生成多项式的阶数越高,检错能力就越强。
但同时,计算的复杂度也会增加。
为了更好地理解循环冗余检验的计算过程,我们来举个例子。
假设我们的生成多项式是 G(x) = x³+ x + 1,对应的二进制数是 1011。
要检验的数据是 1010。
首先,在数据后面补三个零,得到 1010000。
然后,用这个数除以生成多项式对应的二进制数1011。
计算过程就像我们平常做除法一样,只不过这里是二进制的除法。
通过计算,得到余数是 100。
这个 100 就是 CRC 码。
把它附加在原始数据 1010 后面,得到 1010100,发送出去。
接收端收到 1010100 后,再次除以 1011。
如果余数是零,说明数据没错;如果不是零,就说明数据出错了。
循环冗余检验之所以能够有效地检测错误,是因为它利用了数学上的多项式运算的特性。
循环冗余校验码的原理及应用
循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check, CRC)是一种常见的错误检测技术,用于验证数据传输的准确性。
它通过在发送数据之前附加一个冗余的校验码,并在接收端对接收到的数据进行校验,以便快速检测并纠正传输中的错误。
1.将每个待发送的数据与一个固定的生成多项式进行除法运算。
2.将除法运算的余数作为校验码添加到发送的数据后面。
3.接收端在接收到数据后,同样使用相同的生成多项式进行除法运算。
4.若接收端得到的余数为0,则说明数据传输没有错误;否则,说明数据传输中出现了错误。
1.网络通信:在计算机网络中,常使用CRC校验码来验证数据包的完整性,防止在传输过程中数据被篡改或错误。
2.存储设备:在硬盘驱动器、固态硬盘等存储设备中,使用CRC校验码来检测存储数据的正确性,防止数据损坏。
3.移动通信:在移动通信中,如GSM、CDMA、LTE等系统中,使用CRC校验来保证无线信号的可靠传输。
4.协议栈:在各种网络协议中,如以太网、WiFi、TCP/IP等,CRC校验码被用于保证数据传输的正确性。
5.数据传输设备:在串行通信中,如串口通信、RS-232等,常使用CRC校验码来验证数据传输。
1.高检测准确率:使用CRC校验码可以有效检测常见的错误类型,如单个位错、双比特错等。
2.高效性能:CRC算法的计算速度快,在实际应用中对系统的性能要求较低。
3.算法简单:CRC算法的实现比较简单和高效,适用于各种硬件和软件平台。
4.容错能力强:CRC校验码可以检测出较长的比特序列错误,如在存储设备中检测大容量文件的正确性。
5.灵活性:通过选择不同的生成多项式,CRC校验码可以适用于不同的数据长度和校验要求。
然而,循环冗余校验码也有一些不足之处,如:1.无法纠正错误:CRC校验码只能检测错误,而无法对错误数据进行纠正。
2.相同残余:不同的错误数据可能会产生相同的CRC校验码,从而导致无法检测到错误。
基于CAN总线的CRC校验码的原理与实现
基于CAN总线的CRC校验码的原理与实现CAN(Controller Area Network)总线是一种基于串行通信的网络协议,广泛用于汽车电子和工业控制领域。
CRC(Cyclic Redundancy Check)校验码是一种常用的错误检测技术,用于保证数据传输的可靠性。
在CAN总线中,CRC校验码用于检测数据在传输过程中是否发生了错误。
CRC校验码的原理是通过多项式除法来计算校验值。
假设要发送的数据为D,生成多项式为G,校验值为R。
发送端首先计算D和G的多项式除法,得到商S和余数R。
发送端将R作为校验值连同数据一起发送出去。
接收端接收到数据后,再次计算接收到的数据和G的多项式除法,得到接收端计算出的校验值R'。
如果R'与接收到的校验值R相等,则认为数据传输无误;如果不相等,则认为数据传输发生错误。
CAN总线使用多项式除法来计算CRC校验码。
多项式的形式为X^15 + X^14 + X^10 + X^8 + X^7 + X^4 + X^3 + X^0。
在CRC校验过程中,生成多项式是固定不变的,称为生成多项式(Generator Polynomial)。
接收端和发送端双方事先约定好这个生成多项式。
接收端和发送端的CRC校验码计算过程相同,只是计算的数据不同。
接收端将接收到的数据和接收到的校验值放入计算器中,然后进行多项式除法运算。
如果计算得到的余数为0,说明数据传输无误。
否则,说明数据传输发生错误。
具体的实现过程如下:1.定义生成多项式。
生成多项式是常数,已事先约定好。
2.初始化CRC寄存器。
CRC寄存器的初值可以是全0或者全1,事先也要约定好。
3.从CAN总线接收到一帧数据。
4.将接收到的数据和接收到的校验值放入CRC寄存器。
5.执行多项式除法运算。
将CRC寄存器中的数据和生成多项式进行异或运算,然后将结果作为新的CRC寄存器的值。
6.重复以上步骤,直至计算到剩余的数据位为0。
基于CAN总线的CRC校验码的原理与实现
基于CAN总线的CRC校验码的原理与实现作者:王鹏来源:《赤峰学院学报·自然科学版》 2014年第4期王鹏(赤峰学院计算机与信息工程学院,内蒙古赤峰 024000)摘要:CAN总线又称为控制器局域网技术,属于工业现场总线,应用范围很广.CAN系统中通常采用反馈重发机制对通信过程进行差错控制.当接收端反馈给发送端出错信息后,发送端便自动重发,经此过程,只需要检错就可以了.循环冗余校验码实现简单,误判率比较低,还具有纠错功能,在通信系统中应用较为广泛.关键词:控制器局域网;差错校验;CRC循环校验中图分类号:TP393.1 文献标识码:A 文章编号:1673-260X(2014)02-0048-02CAN(Controller Area Network)全称控制器局域网,是工业现场总线的一种,是应用最广泛的开放式现场总线之一.与其它通信网的不同之处在于:第一,报文传送中不包含目的地址,而是以全网广播为基础,各接收站根据报文中的标识符过滤报文,以决定接收还是丢弃,其优点在于可在线上网下网、即插即用和多站接收;第二,强化了对数据安全性的要求,满足控制系统及其它较高数据安全要求的系统需求.CAN系统中通常采用反馈重发机制对通信过程进行差错控制,以保证报文能正确的传输.当接收端反馈给发送端出错信息后,发送端便自动重发,在此过程中,只需要检错就可以了.一般的检错码有两类:奇偶校验码和循环冗余校验码.奇偶校验码只具有检错能力,实现方法简单,不能纠错;循环冗余校验码也很简单,而且误判率比较低,还具有纠错功能,在通信系统中应用较为广泛.下面,通过实例,来说明CAN网络中循环冗余校验码的工作原理和实现方法.1 CRC检错码的工作原理一般情况,一个由二进制数位串组成的发送序列,可以用一个只含有0和1系数的多项表达式的系数表示出来,例如:代码1001011对应的多项式为X6+X3+ X+1,再如:代码为1010111,则对应的多项式X6+X4+X2+X+1.CRC检错码是采用多项式相除的运算方法实现的,如被处理报文的比特序列对应的多项式为P(X),收发双方约定的多项式为G(X),用P(X)除以G(X)后,求得余数多项式R(X),并将多项式R(X)附加到多项式P(X)的后边,生成M(X),这样能保证M(X)除以G(X)的余数为0.此时,可以将M(X)作为发送序列发给接收方.接收方用收到的报文N(X) 去除同样的G(X),如果余数等于0,则说明接收到的序列与发送的序列一致,接收到的数据没有错误;否则,说明传输过程中出错,由发送端重发,重新开始CRC校验,直到接收到的数据没有错误为止.2 运算规则(1)在进行CRC计算时,采用二进制模2运算规则,对两个操作数进行逻辑异或运算;即2个数据相同,结果为0;2个数据不同,结果为1.(2)在进行CRC 计算前先将多项式P(X)乘以Xn,其中n为生成多项式G(X)的最高幂值.对多项式除法来讲,P(X)*Xn就是将P(X)左移n位,用来存放余数R(X),所以实际发送的报文就变为P(X)*Xn+R(X);即M(X).(3)在进行基于模2运算的多项式除法时,如果部分余数首位为1,则商上1,否则商上0.再异或运算求得余数,余数最高位舍弃.按此方法,最终得到的余数比除数少一位.此余数即为R(X);添加在信息位后便构成CRC码字的发送序列.用此发送序列多项式再除以G(X)的余数一定为0,以方便接收方的校验.下面通过一个实例来说明CRC的运行过程.例如:假设待发送的信息位为1011001,则对应的多项式P(X)=X6+X4+X3+1,若选取G(X)=X4+X3 +1,其对应代码11001,则X4*P(X)=X10+X8+X7+X4,对应的代码为10110010000,首先由模2除法求余数多项式R(X),过程如下所示:得到余数1010,即R(X)=X3+X,对发送序列P(X)进行改造,生成M(X):M(X)=P(X)*X4+R(X)=X10+X8+X7+X4+X3+X,即发送序列为10110011010.也就是说信道上发送的码字为10110011010.若传输过程无错,则接收方收到的代码序列与发送方相同,所以接收端的校验过程就是将接收到的码字多项式除以G(X).若余数多项式为零则认为传输无差错;若余数多项式不为零则传输有差错.如果发送序列为10110011010,在接收端收到的是10100011010,对接收端来说,如何发现错误,是通过验证此时的余数多项式是否为0来的说明,运算如下:上式运算结果得到一个0111的余数多项式,即余数不为0,说明接收到的信息有错误,要求发送端重发;当然,一些特殊场合,可以进一步计算错误位是哪位,从而进行修正,这样的编码称为纠错码.CAN总线中要求生成多项式G(X)的首位和最后一位的系数必须为1,通常规定的G(x)有:CRC-4: x4+x3+x2+1CRC-8: x8+x2+x+1CRC-10: x10+x9+x5+x4+x2+1CRC-12: x12+x11+x3+x2+x+1CRC-16: x16+x15+x2+1CRC-CCITT: x16+x12+x5+1CRC-32: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1CAN总线中的CRC校验采用的多项式比一般CRC校验要高很多,其检错能力更强,误判率极低,是提高数据传输质量的有效检错手段.参考文献:〔1〕杨春杰,王曙光.CAN总线技术[M].北京航空航天大学出版社,2011.〔2〕张培仁.CAN总线设计及分布式控制[M].清华大学出版社,2012.〔3〕饶运涛.现场总线CAN原理与应用技术(第2版)[M].北京航空航天大学出版社,2007.。
CAN总线中循环冗余校验码的原理及其电路实现
摘要:在can网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。
为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。
详细介绍了can总线中循环冗余校验码的差错控制原理及其实现方法。
关键词:循环冗余校验差错控制报文在can系统中为保证报文传输的正确性,需要对通信过程进行差错控制。
目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。
常用的检错码两类:奇偶校验码和循环冗余校验码。
奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。
下面介绍can网络中循环冗余校验码(即crc码)的原理和实现方法。
1 crc码检错的工作原理crc码检错是将被处理报文的比特序列当作一个二进制多项式a(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为crc校验码附加到原始的报文上,并一起发给接收方。
接收方用同样的g(x)去除收到的报文b(x),如果余数等于p(x),则传输无误(此时a(x)和b(x)相同);否则传输过程中出错,由发送端重发,重新开始crc校验,直到无误为止。
上述校验过程中有几点需注意:①在进行crc计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行crc计算前先将发送报文所表示的多项式a(x)乘以xn,其中n为生成多项式g(x)的最高幂值。
对二进制乘法来讲,a(x)·xn就是将a(x)左移n 位,用来存放余数p(x),所以实际发送的报文就变为a(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。
图1为crc校验的工作过程。
目前已经有多种生成多项式被列入国际标准中,如:crc-4、crc-12、crc-16、ccitt-16、crc-32等。
循环冗余校验码的工作原理
循环冗余校验码的工作原理嘿,朋友们!今天咱来唠唠循环冗余校验码的工作原理,这玩意儿可神奇啦!你可以把它想象成一个超级细心的检查员。
比如说你要给朋友寄一个包裹,包裹里有好多东西。
循环冗余校验码就像是在包裹外面贴的一个特殊标签。
发送数据的时候呢,就好比你把包裹打包好准备寄出去。
这时候循环冗余校验码会根据要发送的数据计算出一个独特的标记,就像给包裹贴上那个特殊标签一样。
然后呢,数据就沿着线路跑啊跑,跑到接收端啦。
接收端收到数据后,也会按照同样的规则计算一个标记。
如果计算出来的标记和发送端的一样,那就好比包裹完好无损地到达了朋友手中,一切都没问题呀!但要是标记不一样,哎呀,那就说明在传输过程中有啥问题啦,可能是数据被干扰了,或者出了啥差错。
这时候循环冗余校验码就发挥大作用啦!它能像个神探一样,迅速发现问题,告诉我们数据有问题,得重新检查或者重新发送。
你说这是不是很厉害呀?就好像我们寄包裹的时候,要是没有那个标签,朋友收到包裹后都不知道有没有少东西或者被弄坏呀。
循环冗余校验码可不只是在一个小领域里有用哦,它在好多地方都大显身手呢!比如在网络通信中,要是没有它,那数据传输得乱套啦!它就像是一个默默守护的小卫士,虽然我们平时可能不太注意到它,但它却一直在认真工作,保证我们的数据准确无误地到达目的地。
我们每天用手机、电脑上网、聊天、看视频,背后都有循环冗余校验码在辛勤付出呢!想想看,如果没有它,我们可能会经常收到错误的信息,那多烦人呀!所以说呀,循环冗余校验码虽然听起来很专业、很复杂,但其实它的作用超级重要呢!它让我们的数据传输更加可靠,让我们的网络世界更加顺畅。
我们真应该好好感谢它呀!怎么样,现在是不是对循环冗余校验码的工作原理有了更清楚的认识啦?。
循环冗余校验码(crc)的基本原理
A:①水平垂直奇偶校验②循环求和
③循环冗余④正比率
B:①模2除法②定点二进制除法
③二-十进制除法④循环移位法
C:①1100101010111②110010101010011
③110010101011100④110010101010101
D:①可纠正一位差错②可检测所有偶数位错
③可检测所有小于校验位长度的突发错
5、通信与网络中常用的CRC
在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1和CRC-CCITT=x16+x15+x2+1。
【例1】某循环冗余码(CRC)的生成多项式G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成CRC码。若发送信息位1111和1100则它的CRC码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的CRC码,例如码字_C_、_D_、和_E_。(1998年试题11)
1011
------------
11-------余数(校验位)
(4)编码后的报文(CRC码):
1010000
+ 11
------------------
1010011
CRC码为1010011(和纠错)。
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若得到余数不为0,则接收的数据有错。
(2)此题生成多项式有4位(R+1),要把原始报文F(x)左移3(R)位变成1010000
循环冗余校验码(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)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。
通过C(x)*2R除以生成多项式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码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。
但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:N K 码距d G(x)多项式G(x)7 4 3 x3+x+1 10117 4 3 x3+x2+1 11017 3 4 x4+x3+x2+1 111017 3 4 x4+x2+x+1 1011115 11 3 x4+x+1 1001115 7 5 x8+x7+x6+x4+1 11101000131 26 3 x5+x2+1 10010131 21 5 x10+x9+x8+x6+x5+x3+1 1110110100163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001101011041 1024 x16+x15+x2+1 11000000000000101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
详解CAN及CAN FD通信中的循环冗余校验(CRC)方法
详解CAN及CAN FD通信中的循环冗余校验(CRC)方法摘要:数据校验是为保证数据的完整性进行的一种验证操作。
CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据。
在现场总线通信和控制的实际应用中,工业应用环境往往是极端的温度以及电磁噪声或是其他的恶劣环境,系统在这种条件下能否正常工作至关重要,试想一下倘若生产线设备发送的位置信息在传输过程出现了错误,轻则可能造成生产瘫痪,重则可能导致设备损坏甚至人员伤害。
在CAN总线通信过程中CAN控制器具备完整的错误检测能力,其中包含:位错误检测、格式错误检测、填充错误检测、应答错误检测和CRC错误检测。
作为一种重要的错误检测手段,CRC错误检测是接收节点判断CAN帧信息的完整性并向总线确认应答的依据。
一、常见的校验方法1.最简单的校验是数据发送后进行主动回读,结果一致才确认传输成功,很显然这种传输沟通的方式很直观并非常精准,但是由于回读的操作使得数据传输量翻倍,也就是传输对带宽要求高且效率低下;2.奇偶校验,就是传输中使用额外1个位来记录传输数据二进制数中1的个数是奇数还是偶数,这个方案适合绝大多数硬件,传输开销适中,因此被广泛使用,例如常见的串口通信;3.累加和校验,该算法原理是对数据逐一进行累加后得到一个数值,接收方在接收数据同时也进行数据的累加并最终与发送过来的累加和进行比较,该算法计算简单,无论在硬件或是软件实现都能保证较高的效率,常用于低速串行数据通信校验和芯片代码的完整性判断;4.CRC检验,该算法是基于一个多项式除法取余的结果,其根据位数需求和多项式变化有数十种版本,凭借其硬件实现简单,位反转侦错能力较强及运算开销适中的优点被广泛应用与数字网络传输以及数据存储领域,如磁盘数据校验、USB、GSM/CDMA通信,在计算机应用中经常接触到的RAR和ZIP文件的压缩/解压数据完整性检查也采用了该算法;5.MD5、SHA为代表的信息摘要校验,数据摘要算法也被称为哈希(Hash)算法、散列算法,摘要算法用于数据量比较大的场合。
循环冗余校验码原理
循环冗余校验码原理嘿,朋友们!今天咱来聊聊循环冗余校验码原理,这玩意儿可有意思啦!你看啊,循环冗余校验码就像是一个超级细心的小卫士,专门负责检查数据有没有出问题。
就好比我们寄快递,要确保包裹里的东西完好无损地到达目的地。
它是怎么工作的呢?简单来说,就是通过一系列复杂又巧妙的计算。
它会根据要传输的数据生成一个特别的校验码,这个校验码就像是数据的一个独特标签。
然后,接收方收到数据后,也会按照同样的方法计算出一个校验码。
如果这两个校验码一样,那就说明数据没问题,就像我们收到的快递包装完好,里面的东西也肯定没问题呀!要是不一样呢,那就糟糕啦,说明数据在传输过程中可能出了差错。
这就好像我们走路,一路都有这个小卫士在旁边盯着,一旦发现我们走偏了或者摔倒了,它就会立刻发出警报。
它可真是个尽职尽责的小机灵鬼呢!那它为什么这么重要呢?想象一下,如果没有它,我们的数据在传输过程中就可能变得乱七八糟,那可就乱套啦!比如说你给朋友发了一条很重要的消息,结果因为没有这个小卫士的把关,朋友收到的是一堆乱码,那岂不是糟糕透顶?而且啊,循环冗余校验码还特别聪明,它能发现很多我们不容易注意到的小错误。
这就像我们有时候自己犯了个小错误,自己还没察觉呢,旁边的人就已经看出来了。
它的存在让我们的数据传输更加可靠,更加安全。
在我们的生活中,到处都有循环冗余校验码的影子呢。
比如我们上网的时候,发送和接收的各种信息,都有它在默默守护。
还有我们用的各种电子设备,里面的数据传输也都离不开它。
它虽然看不见摸不着,但却一直在为我们的信息安全保驾护航。
是不是很神奇呢?我们真应该好好感谢这个小小的技术呀!总之,循环冗余校验码原理就像是一把神奇的钥匙,打开了数据传输安全可靠的大门。
让我们的数据能够准确无误地到达目的地,为我们的生活和工作带来了极大的便利。
所以说呀,可别小瞧了这个看似不起眼的小技术哦!它的作用可大着呢!原创不易,请尊重原创,谢谢!。
循环冗余校验码原理
循环冗余校验码原理循环冗余校验码(Cyclic Redundancy Check,CRC)是一种常用的差错检测技术,用于在传输和存储数据时检测数据的完整性。
CRC码可以通过计算出的校验值与接收到的数据进行比对,如果不一致,则说明数据在传输过程中发生了错误。
CRC原理基于多项式除法。
待传输的数据可以看作是一个二进制数的多项式,校验位(CRC码)也是一个二进制数的多项式。
计算CRC码的基本思想是将待传输的数据与一个特定的CRC生成多项式进行除法运算,得到余数作为CRC码。
CRC码的计算过程如下:1.定义生成多项式G(x)(也称为生成器)和待传输的数据D(x)。
2.将G(x)的最高次项系数设为1,其余系数为0,得到长度为n+1的二进制数,记作G。
3.在D(x)的最高次项之后添加长度为n的0,得到长度为n+m的二进制数,记作T。
4.用T除以G,计算商和余数。
商是传输的数据,余数是计算得到的CRC码。
5.把CRC码添加到待传输的数据后面,得到带有CRC校验位的数据。
在接收端,将接收到的数据与生成多项式G(x)进行除法运算,如果余数为0,则说明数据没有发生错误;如果余数不为0,则说明数据发生了错误。
CRC码的一个重要特点是具有统计独立性,即任何一个比特错误都只有一半的可能性会导致无法检测出来。
这是因为生成多项式G(x)是一个固定的多项式,在任何一个比特错误的位置上,接收端能够检测到错误的概率为1/2另一个重要的特点是检测到错误的概率可以通过CRC的位数进行控制。
CRC的位数越多,检测到错误的概率越小。
通常,CRC码的位数为16位或32位,能够提供较高的错误检测能力。
常用的CRC标准包括CRC-8、CRC-16和CRC-32等,不同的标准使用不同的生成多项式,以适应不同的应用需求。
总结起来,CRC是一种通过计算出的校验值与接收到的数据进行比对的差错检测技术。
CRC的计算过程基于多项式除法,利用特定的生成多项式对待传输的数据进行除法运算,得到余数作为CRC码。
循环冗余校验的原理
循环冗余校验(CRC,Cyclic Redundancy check) • 码多项式及其算术运算 假设循环码为 C= Cn-1 Cn-2…. C2 C1 C0
长度为n
M的码多项式(称为n-1次多项式) C(x) = Cn-1 xn-1 + Cn-2xn-2 + …. C2 x2 +C1 x + C0 例1: C = 1100101 C(x) =1x6 + 1x5 +0x4 +0x3 + 1x2 +0 x + 1 = x6 + x5 +x2 + 1
模2加=模2减 模 2乘 模2除=乘的可逆运算
பைடு நூலகம்
10110 10011
10100 10011 1110
余数 r(x)
差错检测
循环冗余校验码(CRC,Cyclic Redundancy check)
在接收端本来应该收到: c(x) = xr· m(x) + r(x) = Q(x)· P(x) 用协商好的生成多项式P(x)去除c(x),从余数来判断是否出错
差错检测方法
循环冗余校验(CRC,Cyclic Redundancy check)
将要传送的信息分成码组M,然后按某一种约定的规律 对每一个信息码组附加一些校验的码元R,形成新的码
组C,使得C中的码元之间具有一定的相关性(即码组中 “1”和“0”的出现彼此相关),再传输到接收端; 接收端根据这种相关性或规律性来校验码组C是否正确 ,还可对出错码组的错定位加以相应的纠正,最后将码 组C还原成信息码组M。
(2) x4· m(x) = 1101011011,0000
(3)
1101011011.0000 10011 商数:1100001010 余数:1110 r(x) = x3 + x2 + x + 0
CAN总线中循环冗余校验码的原理及其电路实现
CAN总线中循环冗余校验码的原理及其电路实现
李书瑞;李明;石龙海
【期刊名称】《电子技术应用》
【年(卷),期】2003(29)10
【摘要】在CAN网络中传输报文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码.为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制.详细介绍了CAN总线中循环冗余校验码的差错控制原理及其实现方法.【总页数】2页(P40-41)
【作者】李书瑞;李明;石龙海
【作者单位】上海大学通信与信息工程学院,200072;上海大学通信与信息工程学院,200072;上海大学通信与信息工程学院,200072
【正文语种】中文
【中图分类】TP3
【相关文献】
1.鞋内安全检测仪的原理及电路实现 [J], 杨琳;胡仁昱
2.声波定向发射器的原理研究与电路实现 [J], 刘军
3.16位循环冗余校验码(CRC)的原理和性能分析 [J], 张平安
4.CAN总线系统原理及在钻井仪表中的应用 [J], 席亚娟;周家磊
5.CAN总线通信原理及其在ZPW-2000A轨道电路系统中的应用 [J], 胡飞龙因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:在can网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。
为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。
详细介绍了can总线中循环冗余校验码的差错控制原理及其实现方法。
关键词:循环冗余校验差错控制报文在can系统中为保证报文传输的正确性,需要对通信过程进行差错控制。
目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。
常用的检错码两类:奇偶校验码和循环冗余校验码。
奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。
下面介绍can网络中循环冗余校验码(即crc码)的原理和实现方法。
1 crc码检错的工作原理crc码检错是将被处理报文的比特序列当作一个二进制多项式a(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为crc校验码附加到原始的报文上,并一起发给接收方。
接收方用同样的g(x)去除收到的报文b(x),如果余数等于p(x),则传输无误(此时a(x)和b(x)相同);否则传输过程中出错,由发送端重发,重新开始crc校验,直到无误为止。
上述校验过程中有几点需注意:①在进行crc计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行crc计算前先将发送报文所表示的多项式a(x)乘以xn,其中n为生成多项式g(x)的最高幂值。
对二进制乘法来讲,a(x)·xn就是将a(x)左移n 位,用来存放余数p(x),所以实际发送的报文就变为a(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。
图1为crc校验的工作过程。
目前已经有多种生成多项式被列入国际标准中,如:crc-4、crc-12、crc-16、ccitt-16、crc-32等。
can总线中采用的生成多项式为g(x)=x15+x14+x10+x8+x7+x4+x3+1。
可以看出,canu叫线中的crc校验采用的多项式能够校验七级,比一般crc校验(crc-4、crc-12、crc-16等)的级数(二~五级)要高许多,因而它的检错能力很强,误判率极低,成为提高数据传输质量的有效检错手段。
图
2 产生crc校验码的硬件电路
2 crc码的电路实现2.1 硬件电路的特点在can总线中为了产生crc码,硬件电路除了具有复位和时钟信号以外,还需要以下两个控制信号的参与:①填充位解除信号destuff,它的有效逻辑值是1;②crc检验的使能信号enable,有效逻辑也为1。
该硬件电路的特点是采用选择器和反相器代替传统设计中用的异或门,既实现了比较功能,又降低了生产成本,同时也为工程师们提供了一种新的设计思路。
2.2 硬件电路图图2即为实现crc码的硬件电路图。
图中需要说明的几点如下:①使能信号和填充位解除信号省略;②crcnxt代表的逻辑值为输入报文序列和crc寄存器的最高位异或的结果;③标号0~14所指示的为15位crc寄存器,上升沿触发;④标号1~6所指示的为选择器和反相器的组合逻辑,实现异或功能,该选择器的逻辑功能为y=ab+ac,具体结构如图3所示。
2.
3 电路工作过程从以上分析可知:①当enable=0时,crc清0;②当enable=1、destuff=1时,进行正常crc计算;③当enable=1而destuff=0时,正在解除填充时,数据暂停传送。
在各个控制信号均有效时,输入报文的每一位都是和crc寄存器的最高位相异和后移入最低位,同时寄存器的第13、9、7、6、3、2位均和其最高位异或,结果分别左移一位;其它未进行异或操作的寄存器位值也分别左移一位,直到报文的每一位都移入crc寄存器为止,此时寄存器中的值取为计算得到的crc码。
如果报文的比特序列长度为16,则需要左移16次才能对报文的每一位均进行处理。
如果以ck表示crc寄存器的第k位位值、ck'表示移位后的第k位位值(k=0,1,2,3……15),则移位规律见表1。
表 1 移位规律表c14'=c13^crcnxtc13'=12c12'=c11c11'=c10c10'=c9^crcnxtc9'=c8c8'=c7^crcnxtc7'=c6^cr cnxtc6'=c5c5'=c4c4'=c3^crcnxtc3'=c2^crcnxtc2'=c1c1'=c0c0'=crcnxt^datain 3 crc校
验码的软件实现crc校验用软件实现起来非常方便。
鉴于目前的资料中介绍的方法多使用c 语言、汇编语言等实现,而缺乏用硬件描述语言实现,这里给出crc码的verilog hdl之行为级描述程序。
本程序在verilog_xl下编译通过,同时在synopsis上成功进行了综合及优化。
//用verilog hdl实现crc码module crc(clk,rst,enable,destuff,datain,crc);input clk;input rst;input enable;input destuff;input datain;output[14:0]crc;reg[14:0]crc;wire crcnxt=datain^crc[14];always@(posedge rst or posedge clk)beginif(rst)crc=0;else if(enable && destuff)beginif(crcnxt)crc<=crc^15h'4599;elsecrc<={crc[13:0],1'b0 5;;endendendmodule
图4 crc仿真波形图
4 仿真波形假设发送的是一个标准格式的远程帧,需求的数据字节为8,标识符序列为10101011000,则对上述程序仿真后的波形如图4所示。
crc序列从第20位开始输出。
crc 校验码的检错能力很强,并且由于crc码检错的软件和硬件实现都很简单,因而被广泛地应用于各类数据校验中。
crc码检错是提高数据传输质量、高效检错的有力手段。