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 个位的隐性位。

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

图片

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEE深度学习——地代码作物分类(Vertex AI 机器学习MLPINGTAI )

低代码作物分类 AutoML 能以最小的技术投入创建和训练模型。本示例演示了使用 Vertex AI Python SDK 训练和部署一个 AutoML 表格式模型,然后从 Earth Engine 连接到该模型,对国家农业图像计划 (NAIP) 航空图像中的作物类型进行分类。 本教程的主要流程是为了将选好的训练数…

# 分布式链路追踪_skywalking_学习(2)

分布式链路追踪_skywalking_学习(2) 一、分布式链路追踪_skywalking :Rpc 调用监控 1、Skywalking(6.5.0) 支持的 Rpc 框架有以下几种: Dubbo 2.5.4 -> 2.6.0Dubbox 2.8.4Apache Dubbo 2.7.0Motan 0.2.x -> 1.1.0gRPC 1.…

LeetCode 968.监控二叉树 (hard)

968.监控二叉树 力扣题目链接(opens new window) 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 贪心思路: 从下往上看,局部最…

excel数据导入到数据库的方法(二)

以前写了一篇excel导入数据到数据库的文章,是先将excel导入到datatable中在进行批量插入操作,实现数据的导入工作;最近在写一个上传数据服务时,发现有些许问题,在此予以更正,问题描述: 就会报异…

C++_vector简单源码剖析:vector模拟实现

文章目录 &#x1f680;1.迭代器&#x1f680;2.构造函数与析构函数⚡️2.1 默认构造函数vector()⚡️2.2 vector(int n, const T& value T())⚡️内置类型也有构造函数 ⚡️2.3 赋值重载operator⚡️2.4 通用迭代器拷贝⚡️2.5 vector(initializer_list<T> il)⚡️…

软件测试面试题(三)

一&#xff1a;软件测试的步骤是什么&#xff1f; 测试过程按4个步骤进行&#xff0c;即单元测试&#xff0c;集成测试&#xff0c;确认测试和系统测试及发版测试。 开始是单元测试&#xff0c;集中对用源代码实现的每一个程序单元进行测试&#xff0c;检查各个程序模块是否正…

vue3-hooks

命名规则&#xff1a;use--->谁相关.js/ts 举例&#xff1a; import {reactive} from vue import axios from axiosexport default function(){let dogList reactive({https://images.dog.ceo/breeds/pembroke/n02113023_4373.jpg })//方法 async function getDog(){try…

计算机网络基础 - 计算机网络和因特网(1)

计算机网络基础 计算机网络和因特网什么是 Internet?具体构造的的角度服务角度网络结构 网络边缘网络核心电路交换分组交换概述排队时延和分组丢失转发表和路由选择协议按照有无网络层的连接 分组交换 VS 电路交换 接入网DSL 因特网接入电缆因特网接入光纤到户 FTTH无线接入网…

MySQL数据源不停机迁移到AWS RDS MySQL

就在近期&#xff0c;谷歌云捅了个大篓子&#xff0c;误删除了一家投资公司&#xff08;Unisuper&#xff0c;管理着800亿美元基金&#xff09;在谷歌云所有地域的所有数据&#xff0c;删得相当彻底&#xff0c;连备份数据都没给人家留一个。 Unisuper 是一家澳大利亚退休金基…

C++-逻辑语句

if语句 基本格式&#xff1a; 只有判断结果为true&#xff0c;才会执行后续{}内的代码 if (要执行的判断&#xff0c;结果需是bool型) {判断结果true&#xff0c;才会执行的代码; }if (条件判断) { 如果判断结果为true&#xff0c;会执行的代码; }else{如果判断结果为false…

OS多核多线程锁记录笔记

自旋锁作用 自旋锁的是为了保护两个核上的公共资源&#xff0c;也就是全局变量&#xff0c;只有在一方也就是一个核抢到了自选锁&#xff0c;才能对公共资源进行操作修改&#xff0c;当然还有其他形似的锁如互斥锁&#xff0c;这里不比较两者的区别&#xff0c;以前没有深入的去…

常用shell命令总结(Linux命令)

当前目录 . 上一级目录 … 根目录&#xff0c;或者是目录拼接符 / 管道符&#xff08;左侧输出作为右侧输入&#xff09; | 上一个命令的返回码 $? 或 || 且 && cat 查看文档 cat XX.txt 加权限 chmod x 文件 chmod 777 文件 改变文件的所有者 chown newowne…

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天&#xff0c;笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序&#xff0c;帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括&#xff1a; 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤&#xff1a; -使用微信开发…

封装了一个iOS中间放大的collectionView layout

效果图如下所示 原理&#xff1a;就是首先确定一个放大和缩小系数和原大小对应的基准位置&#xff0c;然后根据距离每个布局属性到视图中心的距离和基准点到中心的距离的差距/基准点到中心的距离&#xff0c; 计算出每个布局属性的缩放系数 下面是代码 // // LBHorizontalCe…

英语学习笔记22——Give me/him/her/us/them a .... Which one?

Give me/him/her/us/them a … Which one? 给我/他/她/我们/他们一个…… 哪一个&#xff1f; 词汇 Vocabulary empty a. 空的&#xff0c;啥也没有的    v. 倒空 例句&#xff1a;这个盒子是空的。    This box is empty.    这是个空盒子。    This is an emp…

学习笔记——STM32F103V3版本——HC-05模块控制数码管

一.硬件 1.HC-05模块 2.数码管 3.连接硬件 二.在keil5中的代码 main.c代码&#xff1a; #include "stm32f10x.h" #include "buletooth.h" #include "led.h" #include "sys.h" #include "usart.h" #include "delay.…

HTTP content-type MIME 类型(IANA 媒体类型)

Content-Type(MediaType)&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#xff0c;用于区分数据类型。最初MIME是用…

数据与结构--AVL树

目录 AVL树的概念 AVL树的性质 AVL树结点的定义 AVL树的插入 AVL树的旋转 左单旋 右单旋 左右双旋 右左单旋 AVL树的验证 AVL树的查找 AVL树的修改 AVL树的删除 AVL树的概念 二叉搜索树虽然可以提高我们查找数据的效率&#xff0c;但如果插入二叉搜索树的数据是…

ubuntu 安装 kvm 启动虚拟机

1. 基础环境设置 #更新环境 apt update apt upgrade#配置网卡 cat >/etc/netplan/br.yml<<EOF network:ethernets:eth2: {}bridges:br0:interfaces:- eth2addresses:- 192.192.1.213/24gateway4: 192.192.1.1nameservers:addresses:- 8.8.8.8- 8.8.4.4 EOF #安装组件…

LFSR线性反馈移位寄存器及Verilog实现

一、LFSR LFSR线性反馈移位寄存器&#xff0c;通常由移位寄存器和异或门组成&#xff0c;主要用于产生伪随机序列等。 线性反馈的含义是各个寄存器的输出通过一个反馈函数连接到第一级触发器的输入&#xff1b;LFSR中的寄存器的个数被称为LFSR的级数。 LFSR分为两类&#xff…