首页 > 其他分享 >CAN总线错误帧及排查方法简介

CAN总线错误帧及排查方法简介

时间:2023-02-16 12:33:50浏览次数:43  
标签:错误 简介 报文 总线 排查 隐性 检测 节点

前言

 

 

CAN帧有多种格式,错误帧作为CAN帧中独特的一种,了解其作用,类型与产生原因,对于进行测试以及开发有很大的帮助,本文将对错误帧的相关基础知识以及后续的分析排查进行介绍。

 

 

一、错误帧的基础知识

 

 

(一)、错误帧的作用

 

错误帧是CAN总线用于进行错误通知的报文,可以将任何一个节点发现的错误通知给其他节点,包括发送节点;进而丢弃错误的报文,发送节点再进行报文的重新发送,保证传递信息的准确性。

 

)、错误类型

 

 

图1 CAN的分层体系结构

 

首先,如上图所示,按照分层的理念,CAN的错误检测和错误信号的发送都处于二层,即数据链路层,因此,错误检测所检测的报文也是检测数据链路层的报文。

 

其次,当总线上的帧出现错误时,节点就会发出错误帧,而错误也有多种类型:

 

1、位错误:位错误是发送节点在发送数据,进行回读,检测到总线上的数据与自身发出的数据不同时,发出的错误。由于CAN的仲裁机制和ACK应答机制,在仲裁场和ACK处发出隐性位,而回读到显性位时并不会认为是位错误。

 

 

图2 位检测

 

2、格式错误:格式错误是在固定格式的位场处检测到非法位,例如:ACK界定符固定是一个隐性位,若检测到显性,就认为是格式错误。

 

图3 格式检测

 

3、ACK错误:发送节点在自身发送的报文的ACK位检测到隐性时,会认为没有其他节点接收到此条报文,即为ACK错误。

 

图4 ACK检测

 

4、填充错误:CAN的填充机制是每检测到5个连续相同的位时,即填充一个相反的位,以提供足够的跳变沿来进行同步,当在总线上有报文时,检测到连续的6个相同的位时,即认为是填充错误。

 

 

图5 填充检测

 

5、CRC错误:接收节点接收到的CRC序列与发送节点发送的CRC序列不同时,即识别为CRC错误。

 

 

图6 CRC检测

 

)、错误帧的类型

 

上文已经说了CAN错误的类型,当检测到错误时,就会有错误帧发出,处于不同错误状态的节点,所发送的错误帧格式是不同的。

 

从错误的角度分析,节点有三种不同的状态,分别是主动错误状态,被动错误状态和总线关闭状态。并有两种不同的错误计数器,分别是接收错误计数器REC和发送错误计数器TEC。当节点检测到错误时,会发出错误帧,并增加错误计数器的值,根据错误计数器的值,节点会进入不同的状态。具体的计数算法参照 ISO 11898-1。

 

 

图7 节点状态转换图

 

1、当TEC和REC的值都小于128时,节点处于主动错误状态时,节点发送的错误帧由6个显性位(主动错误标志)加8个隐性位(错误界定符)组成,共14位。一个节点发出错误帧,其他节点识别到后会跟着发出错误帧,由此机制,将一个节点检测到的错误通知给其他节点,也能防止其他节点接收到错误的报文。

 

2、当TEC或REC大于127时,节点处于被动错误状态时,节点发送的错误帧由6个隐性位(被动错误标志)加8个隐性位(错误界定符)即14个连续的隐性位组成,当处于被动错误状态的节点在接收报文时检测到错误进而发出的错误帧,一定会被正常的报文或者其他节点的错误帧覆盖掉。只有当处于被动错误状态的节点在主动发出报文,发出的错误帧才会被其他节点正常检测到并触发其他节点发出错误帧。

 

3、当TEC大于255时,节点处于总线关闭状态(busoff)时,节点会停止收发报文,直到有用户请求(如:重启)或总线连续128次出现11个连续的隐性位时,节点重新恢复到主动错误的状态。总线关闭状态主要是为了防止一个节点出现故障或持续被干扰时,不断发出错误帧,从而影响其他节点的正常收发报文。

 

4、综上,错误帧按具体格式分类只有两类,即6个显性0 + 8个隐性1和6个隐性1 + 8个隐性1两种。当一个节点连续检测到多个错误,进入到被动错误模式时,此时很有可能是此节点出了问题或者受到干扰,这个时候这个节点检测出的错误可能已经不被信任,所以处于被动错误模式的节点发出的错误帧是14个隐性位,可以被正常报文或正常的错误帧覆盖掉。

 

 

二、实车上出现错误帧的主要原因

 

 

对于实车而言出现错误帧主要可能是因为以下几种原因:

 

1、终端电阻不匹配:终端电阻用以匹配电缆的阻抗特性,减少信号的反射,当终端电阻与总线的阻抗不匹配时,产生的反射现象就会较为严重,影响结果。

 

 

总线电阻75Ω

 

总线电阻40Ω

 

 

总线电阻60Ω

 

图8  不同电阻对波形的影响

 

2、电容对波形的影响:电容不匹配会影响电平上升下降沿的时间,进而影响采样时的结果。总线电容过大,会导致放电时间增加,下降沿时间会增加,影响最后采样的结果。

 

 

 

图9  不同电容对波形的影响

 

3、支线长度的影响:支线长度过长,会对总线的阻抗匹配产生影响,形成的反射也会更严重,进而影响总线上的波形。

 

4、采样点不合适的节点。当总线上的节点的采样点位置设置的不一致,有可能会出现错误帧。

 

5、电磁干扰比较大的电源,较大的电磁干扰会影响总线的波形,进而影响总线上的报文,出现错误帧。

 

总结:实车上出现错误帧一般是波形较差,波形的波动,进而影响采样的结果,出现错误帧。

 

 

三、错误帧的排查方法示例

 

 

进行错误帧的原因排查,观察错误帧的类型等信息,可借助Vector公司软件工具CANoe、示波器、万用表等。在CANoe的Trace窗口中可以看到报文的详细信息,错误类型等。

 

实车上出现错误帧时,综合出现错误帧的原因,如下部分典型排查方法可以参考。

 

1、先判断终端节点是否在线,加载DBC来判断是否有终端节点的报文,或者用万用表测量终端电阻阻值是否正确。

 

 

图10  判断节点是否在线

 

2、确认错误帧出现的频率,是否为周期型或仅在固定的时间段内出现

 

3、排查错误帧出现时,对应的报文是否有固定的ID,或者是固定的节点

 

4、根据错误帧的信息排查,是否与正常报文相关;同时再结合重传和报文的优先级综合分析。

 

 

 

图11  优先级对错误帧的影响

 

 

四、结语

 

 

通过上述的介绍,相信读者对于错误帧的类型和原因有了一定的了解。对于测试而言,了解错误帧的类型,进而分析错误出现的原因,对于测试中出现的问题以及对测试结果的分析,都是可以参考的方法。

 

北汇信息专注于汽车电子网络通信、诊断刷写、逻辑功能测试开发服务,期待进一步沟通交流、共享合作的机会。

 

标签:错误,简介,报文,总线,排查,隐性,检测,节点
From: https://www.cnblogs.com/polelink/p/17126236.html

相关文章

  • 记录一次线上docker排查服务cpu过高的操作
    线上CPU飙升,排查问题docker运行的mysql要在容器内找到线程ID进入docker容器dockerexec-it 容器IDbash容器内没有top命令,基于centos安装apt-getupdateapt-get......
  • JWT简介(一)
    官网地址:https://jwt.io/introduction官方简介:JSONWebToken(JWT)是⼀个开放标准(RFC7519),它定义了⼀种紧凑的、⾃包含的⽅式,⽤于作为JSON对象在各⽅之间安全地传输信......
  • ansible 简介和基本安装
    目录ansible简介和基本安装自动化运维运维的自动化发展历程运维工程师的职能划分自动化运维的应用场景企业实际应用场景分析Dev开发环境测试环境发布环境生产环境灰度环境......
  • Vue组件中的父子传参,子父传参,兄弟传参,以及事件总线
    转载自:https://blog.csdn.net/weixin_56818823/article/details/124309134父子传参父组件中的代码<template><div><!--:getname是自定义的--><son-1:g......
  • Vue - 1 简介与入门
    目录Vue-1简介与入门前端发展历史Vue介绍与基本使用1.Vue介绍渐进式框架官方网站2.Vue特点易用灵活高效3.M-V-VM架构思想①MVVM介绍②MVVM的特性③MVVM的逻辑4.组件......
  • 【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题
    主体内容Redis实例CPU使用率高问题排查和解决Redis实例内存使用率高问题排查和解决Redis实例CPU使用率高问题排查和解决问题现象Redis实例CPU使用率短时间内冲高。CPU过高可......
  • Go基础系列 01-Golang简介
    1.什么是GolangGo(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go支持面向对象,而且具有真正的闭包(closures)和反射(reflecti......
  • VUE简介/插值/属性/文本/函数指令/if/for操作
    VUE简介/插值/属性/文本/函数指令前端发展史1.前后端一体的,HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板......
  • vue简介及基础语法
    vue简介及基础语法前端编程从最初的html、css、js散件编写页面,到后来ajax异步请求的出现,在不断发展,在Angular框架出现之后,出现了前端工程化的概念,而现在时下最主流的框架......
  • Flutter的Row和Column简介
    Row、Column的介绍Row:水平布局,在水平方向上排列子widget的列表。Column:垂直布局,在垂直方向上排列子widget的列表。说明:Row和Column是多子节点空间,他们不带滚动属性,如果超......