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

CAN总线通信协议学习2——数据链路层之帧格式

1 帧格式

帧格式可理解为定义了传输的数据(叫报文)应该“长什么样”来传输,也为后续设定一些规则如错误检查机制提供了思路。


 

首先,帧格式可分为以下5种类型:

PS:CAN总线任意一个设备可当收可当发CAN总线有两种数据传输方式:广播式和请求式。

广播式:CAN其中一个设备其不断地发送报文到总线上,连接到总线上的其他设备“想收就收”。

请求式:CAN中哪个设备有收数据的需求,向发数据方发送一个请求,发数据方收到请求后,才发送报文到总线上。

1.1 数据帧

数据帧有两种格式:标准格式和扩展格式

图上的数字:代表每一段对应的所占的位数,不是点电平逻辑!(黑色粗线才是逻辑电平)

颜色解释:看图的最底下,无论是标准格式还是扩展格式,灰色代表逻辑0,白色代表逻辑1,紫色代表可0可1,ACK位槽特殊情况白色灰色各占一半,规定发送方必须白色即发送逻辑1,接收方必须发送逻辑0

1.1.1 标准格式:

(1)SOF段之前段(帧起始前):总线空闲,上一章提到,高速CAN空闲为1(黑色粗线为逻辑电平1)。

(2)SOF(帧起始):必须为0,表示开始发送了,要与帧之前空闲时1区别,故必须为0;

(3)ID:报文ID共11位,紫色,则视具体情况而定

(4)RTR:远程请求标志位,用于区分数据帧(为0)还是遥控帧(为1),现在是数据帧,如必须为0;

(5)IDE:用于区分标准格式(为0)还是扩展格式(为1),这里为标准格式,故必须为0

(6)r0:保留位,还未用到,为了以后可能升级用,目前先固定设为0。

(7)DLC:表示数字段的长度,数据段要多少字节

(8)DATA:就是传输的数据

(9)CRC:校验算法,会对SOF到DATA的数进行自动检验,得到一个检验码存在这个位置。

(10)CRC界定符:设定为逻辑1

(11)ACK段:ACK槽——ACK界定符:ACK槽为发送方必须白色即发送逻辑1,接收方必须发送逻辑0(同时),ACK界定符设定为逻辑1。(理解:这段可认为是发送方和接收方操作总线权力短暂交接的过程,ACK段前后都是发送方在操作总线,ACK段则是接收方在操作总线,目的是为了让发送方方知道有设备接收了,ACK槽前后要留有权力交接的时间,故设定了CRC界定符和ACK界定符,CRC界定符为逻辑1,发送方释放总线,若有设备接收了,那么ACK槽就会接收方拉下总线,故会出现逻辑0,这样发送方就知道有设备接收到了,接收方发出应答后,又要交出总线的控制权,故接收方在ACK界定符上要发逻辑1,释放总线。)

PS:

  • 数据的应答是一位一位进行的,而不是等所有数据传输完,接收方才来应答。
  • ACK段可多个设备同时拉下总线。

(13)EOF(帧结束):设定为7个逻辑1,表示帧结束了。

1.1.2 扩展格式:

扩展格式是因为ID段不够用用了,所以要加ID段的位数。

扩展格式为了要与标准格式的兼容,再碰到IDE位前,系统也不知道是标准格式还是扩展格式,因此,IDE前的两种格式的解析方式,位数等必须一致(除了帧起始,扩展格式没有),遇到IDE后,则可分标准格式解析还是扩展格式解析,即两种格式可以不一样了。


所以,看到红色框内,即遇到IDE前,先都是11位ID。

此后,标准格式为RTR位+IDE,为了与之一样,扩展格式位SSR+IDE,其实SSR是无用的,强制设定为1,为的是与标准格式的RTR位对应。

遇到IDE位后,扩展格式加进了18位ID,后与标准格式RTR位开始完全一致。

1.2 遥控帧

看结构,遥控帧无数据段(DATA),RTR为隐性电平1(与数据帧区分),其他部分与数据帧相同。

这样理解:遥控帧是请求式,说明接收方向发送方请求发送,那自然没有数据,故没有数据段。

而当是请求式时,需要数据帧和遥控帧配合,先遥控帧(配有一个ID)发出给发送方,发送方收到后,以相同ID报文且用数据帧来发送数据,根据后续仲裁规则,当具有相同ID数据帧和遥控帧同时发送时,数据帧优先,则接收方可以收到数据。

1.3 错误帧

总线上所有设备都会监督总线的数据,错误”或“格式错误”或“应答错误”,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

设备默认处于主动错误状态,当某设备处于主动状态时发生的错误太多,就会进入被动错误状态。但无论是哪种状态,但是设备不会乱发错误帧,是当某设备检测出有错误时,该设备才会发出错误帧,即图示错误帧的波形

设备处于主动状态时发出的错误帧的波形为:6个显性位(逻辑0)+6个显性位(逻辑0)【用于延迟】+错误界定符(固定8个逻辑1)

理解:当总线上某一个设备处于主动状态发现错误时,发出6个0,相当于拉下总线,当总线上的传输的数据有1时就会被破换掉,因为0强于1(之前提到),那么最终其他设备收到的数据就被破换掉了。


设备处于被动错误状态时发出的错误帧波形为:6个隐性位(逻辑1)+6个隐性位(逻辑1)【用于延迟】+错误界定符(固定8个逻辑1)

理解:当总线上某一个设备处于被动状态发现错误时,发出6个1,相当于放开总线,就相当于自己这个设备自己破坏自己发的数据,但不破坏总线上别人发的数据(因为总线上数据是1的话就没影响,是0的话,0强于1也没影响)。


  • 两种错误帧都有6位用于延迟:是因为当某一设备发出错误帧时,可能会引起其他设备也出现错误,那么其他设备也可能发错误帧,相当于给一个延迟时间,在来通过界定符来表示结束。
  • 有的同学可能回想,主动发出的错误帧时,发出了六个0,如果刚好总线上的数据也是6个0,那不是没有破换掉数据?或者说不知道是错误帧还是数据,这种情况其实是不可能发生的!!!,连续出现6个0或者6个的情况只能是错误帧,因为CAN还设定了位填充规则(文章末尾)。

1.4 过载帧

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。

可以这样理解:因为发送方的发送频率是其自己决定的,当接收方接收不过来的时候,接收方就可以发出一个过载帧来破坏掉这个数据(过载帧和错误帧类似,连续发送了6个0,我们说错误帧的时候提到过这样会破坏数据),发送方的数据没被收到,那么发送方就会重试,那么,破坏和重试这个过程所用的时间就相当于给接收方延迟,让它有机会慢点收数据。(或者如果发送方有相应的处理机制,收到过载帧后就会调整发送频率)。

过载帧形式:6个显性(逻辑0)+延迟一部分(未确定具体多少位0)+过载界定符(8个1)。

1.5 帧间隔

帧间隔的作用是将数据帧和远程帧与前面的帧分离开。

比如:当设备连续发送数据帧时,需要有帧间隔把这些数据帧分离开。

帧间隔也分主动状态和被动状态。

图上方为主动状态:3位隐性电平(逻辑1)+ 总线空闲(n位逻辑1)

图下方为被动状态:3位隐性电平(逻辑1)+ 延迟传送(8位逻辑1)+ 总线空闲(n位逻辑1)

2 位填充

数据帧和遥控帧发送到总线前其实是进行了位填充再发送到总线上的。

位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据。


以下通过下图几个例子来理解:

“即将发送”表示设备要发出去的数据,”移除填充后”是接收方实际接受到的数据,可以看到,以下三个例子这两项都是对应一样的。

第一组:

要发送的数据是100000110,根据位填充规则,连续发送了5个0后,要在他后面追加一个相反电平1,如“实际发送”/“实际接收”所示,接收方最终接收的数据又会把这个追加的1移除。

第二组:

要发的是10000011110,同样,连续5个0后补1得到100000111110,发现补了一个1后又出现了连续5个1的情况,则在后续再追加一个0得到1000001111100,最后实际接收会把这两个填充位都移除。即:位填充插入的数据位,要和原始数据后续的数据位合并,进行新的位填充判定。

第三组:

要发011111111110,连续5个1后补0得到0111110111110,根据第二组得到的规则,追加的0要和后续的位数一起进行为位填充规则判定,发现无连续0,但原始数据中,又出现5个1,0111110111110,故补0得到:01111101111100,同样,最后实际接收会把这两个填充位都移除。

位填充作用:

  • 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能确掌握数据采样时机。
  • 将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性。(就是我们前面讲错误帧时提到的,不可能在总线上传输的数据出现连续6个相同电平,如果出现,必是错误帧或过载帧)
  • 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲。(CAN总线规定,当出现11个1后表示CAN总线处于空闲状态,由上面例子的第三组可以看到,传输的数据不可能是连续11个1的情况,出现了则必是表示CAN总线处于空闲状态。)

注:以上均是通过学习参考文献、哔哩哔哩网站上江协科技官方号以及网络资源所得的个人经验,如有侵权,请联系我,欢迎指正。

相关文章:

CAN总线通信协议学习2——数据链路层之帧格式

1 帧格式 帧格式可理解为定义了传输的数据(叫报文)应该“长什么样”来传输,也为后续设定一些规则如错误检查机制提供了思路。 首先,帧格式可分为以下5种类型: PS:CAN总线任意一个设备可当收也可当发&#…...

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用

文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取:二、数据预处理(ArcGIS Pro及…...

神经网络在电力电子与电机控制中的应用

神经网络(Neural Networks)简介 神经网络是一种受生物神经元启发的机器学习模型,能够通过大量数据学习输入与输出之间的非线性映射关系。其核心结构包括: 输入层:接收外部数据(如传感器信号、控制指令&…...

llama-factory || AutoDL平台

报错如下: rootautodl-container-d83e478b47-3def8c49:~/LLaMA-Factory# llamafactory-cli webui * Running on local URL: http://0.0.0.0:7860Could not create share link. Missing file: /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_am…...

数学建模:MATLAB极限学习机解决回归问题

一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法,由输入层、隐藏层、输出层组成。 基本原理: 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值,这些参数在整个…...

力扣785. 判断二分图

力扣785. 判断二分图 题目 题目解析及思路 题目要求将所有节点分成两部分,每条边的两个端点都必须在不同集合中 二分图:BFS/DFS/并查集 因为图不一定联通,所以枚举所有点都做bfs(如果没联通的话) 代码 class Solution { public:bool is…...

【硬件工程师成长】之是否需要组合电容进行滤波的考虑

在电子电路设计中,判断是否需要使用组合电容进行滤波,需综合考虑以下因素: 1. 噪声频谱分析 高频与低频噪声共存:若电源或信号中同时存在低频(如工频纹波)和高频噪声(如开关电源的开关噪声、数字…...

Pythonweb开发框架—Flask工程创建和@app.route使用详解

1.创建工程 如果pycharm是专业版,直接NewProject—>Flask 填写工程name和location后,点击右下角【create】,就会新建一个flask工程,工程里默认会建好一个templates文件夹、static文件夹、一个app.py文件 templates&#xff1…...

005 公网访问 docker rocketmq

文章目录 创建自定义网络创建NameServer容器创建Broker容器正式开始启动 Nameserver 容器启动 Broker 容器并关联 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf检查 namesrv 解析检查 Broker 注册状态Nameserver 日志Broker 日志检查容器日志手动指定 Br…...

C++11中的右值引用和完美转发

C11中的右值引用和完美转发 右值引用 右值引用是 C11 引入的一种新的引用类型,用 && 表示。它主要用于区分左值和右值,并且可以实现移动语义,避免不必要的深拷贝,提高程序的性能。左值通常是可以取地址的表达式&#xf…...

txt 转 json 使用python语言

需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…...

Android Logcat 高效调试指南

工具概览 Logcat 是 Android SDK 提供的命令行日志工具&#xff0c;支持灵活过滤、格式定制和实时监控&#xff0c;官方文档详见 Android Developer。 基础用法 命令格式 [adb] logcat [<option>] ... [<filter-spec>] ... 执行方式 直接调用&#xff08;通过ADB守…...

【Linux】从入门到精通:Make与Makefile完全指南

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;从入门到精通&#xff1a;Make与Makefile完全指南 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;C | C语言 | Linux | Python | 数据结构和算法 | 算法专题 &#x1…...

leetcode0014 最长公共前缀 -easy

1 题目&#xff1a;最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&a…...

【星云 Orbit-F4 开发板】07. 用判断数据尾来接收据的串口通用程序框架

【星云 Orbit-F4 开发板】用判断数据尾来接收一串数据的串口通用程序框架 摘要 本文介绍了一种基于STM32F407微控制器的串口数据接收通用程序框架。该框架通过判断数据尾来实现一串数据的完整接收&#xff0c;适用于需要可靠数据传输的应用场景。本文从零开始&#xff0c;详细…...

LLVM - 编译器前端 - 将源文件转换为抽象语法树(一)

一:概述 编译器通常分为两部分——前端和后端。在本文中,我们将实现编程语言的前端部分——即主要处理源语言的部分。我们将学习现实世界编译器使用的技术,并将其应用到我们的编程语言中。 本文将从定义编程语言的语法开始,最终生成一个抽象语法树(AST),这是代码生成的基…...

02_NLP文本预处理之文本张量表示法

文本张量表示法 概念 将文本使用张量进行表示,一般将词汇表示为向量,称为词向量,再由各个词向量按顺序组成矩阵形成文本表示 例如: ["人生", "该", "如何", "起头"]># 每个词对应矩阵中的一个向量 [[1.32, 4,32, 0,32, 5.2],[3…...

深圳SMT贴片加工核心工艺解析

内容概要 深圳作为全球电子制造产业的核心集聚区&#xff0c;其SMT贴片加工技术始终引领行业创新方向。本文聚焦深圳电子制造企业在高密度、微型化组件加工中的核心工艺体系&#xff0c;系统解析从锡膏印刷到成品检测的全流程关键技术。通过梳理SMT产线中设备参数设定、工艺条…...

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例&#xff1a;统计唯一单词数代码 题目 分析 大佬写的很明白&#xff0c;看这儿 我讲讲…...

突破传统:用Polars解锁ICU医疗数据分析新范式

一、ICU数据革命的临界点 在重症监护室&#xff08;ICU&#xff09;&#xff0c;每秒都在产生关乎生死的关键数据&#xff1a;从持续监测的生命体征到高频更新的实验室指标&#xff0c;从呼吸机参数到血管活性药物剂量&#xff0c;现代ICU每天产生的数据量级已突破TB级别。传统…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...