车载测试系列:CAN协议之远程帧

远程帧(也叫遥控帧):是接收单元向发送单元请求发送具有标识符的数据所用的帧,由 6 个段组成,没有数据段。 当某个节点需要数据时,可以发送远程帧请求另一节点发送相应数据帧。

简单的说:发起方发起特定ID的远程帧,并且只发送ID部分,与其ID相符的终端设备就有义务在后半段的数据部分接管总线控制权并发送自己的数据。

打个比方,中控机需要定时获取某个节点的数据(例如转速计的实时转速、油量计的实时油量等),可以向总线发送远程帧;相应节点在接收判断帧ID与自己相符、并且是远程帧的情况下,就可以将自己的实时数据发送到总线上;这样中控机就获取到了相关节点的实时数据。

远程帧最大的好处就是只需要一帧的时间就能完成一次双向交互。

  • 帧起始(SOF):表示帧开始的段;
  • 仲裁段:表示该帧优先级的段。可请求具有相同 ID 的数据帧;
  • 控制段:表示数据的字节数及保留位的段;
  • CRC段:检查帧的传输错误的段;
  • ACK段:表示确认正常接收的段;
  • 帧结束:表示遥控帧结束的段。

数据帧与远程帧的区别:

  • 远程帧没有数据帧的数据段;
  • 远程帧RTR位是隐性,RTR位的极性表示了所发送的帧是数据帧(RTR位“显性”)还是远程帧(RTR位“隐性”)。没有数据段的数据帧和远程帧可通过 RTR 位区别开来。

总结一:CAN总线数据/远程帧标准帧格式

图3

帧间隔:当总线空闲时,总线为隐形电平(1)。

帧起始:CAN节点向总线发送1bit显性电平(0),标志帧起始位

仲裁域:仲裁域包含两部分,11bit的ID指示帧发送节点身份标识,1bit RTR(Remote Transmission Request)指示该帧为数据帧(显性电平)还是远程帧(隐性电平)。该域之所以称之为仲裁域,是因为其除了承载上述信息外,还被应用于CAN总线独特的非破坏性仲裁机制。

其仲裁原理为,当多个CAN节点向总线同时发送CAN数据/远程帧时,当发送至仲裁域时,对于ID数值大的节点就会检测到总线上的电平与其发送的电平不匹配于是其终止发送,直到剩下ID数值最小的帧,继续发送。

CAN总线为线与逻辑,有一个节点发送0则总线为0,所有节点发送1才为1,因此ID在逐位发送时(高位先传)必然是数字小的ID可以始终保持和总线电平一致,最终能获取总线控制权。仲裁失败的节点在总线空闲时,自动重发帧。

控制域:控制域总共6bit,高2bit为保留位(显性电平),低4bit DLC(Data Length Code)指示数据域长度,可以是0~8字节。对于远程帧DLC域无意义。

数据域:0~8字节数据Payload,数据长度由DLC决定。远程帧该域长度为0。

CRC域:包含15bit CRC,1bit CRC定界符(隐性电平)。CRC保护范围从帧起始符开始至数据域结束。

ACK域:2bit长度,包含ACK Slot和ACK定界符。对于发送方,该两bit均为隐性电平,接收方如果正确接收则将ACK Slot位置为显性电平。

帧结束:ACK域结束后发送7bit隐性电平,标识本次帧发送完毕。

数据帧用于发送节点向接收节点发送数据,远程帧为接收节点主动向总线发起发送数据请求。

总结二、CAN数据/远程帧扩展帧格式

图4

数据帧和远程帧格式有标准帧格式和扩展帧格式的区别,扩展帧格式如图4所示。扩展帧和标准帧的差异在仲裁域的不同,扩展帧通过拓宽仲裁域达到拓宽ID位宽(11bità19bit)。

为了扩展帧和标准帧兼容,增加了SRR(隐性电平)和IDE(隐性电平)域,这样对于CAN节点来说区分扩展帧和标准帧仅需要检查从帧起始开始第12bit(SRR/RTR),第13bit(IDE/R1)的电平即可。{bit12,bit13}=2’bx0则为标准帧,{bit12,bit13}=2’b11则为扩展帧。

数据/远程帧在发送至总线时会进行位填充编码。当节点检测到发送数据中包含5个连续隐性或者显性电平时会增加一位反型数据。CAN节点只会对数据/远程帧从帧起始到CRC域(不包含CRC定界符)数据进行位填充编码。

  总结

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

​​​

​​​

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库理论大题与编译原理大题(笔记)

目录 数据库(求最小函数依赖) 数据库(求属性集的闭包和候选码) 编译原理(NFA ——> DFA) 编译原理(识别文法的活前缀 DFA 和 LR(0) 分析表) 哈哈!这是本人作者才…

计算机组成入门知识

前言👀~ 数据库的知识点先暂且分享到这,接下来开始接触计算机组成以及计算机网络相关的知识点,这一章先介绍一些基础的计算机组成知识 一台计算机如何组成的? 存储器 CPU cpu的工作流程 主频 如何衡量CPU好坏呢&#xff1f…

多路h265监控录放开发-(12)完成全部开始录制和全部停止录制代码

xviewer.h 新增 public: void StartRecord();//126 开始全部摄像头录制 void StopRecord();//126 停止全部摄像头录制 xviewer.cpp 新增 //视频录制 static vector<XCameraRecord*> records;//126void XViewer::StartRecord() //开始全部摄像头录制 126 {StopRecord…

leetcode刷题日记

题目描述 解题思路 基本思想&#xff0c;将数组复制一份&#xff0c;按照位置取余&#xff0c;确实做出来了&#xff0c;但是这样时间和空间上的资源比较多。看到切片法&#xff0c;感觉到很新&#xff0c;思路很好&#xff0c;用来记录。 代码 python class Solution:def ro…

C++设计模式——Flyweight享元模式

一&#xff0c;享元模式简介 享元模式是一种结构型设计模式&#xff0c;它将每个对象中各自保存一份数据的方式改为多个对象共享同一份数据&#xff0c;该模式可以有效减少应用程序的内存占用。 享元模式的核心思想是共享和复用&#xff0c;通过设置共享资源来避免创建过多的实…

mysql高级语句2存储过程

CREATE VIEW 视图&#xff0c;可以被当作是虚拟表或存储查询。 视图跟表格的不同是&#xff0c;表格中有实际储存数据记录&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了&…

C++20中的Feature Test Mocros

C20定义了一组预处理器宏&#xff0c;用于测试各种语言和库的feature。 Feature Test Mocros(特性测试宏)是C20中引入的一种强大机制&#xff0c;用于应对兼容性问题。Feature Test Mocros作为预处理器指令(preprocessor directives)出现&#xff0c;它使你能够在编译过程中仔细…

python输入、输出和变量

一、变量 变量是存储数据的容器。在 Python 中&#xff0c;变量在使用前不需要声明数据类型&#xff0c;Python 会根据赋值自动推断变量类型。 定义变量&#xff1a; 二、输入&#xff08;Input&#xff09; input() 函数用于获取用户输入。默认情况下&#xff0c;input() 会…

系统因果性

1、因果系统的定义   若系统当前输出仅由系统当前或过去的输入决定&#xff0c;则称该系统为因果系统。由于因果系统是物理课实现的&#xff0c;且具有稳定性和可预测性&#xff0c;所以得到广泛应用。设系统输入、输出分别为 x ( t ) x(t) x(t)&#xff0c; y ( t ) y(t) y(t…

描述React Hooks中的useMemo和useCallback的区别和用途。

React Hooks API中的useMemo和useCallback都是用于优化性能的钩子&#xff0c;但它们的用途和工作方式略有不同&#xff1a; 推荐大家看看我过往的文章 useMemo useMemo是一个性能优化钩子&#xff0c;它返回一个记忆化的值。useMemo可以避免在组件渲染时进行昂贵的计算或操作…

【html】用html+css模拟Windows右击菜单

效果图&#xff1a; 在这个示例中&#xff0c;我为每个.second-list添加了一个.sub-menu的<div>&#xff0c;它包含了子菜单项。当鼠标悬停在.second-list上时&#xff0c;.sub-menu会显示出来。你可以根据需要调整这个示例以适应你的具体需求。 记住&#xff0c;这只是…

SpringMVC系列六: 视图和视图解析器

视图和视图解析器 &#x1f49e;基本介绍&#x1f49e; 自定义视图为什么需要自定义视图自定义试图实例-代码实现自定义视图工作流程小结Debug源码默认视图解析器执行流程多个视图解析器执行流程 &#x1f49e;目标方法直接指定转发或重定向使用实例指定请求转发流程-Debug源码…

谁说串口通信波特率越高越好?

在电子世界里&#xff0c;串口通信就像是电子设备之间的“悄悄话”&#xff0c;它们通过串行数据传输来交换信息。但你知道吗&#xff1f;串口通信的波特率并不是越高越好&#xff0c;这事儿得好好聊聊。 1.什么是串口通信&#xff1f; 串口通信&#xff0c;就像它的名字一样&a…

cherry 笔记三(启动)

cherry启动很简单 app创建完 直接startup()就好了 func main() {app : cherry.Configure("./examples/config/profile-chat.json","chat-master",false,cherry.Cluster,)app.SetSerializer(cserializer.NewJSON())app.Startup() } Configure()--->N…

【Python机器学习】NMF——将NMF应用于人脸图像

将NMF应用于之前用过的Wild数据集中的Labeled Faces。NMF的主要参数是我们想要提取的分量个数。通常来说&#xff0c;这个数字要小于输入特征的个数&#xff08;否则的话&#xff0c;将每个像素作为单独的分量就可以对数据进行解释&#xff09;。 首先&#xff0c;观察分类个数…

汽车销售系统

摘 要 在现代社会&#xff0c;电脑是企业运作和管理必不可少的工具。我们过去用手记下卖出的商品的年代已一去不复返了。在我国&#xff0c;汽车销售行业的竞争日趋激烈的情况下&#xff0c;如何提高企业的管理水平&#xff0c;提高企业的工作效率&#xff0c;提高企业的服务质…

ARC学习(3)基本编程模型认识(三)

笔者来介绍arc的编程模型的中断流程和异常流程 1、中断介绍 主要介绍一下中断进入的流程&#xff0c;包括需要配置的寄存器等信息。 中断号&#xff1a;16-255&#xff0c;总共240个中断。触发类型&#xff1a;脉冲或者电平触发中断优先级&#xff1a;16个&#xff0c;0最大&…

DAC测试实验——FPGA学习笔记7

一、DAC简介 DAC全称Digital to Analog Converter&#xff0c;即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…

RSA 加密算法的基础数论、基本原理与 Python 实现 (包含扩展欧几里得算法)

Title: RSA 加密算法的基础数论、基本原理与 Python 实现&#xff08;包含扩展欧几里得算法&#xff09; 文章目录 前言I. 数学原理1. 整数环2. 单位元3. 欧拉定理 II. 算法原理1. 扩展欧几里得算法2. RSA 非对称加密算法 III. 算法实现1. 源代码2. 测试结果 总结参考文献 前言…

spdlog生产者消费者模式

spdlog生产者消费者模式 spdlog提供了异步模式&#xff0c;显示的创建async_logger, 配合环形队列实现的消息队列和线程池实现了异步模式。异步logger提交日志信息和自身指针&#xff0c; 任务线程从消息队列中取出消息后执行对应的sink和flush动作。 1. 环形队列 1.1 环形队…