如何保证CAN数据的正确性

发布者:花钱123最新更新时间:2017-07-20 来源: ZLG-致远电子关键字:CAN 手机看文章 扫描二维码
随时随地手机看文章

CANbus总线协议以高稳定性,高容错率而著称于世,然而仍有很多用户在使用的时候担心CAN会接受到错误的信息,在数据里增加了CRC校验的部分,这种做法是否有必要,CAN 会收到错误的数据吗?


信息的传递,古往今来都是人类无比关注的一个问题。从最原始的肢体语言到高端的电子信号,信息传达的方法五花八门。而对于信息安全的追求也是从古至今未有变过,我国西周时期的《太公兵法》就有过“阴符”“阴书”的设计来保证信息的安全。

图 1让人心忧的信息安全

而在我们的工业生产中,为了保证信号的正确传递的方法更是五花八门。而在信息传递过程中采取CAN协议是一种常见的减少出错率的方案。那么,问题来了,CAN协议何德何能能让传输的信号不出错呢?这里就让我们来深入分析一番。利用CANScope总线综合分析仪来抓取一帧CAN的报文如下:

图 2CANScope总线综合分析仪抓取的报文

从图中可以看出CAN协议采取了差分信号传输的方式,可以有效杜绝来自外部的屏蔽干扰。而在最后一行的协议解析部分,进过观察我们发现一帧信号被分割成了不同颜色的一段段,每一段究竟是何含义?保证信号正确传输的秘密就隐藏在这些段落里。让我们来庖丁解牛分别为大家分析下。

· 数据头:在数据的开始,是一个1位的数据头,表示数据帧都开始

图 3数据头

· 仲裁段:标志了本帧数据的优先级,其中包含了一个ID码,仲裁段中的ID码值越小,帧数据的优先级就越高,CAN控制器在发送数据的同时会监听电缆上的电平状态,如果发现仲裁位的电平与本节点发出的电平不一致,则退出发送放弃总线使用权。这样的设计可以提高总线的利用率,并且能让重要的信息优先发送。


图 4仲裁段

· 控制段:共六位,用于表示数据长度。在数据的控制段存有保留位以供未来协议规则扩展。

图 5控制段

· 数据段:经过前面的铺垫,数据段所编码的即是本帧数据所需要传达的信息。一帧信号可以传送0~8位数据,每字节8位。短小精悍保证信息的实时性。

图 6数据段

· CRC段:CRC段即是保证数据准确的一个关键所在(敲黑板)。为防止信号由于某种原因被更改,CAN的数据链路层上加入了CRC校验。发送节点会根据发送内容计算得到一个CRC值填入CRC段进行发送,而相应的接收节点也会对接收到的数据进行计算,并将计算出的CRC值和接收到的进行比对。能够对得上暗号的才是自己人,如果对照有误那么就说明传输的信号出现了问题,需要反馈错误消息。这样的机制保证了CAN不会收到错误的信息,其安全性毋庸置疑。


图 7CRC段

· ACK段:用于表征信号是否被正确接收,接受正常的节点在ACK的第一位会发出一个显性位。根据ACK的状态,发送节点就可以了解到数据是否被传输成功。若发送失败,发送节点会根据自身状态来决定是否重传。

图 8ACK段

· 帧结束:由7个隐性位组成,表示该帧结束。

图 9帧结束

经过这样一番抽丝剥茧的分析,CAN的报文结构就这样清晰的展现在我们面前。由于CRC 段的存在,CAN出错的概率十分之小。


CRC校验所使用的CRC多项式最多可以检测出5个离散错误,或发现长度在15位以下偶然出现的突发错误。CRC校验对SOF位、仲裁段、控制段和数据段的位序列进行计算,但不考虑填充位。CAN协议中规定的15位校验序列源自于BCH代码,它是一种特别适用于127位以下消息长度的循环代码。CAN协议中所应用的15位多项式如下:


在发送或接收收到数据场的最后一位后,CRC寄存器就会包含待传输或者待接收的CRC序列。将计算出的CRC序列与接收到的CRC序列相除,接收器就可以识别出可能存在的CRC错误。


有些工程师担心CAN 收到错误的信息,在数据中又做了CRC校验的工作,岂不知在数据链路层CAN已经自备了CRC校验的工作,在数据中再加入CRC校验实际上是没有什么必要的。

CAN总线不但规定了物理层的差分传输规范,还规定了数据链路层的分包校验规则,而这两个都是由硬件自动完成,接收时,无需考虑是否有错误,只要从缓冲区取出数据即可,CAN的CRC校验可以保证错误率在10的-9次方以下,毫无疑问是一种非常安全可靠的传输协议。

CAN总线在信号的实时传输方面具有非常好的优越性,通过CANscope总线分析仪可以很好的完成CAN总线的故障排查与检测标定。致远电子凭借自身掌握的核心技术可为用户解决工业现场的各种疑难问题,期待与您一同成长。


关键字:CAN 引用地址:如何保证CAN数据的正确性

上一篇:CAN为什么会发送失败
下一篇:通讯管理机新方案解决办法

推荐阅读最新更新时间:2024-05-03 01:21

STVD+COSMIC编译工程时can't open file crtsi0.sm8
用STVD+COSMIC编译工程时出现以下错误(加载的别人的工程): #error clnk Debugdemo.lkf:47 can't openfile crtsi0.sm8 #error clnk Debugdemo.lkf:60 can't openfile libis0.sm8 #error clnk Debugdemo.lkf:61 can't openfile libm0.sm8 解决方法: 打开STVD软件,选择Tools- Options - Directories - Show Directories for选择:Libraryfiles 将D:program filesCOSMIC
[单片机]
采棉机智能监控系统CAN应用层协议设计
引言     随着我国大型农业机械装备现代化进程的不断推进,农业机械作业信息滞后、时效性差,机收的组织者和参与者对信息快捷、准确、详细的要求难以满足等问题日益突显,同时目前大型农业机械本身缺少有效的工作状态关键信息采集与故障诊断报警手段,致使无法及时掌握其工作状态与寿命状况,降低了农业机械工作效率和作业质量,影响了农业机械装备的发展。     CAN(controller area network)总线凭其可靠的数据通信和良好的错误检测能力,在控制和检测领域备受重视,被广泛应用在环境温度恶劣、电磁辐射强和振动大的工业环境。CAN为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。     目前,C
[嵌入式]
找到CAN总线(故障)节点的三种办法
CAN总线的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持,在带来便利的同时,也为工程师们故障排查增加了难度,所以本文主要给大家介绍了找到CAN总线(故障)节点的三种办法。 1、 将所有节点都拔掉,依次往上接。 当CAN总线出现故障后将所有节点都拔掉,之后一个一个节点往上接,接到系统出错时,即找到最后一个插入节点为故障节点。如下这种情况,图1为新能源车控制总线,车辆启动后仪表显示滞后,显示错误。导致司机判断延迟与错误,影响交通安全。将所有节点拔掉之后,采用此方法挨个节点往上接,直到电机控制器接到总线上出现了通信故障,初步判断为电动机运行产生的强干扰,串扰到CAN总线上,导致帧错误增加,重发频繁,正
[嵌入式]
找到<font color='red'>CAN</font>总线(故障)节点的三种办法
Canalys:2020年Q1全球智能手表出货1430万,苹果居首位
市调机构Canalys的最新报告显示,尽管2020年第一季度新冠肺炎肆虐,但全球智能手表出货量同比增长12%,达1430万块。 图源:Canalys 从厂商排名上看,苹果以36.3%的市场份额居首,出货520万块;排名第二的是华为,出货210万块,市占为14.9%;三星则以出货110万块的成绩排名第三,市场份额为12.4%。 对于苹果的表现,Canalys表示,尽管苹果的出货量同比下降了13%,但其智能手表平台仍是世界上最大的平台,并且正在稳定增长。WatchOS在本季度获得了400万新的活跃用户,使安装的总人数估计达到7,000万。在接下来的三个月中,Apple Watch的累计出货量将达到1亿部。 图源:Canalys
[手机便携]
<font color='red'>Can</font>alys:2020年Q1全球智能手表出货1430万,苹果居首位
CAN总线信号传输的位定时与位同步理论
CAN协议与其它现场总线协议的区别中有一个是:它使用同步数据传输而不是异步传输(面向字符)。这意味着传输性能得到更有效的发挥,但是另一方面,这需要更加复杂的位同步方法。   在面向字符的协议中的位同步实现起来很简单,在接受每个字符的起始位时进行同步。但在同步传输协议中,只有一帧的开始才有一个起始位。这通常不足以使接收器的位采样和发送器保持同步。为了使接收器在帧结束时也能正确采样到接收的位流,就需要接收器不断进行重新同步。重新同步表示在位流中每个有效的信号边沿都可对接收信号的时钟周期进行检测。在信号边沿间的最大时间周期内,发送和接受振荡器之间最大可能的时间差必须在一个位间隔内的标称采样点之前和之后通过足够的空闲时间(“相位缓冲段”
[嵌入式]
汽车CAN-FD总线通信应用研究
传统的车载CAN总线最高支持500 kbit/s的传输速率,每帧只能承载8 bytes的数据,由于传输速率和数据长度的限制,在自动驾驶和智能网联对网络通信的高要求背景下,使用传统 CAN 通信势必会导致总线负载率过高从而导致网络拥堵,传统CAN总线通信的瓶颈逐渐凸显。 2011年,为满足带宽和可靠性的需求,Bosch首次发布了 CAN-FD(CAN With Flexible Data-Rate)方案,CAN-FD继承了传统CAN总线的主要特性,使用改动较小的物理层,双线串行通信协议,依然基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制,在此基础上对带宽和数据长度进行优化,将逐步取代传统CAN成为下一代主流汽车总
[嵌入式]
汽车<font color='red'>CAN</font>-FD总线通信应用研究
CAN总线数据采集系统
引 言     在工业控制中,为了保证系统的可靠运行,需要检测周围的环境变量(如温度、气压、湿度等)。通常的做法是将分布在各处的传感器采集到的信号通过各自的线路连接到监控中心,这种方式在有效地完成检测任务的同时也造成了线路资源的极大浪费。因此,提出了简化线路布局的要求。CAN(控制器局域网)是串行通信协议,能有效支持高安全等级的分布实时控制,同时在理论上,CAN总线网络内的节点近乎没有限制。基于此,本设计将一种基于数字信号控制器的CAN总线数据采集系统作为一个CAN节点,每一个需要监控的区域放置一个CAN节点,各个节点通过CAN总线与监控中心实施通信。系统总体框图如图1所示。 1 硬件构成     该数据采集系统由两部分构
[嵌入式]
STM32单片机的can总线的配置
STM32的can总线的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_
[单片机]
STM32单片机的<font color='red'>can</font>总线的配置
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved