CAN通信讲解(3)——错误据帧

2023-05-16

本文注意参考了《CAN入门书》,源于此书图片不再特殊标注

目录

  • 3.1 总线错误的种类
    • 3.1.1 位错误
    • 3.1.2 ACK错误
    • 3.1.3 填充错误
    • 3.1.4 CRC错误
    • 3.1.5 格式错误
  • 3.2 错误帧结构
  • 3.3 错误状态
    • 3.3.1 主动错误状态
    • 3.3.2 被动错误状态
    • 3.3.3 BUSOFF状态
  • 3.4 错误帧的发送时机
  • 3.5 小结

错误帧内容比较多,单独一讲

3.1 总线错误的种类

一共5种:

  1. 位错误
  2. ACK错误
  3. 填充错误
  4. CRC错误
  5. 格式错误

3.1.1 位错误

根据第二节介绍的 回读机制 节点发送自己电平的同时也会回读总线上的实际电平,如果不同,则记一个位错误,有三种情况除外:

  • 仲裁时检测到电平不同
  • ACK槽检测到电平不同
  • 该节点发送被动错误标志

前两点好理解,不理解的同学复习 第二节 ,第三种先挖个坑,后面来填。

3.1.2 ACK错误

当节点发出报文后,回读ACK槽电平没有检测到显示位,则表明总线上没有节点接收到此报文,本节点就会记一个ACK应答错误

3.1.3 填充错误

先讲解一个知识点 位填充原则

CAN总线没有CLOCK时钟线,收发两方就需要统一波特率,即使这样由于两方晶振误差、传输误差、计量误差等因素还是会可能造成时钟计算的偏移,这就需要利用数据显性、隐性边沿变化不同的进行时钟校准,用于保证采样准确,上述校准有个缺陷,如果出现连续较长的单一电平,比如一直发隐性1,则无法根据边沿进行时钟校准,为解决这个问题,CAN协议规定,当记性相同的电平连续出现5次时,则后面强制插入一个极性相反的位,作用域是SOF~CRC(不包括CRC界定符)

在这里插入图片描述
图片源自

  • 对于发送方,如果出现连续5位同性电平,则下一位强行插入一个相反电平,再继续发送后面数据,需要注意新插入的一位也参与是否连续电平的计数
  • 对于接收方,如果出现连续5位同性电平,则删除下一位,再继续发送后面数据,需要注意删除位参与后面是否连续电平的计数

回到填充错误,如果在SOF~CRC帧段检测到6个及以上同极性电平位,则记一个填充错误。

3.1.4 CRC错误

如果接收方在SOF~DATA帧段主动计算的CRC值和发送方发送的CRC段值不同,则记一个填充错误。

3.1.5 格式错误

如果接收方在各段检测到了不符合协议非法值,则记一个格式错误。

非法值包括:

  • CRC界定符、ACK界定符、EOF
  • 错误帧界定符
  • 过载帧界定符

3.2 错误帧结构

错误帧的发出有两种情况:

  1. (被动发出)总线出现上述5种错误,其他节点检测到了,会立马发出错误帧,理论上所有节点都会同时发出错误帧
  2. (主动发出)发送节点数据发一半想丢弃刚发的数据也会发错误帧

在这里插入图片描述
图片源自
错误帧是由错误标志位错误界定符组成,错误标志有两种:主动错误标志(6个连续显性位)和被动错误标志(6个连续隐性位),节点处于主动错误状态时(TEC≤127 & REC≤127)发送的错误帧是带主动错误标志,处于被动错误状态时发送错误帧带被动错误标志,节点错误状态后面回介绍,错误界定符是由8个连续隐性位构成。

在这里插入图片描述
图片源自

错误标志重叠:对于错误帧的发出情况1不会有错误标志重叠,对于情况2,发送节点Q主动发出错误帧后,连续六个同极性电平会违法“位填充原则”导致其他节点在节点Q发完错误标志位后立马发出自己的错误帧,而其他节点错误帧中如果有主动错误标志,就会造成显性错误标志位不止6位,最大可以达12位的情况,然后大家一起再发送8位的错误界定符。

3.3 错误状态

错误状态分为3种,且满足特定条件后可转换状态:

  • 主动错误状态
  • 被动错误状态
  • BUSOFF状态

任何节点状态都处于上述3种之一,哪怕从来没出错的节点也是处于主动错误状态,CAN节点错误状态转换是基于发送错误计数器TEC和接收错误计数器REC进行的
在这里插入图片描述图片源自

.计数器具体技计数规则如下
在这里插入图片描述图片源自

3.3.1 主动错误状态

当TEC ≤ 127 and REC ≤ 127时,节点处于主动错误状态,此状态下发送的错误帧的含6个显性位的主动错误标志,主动状态下的节点发送的错误帧会破坏总线数据,通知其他节点,也说明这个节点是可靠的。

3.3.2 被动错误状态

当TEC > 127 or REC > 127时,节点处于被动错误状态,此状态下发送的错误帧的含6个隐性位的被动错误标志,被动状态下的节点发送的错误帧不会破坏总线数据,不影响其他节点活动,也说明这个节点是不可靠的。

3.3.3 BUSOFF状态

当发送节点发送数据始终无法成功,TEC > 255时,该节点就会切换到BUSOFF状态,总线关闭不再收发任何报文,也不影响总线其他节点收发数据,处于离线状态,当检测到128次总线空闲(11个连续隐性位)时,TEC和REC置0,回到主动错误状态。

3.4 错误帧的发送时机

节点检测到错误会在错误产生的下一个位发出错误帧,但CRC错误除外,要的等ACK界定符发出后再发错误帧

需要注意的是,被动错误状态下的发送节点是不可靠节点,如果主动发出被动错误标志的错误帧,6个连续隐性电平后,其他节点就知道这个节点有问题,他们就会做好总线竞争的准备,而这个发送节点需要在发送完错误帧后,发送一个被动错误状态下特有的帧间隔(下节会讲),这个帧间隔除了正常的3个连续隐性位,后会追加8个连续隐性位,作为延迟传送段,这样就会产生连续11个隐性位造成总线空闲,其他节点就可以参与竞争了。

3.5 小结

错误帧一直是比较绕,但始终绕不过去的那个点,工作中遇到的涉及的采样点,busoff, 都和它相关,希望大家耐心啃下来。

>>返回总目录

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

CAN通信讲解(3)——错误据帧 的相关文章

  • UART、IIC、SPI、CAN通信的区别与应用

    文章目录 1 通信的基本知识1 1 数据通信的种类1 1 1 串行通信1 1 2 并行通信1 1 3 总结 1 2 数据通信的传输方向1 2 1 单工1 2 2 半双工1 2 3 全双工1 2 4 总结 1 3 数据通信的方式1 3 1 同
  • 一帧CAN数据需要多长时间发送

    1 CAN通讯速率 默认 500kbit s xff1b 2 xff1a 从下图CAN数据包的完整结构可知 xff0c 一包完整的扩展帧CAN数据总共包含 128bit xff1b 3 xff1a 发送一帧扩展帧CAN数据耗时 128 50
  • Python 使用can模块(记录稿)

    直接安装 xff1a pip install python can 如果报这个错 更新一下pip pip3 install upgrade pip 或者是 pip install upgrade pip 再安装wrapt pip insta
  • G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake

    目录 CMakeLists设置FindG2O cmake文件内容FindEigen3 cmake 文件内容 CMakeLists设置 在CMakeLists里加入如下这句话 xff0c 并在项目文件夹中新建cmake文件夹 LIST APP
  • Linux下CAN总线速率设置,socketCAN。

    背景 xff1a 飞思卡尔Freescale的ARM9处理器i MX25系列 socketCAN对于在Linux下操作CAN总线非常的快捷方便 xff0c 其配置方法和在Linux下对网卡的配置相似 xff0c 方法如下 xff1a 1 i
  • 【车载开发系列】CAN总线帧种类介绍篇

    车载开发系列 CAN总线帧种类介绍篇 CAN总线帧种类介绍篇 车载开发系列 CAN总线帧种类介绍篇一 CAN总线当中帧的种类二 五种类型帧用途说明三 数据帧的组成1 xff09 帧起始2 xff09 仲裁段3 xff09 控制段4 xff0
  • Nvidia Jetson Xavier 上使用CAN

    为了利于回忆 xff0c 将自己查询到的资料在这里记录一下 资料一 xff1a 20条消息 NVIDIA Xavier CAN weifengdq的专栏 CSDN博客 资料二 xff1a 英文版Enabling CAN on Nvidia
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • CAN 与 CANFD数据报文格式解读

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

    准备 xff1a RT thread Studio 2 2 5 CubeMX 6 6 1 rt thread驱动包 4 0 3 1 新建项目 2 打开CubeMX Settings xff0c 设置CAN 找到CAN1 xff0c 并勾选激
  • kvaser pcie can 在ros中使用socketcan开发

    kvaser pcie can 在ros中使用socketcan开发 0 系统配置 Ubuntu 16 04 6 LTS Linux version 4 15 0 45 generic 1 官网下载地址 https www kvaser c
  • CAN学习笔记3:STM32 CAN控制器介绍

    STM32 CAN控制器 1 概述 STM32 CAN控制器 bxCAN 支持CAN 2 0A 和 CAN 2 0B Active版本协议 CAN 2 0A 只能处理标准数据帧且扩展帧的内容会识别错误 而CAN 2 0B Active 可以
  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工
  • 【汽车电子】浅谈汽车四大总线: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
  • CAN 帧ID 与J1939 PGN 转换例子

    在saeJ1939中文版中找的三张图如下 例如 0x18 FE DF 00 110 0 0 11111110 11011111 00000000 P R DP PF PS SA 具体参数即为数据段 0 64 优先级为 P 110 2 或6
  • CAN/CANFD 总线负载率及计算(源码和工具)

    CAN BUS的总线负载率是CAN总线架构协议设计时的一个重要的指标 一般建议负载率峰值不要高于80 平均负载率不要超过50 当然这只是一般建议 具体根据使用场景和系统设计而定 负载率定义 关于CAN负载率的定义和计算 很多文章写得不求甚解
  • STM32 CAN通信的学习笔记总结(从小白开始)

    知识来源于互联网 回馈于互联网 目录 1 总体概述 1 1 基本概念 1 2 通讯方式 1 3 为什么使用CAN 1 4 CAN的协议及组成 2 上帝视角看CAN的通讯过程 2 1 数据传输原理实现 2 2 通信的整个过程 2 2 1 空闲
  • CAN协议详解-01

    CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519以及ISO11898 是国际上应用最广泛的现场总线之一 差
  • 难懂?这样理解SPI与CAN很简单!

    难懂 这样理解SPI与CAN很简单 什么是串行通讯 为什么仍需使用串行通讯 SPI与CAN SPI 接口特点 CAN现场总线特点 什么是串行通讯 在正式进入主题前 我么先来介绍一下什么叫做 串行通信 串行通信是计算机的一种数据传输通信方式
  • pico示波器使用

    文章目录 Pico示波器保存波形 Pico示波器录制数据 Pico示波器解析CAN报文 Pico示波器保存波形 Pico示波器可以通过以下步骤保存波形 在示波器上选择要保存的波形 连接示波器到计算机上 可以使用USB或者Ethernet连接

随机推荐

  • PowerShell install 一键部署subversion

    subversion SVN是subversion的缩写 xff0c 是一个开放源代码的版本控制系统 xff0c 通过采用分支管理系统的高效管理 xff0c 简而言之就是用于多个人共同开发同一个项目 xff0c 实现共享资源 xff0c 实
  • ROS(1)安装

    1 ros安装 安装过程参考https www cnblogs com letisl p 11815191 html安装wsl略 xff0c 利用mobaxterm进行连接与可视化 1 1 添加源 sudo sh c 39 etc lsb
  • ROS(11)move_base详解

    11 move base详解 11 1 move base配置参数解读 参考链接 xff1a https blog csdn net banzhuan133 article details 90239252 https wenku baid
  • vscode c/c++ global插件实现代码跳转

    问题 在打开某些大的工程 xff0c 如ROS时 xff0c 有些类成员或接口无法进行自动跳转 xff0c 比较难受 vscode插件安装 安装C C 43 43 GNU Global插件 安装C 43 43 Intellsense插件 G
  • gammaray剖析QT程序——如何解析qt版本不同的exe

    gammaray是个非常牛逼的工具 xff0c 但是当我们要分析的exe和当前编译gammaray不一致时 xff0c 是没法使用的 方法很简单 xff0c 其实版本和exe无关 xff0c 和exe依赖的qt dll库有关 xff0c 我
  • do{}while(0)用法

    linux内核和其他一些开源的代码中 xff0c 经常会遇到这样的代码 xff1a do while 0 这样的代码一看就不是一个循环 xff0c do while表面上在这里一点意义都没有 xff0c 那么为什么要这么用呢 xff1f 实
  • windows下vscode安装go插件

    1 GIT安装 vscode安装 略 2 GO在win下安装及环境变量配置 安装完GO后 xff0c 创建一个目录作为工作区 xff0c 如G my project go xff0c 环境变量添加GOPATH并指向该目录 在该目录下创建三个
  • GDB调试中 如何在so共享库中打断点、保存断点以及加载断点

    最近在使用gdb的过程中 xff0c 需要对so文件进行调试 xff0c 在这里记录一下调试中的问题及解决方法 如何在so源文件中打断点 xff1f 首先编译so时需要 g指令 在gdb xxx指令后 xff0c 发现无法在so对应的源码文
  • [Net]SSE消息推送简介

    文章目录 SSE网络协议客户端服务端事件 SSE示例客户端服务端 SSE xff08 Server Sent Events xff09 是一种服务端到客户端 xff08 浏览器 xff09 的单向消息推送方式 SSE网络协议 SSE是基于H
  • 记录一次Windows下通过reimp和dlltool转换.lib到.a的过程

    背景是这样的 xff1a 在linux下的一个C 43 43 服务由于特殊原因 xff0c 需要在windows下跑 xff0c 该工程为cmake搭建 xff0c 用到了qt的一些基础库 xff0c 我们想在qtcreator中用ming
  • DGPS知识详解

    什么是DGPS xff1f DGPS Difference Global Positioning System英文单词的缩写 xff0c 即差分全球定位系统 由于当前GPS全球卫星定位系统精度不能满足人们定位导航的需要 xff0c 因此 x
  • CMake 指定gcc编译版本

    修改 CMakeLists txt 文件 xff0c 添加如下命令 SET CMAKE C COMPILER home hhb gcc 5 2 0 bin gcc SET CMAKE CXX COMPILER home hhb gcc 5
  • 避免头文件的多重包含

    避免头文件的多重包含 通过预处理器变量 xff0c 我们可以以头文件保护符的形式避免在已经见到头文件的情况下重新处理该头文件的内容 使用预处理器变量作为头文件保护符 预处理器变量有两种状态 xff1a 已定义与未定义 define指示接受一
  • 空气动力与电机力学

    空气动力学 1 空气阻力的公式 xff1a F 61 1 2 C SV 2 式中 xff1a C为空气阻力系数 xff1b 为空气密度 xff1b S物体迎风面积 xff1b V为物体与空气的相对运动速度 由上式可知 正常情况下空气阻力的大
  • java学习记录

    前言 Java系列课之基础入门 xff1a 钟洪发老师JAVA零基础入门笔记 JAVA学习指导 00 关于Java学习的一个开场白 01 常用dos命令和ava环境软件下载 在开始学习java之前 我们必须掌握一些常用的dos命令 一 di
  • GPS串口数据接收程序实例

    GPS串口数据接收程序实例 摘 要 xff1a 目前GPS xff08 全球定位系统 xff09 定位应用市场日趋成熟 xff0c 正在进入应用的高速发展时期 本文以一款EverMore公司的GM X205GPS接受模块为例 xff0c 介
  • OSEK网络管理入门

    目录 OSEK初级认知OSEK中级认知结构说明1 正常上线 建环 传递令牌 xff08 Taken 及休眠2 已建环有403新节点插入3 已建环现有节点403异常掉线4 上线未发现其他节点建环失败 xff08 跛足模式 xff09 OSEK
  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分
  • 通过UDP广播自动获取IP地址

    有时服务端地址是不固定的 xff0c 需要自动获取 xff1b 此时就可以通过UDP广播来方便地实现 xff1a 客户端 xff0c 发送广播来获取地址 xff1a SOCKET sSrv sockaddr in addrto WSADAT
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3