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

CAN笔记第二篇,车载测试继续学起来!

在CAN协议中,“帧”是一个包含完整信息的独立单元,它具有特定的格式和结构,以确保数据在CAN总线上的可靠传输。这里的“帧”字可以理解为:


完整性一个帧包含了所有必要的信息,从起始到结束,都遵循着特定的规则和结构。这确保了帧在传输过程中不会丢失信息,且能够被接收节点正确地解析。

标准化帧的格式和结构是标准化的,这意味着所有遵循CAN协议的设备和系统都能够理解和处理这些帧。这种标准化使得不同厂商的设备可以无缝地集成到同一个CAN网络中。

独立性:每个帧都是一个独立的单元,可以独立地在CAN总线上传输。这意味着一个帧的传输不会受到其他帧的干扰,从而保证了数据传输的可靠性。

可识别性:帧中的不同部分(如仲裁段、控制段、数据段等)都具有特定的含义和作用,这使得接收节点能够正确地解析帧中的信息。此外,帧的起始和结束都有特定的标识符,使得帧在传输过程中能够被准确地识别出来。

灵活性尽管帧的格式和结构是标准化的,但帧中的数据部分(即数据段)可以根据需要进行自定义。这使得CAN协议可以适应各种不同的应用场景和数据传输需求。


图片

协议中的5种类型帧

Can协议中通信是通过以下 5 种类型的帧进行的。

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

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

图片

图片

帧的种类及用途

01 数据帧

数据帧由 7 个段构成。

用于在CAN总线上传输数据,包含数据和标识符(ID)信息,最长可以传输8字节数据。

(1) 帧起始 :表示数据帧开始的段。逻辑值为0,占据1个bit。

(2) 仲裁段 :表示该帧优先级的段。标准帧有11个bit的标识符,can报文唯一的ID。不同ecu发送报文时id值不一样。用来判定该报文的优先级。比如是判定是数据帧还是远程帧,如果同是数据帧,那么根据ID继续判定哪个数据帧优先级更高。

RTR:表示0是数据帧,如果是1就表示是远程帧。所以数据帧中0.

(3) 控制段 :表示数据的字节数及保留位的段。

IDE段:标准帧值为0,如果是扩展帧,值为隐性的1(同时前面的仲裁帧也会变长)

保留位:标准帧保留位为0.DLC:Data Lenght Code 数据长度码,用于标注后面的数据域的长度信息,最长是8字节。可发送 0~8 个字节的数据。(一个字节是8个bit)

(4) 数据段 :数据的内容。

(5) CRC 段 :检查帧的传输错误的段。全称:Cyclic Redundancy Check(循环冗余检查) 使用固定的算法针对前4端的内容进行计算,得出一个二进制数据显示在该段。CRC界定符:隐性的1,表示CRC段发送完毕。

(6) ACK 段 ;表示确认正常接收的段。ACK全称:Acknowledgment,接收确认。ACK槽:隐性的1的信号。当接收方收到并确认无误时改为0,发送方则会收到改信号表示接收方完整收到前面的内容。

(7) 帧结束 :表示数据帧结束的段。这里是7个连续的隐性1信号,表示整个数据结束

图片

02 遥控帧

接收单元向发送单元请求发送数据所用的帧。遥控帧和数据帧很像,区别就是遥控帧没有数据帧的数据段。遥控帧由 6 个段组成。

(1) 帧起始(SOF):表示帧开始的段。

(2) 仲裁段 :表示该帧优先级的段。可请求具有相同 ID 的数据帧。

(3) 控制段 :表示数据的字节数及保留位的段。

(4) CRC 段 :检查帧的传输错误的段。

(5) ACK 段 :表示确认正常接收的段。

(6) 帧结束 :表示遥控帧结束的段。

遥控帧的 RTR 位为隐性的,数据帧的 RTR 位为显性,因此,可以通过 RTR 位来区分遥控 帧和没有数据的数据帧。遥控帧没有数据,因此, DLC 表示的是所请求的数据帧数据长度,遥控 帧的其他段参考数据帧的描述即可。

图片

03 错误帧

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成

(1) 错误标志

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

主动错误标志:6 个位的显性位。

被动错误标志:6 个位的隐性位。

① 主动错误状态最开始TCE和REC都小于127时,就处于主动错误状态。处于主动错误状态,说明这个节点目前是比较可靠的,出现错误的原因可能不是它本身的问题,即刚刚检测到的错误可能不仅仅只有它自己遇到,正是因为这一点,整个总线才相信它报告的错误,允许它破坏掉发送中的报文,也就是将这一次的发送作废。

② 被动错误状态如果某个节点发送错误帧的次数较多,必将使得TCE>127 或者 REC>127,那么该节点就处于被动错误状态。处于被动错误状态,说明这个节点目前是不太可靠的,出现错误的原因可能是它本身的问题,即刚刚检测到的错误可能仅仅只有它自己遇到,正是因为这一点,整个总线才不信任它报告的错误,从而只允许它发送六个连续的隐性位,这样它才不会拖累别人。

(2) 错误界定符

错误界定符由 8 个位的隐性位构成。

图片

04 过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。

(1) 过载标志 6 个位的显性位。过载标志的构成与主动错误标志的构成相同。过载标志其形式破坏了间歇场的固定格式,结果使其他所有节点也检测到了一个出错状态,就都各自送出一个超载标志。

(2) 过载界定符 8 个位的隐性位。过载界定符的构成与错误界定符的构成相同。过载标志发送完毕后,每个节点都对总线进行监察,直到检测到一个隐性位为止。此时,每个节点均已发送完各自的过载标志,接着所有节点还要同时开始发送7个隐性位,配齐长达8位的过载界定符。

图片

05 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间隔。

(1) 间隔

3 个位的隐性位。

(2) 总线空闲

隐性电平,无长度限制(0 亦可)。

本状态下,可视为总线空闲,要发送的单元可开始访问总线。

(3) 延迟传送(发送暂时停止)

8 个位的隐性位。

只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

图片

内容比较多,大家可以花些时间仔细阅读一下,收获那是肯定的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python高级进阶--dict字典
  • c++入门的基础知识
  • em,rem,vw,vh,px,rpx,%的用法
  • 什么是跨域?为什么会产生跨域?怎么解决跨域?
  • 【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。
  • Go 实现程序优雅退出
  • 小阿轩yx-Shell 编程规范与变量
  • 集合、Collection接口特点和常用方法
  • 计算机SCI期刊,IF=8+,专业性强,潜力新刊!
  • 基于高通公司AI Hub Models的On-Device AI学习:Introduction to On-Device AI
  • k8s证书过期处理 手动生成证书、凭证
  • Google Find My Device:科技守护,安心无忧
  • Java入门基础学习笔记50——ATM系统
  • 怎么判断同步时序逻辑电路和异步时序逻辑电路?
  • 【字典树 马拉车算法】336. 回文对
  • [PHP内核探索]PHP中的哈希表
  • Akka系列(七):Actor持久化之Akka persistence
  • isset在php5.6-和php7.0+的一些差异
  • Java|序列化异常StreamCorruptedException的解决方法
  • java中具有继承关系的类及其对象初始化顺序
  • Material Design
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • vue中实现单选
  • 阿里云前端周刊 - 第 26 期
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 浅谈Golang中select的用法
  • 数组大概知多少
  • HanLP分词命名实体提取详解
  • 整理一些计算机基础知识!
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Redis 实现计数器和限速器的
  • ​如何防止网络攻击?
  • # dbt source dbt source freshness命令详解
  • # wps必须要登录激活才能使用吗?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (31)对象的克隆
  • (C语言)fgets与fputs函数详解
  • (LeetCode C++)盛最多水的容器
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .bat批处理(六):替换字符串中匹配的子串
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET C# 配置 Options
  • .NET C# 使用 iText 生成PDF
  • .net core控制台应用程序初识
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net打印*三角形