目录

错误检测

Bit error 位错误

Stuff error 填充错误

CRC error 校验错误

Form error 格式错误

ACK error

错误计数器

错误计数器的计数规则

CAN错误状态

主动错误状态

被动错误状态

离线状态

如何理解三种错误状态

错误状态迁移

如何理解错误状态机的迁移

2. 总线上有节点工作不正常,经常被发出有错误的数据


控制器局域网络(Controller Area Network, CAN)是当今汽车和工业自动化系统的重要标准。可靠性是CAN总线协议的核心优势之一,这使其成为安全关键应用的理想选择。但值得注意的是,错误处理对CAN的稳健性来说至关重要。

CAN总线错误的发生可能有多种原因,比如电缆故障、噪声、不匹配的终端电阻、CAN节点故障等。识别、分类和解决此类CAN错误是确保整个CAN系统持久性能的关键。错误处理可以识别和拒绝错误的信息,使发送者能够重新传输信息。此外,该过程有助于识别和断开持续传输错误信息的CAN节点。

CAN 总线的错误管理主要需要从三个方便进行分析

1. 错误检测机制

2. 错误计数机制

3. 错误状态

错误检测

CAN控制器可以通过收发器监测总线电平,并在接收、发送时对报文进行错误检测,控制器应提供以下错误检测机制。

  • 总线监测(也就是通过收发器回环到RX PIN来监测总线电平)
  • 位填充检查
  • 帧格式检查
  • CRC校验
  • ACK检查

检查到错误有五种错误类型,它们并不相互排斥(也就是可以同时出现)。

  1. Bit error 位错误
  2. Stuff error 填充错误
  3. CRC error
  4. Form error
  5. ACK error

Bit error 位错误

在总线上发送比特的节点也应监视总线。 当监视的位值与发送的位值不同时,认为检测到位错误。
例外:
 在仲裁期间发送隐性信息位时,显性位不应导致位错误,或者在 ACK 时隙期间发送了一个隐性位;
 发送被动错误标志并检测到显性位的节点不应将此解释为位错误。

Stuff error 填充错误

在帧字段中连续六个相等位电平出现时,认为检测到填充错误,因为帧字段应通过位填充的方法进行编码。(超过5个相等电平就应该插入一个相反的电平)

CRC error 校验错误

CRC 序列应由发送器的 CRC 计算结果组成。 接收器应以与发送器相同的方式计算 CRC。 当计算出的 CRC 序列不等于接收到的序列时,应检测到 CRC 错误。

Form error 格式错误

当固定格式位字段包含一个或多个非法位时,应检测到格式错误。
例外:
 接收器在 EOF 的最后一位监测显性位,或任何节点在错误定界符或过载定界符的最后一位监测显性位,不应将此解释为形式错误。

ACK error

每当发送器在 ACK 时隙期间没有监测到显性位时,它就会检测到一个 ACK 错误。

错误计数器

每个CAN控制器内部都有两个计数器,分别为接收错误计数器REC和发送错误计数器TEC。

两个计数器长度都为8bit,上电后为0,最大计数到255。

  • Receive error counter(REC):接收错误计数器
  • Transmit error counter(TEC):发送错误计数器

错误计数器的计数规则

当节点在发送或接收数据时,如果检测到错误,对应的错误计数器就会增加1或者8。

当成功接收或发送一帧数据,对应的计数器就减1。

错误计数器详细的更新规则如下:

错误计数器应根据以下规则进行更新(在给定的帧传输期间可以应用多个规则)。
a) 当接收器检测到错误时,接收错误计数器REC+ 1。例外:发送活动错误标志、过载标志期间的位错误。
b) 当接收器在发送错误标志后检测到显性位作为第一位时,接收错误计数器REC+8。
c) 当发送器发送错误标志时,发送错误计数器REC+8。
        1) 例外 1:如果发送器是错误被动状态,并且由于未检测到显性 ACK 而检测到 ACK 错误,并且在发送其被动错误标志时未检测到显性位。
        2) 例外 2:如果发送方因为仲裁期间发生填充错误而发送错误标志,因此,填充位应该是隐性的,并且已作为隐性发送但被监视为主导的。
        在这两种例外情况下,传输错误计数器保持不变。
d) 如果发送器在发送活动错误标志或过载标志时检测到位错误,则发送错误计数器TEC+8。
e) 如果接收器在发送活动错误标志或过载标志时检测到位错误,则接收错误计数器TEC+8。
f) 在发送活动错误标志、被动错误标志或过载标志后,任何节点都应容忍最多7 个连续显性位。在检测到第14个连续显性位后(在活动错误标志或过载标志的情况下)或在被动错误标志后检测到第 8 个连续显性位之后,并且每当在出现额外的8个连续显性位序列之后,REC和TEC都需要+8。
g) 成功传输一个帧后(收到 ACK 并且没有检测到错误,直到 EOF 被检测到完成),传输错误计数器应减1,直到为0。
h) 成功接收一个帧后(接收到 ACK 时隙没有错误并且成功ACK 位的发送),接收错误计数器应减 1,如果它介于1和127。如果接收错误计数器为0,则应保持为零 (0),如果它大于127,则应将其设置为介于119和127。

CAN错误状态

CAN节点的错误状态机用于表明节点当前的错误状态。

错误状态由3种状态组成

  • error-active:主动错误状态
  • error-passive:被动错误状态
  • bus-off:离线状态

不同的错误状态下,节点对错误产生后的处理机制是不同的,错误状态的命名其实也是按照当前状态下对错误的反应来命名的,而不是指示当前的节点错误。

主动错误状态

主动错误状态为节点的默认状态,在该状态下,如果节点在接收或发送数据时吗,检测到RX PIN从总线上接收到的报文有错误,那么节点可以发送错误帧(连续6个显性电平)。发送错误帧的目的有两个。第一是通知其他节点,总线上出现了错误。第二,破坏掉当前检测到有错误的这帧报文。防止错误报文被其他节点接收。

被动错误状态

错误被动状态的“被动”是相较错误主动状态而言,在错误被动状态下的节点,如果检测的总线错误,不能主动发送错误帧。但当前错误的数据不会被节点接收。

离线状态

当节点进入离线状态,不能再进行数据收发。

如何理解三种错误状态

简单来说,错误主动即使发现错误后主动打断这一帧错误并通知其他节点。这样的行为可以理解为当前节点认为自己状态很健康,发现错误有必要主动采取措施,保证整个总线的数据正常传输。

而错误被动的节点,可以认为是节点发现出错太多,这些错误很有可能是自身的原因产生的,对自身的状态产生怀疑,所以不再主动对总线上的错误采取措施(我自己知道错误就行了,不要再给总线上其他节点添乱)

而离线状态,则是节点发现错误过于频繁,并且很多错误是由自己发送产生的,此时需要将自己从总线上隔离出去,防止进一步影响其他节点通讯。

错误状态迁移

三种错误状态的迁移主要由两个错误计数器来完成。

当两个计数器其中一个超过127,节点就会进入错误被动,关闭错误帧的发送。

当发送错误计数器达到255时,节点直接进入离线状态,进行自我隔离

CAN错误状态机迁移图

如何理解错误状态机的迁移

当出现错误时,错误计数器进行累加,并且大部分比的错误,计数器都是直接加8。而正常收发一帧数据,计数器只会减1。这样的设计结合状态迁移的规则,是非常巧妙的,考虑如下几种场景。

1. 总线工作健康,只是由于短时间的干扰偶发一两个错误

所以如果只是偶发的几个错误导致错误计数器增加了一些值,在正常收发数据的节点,错误计数器都会很快会自减,不会超过127。所以节点会一直处于错误主动状态。

2. 总线上有节点工作不正常,经常被发出有错误的数据

如果错误帧/正常帧的比例超过1/8,那么错误计数器的值就会持续累加。如果节点状态短时间恢复正常,那么还可以继续工作。但是如果节点发生了永久性的故障,持续的发生错误,那么错误计数器持续增加超过127或者255,节点就会进入错误被动或者总线关闭状态

[CAN] CAN BUS的错误检测和错误状态管理相关推荐

  1. 基于长短读长和参考基因组的组装错误检测算法的研究

    基于长短读长和参考基因组的组装错误检测算法的研究 论文目录 致谢 第1-6页 摘要 第6-7页 ABSTRACT 第7-8页 序言 第9-13页 1 引言 第13-26页 1.1 基因测序项目介绍 第 ...

  2. crc错误 modbus poll_Modbus通讯错误检测方法

    标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...

  3. Modbus通讯错误检测方法

    标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...

  4. MMC检测到此管理单元发生一个错误。建议关闭并重新启动MMC

    MMC检测到此管理单元发生一个错误.建议关闭并重新启动MMC 要变通解决此问题, 请按照下列步骤操作进入 WMI MMC 管理单元: 1. 开始--运行--输入mmc然后单击 确定 . 2. 在 文件 ...

  5. 错误检测dP-bitstream-ei_flag runRestrictRef

    JM86模型,对于错误检测,dP->bitstream->ei_flag在什么情况下置1? 还是无错的时候dP->bitstream->ei_flag=0,有错时dP-> ...

  6. 程序代码错误检测_错误检测代码

    程序代码错误检测 错误检测代码 (Error Detecting Codes) A group of bits is known as words, and these words move as a ...

  7. c 提示错误expected) before ; token_NLP.TM[33] | 纠错:pycorrector的错误检测

    纠错是NLP中的一个看着不是很火但非常重要的部分,来聊聊pycorrector是怎么做的. 导读:大家好,我是机智的叉烧,这是我NLP.TM系列下的第33篇文章(部分文章还未更新到知乎中,微信公众号下 ...

  8. pg库sharelock_PG数据库错误: 检测到ShareLock死锁处理

    PostgreSQL 是一个免费数据库,对于处理分析型+交易型混合型系统来说确实很不错,特别是版本的升级到11.2后性能提升很多,很多运行机制跟oracle越来越接近,确实很强大,但是开源系统确实存在 ...

  9. 论文阅读——椭圆检测算法 2018 使用梯度分析利用错误检测控制的精确椭圆检测

    本文是2018年<Pattern Recognition>期刊(2区SCI)上的一篇文章,是最新的椭圆检测,论文题目为<Accurate detection of ellipses ...

  10. 内存错误检测工具——kfence工作原理分析

    一.功能介绍 Linux 5.13引入一个新的内存错误检测工具:KFENCE(Kernel Electric-Fence,内核电子栅栏).KFENCE是一个低开销的.基于采样的内存错误检测工具.KFE ...

最新文章

  1. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用
  2. MyBatis使用动态代理报 invalid bound statement (not found) 错
  3. c++修复工具_几款平价又好用的U盘修复工具分享
  4. 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
  5. poj 无向图最小环问题 详解,模板
  6. UnsupportedOperationException:can‘t convert to dimension :typx=0x1
  7. android 辅助音量放大,为什么总是感觉手机音量太小?教你开启这个功能,声音瞬间放大一倍...
  8. 锁定计算机后 360wifi,电脑中360路由器WiFi密码忘记了的四种解决方法
  9. 品牌稿件怎么写?这些品牌稿件写作技巧值得一看
  10. Java se-画出坦克
  11. 函数的调用(传值调用和传址调用)
  12. arduino笔记22:Aeduino Mega2560
  13. Dubbo3.0系列(6)- Dubbo3.0支持的RPC协议
  14. 云南工程职业学院计算机网址,云南工程职业学院欢迎您(2020)
  15. 【跟随万一老师的足迹】查找目录下文件,在万一老师的基础上升级下,支持多文件查找 - 文件操作(一)
  16. 深入探讨CCD工业摄像机相关技术特性
  17. Flink的部署模式session 、pre job、aplication
  18. lisp 左手钢筋_CAD左手键与加载过程.docx
  19. 神经网络中梯度的概念,神经网络梯度公式推导
  20. 用Issue来管理项目!

热门文章

  1. win7我的计算机无法搜索,win7搜索功能无法正常使用的有效解决方法
  2. 笔记本电脑测试性能哪个软件好,新笔记本测试如何进行 旧笔记本测试性能【图文】...
  3. matlab评价模型和预测模型
  4. 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
  5. Windows常用快捷键
  6. 建议收藏!4款良心的时间轴软件
  7. Mybatis-Plus条件构造器
  8. 台式计算机开关电源原理图,计算机开关电源基本结构及原理
  9. android状态栏半透明灰色,快速解决Android7.0下沉浸式状态栏变灰的问题
  10. ubuntu安装aircrack-ng/reaver/minidwep-gtk用来跑pin