CAN通信错误处理机制

2023-05-16

一、前言

CAN的错误类型有如下图所说的5种,其中:

应答错误与位发送错误会出现在CAN发送的节点(CAN发送端)
CRC错误与位填充错误会出现在CAN接收的节点(CAN接收端)

在这里插入图片描述

二、错误检测区域

如下是每一个错误发生在CAN报文中的区域,5种错误类型可以同时发生。位检测的区域最长,可以看到采样点的匹配是多么的重要(一般不建议相差超过6% - 7%)。

在这里插入图片描述

三、错误帧

错误帧长什么样子?一共有两种错误帧,那到底发哪一种错误帧呢?取决于CAN节点的状态,是主动错误状态还是被动错误状态。
在这里插入图片描述

四、CAN节点状态

正常情况下,CAN节点处于主动错误的状态,在主动错误状态下发生错误时,发送错误帧(6个连续显性电平位+8个连续隐性电平位)。
在这里插入图片描述

CAN节点在发送错误计数器或接收错误计数器大于127时,CAN节点将进入“被动错误”状态,并发送错误帧(6个连续隐性电平位+8个连续隐性电平位)。在发送错误或者接收错误减少之后,又会切换回“主动错误”状态。当发送错误计数器大于255时,CAN节点将进入“总线关闭(Bus_Off)”状态,脱离CAN总线,不影响其他CAN节点的通讯。值得注意的是,应用程序负责将CAN控制器切换到“总线关闭(Bus_Off)”的状态,CAN控制器不会自动切换到“总线关闭”状态。
在这里插入图片描述

4.1、FDCAN错误计数器寄存器(FDCAN_ECR)

最近正在使用STM32H743开发CANopen节点,看看FDCAN控制器到底有没有REC与TEC寄存器。通过查看STM32H743的编程参考手册,找到错误计数器寄存器。在这个计数器里面能找到TREC(接收错误计数器)与TEC(发送错误计数器),如下图所示。

在这里插入图片描述

4.2、FDCAN协议状态寄存器(FDCAN_PSR)

CAN节点的状态,从这个寄存器可以了解CAN节点在哪个错误状态(主动错误或被动错误)。
在这里插入图片描述

接着,也找到了总线关闭(Bus_Off)寄存器。经过测试看到,当接收错误或发送错误一直累加到最后不能累加时,Bus_Off寄存器并没有发生变化,所以Bus_Off是需要应用程序去修改的。
在这里插入图片描述
最后,也能看到从LEC位找到上一个CAN错误的类型。当然啦,LEC位等于000最好!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN通信错误处理机制 的相关文章

  • 四、数据转换、ros-CAN通讯

    1 CAN通讯 1 1驱动安装 1 1 1在我的gitee上下载test功能包 xff0c 将libusbcan so文件复制到 lib 其他位置 计算机 lib 目录下 1 2参考 我另一篇博客一 2 1 3 下载功能包 1 3 1 在我
  • 自动驾驶之——CAN总线简介

    自动驾驶技术之 无人驾驶中的CAN总线 CAN 是Controller AreaNetwork 的缩写 xff0c 中文名为控制器局域网络 xff0c 是ISO国际标准化的串行通信协议 xff0c 是一种用于实时应用的串行通讯协议总线 xf
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • 一帧CAN数据需要多长时间发送

    1 CAN通讯速率 默认 500kbit s xff1b 2 xff1a 从下图CAN数据包的完整结构可知 xff0c 一包完整的扩展帧CAN数据总共包含 128bit xff1b 3 xff1a 发送一帧扩展帧CAN数据耗时 128 50
  • 【车载开发系列】CAN总线帧种类介绍篇

    车载开发系列 CAN总线帧种类介绍篇 CAN总线帧种类介绍篇 车载开发系列 CAN总线帧种类介绍篇一 CAN总线当中帧的种类二 五种类型帧用途说明三 数据帧的组成1 xff09 帧起始2 xff09 仲裁段3 xff09 控制段4 xff0
  • 下一代CAN通信技术CAN XL简介

    众所周知 xff0c CAN网络具有易于实现 可扩展 并支持复杂拓扑结构等诸多优点 xff0c 所以目前在各个行业特别是汽车领域 xff0c 得到了非常广泛的应用 但是 xff0c 它也存在着诸多问题 xff0c 其中最大的一点就是总线带宽
  • 解决ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

    如何解决ERROR 2003 HY000 Can t connect to MySQL server on localhost 10061 1 登录到安装Mysql的主机 xff0c 打开cmd命令行工具 xff0c 执行命令mysql u
  • roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)

    零 问题描述 使用ROS是 xff0c 执行roscore报一下错误 xff1a ascii codec can t decode byte 0xe6 in position 13 ordinal not in range 128 The
  • ROS-虚拟CAN通讯/实质CAN通信

    xff11 xff0e 源码安装canopen 从官网下载canopen至Ubuntu xff0c 下载地址 xff1a https github com ros industrial ros canopen tree kinetic de
  • CAN扩展帧过滤器设置

    纪要 CAN xff08 Controller Area Network xff09 总线是一种广泛应用于工业控制和汽车电子领域的串行通信协议 在CAN总线中 xff0c 节点间通过CAN总线发送和接收消息 每个CAN帧包含一个标准或扩展标
  • Linux Socket CAN——驱动开发(转)

    Linux Socket CAN驱动开发 一 CAN总线协议 CAN是Controller Area Network 控制器局域网 的缩写 CAN通信协议在1986年由德国电气商博世公司所开发 xff0c 主要面向汽车的通信系统 现已是IS
  • 使用STM32F103做CAN的收发通信

    下面也是搭建嵌入式系统所必须的一个部分 参考网站 xff1a https www cnblogs com craigtao p 3645148 html https blog csdn net qq 29413829 article det
  • CAN 与 CANFD数据报文格式解读

    ISO 11898 1 2015 协议详细定义了CAN网络报文的格式 xff0c 包含了传统CAN与CANFD帧格式 CAN网络的帧类型共有4种 xff0c 分别为数据帧 远程帧 错误帧 过载帧 本章将主要介绍CAN网络数据帧报文的格式 x
  • Rt-thread的CAN应用2

    1 rtt中使能CAN1 2 CubeMX生成部分代码 xff0c 完成下面操作然后生成MDK ARM项目文件 3 将CubeMX生成的 HAL CAN MspInit 函数 粘贴到drv can c中 并在rt hw can init 函
  • Linux下配置虚拟CAN

    1 加载vcan模块 sudo modprobe vcan 2 添加vcan0网卡 sudo ip link add dev vcan0 type vcan 3 查看当前CAN网络 ifconfig a 4 开启vcan0 sudo ip
  • 树莓派spi转can通信之C编程实现(二)

    一 相关库的安装 wiringPi 链接网址 http wiringpi com 一个函数库 在编程时节省底层汇编以操作pi的功能引脚 对pi的引脚也进行了再次编号 BCM2835 C Library 链接网址 http www airsp
  • 一文读懂CAN总线及通信协议

    CAN总线的汽车 CAN概念 CAN是控制器域网 Controller Area Network CAN 的简称 是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的 并最终成为国际标准 ISO11898 是ISO国际标准化的串行通信
  • 【汽车电子】浅谈汽车四大总线:LIN、CAN、FlexRay、MOST

    目录 1 前言 2 汽车四大总线 2 1 LIN总线 2 1 1 LIN总线概述 2 1 2 LIN总线工作原理 2 2 CAN总线 2 2 1 CAN总线概述 2 2 2 CAN总线工作原理 2 2 3 CAN总线的优点 2 3 Flex
  • 各种通信接口的简单对比

    对比表 同步方式与异步方式的主要区别在于 是否传输时钟信号 只要是通訊前雙方需要設定相同波特率的 都是異步傳輸方式 异步传输 Asynchronous Transmission 每次异步传输的信息都以一个起始位开头 它通知接收方数据已经到达
  • STM32学习心得三十二:CAN通信基础知识、原理、配置及实验

    记录一下 方便以后翻阅 主要内容 1 CAN通信基础知识 2 STM32 CAN控制器简介 3 相关实验代码解读 参考资料 STM32中文参考手册 V10 第22章 控制器局域网 bxCAN 实验功能 CAN实验需要两个开发板 系统启动后

随机推荐

  • 深入理解Linux网络:第三章-内核是如何与用户进程协作的

    本章主要讲用户进程接收并处理数据 xff0c 主要是介绍 xff0c 同步阻塞和多路IO复用方案 同步阻塞 一个进程维护一个链接 xff0c 同时为了等待数据到来需要阻塞进程 xff0c 还要切换进程上下文 创建Socket进入内核态 xf
  • 关于ssm框架,自己学到了的认识的东西

    1 先说说Maven吧 第一次用这东西 xff0c 很恐怖 其实简单说它的作用就是管理你的jar包 我们可以通过配置pom xml文件去下载相应的jar包 然后就再也不需要担心jar包版本不匹配的问题 注意1 xff1a 尽量选使用量高的j
  • 大白话 java动态代理——秒懂系列

    代理模式分为动态代理和静态代理 xff0c 重点是动态代理 什么叫做代理 xff1f 首先要有一个接口 xff0c 定义了我们的服务 xff08 标准 xff09 然后是一个实现类 xff08 继承上面那个接口 xff09 还有有一个代理类
  • 杭州顶象技术面经+解析

    额 xff0c 第一份面经 xff0c 电面 xff0c 好难受 xff0c 好像凉了 xff0c 一篇凉经 1 跨域解决 这是一道常见面试题 所以我还是需要多看看nginx原理 xff0c 因为我还是很有可能就答ngxin的 1 json
  • volatile关键字 + happens-before原则

    volatile 可见性 有序性 记住了 xff0c 人家不保证原子性的 先说说volatile关键字 被volatile关键字修饰的变量 xff0c 再多线程中 xff0c 一个线程修改他会立即被其他线程看到 xff0c 可能这样你不太理
  • linux常问面试题

    写下来慢慢看 linux 1 查看当前路径 pwd 2 怎么清屏 xff1f 清屏 xff1a clear 3 怎么退出当前命令 xff1f 退出当前命令 xff1a ctrl 43 c 彻底退出 4 怎么执行睡眠 xff1f 执行睡眠 x
  • JUC_大厂面试必问

    J U C java util concurrent 包下的类 大家先来看一张图几片吧 首先juc分为 tools xff1a lock collections 线程池 xff1a atomic 感兴趣的同学可以关注我的公众号 xff0c
  • 字符串最小变换次数——动态规划

    感觉自己算法太菜了 woc xff0c 想找一个算法大佬 xff0c 给他做舔狗 package offer 动态规划求解 将字符串A变换为字符串B 所用的最少字符操作次数 public class Day0418 demo01 publi
  • 《动手学深度学习》环境配置篇

    自己按照书上Windows的安装中遇到的问题 D d2l zh gt conda env create f environment yml Warning you have pip installed dependencies in you
  • linux socket编程以及简单的tcp,udp的例子

    linux socket编程以及简单的tcp udp的例子 通过socket编程大致对网路编程的脉络有个大致的了解 xff0c 如果有不太懂的地方 xff0c 咱们可以到网络上查找手册 socket的基本操作 创建socket int so
  • Tightly-coupled Fusion of Global Positional Measurements in Optimization-based Visual-Inertial Odome

    文章目录 采用了基于滑动窗口的优化方法 xff0c 在VIO紧耦合的框架中加入了全局传感器作为约束 xff0c 在改善定位精度的同时 xff0c 没有破坏算法的实时性 从实验来看室外场景引入GPS信息获得了比较不错的效果提升 xff0c 但
  • 用户态与内核态之间切换详解

    用户空间和内核空间 用户程序有用户态和内核态两种状态 用户态就是执行在用户空间中 xff0c 不能直接执行系统调用 必须先切换到内核态 xff0c 也就是系统调用的相关数据信息必须存储在内核空间中 xff0c 然后执行系统调用 操作硬盘等资
  • 准程序员应如何使用Ipad!!!

    刚拿到ipad的蓝牙键盘 xff0c 在pad上写着刚开通csdn账号的第一篇博文 xff01 1 续航能力 首先哈 xff0c 我买pad的原因是因为 xff0c 笔记本有点沉哦 xff0c 并且续航能力不不咋滴 Ipad可以看视频的话连
  • 线形进度条的几种实现方式

    在大屏可视化应用中 xff0c 进度条可以直观地表现出某个指标的进度 xff0c 进度条的展示形式又有很多种 xff0c 例如环形进度条 xff0c 线性进度条等 xff0c 环形进度条的实现方案可以参考之前写的一篇文章SVG绘制圆环进度条
  • from cv_bridge.boost.cv_bridge_boost import getCvType 又名ros python3 opencv 乱七八糟的问题之一

    1 from cv bridge boost cv bridge boost import getCvType ImportError dynamic module does not define module export functio
  • autoware 单独使用标定工具箱

    由于autoware 1 10版本以后工具箱木了 xff1f xff0c 或者不需要其他功能想单独使用 1 下载nlopt xff0c github链接 xff0c 或者搜gitee https gitee com cuizhi nlopt
  • Linux ElasticSearch安装

    这里写目录标题 ElasticSearch 安装1 下载2 解压3 JDK1 8 安装 xff08 xff09 4 创建系统用户5 启动ES 切换为普通用户启动 5 配置远程访问6 启动异常16 1 更新配置 8 启动异常19 启动异常21
  • VS2019 添加引用时报错“未能正确加载ReferenceManagerPackage包“的解决方法

    VS2019 添加引用时报错 34 未能正确加载ReferenceManagerPackage包 34 的解决方法 今天安装了VS2019 xff0c 准备学习 net Core xff0c 并搭建一套 Net Core WebApi的框架
  • STM32 移植FreeModbus详细过程

    modbus是一个非常好的串口协议 xff08 当然也能用在网口上 xff09 xff0c 它简洁 规范 强大 可以满足大部分的工业 嵌入式需求 我写的这个四个寄存器都可以用 xff08 输入寄存器 保持寄存器 线圈寄存器 离散寄存器 xf
  • CAN通信错误处理机制

    一 前言 CAN的错误类型有如下图所说的5种 xff0c 其中 xff1a 应答错误与位发送错误会出现在CAN发送的节点 xff08 CAN发送端 xff09 CRC错误与位填充错误会出现在CAN接收的节点 xff08 CAN接收端 xff