CAN bus off ——ISO11898

news2024/12/26 9:29:59

什么是can bus off?
CAN总线关闭(CAN bus off)是指CAN节点进入一种错误状态,无法继续正常的数据通信。当一个CAN节点的错误计数器超过了设定的阈值时,该节点将进入CAN总线关闭状态。在这种状态下,该节点将停止发送和接收数据,并且无法参与到总线通信中。
CAN总线关闭状态通常是由于节点发送错误次数过多导致的,这可能是由于硬件故障、电缆连接问题、电源电压异常或其他通信干扰引起的。一旦节点进入CAN总线关闭状态,它将无法正常工作,直到重新初始化或解决问题为止。
其他节点在CAN总线关闭状态下的节点仍然可以继续正常的数据通信,但是受到关闭节点的影响,可能会导致通信性能下降或数据传输延迟。因此,当出现CAN总线关闭情况时,需要及时识别和解决问题,以确保整个CAN总线的正常运行。

什么情况会出现bus off?
CAN总线关闭(bus off)状态通常出现在以下情况下:

  1. **错误计数器超过阈值:**每个CAN节点都有一个错误计数器,当节点在发送或接收数据时发生错误,计数器会递增。如果错误计数器超过了设定的阈值,节点将进入bus off状态。
  2. **通信故障:**CAN总线的通信可能会受到各种干扰和故障的影响,如电缆连接问题、电源电压异常、信号干扰等。这些故障可能导致节点无法正常发送或接收数据,最终导致bus off状态。
  3. **节点故障:**CAN节点自身的硬件或软件问题可能导致其无法正常工作。例如,节点的CAN控制器故障、节点程序错误等都可能导致bus off状态。
    CAN总线的CANH和CANL 短接、CAN总线的CANH接GND和CAN总线的CANL接VCC、CAN总线的因为终端电阻的问题,导致RXD相对于TXD 的信号延迟较大导致。(以500K的CAN为例,通常情况RXD和TXD的延迟约在100ns左右,若由终端断电阻的配置不对会导致TXD和RXD延迟时间增大可能达到500ns。若是2M的CANFD 就会造成数据传送产生问题,最终导致BUSOFF )

当一个节点进入bus off状态时,它将停止发送和接收数据,并无法参与到总线通信中。其他节点仍然可以继续正常的数据通信,但受到bus off节点的影响,可能会导致通信性能下降或数据传输延迟。因此,当出现bus off情况时,需要及时识别和解决问题,以确保整个CAN总线的正常运行。

进入can bus off

在故障限制方面,一个节点可能处于三种状态中的一种,这取决于错误计数器的级别 error active,error passive 和 bus off.

Error counting错误计数法

1、当接收机检测到错误时,接收错误计数器应增加1,除非在发送主动错误标志或过载标志时检测到的错误是位错误。
2、当接收端在发送错误标志后检测到一个主比特作为第一个比特时,接收错误计数器需要增加8个( 8 )。
3、当发送端发送错误标志时,发送错误计数器应增加8 ( 8 )个。

  • 如果发送端是错误被动的并且由于没有检测到主导ACK而检测到ACK错误,并且在发送其被动错误标志时没有检测到主导比特。
  • 如果发送方发送了一个错误标志,因为在仲裁过程中发生了一个错误,那么这个错误标志应该是隐性的,并且被发送为隐性的,但被监控为显性的。
    在这两种情况下,发射误差计数器保持不变。 +8

4、 如果发送端在发送主动错误标志或过载标志的同时检测到比特错误,则发送错误计数器应增加8 ( 8 )。
5、如果接收机在发送主动错误标志或过载标志的同时检测到比特错误,则接收错误计数器应增加8 ( 8 )。
6、在发送主动错误标志、被动错误标志或过载标志后,任何节点最多可以容忍七( 7 )个连续的优势比特。在检测到第14 ( 14 )个连续的主导比特(在出现主动错误标志或过载标志的情况下)后或检测到第8个连续的主导比特后,在每增加8个连续的主导比特后,每个发送端将其发送错误计数器增加8 ( 8 )个,每个接收端将其接收计数器增加8 ( 8 )个。
7、当一帧(得到ACK ,直到EOF结束,没有检测到误差)成功传输后,除非传输错误计数器已经为零( 0 ),否则传输错误计数器将减少1 ( 1 )。 -1
8、成功接收一帧(接收到ACK时隙无误码且成功发送ACK比特)后,如果接收误差计数器在一( 1 )到一百二十七( 127 )之间,则应减小1。如果接收错误计数器为零( 0 ),则应保持为零( 0 ),如果大于一百二十七( 127 ),则应设置为一百一十九( 119 )到一百二十七( 127 )之间的值。

主动错误和被动错误状态之间的转换

如果节点的发送错误计数器或接收错误计数器超过127 ( 127 ) ( 7位接收误差计数器情况下的进位条件),则监控器应请求MAC子层将相应节点设置为错误被动状态。让节点成为错误被动的错误条件将导致节点发送一个主动错误标志。当发送错误计数器和接收错误计数器均小于或等于127 ( 127 ) 时,错误被动节点将重新变为错误主动节点。当节点的接收误差计数器超过一百二十七( 127 )的误差被动限时,该接收误差计数器的进一步增量将受到计数器宽度的限制。在下一次成功接收一帧(过渡到错误激活( error-active ))时,接收错误计数器应设置为低于错误被动l的值。

bus off manangement

如果一个节点的发送错误计数器大于二百五十五( 255 ) ( 8位传输错误计数器情况下的进位条件),那么主管应该请求PL将该节点设置为总线关闭状态。总线关闭状态不得对公交车产生任何影响。它既不发送任何帧,也不发送ACK、错误帧、过载帧。这样的节点是否接收来自总线的帧取决于实现方式。处于总线关闭状态的节点在监测到(见图16)总线上128 ( 128 )个连续11 ( 11 )个隐性位后,其错误计数器都设置为0 ( 0 ),可能成为错误活跃的(不再是总线关闭)。注:现有的实现方式可能不同。例如,6.14允许发射端和接收端的关断;恢复可能只在用户请求时开始。这在ISO 16845的一致性测试中没有涉及。

恢复bus off

要恢复CAN总线关闭状态(bus off),可以采取以下步骤:

  1. 检查和修复通信故障:首先需要排查并解决导致CAN总线关闭的问题,如检查电缆连接是否良好,确保电源电压正常,排除信号干扰等。
  2. 重新初始化CAN节点:将进入bus off状态的CAN节点进行重新初始化,包括重新设置CAN控制器、清除错误计数器等。
  3. 等待恢复时间:在重新初始化节点后,需要等待一段时间,通常为128个错误帧时间(TEC),以确保CAN节点已经完全恢复。 快慢恢复,所谓的快慢恢复,即进入CAN BUSOFF状态后,ECU重新初始化CAN模块,并等待t(tBusOffQuick 或 tBusOffSlow)后,重新使能总线报文的发送。一些主机厂对其系统供应商的设备提出了相应的Busoff后恢复时间需求。例如:当ECU 进入Busoff 模式后,首先,ECU 执行快恢复模式,连续n次(TBD值,不同厂商次数要求不一样)快速恢复后,ECU 进入慢恢复模式。

判断CAN总线关闭状态是否已经恢复,可以通过以下方式:

  1. 监测错误计数器:在重新初始化节点后,可以通过监测节点的错误计数器来判断是否还在持续增加。如果错误计数器停止增加或保持在一个较低的值,说明CAN总线关闭已经恢复。
  2. 数据通信测试:进行数据通信测试,发送一些数据帧并观察节点的发送和接收情况。如果节点能够正常发送和接收数据,说明CAN总线关闭已经恢复

参考文章:
https://blog.csdn.net/u014156403/article/details/103725924
ISO11898标准文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射? 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行性是指 图像在完成仿射变换后,平行线仍然是平行线。…

Android 耗时分析(adb shell/Studio CPU Profiler/插桩Trace API)

1.adb logcat 查看冷启动时间和Activity显示时间: 过滤Displayed关键字,可看到Activity的显示时间 那上面display后面的是时间是指包含哪些过程的时间呢? 模拟在Application中沉睡1秒操作,冷启动情况下: 从上可知&…

Python小练习实践

在交互模式下,可以不写print;默认调用 print(repr(a)) 文件模式,必须写print。 If语句 Input语句,返回的是字符串 len(),长度 小练习: 输入一个自己的生日月份 写个if 和else 判断一下当月是否是你的生日…

celery----异步发送短信

1.目录结构 -celery.py --------必须叫这个名字 放定时任务、里面实例化得到app对象 -home_task.py和user_task.py. ----------就是针对不同app的任务文件 2.各文件的内容 celery.py from datetime import timedeltafrom celery import Celery from celery.schedu…

PLL设计-仿真

线性相位裕锁相环模型 out都代表噪声,PFDCP的gain是Icp/2π,LF的传输函数是,VCO传输函数是,分频器增益是1/N 首先不考虑噪声模型 阶跃响应-查看建立时间,下面两条线是上面两条线减1V后的结果,方便查看。 放大上图,输入…

支持向量机(SVM)---代码实现

# coding: utf-8## 感知器模型流程 """1.初始化w, b2.遍历所有训练数据集中选出的误分类点&#xff1a;2.1.如果y ! sign(wxb) 或者 y*(wxb) < 0 则为误分类点2.2 根据误分类点计算&#xff1a;w_new w_old -alpha * 对w的梯度&#xff0c; b_new b_old - …

共聚焦显微镜在光学膜片表面微结构测量中的应用

在当前的液晶显示器行业&#xff0c;TFT液晶面板因其显示反应速度更快更适用于动画及显像显示的特点而得到广泛应用。作为配套组件的背光显示模组&#xff0c;为其供应充足且分布均匀的光源亮度&#xff0c;使得液晶面板的显像功能能够正常工作。液晶面板消费需求的不断增长带动…

【vue3】获取字典数据,封装为公共方法

前言: 后台项目中基本上都有字典管理页面,Vue封装字典数据的主要目的是为了方便数据的管理和使用 不管在哪个页面使用下拉框,el-select的options数据源需要通过调用接口获取到,不同的数据源调用不同的接口,引入和使用都是不小的工作量,如果使用字典数据管理,不管同个页…

(打造透明屏展厅全攻略)如何打造透明OLED显示屏展厅?

透明OLED显示屏是一种具有透明度的显示屏幕&#xff0c;可以在不使用时完全透明&#xff0c;从而实现空间与显示的完美融合。在展厅设计中&#xff0c;透明OLED显示屏可以带来全新的视觉体验&#xff0c;使展品更加生动、立体&#xff0c;展示效果更佳。下面是打造透明OLED显示…

Hi3536网络应用调优

目录 1. 为什么UDP接收或发送会丢包? 2. 使用 socket 接口时&#xff0c;如何正确工作在非阻塞模式下&#xff1f; 3. TOE 使能及使用注意事项 4. TOE 模式下使用 socket 接口时的注意事项 1. 为什么UDP接收或发送会丢包? 用户态应用程序在接收 UDP 数据时&#xff0…

什么是SVM算法?硬间隔和软间隔的分类问题

SVM全称是supported vector machine(支持向量机)&#xff0c;即寻找到一个超平面使样本分成两类&#xff0c;并且间隔最大。 SVM能够执行线性或⾮线性分类、回归&#xff0c;甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。…

梯度提升树的基本思想

目录 1. 梯度提升树 VS AdaBoost 2. GradientBoosting回归与分类的实现 2.1 GradientBoosting回归 2.2 GradientBoosting分类 1. 梯度提升树 VS AdaBoost 梯度提升树&#xff08;Gradient Boosting Decision Tree&#xff0c;GBDT&#xff09;是提升法中的代表性算法&#…

kali中的一些工具简单使用dirb、netdiscover、ffuf、nmap、sqlmap、hydra、msfconsole

kali渗透常用工具 dirbnetdiscover介绍 ffuf介绍 nmap介绍 sqlmaphydra介绍 msfconsolemsfconsole上线windows dirb dirb <目标URL> <字典文件> [选项] <目标URL>&#xff1a;要扫描的目标URL&#xff0c;例如&#xff1a;http://example.com。 <字典文件…

nodeiis部署步骤

用nodejs写了一个express框架的接口&#xff0c;记录一下它如何在iis上发布部署 nodeiis部署步骤 第一步 安装nodejs 安装步骤&#xff1a;略确认安装结果&#xff1a;在cmd执行命令node -v效果图 第二步 安装iisnode 下载地址&#xff1a;iisnode下载地址&#xff08;htt…

Sentinel针对IP限流

改造限流策略的针对来源选项 import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class Senti…

php 中文字符串反转【字符串】

场景&#xff1a;英文字符串反转 使用 方法 strrev($str) ,但是中文字符串怎么反转呢&#xff1f; 代码 /*** 多字符 字符串反转* param string $string 字符串* param string $encoding 编码* php > 7.4 否则需要实现 mb_str_split 多字符变成字符串*/ function mb_str…

【雕爷学编程】Arduino动手做(88)---水流量传感器模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Centos7安装cloudreve+onlyoffice

Centos7安装cloudreveonlyoffice 1.安装onlyoffice 1.1 安装onlyoffice镜像 docker run -i -t -d -p 801:80 --restartalways -e JWT_ENABLEDfalse --name onlyoffice \-v /home/xxx/important_onlyoffice/logs:/var/log/onlyoffice \-v /home/xxx/important_onlyoffice/dat…

Linux搭建Promtail + Loki + Grafana 轻量日志监控系统

一、简介 日志监控告警系统&#xff0c;较为主流的是ELK&#xff08;Elasticsearch 、 Logstash和Kibana核心套件构成&#xff09;&#xff0c;虽然优点是功能丰富&#xff0c;允许复杂的操作。但是&#xff0c;这些方案往往规模复杂&#xff0c;资源占用高&#xff0c;操作苦…

可视化时序输入与输出|python

请帮我生成可视化图的python代码&#xff0c;输入是xxx变量&#xff0c;输出是xxx变量&#xff0c;横坐标是时间&#xff0c;输入用蓝线表示&#xff0c;输出用黄线表示&#xff0c;然后输入和输出在时间维度上是分别一个在前&#xff0c;一个在后。 import matplotlib.pyplot…