热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

CAN资料整理(二):CAN协议帧格式

目录一、CAN协议帧格式1、数据帧2、遥控帧3、错误帧4、过载帧5、帧间隔一、CAN协议帧格式CAN协议帧的格式十分重要,部分MCU中的CAN外设寄存器就是根

目录

一、CAN协议帧格式

1、数据帧

2、遥控帧

3、错误帧

 4、过载帧

 5、帧间隔




一、CAN协议帧格式

CAN协议帧的格式十分重要,部分MCU中的CAN外设寄存器就是根据对应帧结构来进行设计的。


  • 数据帧:用于发送单元向接收单元传送数据的帧
  • 遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧
  • 错误帧:用于当检测出错误时向其他单元通知错误的帧
  • 过载帧:用于接收单元通知其尚未做好接收准备的帧
  • 帧间隔:用于将数据帧和遥控帧与前面的帧分离开来的帧

1、数据帧

(1)帧起始:标识一个数据帧的开始,用于同步,一个显性位,只有在总线空闲期间节点才能发送SOF

(2)仲裁段(场):ID、RTR、IDE、SRR


  • ID:唯一确定一条报文,表明报文的含义和优先级;(标准帧:11位ID;拓展帧:29位ID)
  • RTR 远程传送请求位(0:数据帧。              1:远程帧)
  • IDE 标识符拓展位     (0:11位ID,标准帧。1:29位ID,拓展帧)
  • SRR 远程代替请求位   SRR = 1

以Renesas RH850的用户手册中的Receive Rule ID Register举例:其中就设计到CAN数据帧的相关设置

(3)控制段(场):主要用于表示数据段有多少个字节


  • r1、r0 为保留位,默认为显性电平(逻辑0)
  • DLC 数据长度码:表示数据段的字节数,表示为0~8

(4)数据段(场):CAN数据帧要发送的数据内容

(5)CRC段(场):用于进行CRC校验


  • CRC:接收到的CRC数据,用于进行校验
  • DEL 界定符:用于界定CRC序列,固定1个隐性电平(逻辑1),CRC界定符之前会进行位填充,CRC之后的位域都是固定格式,不允许位填充

(6)ACK段(场):确定报文被至少一个节点正确接收

发送节点在ACK发送隐性位(逻辑1):


  • 正确接收到报文的节点 =》 ACK发送显性位(逻辑0)
  • 未正确接收到报文的节点 =》ACK发送隐性位(逻辑1)

发送节点检测应答位是否被显性电平覆盖(即ACK变为显性位,逻辑0)


  • 没有 =》 ACK错误

(7)帧结束7个连续的隐性位(逻辑1),表示帧结束;节点在检测11个连续的隐性位后,认为总线空闲


2、遥控帧

 具体各位信息可以参考数据帧


3、错误帧

(1)CAN中的错误检测:


  • 位检测:节点检测到的位域自身送出的位数值不同。(注:仲裁段与ACK段不参与位检测
  • 填充检测:在使用位填充编码的帧段,不允许出现6个连续相同的电平
  • CRC检测:节点计算CRC序列与接收到的CRC序列不同
  • 格式检测:固定格式位场(CRC界定符之后),含有一个或更多非法位
  • ACK检测:发送节点在ACK位期间未检测到“显性”电平

发送节点的产生错误一般有:位错误、格式错误、ACK错误

接收节点的产生错误一般有:填充错误、格式错误、CRC错误

(2)CAN中的错误帧:

一般流程:检测错误=》发送错误帧=》通知报文错误

主动错误与被动错误的区别:


  • 主动错误:只要检查到错误,它立即“主动地”发送错误标志,连续6个显性位(不满足CAN协议的“最多5个连续的同性位”要求)。
  • 被动错误:如果检查到错误,它只能“被动地”等其他站点报错,等待的时候不能去动总线,发送了6个隐性位(不满足CAN协议的“最多5个连续的同性位”要求,能够部分或全部被其他节点的显性位覆盖),直到识别出其他站点报错,然后就可以去竞争总线,该干啥干啥。

错误帧的发送


  • 位错误、填充错误、格式错误或ACK错误产生后:当前发送的一下位发送错误帧
  • CRC错误:紧随ACK界定符后的位发送错误帧
  • 错误帧发送后:总线空闲时重发出错的数据帧

 

 


 4、过载帧


 5、帧间隔


推荐阅读
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 如何在onCreate方法中正确获取视图的尺寸
    在Android开发中,有时需要在onCreate方法中立即获取视图的宽度和高度。然而,直接使用view.getWidth()或view.getHeight()可能会返回0,这是因为布局测量过程尚未完成。本文将介绍几种有效的方法来解决这一问题。 ... [详细]
  • CSS模块化命名 ... [详细]
  • 探讨多种方法来确定Java对象的实际类型,包括使用instanceof关键字、getClass()方法等。 ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
  • 2008年1月,微软发布了两则安全更新公告,分别针对Windows操作系统的不同漏洞。其中一项被评为‘关键’级,另一项为‘重要’级。此次更新并未涉及Microsoft Office产品。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • Oracle 中反向索引的应用与实现
    本文介绍了如何在 Oracle 数据库中创建和使用反向索引,包括创建反向索引的步骤以及如何通过反向索引优化特定类型的查询。 ... [详细]
  • 本文详细介绍了如何在 Vue CLI 3.0 和 2.0 中配置 proxy 来解决开发环境下的跨域问题,包括具体的配置项和使用场景。 ... [详细]
  • Vue 实战经验与常见问题总结
    本文总结了 Vue 开发中的一些常见问题和解决方案,包括全局组件的注册、头像显示、背景图路径问题以及 Sass 公用样式的使用方法。 ... [详细]
  • webpack的bootstrapsass如何正确使用 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
author-avatar
张光和尚山秀珍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有