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

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

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


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


数据帧

遥控帧

错误帧

过载帧

帧间隔

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


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


3187e9e3f094429ca97e43b0ba0caa1d[2].png


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


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


1、错误帧格式

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


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


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


如下所示:


a0c307eb595b408b936933a595d15d25[0].png



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

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


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

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


db1be57a517744cc8623e9b4ea1bacca[0].png


3、错误帧种类

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


位错误

填充错误

CRC 错误

格式错误

ACK 错误

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


350d64e029854d92bdfd9e5e8978f1b0[0].png


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


位错误特性如下所示:


位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来检测;

在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误;

在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误;

发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误;

输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。

格式错误特性如下所示:


即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误;

即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。

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


edce1143e2f34bcab79928fa65f56c44[0].png



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
一文读懂Can总线错误处理
一文读懂Can总线错误处理
一文读懂Can总线错误处理
|
12月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
703 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
EMQ
|
安全 网络性能优化
MQTT 5.0 报文(Packets)入门指南
MQTT 控制报文是 MQTT 数据传输的最小单元。MQTT 客户端和服务端通过交换控制报文来完成它们的工作,比如订阅主题和发布消息。
EMQ
1099 96
MQTT 5.0 报文(Packets)入门指南
|
机器学习/深度学习 流计算
USB3.2 摘录(五)(上)
USB3.2 摘录(五)
235 1
|
测试技术 程序员 C#
《黑神话:悟空》:从Unity到UE4 —— 游戏引擎迁移的挑战与机遇
【8月更文第26天】近年来,游戏行业的发展突飞猛进,特别是在图形表现力和技术实现上。《黑神话:悟空》是一款备受期待的动作角色扮演游戏,该游戏在早期开发阶段使用了Unity引擎,但为了追求更高的视觉质量和更强大的技术能力,开发团队决定将其迁移到Unreal Engine 4 (UE4)。本文将探讨这一迁移过程中的技术挑战与机遇。
754 1
|
索引
USB3.2 摘录(二)
USB3.2 摘录(二)
220 0
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
66728 4
详解HTTP四种请求:POST、GET、DELETE、PUT
|
机器学习/深度学习 数据采集 TensorFlow
【Swift开发专栏】Swift与机器学习:构建智能应用
【4月更文挑战第30天】本文探讨了使用Swift开发机器学习应用,分为三个部分:机器学习基础(定义、类型及应用),Swift在机器学习中的作用(Swift for TensorFlow、Core ML及性能优势),以及实践技巧(数据预处理、特征工程、模型训练与部署、性能优化和用户界面集成)。通过学习,开发者能掌握构建智能应用的技能,利用Swift的性能和安全性提升应用效率。随着深入学习,开发者可探索更多高级特性和技术,如深度学习和复杂数据分析。
299 2
|
JavaScript C#
C#winForm程序与html JS交互调用
C#winForm程序与html JS交互调用
指针函数和函数指针的区别
好多新人函数指针、指针函数迟迟分不清。实际上,函数指针和指针函数有以下区别:
473 0