摘要:在CAN网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。详细介绍了CAN总线中循环冗余校验码的差错控制原理及其实现方法。 关键词:循环冗余校验 差错控制 报文
在CAN系统中为保证报文传输的正确性,需要对通信过程进行差错控制。目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。常用的检错码两类:奇偶校验码和循环冗余校验码。奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。下面介绍CAN网络中循环冗余校验码(即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.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。
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) begin if(rst)crc=0; else if(enable && destuff) begin if(crcnxt) crc<=crc^15h'4599; else crc<={crc[13:0],1'b0}; end end
endmodule 假设发送的是一个标准格式的远程帧,需求的数据字节为8,标识符序列为10101011000,则对上述程序仿真后的波形如图4所示。Crc序列从第20位开始输出。 CRC校验码的检错能力很强,并且由于CRC码检错的软件和硬件实现都很简单,因而被广泛地应用于各类数据校验中。CRC码检错是提高数据传输质量、高效检错的有力手段。 |
CAN总线中循环冗余校验码的原理及其电路实现
- CAN总线(129497)
相关推荐
800Mbps准循环LDPC码编码器的FPGA实现
800Mbps准循环LDPC码编码器的FPGA实现引言低密度校验码肠 ,码 由于其接近香农限的纠错性能,使得其成为当前信道编码的研究热点。 码面临的一个关键问题是其较高的编码复杂度和编码时延。 形耐
2012-08-11 11:44:45
CAN/CAN FD通信中有哪些循环冗余校验(CRC)的方法?
数据校验是为保证数据的完整性进行的一种验证操作。CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据。在现场总线通信和控制的实际应用中,工业应用环境
2019-09-11 11:51:22
CAN通信控制的CRC校验
CAN 节点中设有错误检测、标定和自检等措施。检测错误包括多种方式,其中最常用、最有效的一种是 CRC 校验。CRC 序列由循环冗余校验码求得的帧检查序组成。为实现 CRC 计算,被除的多项式系数由
2018-12-24 10:28:14
实现功能安全性冗余CAN参考设计
描述该参考设计展示了如何在物理层实施冗余(并行)CAN 以实现功能安全性。其中包括两个 SN65HVD257 CAN 收发器以及可确保两个收发器收到相同数据的额外逻辑。特性较短的传播延迟和快速的循环
2022-09-23 07:09:05
校验码码距是如何去定义的
嵌入式系统设计师学习笔记⑨:校验码码距的定义:一个编码系统的码距就是整个编码系统中任意(所有)两个码字(合法编码)的最小距离。例如:要对A,B两个字母进行编码若用1位长度的二进制编码,若A=1,B
2021-12-22 07:21:56
CRC32校验码主要用来做什么的
CRC32校验码主要用来检验数据在传输过程中的完整性一、发送方1、计算要发送数据的CRC32码2、发送数据包3、数据包内容 数据+CRC32码二、接收方1、接收数据包2、提取 数据 和CRC32码3
2022-02-25 06:29:27
CRC循环冗余校验的算法
想问下51单片机和所有嵌入式中一个很基本也很常见的问题,CRC循环冗余校验的算法中生成多项式为什么要那样取(有个生成多项式的表格),如果信息段中一位或多位传输错误,校验段是怎样保证唯一性识别错误的。谢谢
2015-01-21 21:02:15
CRC校验方法通过CAN总线通信来实现
,接收节点在ACK时隙位中发送显性状态,从而覆盖发送器的隐性状态。在不匹配的情况下,接收节点在ACK定界符之后发送错误帧。目前CANFD的控制器CRC校验实现过程会相对复杂一点,在一个CAN总线网络中,帧
2019-09-25 15:41:50
CRC是什么意思
CRC即循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种
2021-08-11 06:41:50
LABVIEW编写的程序CRC16 X32得到的校验码不正确,请大家帮我看哈是哪里的问题,谢谢
LABVIEW编写的程序CRC16/X32得到的校验码不正确,请大家帮我看哈是哪里的问题,谢谢!输入16进制数据:0100 0000 0800 0102 01正确校验码为:DFDE
2022-03-02 14:44:15
ModBus CRC16校验码学习笔记(附手稿)精选资料分享
ModBus CRC16校验码学习笔记(附手稿)学习背景最近在玩轮毂电机的驱动控制,该电机配套的驱动器可以使用485或者CAN总线协议。该电机的485通信协议的报文中最后两个字节按照某宝卖家
2021-08-30 06:28:27
Modbus库开发笔记之八:CRC循环冗余校验的研究与实现
`谈到Modbus通讯自然免不了循环冗余校验(CRC),特别是在标准的串行RTU链路上是必不可少的。不仅如此在其他开发中,也经常要用到CRC 算法对各种数据进行校验。这样一来,我们就需要研究一下这个
2017-08-19 19:47:40
PSoC 4 循环冗余校验 (CRC)
循环冗余校验 (CRC) 组件的默认用途是根据任意长度的串行比特流计算 CRC。在数据时钟的上升沿上对输入数据进行采样。在启动前,CRC 值复位为 0,或可用初始值作为种子值。完成比特流时,可读取计算出的 CRC 值
2013-07-04 11:30:02
dfplayer mini播放模块校验码怎么计算
产品说明如下:链接根据官方说明,可以用串口发送命令来控制模块的工作,串口指令需要两位的校验码,琢磨好久,都算不对,后来发现是文档标识错误。按图片所写,即可算出校验码。
2022-01-07 07:16:34
labview 中MODBUS校验码计算方法字符串
字符串互联后通过MODBUS校验码校验程序,发出的数据不正确,但是我把需要校验的数据直接填在MODBUS校验码校验程序内部,数据是正确的,原因在哪呢?
2020-05-20 19:16:14
labview DAQ----MODBUS CRC16循环冗余校验
说明:CRC循环冗余错误校验计算方法 CRC—16(循环冗余错误校验)生成CRC—16校验字节的步骤如下: (1)装入一个16位寄存器,所有数位均为1。 (2)该16位寄存器的高位字节与开始8位字节
2011-11-07 10:46:20
【HAL库每天一例】第031例:CRC-循环冗余校验
();/* CRC循环冗余校验初始化 */MX_CRC_Init();/* 进行冗余循环校验,获取校验码*/uwCRCValue = HAL_CRC_Accumulate(&hcrc
2016-06-05 11:00:19
一个加校验码的函数
','0','0','0','0','\n',}; // 函数说明:加校验码函数void crc(void){ uchar j,i=0,k; for(j=0;j>4;if(k>=0&&k=10&&k=0&&i=10&&i
2016-11-01 20:00:59
串口发送的候为什么数组中最后两个CRC校验码不能发送出去
校验码收不到,但在MDK中确实看到数组中是有CRC校验码的,我在for循环发送前面加一个断点,再全速运行,最后两个字节可以收到;在for循环后的break处加一个断点,也可以接收到最后两个字节,后来我在
2019-06-19 04:35:16
串口通讯 波特率设置的大小对CRC校验码的影响
今天编写个程序 6010A的 下位机做从 用串口通讯测试 当波特率设置38400时我返回的CRC校验码是正确的 但设置是19200或者9600时,用校验码计算器计算校验码是错误的,所有的返回数据还都是正确的,这个是怎么回事,求大神解答!
2018-12-18 15:16:34
单片机校验码计算问题
单片机有一串报文校验码 4D 30 35 30 30 30 35 30 35 30是用SUM1校验方式,最后校验后显示的是01,D9 是怎么算出来的
2019-11-23 08:31:41
如何在MDK中查看编译后的16位校验码?
用过PIC单片机的人都知道,其开发环境MPLAB工具栏上有个地方会显示代码编译后的16位校验码,比如E0C3之类的,想问下KEIL4中如何查看,谢谢大家
2019-08-21 22:19:43
实用资料——CRC校验码生成算法
同样方法进行计算,只是计算的内容不要包括最后两个字节,然后比较生成的CRC校验码和数据帧中的是否相同即可。如果发送方交换CRC校验码的高低8位,则接收方可以计算包括交换后的CRC码在内的整个数据帧,传输正确的话结果恒为0x0000。
2012-01-11 21:10:42
实用资料——CRC校验码生成算法
同样方法进行计算,只是计算的内容不要包括最后两个字节,然后比较生成的CRC校验码和数据帧中的是否相同即可。如果发送方交换CRC校验码的高低8位,则接收方可以计算包括交换后的CRC码在内的整个数据帧,传输正确的话结果恒为0x0000。
2012-02-14 19:45:06
常用编码(BCD编码、余3码、格雷反射码、奇偶校验码)
1111 1000 4、奇偶校验码在数据的存取、运算和传送过程中,难免会发生错误,把“1”错成“0”或把“0”错成“1”。奇偶校验码是一种能检验这种错误的代码。它分为两部分;信息位和奇偶校验位。有奇数个“1”称为奇校验,有偶数个“1”则称为偶校验。
2011-04-11 10:00:29
怎么看这款单片机的校验码是多少呢
很久以前写的程序,由于程序有很多版本,所以想看一下最终版的程序校验码来确定最终的程序。请问如何用烧录器来看校验码呢我开始是直接用CSWrite来read chip看看单片机的校验码但是最后发现每一个的校验码都是FFFF,就很奇怪,想问一下怎么看校验码
2020-07-01 16:16:01
汽车CAN总线技术
和防盗控制器互相存储对方信息,校验码中还掺杂了随即码,从而大幅提高防盗能力。校验信息通过Can-Bus传递大幅提高了信息传递的可靠性,使防盗系统的工作稳定可靠。就目前而言,Can-Bus总线技术一般
2015-06-24 13:56:39
计算CRC-16循环冗余校验码的程序开发
字节的处理就是重复第2步到第5步了7、把所有的欲发送或接收消息这样处理后, CRC寄存器里的值就是我们最终需要得到的CRC校验码。如果你能正确回答我的问题,那么恭喜你,你自己可以用Visual
2010-12-18 22:56:18
请问CRC16校验码的程序该怎样编写?
比如:求CRC16校验码的程序该怎样编写?Dim bytSj() As BytebytSj(1) = Text2.TextbytSj(2) = 5bytSj(3) = 0bytSj(4
2019-03-14 06:35:45
转:循环冗余校验(CRC)算法入门引导
写给嵌入式程序员的循环冗余校验(CRC)算法入门引导前言CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC
2016-08-01 18:32:16
基于C8051F的CRC校验算法的实现
介绍了CRC(循环冗余码校验)原理及集成混合信号片上系统单片机C8051F的新特性,推导获得以字节为单位的数据序列CRC码递推算法,利用C8051F单片机的自带CAN2.0B总线接口控制器可以很
2009-03-14 08:39:5046
循环冗余校验码的单片机及CPLD 实现
循环冗余码校验(CRC)是一种可靠性很高的串行数据校验方法。介绍循环冗余码校验的基本原理,并分别用单片机和CPLD 作了循环冗余码校验的软件实现和硬件实现。包括汇编语言和VHDL
2009-04-16 14:19:4416
基于CAN 总线的双机冗余系统设计方法
冗余技术是提高计算机控制系统可靠性的重要措施之一。本文在分析传统双机冗余系统不足之处的基础上,提出基于CAN 总线的双机冗余系统的设计方法。此方法同样适用于多机冗余
2009-05-14 14:39:4235
循环冗余校验在SOPC中的自定义指令实现
NIOS II 软核处理器是Altera 公司一款灵活高效的嵌入式处理器,常应用于控制和通信领域。循环冗余校验(CRC)广泛应用于各种数据校验中。本文通过NIOS II 的自定义指令,成功地
2009-07-07 14:06:2421
循环冗余校验在单片机无线通信中的应用
本文介绍了循环冗余码(CRC 码)校验的原理和计算方法,分析两种查表冗余校验快速算法,提出新型分段查表法,良好地解决以单片机为核心的湿度测控系统无线数据传输差错控
2009-07-30 15:36:3534
电话网远程通信中CRC校验码的设计及实现
本文介绍了基于电话网远距离分布式测控系统的通信方法,重点介绍了传输协议中CRC 循环校验码校验原理,CRC 码的生成、检测方法及其在Dephi 环境中的实现,并给出了实例。
2009-08-12 10:24:2118
基于素域构造的准循环低密度校验码
该文提出一种基于素域构造准循环低密度校验码的方法。该方法是Lan 等所提出基于有限域构造准循环低密度校验码的方法在素域上的推广,给出了一类更广泛的基于素域构造的准循
2010-03-05 17:04:523
基于素域构造的准循环低密度校验码
该文提出一种基于素域构造准循环低密度校验码的方法。该方法是Lan 等所提出基于有限域构造准循环低密度校验码的方法在素域上的推广,给出了一类更广泛的基于素域构造的准循
2010-03-06 10:38:1513
利用无损压缩降低循环冗余校验的错误漏检率及其电路实现
循环冗余校验(CRC)算法在很多领域都有广泛的应用。对于确定格式的CRC 校验码生成多项式,其错误漏检率基本为确定值。因此待检数据的长度越大,出现错误而不会被检测到的机会
2010-03-06 11:24:3415
基于LabVIEW的Modbus协议两种校验码的实现方法
基于LabVIEW的Modbus协议两种校验码的实现方法
介绍基于LabVIEW的Modbus协议两种校验码的实现方法,该方法可在基于PC机的测控系统中加以实际运用。
2009-10-13 00:08:193926
海明校验码
海明校验码
这是由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位
2009-10-13 16:46:462077
循环冗余校验码---CRC码
循环冗余校验码---CRC码
二进制信息位串沿一条信号线逐位在部件之间或计算机之间传送称为串行传送。CRC(Cyclic Redundancy c
2009-10-13 16:52:386924
奇偶校验码,奇偶校验码原理是什么?
奇偶校验码,奇偶校验码原理是什么?
奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它是由n-1位信息元和1位校验元组成,可
2010-03-17 17:39:1261481
循环冗余校验确保正确的数据通信
有几种方法可以确保收到正确数据后才执行动作。最简单的方 式就是控制器回读所发送的数据,另一种替代方法是循环冗余校验(CRC)
2011-06-02 10:09:281088
crc校验基本原理
本内容介绍了crc校验基本原理,CRC几个基本概念,CRC码的生成步骤.CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长
2011-12-21 16:55:044500
基于FPGA的循环冗余校验实验系统
文章首先分析了循环冗余校验码的功能,在此基础上提出了基于FPGA的实现方法,详细阐述了CRC校验编解码的实现方法,并提出了基于现有的实验箱设备实现小型的CRC校验系统的总体设计
2012-03-26 13:52:101572
CRC校验码算法的研究与实现
为了提高实际通信中检查信号传输错误的能力,提高和推广CRC校验技术,本论文用逻辑代数知识、按模运算、代数知识和C语言编程工具设计了几种具体实用的CRC校验码的计算方法,这些
2012-05-28 15:41:070
CRC基本原理及其两个重要性质的介绍及FPGA实现
CRC校验码,根据校验码位数的不同常用的CRC循环冗余校验算法有:CRC8、CRC12、CCITT CRC16、ANSI CRC16、CRC32。这次我只实现了CRC8的算法,至于CRC16
2017-09-29 15:38:0523
crc校验简记式意思
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面
2017-12-04 08:51:241642
crc校验方法及示例
CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种
2017-12-04 09:35:1513594
crc循环冗余校验码算法
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
2017-12-04 10:11:3921673
crc校验错误_crc校验错误怎么解决
CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种
2017-12-05 15:34:3043087
荐读:基于FPGA 的CRC校验码生成器
,循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定。 2.CRC校验的基本原理: CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如
2018-06-13 11:18:506206
CAN总线错误类型及校验方法
你了解CAN总线吗?你知道总线中有哪些错误吗?你想了解总线中的错误是如何校验以及错误之间的关系吗?下文为大家揭开它神秘的面纱。
2018-06-26 10:29:2728436
如何用SMART编写CRC校验算法程序
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
2018-11-26 09:50:278568
基于TMS320C64x的CRC校验算法分析
CRC(Cyclic Redundancy Check)循环冗余校验码是数据通信领域中常用的一种差错校验码,在早期的通信中运用广泛。
2020-08-10 16:46:511255
CAN/CAN FD通信中的循环冗余校验(CRC)方法
传统CAN以及目前CAN FD采取的校验机制,保证传输过程中遭受破坏的帧数据几乎不会被接收以及应答成功,能有效防止物理层传输错误,让用户界面不需要额外关注帧传输数据的正确性。
2020-12-26 02:32:251116
并行循环冗余校验算法
循环冗余码校验(CRC)是一种众所周知的错误检测代码,已广泛用于以太网,PCIe和其他传输协议中。现有的基于FPGA的实现解决方案在高性能场景中会遇到资源过度利用的问题。填充零问题和可编程性的引入
2022-02-08 16:42:07988
使用FPGA实现循环冗余校验CRC编码器的设计资料说明
介绍了循环冗余校验(CRC)编码器的设计及FPGA实现过程,采用原理图输入法对整个系统进行了编译和仿真,并在芯片EPlK30TCl44-3中对该设计的核心部分进行了测试验证。结果表明,试验数据与理论分析结果完全相符。
2021-02-05 17:00:0019
CRC校验码并行计算的FPGA实现
用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它各种并行计算方法。以经典的LFSR 电路为基础 ,研究
2021-03-28 09:34:2430
Verilog数字系统基础设计中的循环冗余校验
CRC(循环冗余校验) CRC介绍 临时“插播”,后面有实例。 CRC(Cyclic Redundancy Check,循环冗余校验)是数据帧传输中常用的一种差错控制编码方式,针对要发送的数据
2021-08-17 17:08:566229
CRC循环冗余校验简介
CRC 是Cyclic Redundancy Check的缩写,循环冗余校验,用于校验数据传输的完整性。一般情况下在数据发送前计算CRC校验值,附在发送数据之后,数据接收方也按照同样方法计算CRC,然后对比计算结果,如果一致说明数据数据传输无误,否则数据传输出错。
2023-04-24 13:04:543155
华大电子MCU CIU32M010、CIU32M030循环冗余校验计算单元及电源管理
华大电子MCU CIU32M010、CIU32M030循环冗余校验计算单元及电源管理
2023-06-20 10:22:03354
评论
查看更多