当前位置: 首页 > news >正文

详解CAN总线:CAN总线报文格式—错误帧

目录

1、错误帧格式

2、主动错误标志和被动错误标志

3、错误帧种类


CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。

CAN通信是通过以下5种类型的帧进行的:

  • 数据帧 
  • 遥控帧 
  • 错误帧 
  • 过载帧 
  • 帧间隔

另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下简称 ID), 扩展格式有 29 个位的 ID。

各种帧的用途如下表所示:

近期打算写5篇文章,分别详细介绍这5种类型的CAN总线报文格式,本篇博文将详细讲解CAN错误帧格式,创作不易,请各位朋友多多点赞、收藏、关注支持~

关注公众号:美男子玩编程,优先推送最新技术博文~

1、错误帧格式

错误帧由错误标志(Error Flag)和错误界定符(Error Delimiter)组成。

接收节点发现总线上的报文有错误时,将自动发出活动错误标志,它是6个连续的显性位。其他节点检测到活动错误标志后发送错误认可标志,它由6个连续的隐性位组成。由于各个接收节点发现错误的时间可能不同,所以总线上实际的错误标志可能由6~12个显性位组成。

错误界定符由 8 个位的隐性位构成。当错误标志发生后,每一个CAN 节点监视总线,直至检测到一个显性电平的跳变。此时表示所有的节点已经完成了错误标志的发送,并开始发送8个隐性电平的界定符。

如下所示:

2、主动错误标志和被动错误标志

 错误标志包括主动错误标志和被动错误标志两种。

  • 主动错误标志:处于主动错误状态的单元检测出错误时输出的错误标志,6 个位的显性位;
  • 被动错误标志:处于被动错误状态的单元检测出错误时输出的错误标志,6 个位的隐性位。

3、错误帧种类

错误帧共有 5 种,多种错误可能同时发生,种类如下所示:

  • 位错误
  • 填充错误
  • CRC 错误
  • 格式错误
  • ACK 错误

错误的种类、错误的内容、错误检测帧和检测单元如下表所示:

重点聊一聊位错误和格式错误。

位错误特性如下所示:

  • 位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来检测;
  • 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误;
  • 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误;
  • 发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误;
  • 输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。

格式错误特性如下所示:

  • 即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误;
  • 即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。

发送单元发送完错误帧后,将再次发送数据帧或遥控帧,错误标志输出时序如下表所示:


详解CAN总线:什么是CAN总线?

详解CAN总线:高速CAN总线和低速CAN总线的特性

详解CAN总线:CAN协议分层结构及功能

详解CAN总线:CAN节点硬件构成方案

详解CAN总线:常用CAN连接器的使用方法

详解CAN总线:CAN总线报文格式—数据帧

详解CAN总线:标准数据帧和扩展数据帧​​​​​​

详解CAN总线:CAN总线报文格式—遥控帧 

相关文章:

  • 【安信可NB-IoT模组EC系列应用笔记⑥】AT指令HTTP请求一篇就够
  • 【CMake】第1篇 了解 CMake 构建源码输出 Hello world(初学者必备)
  • 机器人+人工智能课程需求和就业趋势-2022-
  • 操作表单(验证)
  • 品牌线上打假,应防微杜渐
  • 现代信号处理——参数估计理论(线性均方估计)
  • Haproxy搭建http负载均衡
  • 神经网络在控制中的应用,神经元网络控制的作用
  • 指针难点——数组指针、指针数组、函数指针、指针函数详解
  • 多媒体信息处理学习笔记-3. Feature Indexing and Retrieval
  • 约束(constraint)
  • 「运维有小邓」SIEM解决方案数据安全分析组件
  • 离散数学22_第8章图__握手定理
  • git解决冲突会带上另外一方不相关代码
  • Java——聊聊JUC中的CAS原理
  • 网络传输文件的问题
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Consul Config 使用Git做版本控制的实现
  • leetcode388. Longest Absolute File Path
  • Lsb图片隐写
  • MySQL用户中的%到底包不包括localhost?
  • Python打包系统简单入门
  • Python爬虫--- 1.3 BS4库的解析器
  • Vue2.x学习三:事件处理生命周期钩子
  • windows下mongoDB的环境配置
  • 计算机常识 - 收藏集 - 掘金
  • 前端性能优化——回流与重绘
  • 深度学习在携程攻略社区的应用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Swoole加速Laravel(正式环境中)
  • 数组大概知多少
  • 项目管理碎碎念系列之一:干系人管理
  • #define
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (第一天)包装对象、作用域、创建对象
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (剑指Offer)面试题34:丑数
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (学习日记)2024.01.09
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)http-server应用
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***测试-HTTP方法
  • ***通过什么方式***网吧
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net的C#语言取月份数值对应的MonthName值
  • [Android]使用Git将项目提交到GitHub
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [Angular] 笔记 6:ngStyle
  • [Avalon] Avalon中的Conditional Formatting.
  • [bzoj 3124][sdoi 2013 省选] 直径