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

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

3天内不再提示

一文读懂CAN控制器错误处理的原理

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

CAN通讯的错误帧到底是如何被界定的?本文带你轻松了解!

6b533a28-0363-11ef-9118-92fbcf53809c.jpg  错误标定

检测到错误条件的站通过发送错误标志指示错误。对于“错误主动”的节点,错误信息为“主动错误标志”,对于“错误被动”的节点,错误信息为“被动错误标志”。站检测到无论是位错误、填充错误、形式错误,还是应答错误,这个站会在下一位时发出错误标志信息。

只要检测到的错误的条件是CRC错误,错误标志的发送开始于ACK界定符之后的位(其他的错误条件除外)。如图1所示:

6b657936-0363-11ef-9118-92fbcf53809c.jpg

图1 CRC错误帧

6b778162-0363-11ef-9118-92fbcf53809c.jpg  故障界定

至于故障界定,单元的状态可能为以下三种之一:“错误主动”、“错误被动”、“总线关闭”。

1. “错误主动”的单元可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。
2. “错误被动”的单元不允许发送主动错误标志。“错误被动”的单元参与总线通讯,在错误被检测到时只发出被动错误标志。而且,发送以后,“错误被动”单元将在初始化下一个发送之前处于等待状态(见“挂起发送”)
3. “总线关闭”的单元不允许在总线上有任何的影响(比如,关闭输出驱动器)。
三个状态的转换方式如图2所示:

6b91c02c-0363-11ef-9118-92fbcf53809c.jpg

图2 CAN状态转换图

在每一总线单元里使用两种计数以便故障界定:发送错误计数、接收错误计数。
这些计数按以下规则改变(注意,在给定的报文发送期间,可能要用到的规则不只一个):1. 当接收器检测到一个错误,接收错误计数就加1。在发送主动错误标志或过载标志期间所检测到的错误为位错误时,接收错误计数器值不加1。2. 当错误标志发送以后,接收器检测到的第一个位为“显性”时,接收错误计数值加8。3. 当发送器发送一错误标志时,发送错误计数器值加8。

  • 例外情况1:发送器为“错误被动”,并检测到一应答错误(注:此应答错误由检测不到一“显性”ACK 以及当发送被动错误标志时检测不到一“显性”位而引起)。
  • 例外情况2:发送器因为填充错误而发送错误标志(注:此填充错误发生于仲裁期间。引起填充错误是由于:填充位〈填充位〉位于RTR位之前,并已作为“隐性”发送,但是却被监视为“显性”)。
    例外情况1和例外情况2时,发送错误计数器值不改变。

4. 发送主动错误标志或过载标志时,如果发送器检测到位错误,则发送错误计数器值加8。

5.当发送主动错误标志或过载标志时,如果接受器检测到位错误(位错误),则接收错误计数器值加8。6. 在发送主动错误标志、被动错误标志或过载标志以后,任何节点最多容许7个连续的 “显性”位。以下的情况,每一发送器将它们的发送错误计数值加8,及每一接收器的接收错误计数值加8:

  • 当检测到第14个连续的“显性”位后;
  • 在检测到第8个跟随着被动错误标志的连续的“显性”位以后;
  • 在每一附加的8个连续“显性”位顺序之后。

7. 报文成功传送后(得到ACK及直到帧末尾结束没有错误),发送错误计数器值减1,除非已经是0。

8. 如果接收错误计数值介于1和127之间,在成功地接收到报文后(直到应答间隙接收没有错误,成功地发送了ACK位),接收错误计数器值减1。如果接收错误计数器值是0,则它保持0,如果大于127,则它会设置一个介于119到127之间值。9. 当发送错误计数器值等于或超过128时,或当接收错误计数器值等于或超过128时,节点为“错误被动”。让节点成为“错误被动”的错误条件致使节点发出主动错误标志。10. 当发送错误计数器值大于或等于256时,节点为“总线关闭”。11. 当发送错误计数器值和接收错误计数器值都小于或等于127时,“错误被动”的节点重新变为“错误主动”。12. 在总线监视到128次出现11个连续“隐性”位之后,“总线关闭”的节点可以变成“错误主动”(不再是“总线关闭”),它的错误计数值也被设置为0。

备注1:

一个大约大于96的错误计数值显示总线被严重干扰。最好能够预先采取措施测试这个条件。

备注2:

起动/睡眠:如果起动期间内只有1个节点在线,以及如果这个节点发送一些报文,则将不会有应答,并检测到错误和重复报文。由此,节点会变为“错误被动”,而不是“总线关闭”。

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

    关注

    112

    文章

    16332

    浏览量

    177803
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2744

    浏览量

    463612
  • 检测
    +关注

    关注

    5

    文章

    4480

    浏览量

    91442
收藏 人收藏

    评论

    相关推荐

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

    “ 总线关闭(bus off)是CAN节点比较重要的错误处理机制。那么,在总线关闭状态下,CAN节点的恢复流程是怎样的?又该如何理解节点恢复流程的“快恢复”和“慢恢复”机制?本文将为大家详细分析总线
    发表于 08-04 11:16 1.5w次阅读
    <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协议实现了复杂的故障限制机制。为了保证通信的正常,CAN 2.0 总线协议总线中各节点需要采取以下措施进行错误检测。
    发表于 11-08 17:12 9920次阅读

    嵌入式编程错误处理机制设计

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。文中涉及的代码运行环境如下。
    发表于 04-28 09:59 762次阅读
    嵌入式编程<b class='flag-5'>错误处理</b>机制设计

    读懂CAN总线错误处理

    为了防止故障节点干扰甚至阻塞整个CAN网络系统,CAN协议实现了复杂的故障限制机制。为了保证通信的正常,CAN 2.0 总线协议总线中各节点需要采取以下措施进行错误检测:
    发表于 06-21 17:14 6515次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b><b class='flag-5'>CAN</b>总线<b class='flag-5'>错误处理</b>

    Rust语言中错误处理的机制

    在Rust语言中,错误处理项非常重要的任务。由于Rust语言采用静态类型检查,在编译时就能发现很多潜在的错误,这使得程序员能够更加自信和高效地开发程序。然而,即使我们在编译时尽可能地考虑了所有
    的头像 发表于 09-19 14:54 1404次阅读

    读懂CAN通讯错误

    CAN总线通信技术广泛应用于多个行业,是每个总线设计工程师必学的个通讯网络。然而,对于CAN通信中的错误帧,许多人仅停留在表面了解,缺乏深入理解,这导致许多工程师在面对总线通信故障时
    的头像 发表于 06-12 08:24 2681次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b><b class='flag-5'>CAN</b>通讯<b class='flag-5'>错误</b>帧

    款独立CAN总线控制器的说明

    时序逻辑和错误管理逻辑等七部分组成,其中:· 接口管理逻辑负责解释来自CPU 的命令,控制CAN 寄存的寻址,向主控制器提供中断信息和状态
    发表于 12-21 15:57

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

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

    AF错误处理

    想问下关于AF的错误处理,例如我进行串口通讯,打开串口错误,但是我不想停止AF,想继续尝试连接要怎么做?
    发表于 02-03 15:44

    LabVIEW中的错误处理

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

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

    节点错误状态,并通过实际的应用测试生成并记录CAN错误。什么是CAN总线错误控制器局域网络(C
    的头像 发表于 05-27 10:39 4613次阅读
    虹科干货 | 带你全面认识“<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>帧

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

    节点错误状态,并通过实际的应用测试生成并记录CAN错误。在之前发布的文章中,我们介绍了CAN错误错误处
    的头像 发表于 06-09 10:21 1705次阅读
    虹科干货 | 带你全面了解“<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>”(四)——在实践中生成和记录<b class='flag-5'>CAN</b><b class='flag-5'>错误</b>

    CAN总线错误处理介绍

    每个节点维护两个错误计数:传送错误计数和接收错误计数。有几个规则规定这些计数
    的头像 发表于 09-20 17:09 2120次阅读
    <b class='flag-5'>CAN</b>总线<b class='flag-5'>错误处理</b>介绍

    socket编程中的错误处理技巧

    Socket编程是网络编程的基础,它允许程序之间通过TCP/IP协议进行通信。然而,网络通信是不稳定的,可能会遇到各种问题,如网络延迟、连接中断、数据丢失等。 错误处理的重要性 提高程序的健壮性
    的头像 发表于 11-01 17:47 846次阅读

    读懂单灯控制器工作原理

    读懂单灯控制器工作原理
    的头像 发表于 11-11 13:13 206次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b>单灯<b class='flag-5'>控制器</b>工作原理