【图解CAN总线】-8-CANFD总线网络“负载率”计算

news/2024/4/26 23:01:37/文章来源:https://blog.csdn.net/qfmzhu/article/details/127354959

目录

1 Classic CAN/CANFD帧长度

2 Interframe space帧间空间的介绍

2.1 Intermission间歇

2.2 Bus idle总线空闲

2.3 Suspend transmission

3 CANFD总线网络“负载率”计算

3.1 单个帧的“负载率”

3.2 通过CAN DBC/Arxml来计算一个CAN网络的理论“负载率”

4 拓展

END


推荐阅读(单击下方文字即可跳转至对应博文):

【图解CAN总线】-1-CANFD和经典CAN2.0帧结构对比

【图解CAN总线】-2-详述CAN总线电平

【图解CAN总线】-3-详述波特率(Raud Rate)和比特率(Bit Rate)二者的差异

【图解CAN总线】-4-详述CANFD和Classic CAN的Frame帧结构差异

【图解CAN总线】-5-详述Bit Stuffing位填充在CANFD和Classic CAN中的差异

【图解CAN总线】-6-classic CAN 2.0总线网络“负载率”计算

【图解CAN总线】-7-Classic CAN 2.0总线网络“负载率”计算(方法二)

1 Classic CAN/CANFD帧长度

不管是Classic CAN还是CANFD,其帧结构都由以下7个段组成:

—   SOF帧起始;

—   arbitration field仲裁段;

—   control field控制段;

—   data field数据段;

—   CRC field;

—   ACK field;

—   EOF.

Classic CAN Standard Frame标准帧不考虑位填充)共:108Bit

帧起始(1bit)、仲裁段(12bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

Classic CAN Extended Frame扩展帧不考虑位填充)共:128Bit

帧起始(1bit)、仲裁段(32bit)、控制段(6bit)、数据段(8×8bit)、循环冗余码段(16bit)、应答段(2bit)和帧结束(7bit)

CANFD Standard Frame标准帧不考虑位填充;DLC = 8)共:117Bit

帧起始(1bit)、仲裁段(12bit)、控制段(9bit)、数据段(8×8bit)、循环冗余码段(22bit)、应答段(2bit)和帧结束(7bit)

CANFD Standard Frame标准帧不考虑位填充;DLC = 64)共:569Bit

帧起始(1bit)、仲裁段(12bit)、控制段(9bit)、数据段(64×8bit)、循环冗余码段(26bit)、应答段(2bit)和帧结束(7bit)

CANFD CAN Extended Frame扩展帧不考虑位填充;DLC = 8)共:136Bit

帧起始(1bit)、仲裁段(32bit)、控制段(8bit)、数据段(8×8bit)、循环冗余码段(22bit)、应答段(2bit)和帧结束(7bit)

CANFD CAN Extended Frame扩展帧不考虑位填充;DLC = 64)共:588Bit

帧起始(1bit)、仲裁段(32bit)、控制段(8bit)、数据段(64×8bit)、循环冗余码段(26bit)、应答段(2bit)和帧结束(7bit)

2 Interframe space帧间空间的介绍

Data frame数据帧remote frame远程帧应通过一个称为interframe space帧间空间的bit field与前面的帧分开,不管是什么类型的帧(data frame数据帧remote frame远程帧error frame错误帧overload frame过载帧)。

注意:

  • overload frame过载帧error frame错误帧的前面不应有interframe space帧间空间;
  • 多个overload frame过载帧之间也不应有interframe space帧间空间

inter-frame space帧间空间应包含bit field:intermission和bus idle time。 对于已经是前一帧的发送方的error-passive node,inter-frame space帧间空间还应包含该节点的suspend transmission time(参见图9和图10)。

图2-1 非前一帧的error-passive或receiver的节点的帧间空间

图2-2 作为前一帧发送方的error-passive node的Interframe space

2.1 Intermission间歇

intermission field应包括三个隐性位。在intermission期间,任何节点不得开始发送data frame数据帧remote frame远程帧。只允许发出overload条件的信号。

在intermission期间的第三位检测到总线上的显性位应解释为SOF。

2.2 Bus idle总线空闲

bus idle总线空闲期间可以是任意长度。当intermission的第3位被认为是隐性的时,receiver和error active transmitter应将总线识别为空闲。当suspend transmission time的第8位是隐性的时,由error passive transmitter应识别为空闲;或当离开bus integrating state时。当总线处于空闲状态时,任何节点都可以访问总线进行发送。

在发送另一帧的过程中,等待发送的帧,应在intermission后的第1位开始。

在总线空闲时间内检测到总线上的显性位,应解释为SOF。

2.3 Suspend transmission

一个error-passive node,如果是前一帧的发送方,应在intermission后发送8个隐性位后,开始发送另一帧。如果另一个节点在该suspend transmission time内开始发送,则该节点将成为该Data Frame数据帧Remote Frame远程帧的接收方。

3 CANFD总线网络“负载率”计算

通过第2章我们可以知悉,CAN总线网络正常的发送过程中,帧与帧之间至少有3个隐性位

根据这些信息,来介绍一种“CANFD总线网络“负载率”计算”的方法。

3.1 单个帧的“负载率”

Classic CAN Standard Frame标准帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 8):

108+3=111Bit;

比特率/波特率

一个Bit的位时间

单个帧的“负载率”

250 Kbps

4000纳秒

((111 * 4000纳秒) / 1秒) *100%= 0.0444 %

500 Kbps

2000纳秒

((111 * 2000纳秒) / 1秒) *100%= 0.0222 %

1 Mbps

1000纳秒

((111 * 1000纳秒) / 1秒) *100%= 0.0111 %

Classic CAN Extended Frame扩展帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 8):

128+3=131Bit;

比特率/波特率

一个Bit的位时间

单个帧的“负载率”

250 Kbps

4000纳秒

((131 * 4000纳秒) / 1秒) *100%= 0.0524 %

500 Kbps

2000纳秒

((131 * 2000纳秒) / 1秒) *100%= 0.0262 %

1 Mbps

1000纳秒

((131 * 1000纳秒) / 1秒) *100%= 0.0131 %

CANFD Standard Frame标准帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 8;启用BRS位加速):117+3=120Bit

其中:

  • 29Bit使用仲裁段波特率:1位SOF段,12位仲裁段,1位IDE,1位FDF,1位R0,1位BRS,2位ACK段,7位EOF段,3位帧间隔;
  • 91Bit使用数据段波特率;1位ESI,4位DLC,64位数据段,22位CRC段。

比特率/波特率

一个Bit的位时间

单个帧内对应段的负载率

仲裁段500 Kbps

2000纳秒

((29 * 2000纳秒) / 1秒) *100%= 0.0058 %

数据段2 Mbps

500纳秒

((91 * 500纳秒) / 1秒) *100%= 0.00455 %

单个帧的“负载率”

0.01035%

CANFD Standard Frame标准帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 64;启用BRS位加速):569+3=572Bit;

其中:

  • 29Bit使用仲裁段波特率:1位SOF段,12位仲裁段,1位IDE,1位FDF,1位R0,1位BRS,2位ACK段,7位EOF段,3位帧间隔;
  • 543Bit使用数据段波特率;1位ESI,4位DLC,512位数据段,26位CRC段。

比特率/波特率

一个Bit的位时间

单个帧内对应段的负载率

仲裁段500 Kbps

2000纳秒

((29 * 2000纳秒) / 1秒) *100%= 0.0058 %

数据段2 Mbps

500纳秒

((543 * 500纳秒) / 1秒) *100%= 0.02715 %

单个帧的“负载率”

0.03295%

CANFD Extended Frame扩展帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 8;启用BRS位加速):136+3=139Bit;

其中:

  • 48Bit使用仲裁段波特率:1位SOF段,32位仲裁段,1位FDF,1位R0,1位BRS,2位ACK段,7位EOF段,3位帧间隔;
  • 91Bit使用数据段波特率;1位ESI,4位DLC,64位数据段,22位CRC段。

比特率/波特率

一个Bit的位时间

单个帧内对应段的负载率

仲裁段500 Kbps

2000纳秒

((48 * 2000纳秒) / 1秒) *100%= 0.0096 %

数据段2 Mbps

500纳秒

((91 * 500纳秒) / 1秒) *100%= 0.00455 %

单个帧的“负载率”

0.01415%

CANFD Extended Frame扩展帧来说,发送一帧实际长度(不考虑位填充;帧间隔3BitDLC = 64;启用BRS位加速):588+3=591Bit;

其中:

  • 48Bit使用仲裁段波特率:1位SOF段,32位仲裁段,1位FDF,1位R0,1位BRS,2位ACK段,7位EOF段,3位帧间隔;
  • 543Bit使用数据段波特率;1位ESI,4位DLC,512位数据段,26位CRC段。

比特率/波特率

一个Bit的位时间

单个帧内对应段的负载率

仲裁段500 Kbps

2000纳秒

((48 * 2000纳秒) / 1秒) *100%= 0.0096 %

数据段2 Mbps

500纳秒

((543 * 500纳秒) / 1秒) *100%= 0.02715 %

单个帧的“负载率”

0.03675%

3.2 通过CAN DBC/Arxml来计算一个CAN网络的理论“负载率”

如果已知一个CAN总线网络所有CAN ID的DBC/Arxml,并且知道它们的发送方式,我们可以粗略地估算出CANFD总线网络的“负载率”:CANFD总线负载率是各个帧占用总线带宽百分比之和。

下面以比特率/波特率:仲裁段500kbps,数据段2Mbps为例(不考虑位填充;帧间隔3Bit):

Num

CAN ID

发送周期

帧类型

DLC

对应帧一秒内的负载率

1

0x115

10ms

经典CAN标准帧

8

(1000ms / 10ms)* 0.0222 % = 2.22%

2

0x217

20ms

经典CAN扩展帧

8

(1000ms / 20ms)* 0.0262 % = 1.31%

3

0x3B4

10ms

CANFD标准帧

8

(1000ms / 10ms)* 0.01035% = 1.035%

4

0x475

20ms

CANFD扩展帧

64

(1000ms / 20ms)* 0.03295% = 1.6475%

5

0x211

10ms

CANFD标准帧

8

(1000ms / 10ms)* 0.01415% = 1.415%

6

0x311

20ms

CANFD扩展帧

64

(1000ms / 20ms)* 0.03675% = 1.8375%

CANFD总线网络的理论“负载率”

9.465 % +…

4 拓展

如果有一个已知的CAN Trace Log,我们也可以按照上述的方法,统计1秒以内发送的帧数,来粗略计算该1秒以内的CANFD总线网络负载率。

推荐阅读(单击下方文字即可跳转至对应博文):

《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

《Autosar_BSW高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

END

获取更多“汽车电子资讯”和“工具链使用”,

请关注“汽车电子助手”,做您的好助手。

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

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

相关文章

vue3-admin商品管理后台项目(创建vite项目以及配置)

秋招0 offer,继续充实自己,学学之前一直想做没做的vue-admin项目,目前是参考网易云课堂的一门课,后续会根据自己的项目学习进度一直更新下去。 首先是创建一个文件夹,然后作为我们项目的总文件夹,然后检查…

Debug初步了解

Debug调式程序 可以让代码逐行执行 查看代码执行的过程 调试程序中出现的bug 使用方式: 在行号的右边 鼠标左键单击 添加断点(每个方法的第一行 哪里有bug添加到哪里) 右键 选择Debug执行程序 程序就会停留在添加的第一个断点处 如: 这就是断点也是声明程序从这一步开始走 …

【ArcGIS微课1000例】0033:地图点状标记符号设计教程

地图符号是表示地图内容的基本手段,它由形状不同、大小不一、色彩有别的图形和文字组成。 地图符号是地图的语言,是一种图形语言。它与文字语言相比较,最大的特点是形象直观,一目了然。 本文讲解ArcGIS中点状符号设计方法。 文章目录 一、新建符号样式二、点符号设计1. 图根…

如何配置 uboot

前言 想为一款 SOC 开发 uboot,需要做如下事情: 下载 uboot 源码下载 SOC 对应的交叉编译工具,并在 host 机上配置好交叉编译环境配置 uboot编译 uboot烧录运行调试 下面以 LiCheePi Zero 开发板为例,从 0 到 1 演示完整示例。…

[附源码]Java计算机毕业设计SSM大学生兼职管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LINUX之VLC4.0安装

环境准备 操作系统 ubuntu20.04 版本 VLC4.0.0 dev版本 工具准备 sudo apt-get install git build-essential pkg-config libtool automake autopoint gettext unzip安装第三方依赖库 下面的库只能多不能少,否则会出现各种错误 sudo apt-get install libxcb-shm0…

std::ref用法以及和引用区别

1、std::ref是什么? 关于c中的std::ref,std::ref在c11引入。本文通过讲解std::ref的常用方式,及剖析下std::ref内部实现,然后我们再进一步分析为什么使用std::ref。 ref是个函数模板: 用来构建一个reference_wrapper…

【区块链 | Solidity】跟我学 Solidity(6):工厂模式

如何在智能合约中使用clone工厂模式减少合约部署 gas。 原文 https://medium.com/better-programming/learn-solidity-the-factory-pattern-75d11c3e7d29 作者 Wissal haji欢迎来到学习 Solidity 系列的另一部分。在上一篇文章,我们讨论了如何从智能合约中创建另一个智能合约。…

泛型(1)

泛型的概述 泛型是一种未知的数据类型 当我们不知道使用什么数据类型的时候 可以使用泛型 泛型也可以看出是一个变量 用来接收数据类型 当我们创建集合是就确定泛型类型 使用泛型的好处 我们都知道集合中是可以存放任意对象的 只要把对象存储集合后 那么这时他们都会被提升成Ob…

无向图的双连通分量 DCC

双连通分量又称为重连通分量 分为 (1)边的双连通分量 EDCC :极大的不含桥的连通区域(块) 性质: 边的双连通分量不管删掉哪条边都是连通的 任意两点之间都包含两条不相交的路径(充分必要) (2)点的双连通分量 VDCC &…

电压掉电监测电路-三极管电路分析

电压掉电监测电路 电路在电压掉电时处于不稳定状态,经常需要采取一些应对措施。比如音响,内部的音频功率放大电路,在被突然拔掉电源时会发出刺耳的爆破音。 如果加入电压掉电监测电路,当监测到电压掉电时,输出一个信号…

MySQL目录结构与SQL基本概念

MySQL目录结构 1.MySQL安装目录配置文件 my.ini1、bin目录 用于放置一些可执行文件,如mysql.exe、mysqld.exe、mysqlshow.exe等。 2、data目录 用于放置一些日志文件以及数据库。 3、include目录 用于放置一些头文件,如:mysql.h、mysql_ername.h等。 4、lib目录 用于放置一系…

刷爆leetcode第七期 0018

刷爆leetcode第七期 0018题目编号0018 用队列实现栈第一步 定义结构体第二步 实现创建(初始化)第三步 删除接口函数第四步 返回头的值总结发现问题一发现问题二源码题目编号0018 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO&…

.NET周报【10月第1期 2022-10-11】

本周精选 继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型 https://github.com/dotnet/runtimelab/pull/2002 .NET Runtimelab中绿色线程的原型实现的PR,在不久的将来,.NET开发者也可以方便的用上有栈协程,目前的启动一个有栈协程的AP…

docker:基础命令未完待续

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像,若没有指定标签,则下载最新的版本,也就是标签为: la…

Python快速刷题网站——牛客网 数据分析篇(十五)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 前言 本文将继续学习pan…

MySQL的行锁、间隙锁和临建锁

目录 行锁 间隙锁&临键锁 行锁 InnoDB实现了以下两种类型的行锁: 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。 //共享锁和共享锁兼容,共享锁和排他锁互斥。 排他锁&#…

43 多个相同限定名类型同时存在导致的继承结构混乱的情况

前言 // 四刷天府绿道 呵呵 在前面文章中 jetty-runner:jar:9.3.20 和 tomcat-embed-core-8.5.29 的 JarScannerCallback 不兼容, 导致服务启动失败 提到了这样的一个问题 我们再看一下这里的 callback 的接口, jetty-runner 的这个对象里面是没有 void scan(Jar jar, Str…

【附源码】计算机毕业设计SSM民宿短租系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

JavaEE - Servlet(向服务器上传文件 Part类)

我们在需要向服务器上传文件时,在前端需要使用form表单,form表单需要使用特殊的类型 form-data 此时提交文件的时候,浏览器会把文件内容以form-data的格式构造到HTTP请求中,服务器就可以通过getPart获取了 需要注意:…