0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN 会收到错误的数据吗?

ZLG致远电子 2024-04-04 08:24 次阅读

CAN-bus总线协议以高稳定性,高容错率而著称于世,然而仍有很多用户在使用的时候担心CAN会接受到错误的信息,在数据里增加了CRC校验的部分,这种做法是否有必要?CAN会收到错误的数据吗?信息的传递,古往今来都是人类无比关注的一个问题。从最原始的肢体语言到高端的电子信号,信息传达的方法五花八门。而对于信息安全的追求也是从古至今未有变过,我国西周时期的《太公兵法》就有过“阴符”“阴书”的设计来保证信息的安全。

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

a3383908-f219-11ee-9118-92fbcf53809c.jpg图2 CANScope总线综合分析仪抓取的报文

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

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

a3402f5a-f219-11ee-9118-92fbcf53809c.png

图3 数据头

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

a343cd04-f219-11ee-9118-92fbcf53809c.png

图4 仲裁段

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

a34776c0-f219-11ee-9118-92fbcf53809c.png

图5 控制段

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

a34ddd08-f219-11ee-9118-92fbcf53809c.png

图6 数据段

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

a351f32a-f219-11ee-9118-92fbcf53809c.png

图7 CRC段

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

a35aad94-f219-11ee-9118-92fbcf53809c.png

图8 ACK段

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

a35ecbea-f219-11ee-9118-92fbcf53809c.png

图9 帧结束经过这样一番抽丝剥茧的分析,CAN的报文结构就这样清晰的展现在我们面前。由于CRC段的存在,CAN出错的概率十分之小。CRC校验所使用的CRC多项式最多可以检测出5个离散错误,或发现长度在15位以下偶然出现的突发错误。CRC校验对SOF位、仲裁段、控制段和数据段的位序列进行计算,但不考虑填充位。CAN协议中规定的15位校验序列源自于BCH代码,它是一种特别适用于127位以下消息长度的循环代码。CAN协议中所应用的15位多项式如下:

X15+X14+X10+X8+X7+X4+X3+1

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

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

a3628190-f219-11ee-9118-92fbcf53809c.png

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

a366f6d0-f219-11ee-9118-92fbcf53809c.jpg

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2741

    浏览量

    463578
  • 工业
    +关注

    关注

    3

    文章

    1820

    浏览量

    46492
  • 电子信号
    +关注

    关注

    1

    文章

    37

    浏览量

    4458
收藏 人收藏

    评论

    相关推荐

    使用Dave IDE将更新的固件配置刷新到XMC4700,会收到J-Link驱动程序错误怎么解决?

    ; 调试器即可刷新,但当我按下调试\"(似乎是按下闪存的按钮)时,我还是会收到 J-Link 驱动程序错误。 你能帮我解决这个问题吗? 我的总体目标是为Distance2Gol上的一条I2C线路配置一个地址,这样我就可以从Arduino向它写入并最终从中接收
    发表于 01-23 07:54

    CAN报文中ACK应答错误的检测原理

    上有一个节点正确接收到数据,则ACK SLOT就会被填入显性电平;那么,接收错误的节点如何来告知发送者此次发送不成功呢?这时候就要用到CAN错误
    发表于 07-02 05:22

    PSoC 5LP:CAN错误管理

    CAN总线写入CAN总线。但他不会收到任何ACK或错误(ACK错误,位错误)发生。所以他将重新
    发表于 12-13 14:40

    为什么进行单片机之间的通讯时从机才会收到数据

    进行单片机之间的通讯时,当把主机电源拔下或者插上一刹那,从机才会收到数据,而且两者之间的导线是热的,不知道是什么原因?
    发表于 07-11 03:39

    使用CH579作为从机向主机notify的时候,发送频繁会收到pending错误怎么解决?

    我在使用CH579作为从机向主机notify的时候,如果发送频繁,经常会收到pending错误,如果在每包之间增加一个延时,就可以解决,现在我希望提高点效率,有没有什么方法可以知道这个notify的状态,当前是否可以发送一类的,或者有什么设置可以让他不会因为发送频繁导致出
    发表于 08-31 07:27

    如何保证CAN数据的正确性

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

    STM32的CAN收发数据死在硬件错误中断

    STM32的CAN收发数据死在硬件错误中断使用uCosIII的消息队列,当CAN收到数据,使用
    发表于 12-09 09:36 22次下载
    STM32的<b class='flag-5'>CAN</b>收发<b class='flag-5'>数据</b>死在硬件<b class='flag-5'>错误</b>中断

    关于CAN总线错误的相关知识

    在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误的基础概念、CAN总线错误
    的头像 发表于 05-27 17:56 3090次阅读

    CAN总线错误的类型介绍

    在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误的基础概念、CAN总线错误
    的头像 发表于 06-13 16:08 8202次阅读

    虹科干货 | 带你全面认识“CAN总线错误”(二)——CAN错误类型

    AsimpleintrotoCANerrorsCAN总线错误介绍在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误
    的头像 发表于 06-09 09:46 2159次阅读
    虹科干货 | 带你全面认识“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(二)——<b class='flag-5'>CAN</b><b class='flag-5'>错误</b>类型

    虹科干货 | 带你全面了解“CAN总线错误”(三)——CAN节点状态与错误计数器

    AsimpleintrotoCANerrorsCAN总线错误介绍在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误
    的头像 发表于 06-09 09:46 2389次阅读
    虹科干货 | 带你全面了解“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(三)——<b class='flag-5'>CAN</b>节点状态与<b class='flag-5'>错误</b>计数器

    虹科干货 | 带你全面认识“CAN总线错误”(一)——CAN总线错误错误

    AsimpleintrotoCANerrorsCAN总线错误介绍在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误
    的头像 发表于 05-27 10:39 4606次阅读
    虹科干货 | 带你全面认识“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(一)——<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>与<b class='flag-5'>错误</b>帧

    虹科干货 | 带你全面认识“CAN总线错误”(二)——CAN错误类型

    AsimpleintrotoCANerrorsCAN总线错误介绍在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误
    的头像 发表于 06-02 09:41 1423次阅读
    虹科干货 | 带你全面认识“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(二)——<b class='flag-5'>CAN</b><b class='flag-5'>错误</b>类型

    虹科干货 | 带你全面了解“CAN总线错误”(四)——在实践中生成和记录CAN错误

    AsimpleintrotoCANerrorsCAN总线错误介绍在本系列文章中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误
    的头像 发表于 06-09 10:21 1698次阅读
    虹科干货 | 带你全面了解“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(四)——在实践中生成和记录<b class='flag-5'>CAN</b><b class='flag-5'>错误</b>

    认识CAN总线错误 CAN总线错误分析与解决

    认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样才能更容易地理解CAN 总线是如何去发现并解决错误的。
    发表于 08-14 15:18 6145次阅读
    认识<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b> <b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>分析与解决