【CAN通讯系列5】CAN数据帧及其仲裁

news2024/9/17 7:41:21

在CAN通讯系列3-CAN通讯如何传递信号中,由于传递信号的分析需要,引出了CAN数据帧的ID,长度和数据段的概念,它们都与CAN协议帧相关。CAN协议帧有5种类型,如下表:

         

而我们当前使用到的是数据帧,故本文将根据CAN协议来介绍数据帧。

1 CAN数据帧

数据帧有标准和扩展两种格式,且这2种格式都具有相同的帧结构,都由7个段构成,分别是:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,如下所示:

图片

Source: CAN入门书,renesas

1.1 帧起始(SOF, Start of Frame)

帧起始表示帧开始的段,1个位的显性位。总线空闲时为隐性位,故帧起始以显性位可识别一帧数据开始发送,对于标准和扩展格式均如此:

图片

Source: CAN入门书,renesas

1.2 仲裁段(Arbitration Field)

仲裁段表示数据的优先级的段,其作用就是根据报文ID来确定其发送优先级,ID数值越小,其优先级越高。标准格式和扩展格式在此的构成有所不同,如下所示:

Source: CAN入门书,renesas

对于数据帧,标准格式和扩展格式区别主要有3点:

  • 长度,标准格式仲裁段有12位,而扩展格式仲裁段有32位;

  • ID数,标准格式最大有(2^11)个ID,而扩展格式最大有(2^29)个ID;

  • 格式标志RTR/SRR,如果是标准格式,则RTR/SRR为显性;如果是扩展格式,则RTR/SRR为隐性。

具体如何利用该段进行仲裁,看后面的仲裁机制章节。

1.3 控制段(Control Field)

控制段表示数据段的有效字节数,由6个位构成,标准格式和扩展格式的构成也有所不同。

图片

Source: CAN入门书,renesas

这里只关注4位数据长度码DLC,DLC与数据的字节数对应关系如下所示:

图片

Source: vector learning

1.4 数据段(Data Field)

数据段可包含0-8个字节的数据,从MSB(最高位)开始输出。

图片

Source: CAN入门书,renesas

数据段的数据有几个字节,取决于控制段的数据长度码DLC的数值,DLC可以取0-15的值,但是它取9-15时没意义,因为已经超过数据段的长度。

1.5 CRC段(Cyclic Redundancy Check Field)

检查帧的传输错误的段,由15个位的CRC序列和1个位的CRC界定符(用于分隔位)构成,CRC界定符恒为隐性。

图片

Source: CAN入门书,renesas

CRC序列是根据多项式生成的CRC值,CRC的计算范围包括帧起始,仲裁段,控制段和数据段。

Source: CAN2.0B

1.6 ACK段(Acknowledge Field)

用来确认是否正常接收的段,由ACK槽和ACK界定符2个位构成。

图片

Source: CAN入门书,renesas

对于发送单元,在ACK段默认2个位的隐性位;而对于接收单元,接收到正确消息的单元在ACK槽发送显性位,通知发送单元正常接收结束。可理解为ACK段数值取决于接收单元,结合下图理解下该逻辑:

图片

1.7 帧结束(End of Frame)

表示帧的结束的段,由7个位的隐性位构成。

Source: CAN入门书,renesas

通过上述对数据帧定义与作用的介绍,不难理解,如果VCU要传递信号给MCU,那么先要定义CAN数据帧或CAN报文的ID号,再定义要装载数据段多长的数据,通过设置DLC实现,最后数据段部署信号及其顺序。

2仲裁机制

基于仲裁段的定义来分析下数据帧的仲裁过程,由于数据帧有两种格式,所有分为3种情况进行说明:标准格式的仲裁,扩展格式的仲裁 和标准格式与扩展格式的仲裁。

Source: CAN入门书,renesas

假设CAN总线上有两个节点Node_A和Node_B,某一刻他俩同时向总线上发送数据,如下

图片

注:Tx表示发送,Rx表示接收,每个节点都有发送与接收功能。当节点作为发送方,会去接收自己发送的内容以进行检查,即回读机制。对比发送的数据与回读的数据,比如发现ACK槽为显性了,就说明发送的数据已被其他节点正确接收。

情况1:标准格式的仲裁

Node_A和Node_B都是标准格式,那么仲裁发生在11位ID范围,即从D10-D0,采用线与机制(逢0变0),逐位进行比较,一旦某位出现不同,如上图的ID7位,则显性位覆盖隐性位,仲裁结束,显性位的对应节点Node_A胜出。

情况2:扩展格式的仲裁,与情况1类似。

情况3:标准格式与扩展格式的仲裁

同样先进行前11位ID的比较,一旦某位出现不同,显性位的对应节点胜出;如果都一样,则标准格式的节点胜出,因为11位ID后1位,标准格式的RTR位恒为显性,扩展格式的SRR位恒为隐性,显性位的对应节点胜出。

由上述分析可知,ID越小,其优先级越高。因此,当VCU要传递信号给MCU时,对于优先级高的VCU信号,应该将它们分配到ID号小的CAN报文中,确保能与其他节点的ID仲裁中胜出。

3 小结

到此,根据CAN数据帧的定义和作用,我们对于报文ID和数据长度有了新的认识,同时获取一些思路如何去设置他俩,为了定义控制器间的CAN通讯更近了一步。

另外,本文也提到了一些陌生的概念,比如显性和隐性。实际上,这些概念涉及到了CAN总线的定义。为了更加全面了解CAN协议,下篇文章将安排CAN总线内容的介绍。

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

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

相关文章

【Qwen-Audio部署实战】Qwen-Audio-Chat模型之FastApi部署实战

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

10 BERT

目录 1 综述 1.1 BERT的核心思想 1.2 BERT的关键技术:预训练阶段 1.3 微调阶段 2 BERT的架构 2.1 输入处理 3. 特征选择/学习模块 BERT 的自注意力过程 4. 预训练任务:同时进行 4.1 Next Sentence Prediction (NSP) 4.2 Masked Language Model…

Url图标实现

Url图标实现 效果如下&#xff1a; 1.引入样式 <link rel"icon" href"favicon.ico"> favicon.ico和对应的html一般需要在同一个目录下&#xff08;同级别&#xff09;。 2.title是用来设置在url页签中显示的名称。 可能存在的问题&#xff1a; …

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…

filament 初使用记录

安装初始化 一、环境准备 官网要的 我安装的 二、下载安装 安装laravel composer create-project --prefer-dist laravel/laravel 项目名称 10.*导入 filament composer require filament/filament注册 filament 管理面板 php artisan filament:install --panels初始化…

KubeSphere部署:(一)环境准备

本文介绍windows系统&#xff0c;安装wsl虚拟机&#xff08;ubuntu&#xff09;&#xff0c;并在ubruntu中配置连接私有harbor及阿里云镜像等。 在确定该方式前&#xff0c;博主也曾尝试过通过安装Docker Desktop的方式&#xff0c;但每次重启电脑之后&#xff0c;docker桌面端…

Photoshop 2023:创意无限的图像编辑神器

Photoshop 2023 是一款专为 Mac 和 Windows 系统设计的强大图像编辑软件&#xff0c;为专业设计师和业余爱好者提供了无与伦比的创作工具和功能。 一、强大的编辑工具 Photoshop 2023 拥有丰富的编辑工具&#xff0c;如选择工具、画笔工具、橡皮擦工具等。其选择工具能够精确…

Matlab编程资源库(14)常微分方程初值问题的数值解法

一、 龙格&#xff0d;库塔法简介 龙格-库塔法&#xff08;Runge-Kutta method&#xff09;是一种常用的数值解微分方程的方法&#xff0c;由德国数学家卡尔龙格&#xff08;Carl Runge&#xff09;和马丁威尔海尔姆库塔&#xff08;Martin Wilhelm Kutta&#xff09;在20世纪…

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端

Windows11下 Visual Studio 2022 + Qt6 的 WebSocket 线程池异步 客户端 1 开发 WebSocket 客户端1.1 开发环境1.1.1 为Qt 6安装 websockets1.2 .基于Qt6的 QWebSocket 客户端示例1.2.1 实现 WebSocket 客户端1.2.2 创建 QtQWesocketClient1.2.3 创建QWebsocket对象1.2.3.1 添加…

轻松实现人声与伴奏分离,轻松获取纯净音质

SpleeterGui是一款用于人声与伴奏分离的开源软件&#xff0c;基于Python的Spleeter库开发而成。SpleeterGui支持的操作系统包括Windows、macOS和Linux&#xff0c;用户可以根据自己的需求选择合适的版本进行下载和使用。 使用教程 1、解压 人声伴奏分离软件-SpleeterGUI_2.9.5…

前端必知必会-html实体与保留字转换和符号

文章目录 HTML 实体HTML 字符实体一些有用的 HTML 字符实体HTML 符号HTML 符号实体数学符号希腊字母其他一些实体总结 HTML 实体 HTML 中的保留字符必须用实体替换&#xff1a; <&#xff08;小于&#xff09; < >&#xff08;大于&#xff09; >HTML 字符实体 …

C#体检系统源码,医院健康体检系统PEIS,C#+VS2016+SQLSERVER

体检中心/医院体检科PEIS系统源码&#xff0c;C#健康体检信息系统源码&#xff0c;PEIS源码 开发环境&#xff1a;C/S架构C#VS2016SQLSERVER 2008 检前&#xff1a; 多种预约方式网站预约、电话预约、微信平台预约及检前沟通&#xff0c;提前制作套餐&#xff0c;客人到达体检…

内网穿透的应用-中文版个人知识库Trilium笔记本地安装结合内网穿透远程协作

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

使用 WeNet 训练 AISHELL-1 模型的详细入门指南

使用 WeNet 训练 AISHELL-1 模型的详细入门指南 在这篇文章中&#xff0c;我们将通过 WeNet 框架详细介绍如何训练 AISHELL-1 数据集的语音识别模型。我们将逐步解释各个阶段的操作&#xff0c;适合初学者入门。 1. 环境准备 1.1 安装miniconda miniconda官网 1. 获取下载链…

【Dash】Dash模块介绍

什么是Dash&#xff1f; Dash 是一个开源的 Python 框架&#xff0c;用于创建基于 Web 的应用程序。它由 Plotly 公司开发&#xff0c;专为数据科学家和分析师设计&#xff0c;以便他们可以构建自定义的数据可视化 Web 应用程序&#xff0c;而无需具备前端开发知识。Dash 提供…

Scrapy 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…

Qt之详解QPainter

文章目录 前言QPainter 是干什么的如何使用 QPainter在哪个函数使用 QPainter为什么要在这里使用 QPainter最简单的示例代码 QPainter 函数构造函数与析构函数QPainter()QPainter(QPaintDevice *device)~QPainter() 初始化和结束绘图bool begin(QPaintDevice *device)bool end(…

x-cmd pkg | yazi - 超快终端文件管理器

目录 简介快速入门功能特点竞品和相关项目进一步阅读 简介 yazi 是由 github.com/sxyazi 用 Rust 开发的终端文件管理器&#xff0c;支持预览文本文件、pdf 文件、图像、视频&#xff0c;内置代码高亮功能。在内部&#xff0c;它使用 Tokio 作为其异步运行时&#xff0c;以非阻…

【百度超级智能体】零代码构建趣味语言游戏:秋日寻宝知识问答

前言 文心智能体平台AgentBuilder是由百度推出的一个创新平台&#xff0c;该平台基于其先进的文心大模型。这个平台旨在帮助开发者根据各自的专业领域和应用场景&#xff0c;以灵活多样的开发方法构建定制化的智能体&#xff08;Agent&#xff09;。通过简单易用的prompt编排功…

详解Qt 定时器QTimer

文章目录 前言QTimer 是什么什么时候使用 QTimer定时器时间到了调用什么函数 QTimer 的所有函数构造函数与析构函数QTimer(QObject *parent nullptr) 基本操作void start(int msec)void start()void stop()bool isActive() const 定时器属性void setInterval(int msec)int int…