CAN总线数据帧的帧结构

news2024/9/21 22:46:07

CAN总线中的信息是以固定格式的“帧”发送的,当总线为空闲时,任何已连接的节点都可以开始发送一个新的“帧”。

在一个CAN系统中,数据在节点之间的发送和接收主要通过四种不同类型的“帧”来执行和控制。这四种类型分别是数据帧、远程帧、错误帧和过载帧。

第一种数据帧的功能就是将一组数据从一个发送节点传送给所有需要的接收节点,这也是我们最常用的帧类型。

第二种是远程帧,也叫遥控帧,它是在某一个节点向其它节点请求传送特定的数据帧时使用,这个帧类型在汽车中很少使用。

第三种是错误帧,错误帧可以被任何节点发送,无论是发送节点还是接收节点,只要检测到总线错误都可以发送。

第四种是过载帧,过载帧是当某个接收节点内部过载,无法接收下一帧时,会发送过载帧以通知发送节点。

今天我们要详细介绍的是乘用车中最常用的帧类型

标准格式数据帧的帧结构

数据帧的帧结构是由7个不同的位场构成,它们分别是帧起始、仲裁场、控制场、数据场、CRC场、ACK场和帧结束。

图片

1、帧起始SOF

SOF标志着数据帧的开始,它只由1位单独的“显性”位组成,即逻辑“0”。

为什么SOF必须是“显性”位?因为总线在空闲状态时是“隐性”位,一直是逻辑“1”,所以起始位必须与空闲时的逻辑相反,才能区分总线空闲和忙碌。

图片

一个节点只有在总线空闲时才能发送SOF,发送节点发送SOF后,在总线上会引起“隐性”到“显性”的跳变,即逻辑“1”变为逻辑“0”,对应的实际电平是从差分电压的0V到2V(注意CAN的逻辑“0”和“1”与实际的物理电平高低是相反的)。

所有其它的节点都将按SOF引起的上升沿进行硬同步。硬同步就是让所有的接收和发送节点都以这个上升沿硬线信号作为采样、测量的时间基准,这样可以保证各个节点在之后的同一时刻采集到相同的信息。

图片

2、仲裁场

仲裁场包括11位的标识符ID(identifier)和1位的RTR。

图片

标准格式的ID是11位,总线上是以“显性”位为优先,而“显性”位对应逻辑0,因此对应到实际的ID时,就是ID值越小,优先级越高。比如ID为0x390与0x398同时发送,按由高到低位逐次比较,第11位~第5位相同,而第4位0x390为0,0x398为1,则0x390优先级更高,获得总线控制权。

图片

RTR位是用于区分数据帧和远程帧,在数据帧中它是“显性”位,即逻辑0;在远程帧中它是“隐性”位,即逻辑1。

有的工程师不太明白的是,RTR位既然是区分数据帧和远程帧的标志位,为什么会把它也归类到仲裁场的范围呢?

这是因为远程帧和它对应的数据帧的标识符ID是一样的,当两者在总线中同时发送时,仅通过标识符ID是无法仲裁出优先级的,而数据帧的RTR是“显性”,远程帧的RTR是“隐性”,CAN总线的规则是“显性”位优先级高于“隐性”位,因此根据RTR位可以仲裁出同样ID的数据帧的优先级高于远程帧,因此把RTR位也归类到仲裁场中。

图片

3、控制场

控制场包括3个字段,1位的IDE、1位的r和4位的DLC

图片

IDE是扩展标志位,“显性”(0)表示标准格式,“隐性”(1)表示扩展格式。标准格式的ID是11位,主要用于小型乘用车;扩展格式的ID是29位,主要用于大型商用车,本文介绍的就是标准格式。

r是预留位,用于未来的扩展应用,发送时固定为“显性”(0)。

DLC表示数据场中发送数据的字节长度,4位可表示的范围是0~15,而实际的数据长度范围是0~8,所以4位可以满足长度显示要求。

4、数据场

数据场比较简单,就是包括了0~8个字节,即0~64位的数据,车辆中所有的信号都在这里进行传输,比如车速、转速、门开、温度等信息,数据场中的信号是我们在软件开发和测试中最常见到的内容。

图片

5、CRC场

CRC场包括了15位的CRC序列和1位的CRC界定符。

图片

CRC序列的的计算方法是基于多项式的除法运算。

被除数多项式的系数由填充位流给定,填充位流由SOF、仲裁场、控制场和数据场的数据共同组成。

除数多项式为固定的生成多项式X15+X14+X10+X8+X7+X4+X3+X

用被除数多项式除以除数多项式,所得的余数即为CRC序列值。

发送节点会根据以上方法先计算出一个CRC序列值,接收节点根据实际收到的数据再计算出一个CRC序列值,两者进行比较,如果相同,说明接收的数据帧正常,如果不同,说明收到的数据帧有问题,接收节点就会发出错误帧。

后面的CRC界定符DEL固定为“隐性”(1)。

6、ACK场

ACK场共2位,包括1位的应答间隙ACK(ACK slot)和1位的应答界定符DEL(ACK delimiter),发送节点会将这两个字段都发送“隐性”位(1)。

图片

所有收到符合CRC序列的帧的节点将在ACK位发出一个“显性”位(0),用以覆盖原来的“隐性”位(1),而发送节点检测到了ACK位的“显性”状态(0),就可以判断出其它节点已经正常接收。

应答界定符DEL在发送和接收过程始终保持“隐性”状态(1)。

7、帧结束EOF

每一个数据帧都以EOF作为帧结束的界定符,EOF是由连续的7个“隐性”位(1)组成。

图片

8、帧间空间

除了7个位场外,还有一个帧间空间Interframe space的概念。

这个概念要求每一个数据帧与它前一帧(数据帧、遥控帧、错误帧或过载帧)之间必须以帧间空间分隔开,不考虑错误帧的挂起传输时,帧间空间主要包括间歇ITM(intermission)和总线空闲Bus Idle两部分。

图片

ITM由3个“隐性”位(1)组成,在ITM期间,数据帧不允许发送。

总线空闲Bus Idle可以是任意长度的隐性位(1),数据帧只能在Bus Idle期间发送。

图片

至此,一个数据帧的完整收发周期就全部结束了,从总线空闲后面的SOF开始,则又进入了下一个收发过程!

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

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

相关文章

探索ArrayList的线程不安全性

文章目录 概要示例代码原因解决用 synchronized 保证安全添加元素其他方法 总结 概要 要测试ArrayList的线程不安全性,可以创建多个线程同时对 ArrayList 进行修改操作(如添加、删除元素),并观察是否会引发异常或数据不一致的问题…

Typescript实现react-redux的useSelector和useDispatch的状态定义

背景:react中使用typescript,在引入redux之后很多状态定义有问题,记录下来(文章记录学习react-redux过程中的踩坑)。 1.useSelector时,state语法报错,类型为unknown,如下图 我的store状态设置的很简单&am…

Luminar Neo for Mac智能图像处理软件【操作简单,轻松上手】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

【机器学习】LSTM(长短期记忆网络)详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 LSTM(长短期记忆网络)详解LSTM的基本思想LSTM的前向传播过程LSTM在实际任务中的…

mysql高级知识之集群

一、安装 源码编译MySQL,若需要MySQLtar包可私信我 #创建数据目录 mkdir /data/mysql -p#安装相关依赖 yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen…

C++入门day3-面向对象编程(中)

前言:C入门day2-面向对象编程(上)-CSDN博客 运算符重载 我们接触过函数重载,就是同名的函数有不同的功能。那么运算符重载,顾名思义也是赋予运算符其他的功能。在这里,我个人以为,运算符就是特…

C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 函数是语言的基本组成部分,也是面向对象编程的基石,他体现了封装的思想,代码的复用的功能。欢迎点赞 收藏 关注,本人将会持续更新 文章目录 函数什么是函数&am…

彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项

近日,由中国教育发展战略学会人工智能与机器人教育专业委员会指导,北京教育信息化产业联盟主办的第一届人工智能教育应用论坛暨 AI 教育科技成果展在北京隆重举办。本次活动以“ AI 强校大时代 —— 用新质生产力打造金钥匙强校”为主题,汇聚…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

数据结构(单向链表)

单向链表代码 #ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node {DataType data;struct node *pnext; }Link_Node_t;typedef struct link {Link_Node_t *phead;int clen; }Link_t;extern Link_t *link_creat(); extern int push_link_head(Link_t *…

智慧公厕技术应用、系统架构、应用功能有哪些?@卓振思众

智慧公厕的标准涵盖了多个方面,包括技术应用、系统架构、应用功能以及环保节能等。以下是【卓振思众】整理的一些标准要点: 技术应用‌物联网技术‌:通过无线传感器、监控设备等实时采集公厕内部环境数据。‌大数据与云计算‌:对数…

2157. 优秀的拆分(power)

代码 #include<bits/stdc.h> using namespace std; int a[10001]; int main() {int n,t1,k0;bool flagfalse;cin>>n;if(n%21) {cout<<-1;return 0;}while(n>0){if(n%21){k;a[k]t; }nn/2;tt*2;}if(k>1) {flagtrue;for(int ik;i>1;i--)cout<&l…

lit-llama代码解析

https://github.com/Lightning-AI/lit-llama/blob/main/README.md 下载的时候会报错误&#xff0c;因为网不行&#xff0c;一种方法就是多次尝试&#xff0c;另一种方法是终端连上代理下载 pycharm连接hugging face等网站_hugging face怎么连接-CSDN博客 根据指引下载权重 下…

springboot,maven多模块开发,子模块获取不到父模块添加的依赖,有多个root模块问题解决

错误示范 我以为放进去然后重载一下就是子模块了 导致后续在外层加的依赖&#xff0c;其article都接收不到 解决方案 需要在父模块的modules注册子模块 修改前后对比 此时子模块也能获取父模块的依赖

DDD设计方法-2-聚合、实体、值对象

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计方法-2-聚合、实体、值对象&a…

基于mspm0g3507的智能送药小车(21年电赛f题,openmv寻迹,k210数字识别,并行pid调制)项目实验报告

2024年全国大学生电子设计竞赛&#xff08;TI杯&#xff09; 2024年7月17日 摘要&#xff1a;本项目由微处理器MSPM0G3507&#xff0c;编码器电机驱动&#xff0c;OPENMV、K210视觉处理单元&#xff0c;红外药品检测单元&#xff0c;ZIGBEE无限透传单元&#xff0c;OLED显示&am…

Docker数据卷和Dockerfile

1、什么是Docker数据卷 前言&#xff1a; 在下载的镜像中&#xff0c;我们不能够去改变它内部的一些配置&#xff0c;因为docker的镜像文件是已经配置好的&#xff0c;无法改变&#xff0c;我们只能改变镜像启动后的容器里面的内容&#xff0c;但是又因为&#xff0c;容器本来…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器&#xff1a; (2)拦截器的…

【VMware】麒麟系统网络连接配置

在VMware配置页面点击编辑&#xff0c;进入虚拟网络编辑器将默认的 VMnet0删除&#xff0c;新建网络&#xff0c;设置桥接模式为Intel 打开主机cmd,查看主机IP地址&#xff0c;获取子网掩码&#xff0c;默认网关及DNS服务器 4.在主机寻找可用IP地址&#xff0c;ping不通的为未…

探秘发酵过程:酵母菌如何为白酒赋予不同风味?

在白酒酿造的神秘世界里&#xff0c;发酵过程如同一位隐形的艺术家&#xff0c;用其不同的笔触为白酒勾勒出千变万化的风味。而在这背后&#xff0c;酵母菌作为发酵的主角&#xff0c;发挥着至关重要的作用。今天&#xff0c;就让我们一起探秘发酵过程&#xff0c;了解酵母菌如…