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

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

3天内不再提示

CAN总线错误处理介绍

智能汽车电子与软件 来源:电控知识搬运工 2023-09-20 17:09 次阅读

8d0bb4ee-5790-11ee-939d-92fbcf53809c.jpg

CAN怎样处理错误

错误处理内建在CAN协议中,对CAN系统的运行十分重要。错误处理的目标是检测CAN总线上出现的报文中的错误,从而传送器可以重传出错的报文。总线上的每个CAN控制器都会尝试检测报文中的错误。如果发现错误,发现节点将传送一个错误标志,从而中断总线通信。其它节点将检测错误标志导致的错误(如果它们尚未检测到初始错误)并采取合适的措施(例如丢弃当前报文)。

每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为,很有可能是传送器发生了故障!当任何错误计数器增加到超过某个值时,节点将首先进入“错误被动”,也就是说,它在检测到错误时不会积极地阻止总线通信,然后“离开总线”,这意味着节点根本不参与总线通信。

使用错误计数器,CAN节点不但可以检测故障,而且可以执行错误限制。

错误检测机制

CAN协议定义了五种以上不同的方法来检测错误。其中两种工作在位层次,另外三种工作在报文层次。

位监视

位填充

帧检查

应答检查

循环冗余检查

1. 位监视

CAN总线上的每个传送器都会监视(也就是回读)传送的信号电平。如果真正读到的位电平与传送的位电平不同,会发出信号指示位错误(仲裁过程中不会发出位错误)。

2. 位填充

节点连续发送五个具有相同电平的位后,将在发送出去的位流中加上第六个相反电平的位。接收方将删除这个额外的位。这样做是为了避免总线上出现过度的直流电成分,但它同时也给予了接收方检测错误的额外机会:如果总线上出现五个以上相同电平的连续位,会发出信号指示填充错误。

3. 帧检查

CAN报文的一些部分具有固定的格式,也就是说,标准明确定义了何种电平和何时出现这种电平(CRC定界符、ACK定界符、帧结束以及间歇,但是间歇还有一些另外的特殊错误检查规则)。如果一个CAN控制器在这些固定字段中的一个中检测到无效值,将发出组成错误。

4. 应答检查

总线上正确接收报文的所有节点(不管这些节点是否对报文内容“感兴趣”)预期将在报文中所谓的应答时隙中发送一个显性电平。这是,发送方将发送一个隐性电平。如果发送方无法在应答时隙中检测到显性电平,会发出应答错误的信号。

5. 循环冗余检查

每个报文都包含一个15位的循环冗余校验和(CRC)。节点如果在报文中检测到与自己计算所得不同的CRC,将发出CRC错误的信号。

错误限制机制

总线上的每个CAN控制器都将在每个报文中尝试检测以上列出的错误。如果发现错误,发现节点将发送一个错误标志,从而停止总线通信。其它节点将检测到由错误标志引发的错误(如果它们尚未检测到原始错误)并采取恰当的措施(也就是丢弃当前报文)。

每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为很有可能是传送器发生了故障!

节点开始时处于主动错误模式。当两个错误计数器中的任何一个的计数超过127时,当两个错误计数器中的任何一个计数超过127时,节点将进入称为被动错误的状态。当传送错误计数器达到255以上时,节点将进入总线离线状态。

1.主动错误节点将在检测到错误时发送主动错误标志。

2.被动错误节点将在检测到错误时发送被动错误标志。

3.总线离线节点不会在总线上传送任何内容。

增加和减少错误计数器的规则略显复杂,但是原理比较简单:传送错误的步进为8个错误点数,而接收错误的步进为1个错误点数。正确传送和/或接收的报文会减小计数器值。

示例(稍加简化):假设总线上的节点A运气不好。不管什么时候A发送报文都发生失败(由于种种原因)。每次失败时,它的传送错误计数器增加8并发送主动错误标志。然后它将尝试重传报文,但是一直失败。

当传送错误计数器超过127时(也就是在16次尝试之后),节点A进入被动错误模式。区别在于,它现在将在总线上传送被动错误标志。被动错误标志包含6个隐性位,不会影响其它的总线通信,所以其它节点不会侦听到有关总线错误的反馈。但是,A继续增加其传送错误计数器。当计数值超过255时,节点A最终放弃传送并进入总线离线模式。

其它节点怎样响应节点A?对于A传送的每个主动错误标志,其它节点将为其接收错误计数器增加1。当A进入总线离线状态时,其它节点的接收错误计数器的计数大大低于错误被动的限制值(127)。每次正确收到一条报文,这个计数值将减1。但是,节点A将停留在总线离线状态。

大部分CAN控制器将为两种状态提供状态位(和相应的中断):

“错误警告” – 一个或两个错误计数器的计数超过96

“总线离线”,如上所述。

一些控制器(但不是所有)还为被动错误状态提供一个位。一些控制器还可以直接访问错误计数器。

CAN控制器在发生错误时自动重传报文的特性有时候会很烦人。市场上至少有一种控制器(飞利浦公司生产的SJA1000)允许对错误处理完全人工控制。

总线故障模式

ISO 11898标准列出了CAN总线线缆的几种故障模式:

1.CAN_H中断

2.CAN_L中断

3.CAN_H短路到电池电压

4.CAN_L短路到接地

5.CAN_H短路到接地

6.CAN_L短路到电池电压

7.CAN_L短路到CAN_H线路

8.CAN_H和CAN_L在同一个位置中断

9.丢失到终端网络的连接

对于故障1-6和9,建议减小S/N比率保持总线继续工作。对于故障8,建议保持产生的子系统继续工作。对于故障7,可以选择减小S/N比率继续工作。

实践中,使用82C250类型收发器的CAN系统无法在发生故障1-7时继续工作,在发生故障8-9时可能无法继续工作。

但是,存在诸如TJA1053等容错能力强的驱动程序可以处理所有故障。通常,获得这种容错能力的代价是最大速度受到限制。对于TJA1053,最大速度是125kbps。

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

    关注

    57

    文章

    2624

    浏览量

    461996
  • 计数器
    +关注

    关注

    32

    文章

    2229

    浏览量

    93819
  • 总线
    +关注

    关注

    10

    文章

    2794

    浏览量

    87585

原文标题:CAN总线错误处理介绍

文章出处:【微信号:智能汽车电子与软件,微信公众号:智能汽车电子与软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CAN控制器总线错误分析之CAN节点BusOff恢复过程分析与测试

    总线关闭(bus off)是 CAN节点比较重要的 错误处理机制。那么,在 总线关闭状态下, CAN节点的恢复流程是怎样的?又该如何理解节点恢复
    发表于08-04 11:16 1.4w次阅读
    <b class='flag-5'>CAN</b>控制器<b class='flag-5'>总线</b><b class='flag-5'>错误</b>分析之<b class='flag-5'>CAN</b>节点BusOff恢复过程分析与测试

    一文读懂Can总线错误处理

    为了防止故障节点干扰甚至阻塞整个 CAN网络系统, CAN协议实现了复杂的故障限制机制。为了保证通信的正常, CAN2.0 总线协议 总线中各节点
    发表于11-08 17:12 8929次阅读

    一文读懂CAN总线错误处理

    为了防止故障节点干扰甚至阻塞整个 CAN网络系统, CAN协议实现了复杂的故障限制机制。为了保证通信的正常, CAN2.0 总线协议 总线中各节点
    发表于06-21 17:14 4633次阅读
    一文读懂<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>错误处理</b>

    Rust语言中错误处理的机制

    可能的 错误,实际运行中仍然可能出现各种各样的 错误,比如文件不存在、网络连接失败等等。对于这些不可预测的 错误,我们必须使用 错误处理机制来进行 处理
    的头像 发表于09-19 14:54 1095次阅读

    CAN总线错误处理

    被设置,我的简单C。ODE当前捕获这些 错误并停止发送。我知道一旦TX 错误计数器回到128以下,这些比特就会清除。我已经阅读了 CAN文档,尽管它们显示了 错误的结果,但是没有关于如何从TX
    发表于03-11 10:00

    CAN总线错误分析方法 精选资料推荐

    我们先简单总结一下 CAN错误处理与故障界定:1. CAN控制器记录发生在发送/接收过程中, 总线数据出现 错误的总数(位
    发表于08-20 06:18

    LabVIEW中的错误处理

    如何合理使用 LabVIEW 中的自定义 错误处理功能;对于可预见的 错误,是否可以选择直 接忽略,或者前几次尝试忽略直到该特定 错误出现很多次后才通知用户需要纠正该 错误了;是否可以对
    发表于05-24 11:07 6次下载

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

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

    CAN总线错误的类型介绍

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

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

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

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

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

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

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

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

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

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

    节点 错误状态,并通过实际的应用测试生成并记录 CAN 错误。在之前发布的文章中,我们 介绍CAN 错误
    的头像 发表于06-09 10:21 1386次阅读
    虹科干货 | 带你全面了解“<b class='flag-5'>CAN</b><b class='flag-5'>总线</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 4885次阅读
    认识<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>错误</b> <b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>错误</b>分析与解决