CAN总线学习——物理层、数据链路层、CANopen协议

1、CAN总线介绍

1.1、CAN总线描述

(1)CAN总线支持多节点通信,但是节点不分区主从,也就是不存在一个节点来负责维护总线的通信;这点可以和I2C总线对对比,I2C是一主多从模式;
(2)是差分、异步、串行总线,采用双绞线传输,抗干扰能力强;
(3)总线仲裁机制是非破坏性仲裁;
(4)采用短帧结构,每帧包含有效数据0-64个字节,可达到实时性响应要求;
(5)数据帧具有帧ID,帧ID越小,优先级越高,可进一步满足实时性要求;
(6)CAN总线具有CRC校验功能,数据传输可靠性高;
(7)具有出错自动重传机制;
(8)节点在出错状态下,可自动脱离总线,不影响总线的正常工作;
(9)CAN总线传输距离长,可达10KM(5Kbps以下),通信速率最高就是几兆的速度,距离越长支持通信速率越低;

1.2、CAN总线应用场景

(1)CAN总线突出“实时性”和“抗干扰性”,但是通信速率不高,只有几百KB到几兆,所以适合用在对实时性和抗干扰性要求高,但是通信数据量不大的场景;
(2)CAN总线常用在工业领域和汽车领域;

1.3、4种CAN总线协议

(1)CAN总线分为经典CAN标准帧(CB)、经典CAN扩展帧(CE)、CAN FD标准帧(FB)、CAN FD扩展帧(FE);
(2)标准帧和扩展帧的区别:标准帧的帧ID是11位,扩展帧的帧ID是29位;
(3)CAN FD和经典CAN(CAN2.0)的区别:
a)、每个数据帧中数据长度从经典CAN的8字节扩展到最大64字节;
b)、CAN FD和经典CAN是兼容的;
c)、CAN FD在仲裁端的时钟频率和数据段的时钟频率可以不同;在仲裁段的时钟频率和经典CAN保持一致,在数据段时提高时钟频率,由此可以提高CAN FD的通信速率;
d)、CAN FD的数据帧格式也和经典CAN不一致,这里不详细描述;
总结:CAN FD每帧能传送的数据字节更多,通信速率更快,并且兼容经典CAN;

2、物理层

2.1、CAN总线接口

在这里插入图片描述>CAN总线采用差分信号,对外接口是两根双绞线CANH、CANL;

2.2、CAN总线信号电平

在这里插入图片描述

2.3、CAN总线的终端电阻

在这里插入图片描述>在线束两端添加120欧的电阻,防止信号反射造成通信紊乱;一般高速CAN都会添加这两个电阻;

2.3、CAN总线信号采样点

###

(1)CAN总线是异步总线,各个节点之间是没有共用的时钟线,所以各个节点间的时钟频率可能不是完全一样,有一定的误差;
(2)如果收发双方的时钟频率不一致,误差累计下来会导致数据解析出错;

2.4、规避波特率误差带来的通信错误

在这里插入图片描述

(1)CAN总线规定在信号的跳变沿时刻进行同步,将累计误差限制在两个跳变沿;
(2)CAN总线上需要发送多个相同位的数据,连续相同的bit位不会产生跳变沿,这样会导致误差累计,所以采用填充位的方式,在连续5个相同位后插入一个相反位,产生跳变沿,用于同步;

2.5、CAN总线仲裁机制

参考博客:《CAN总线竞争与仲裁机制分析》;

3、数据链路层

3.1、数据帧分类

帧类型功能
数据帧用于发送节点向接收节点传送数据,是使用最多的帧类型
远程帧用于接收节点向某个发送节点请求数据,比如A节点发送远程帧,要求B节点回数据
错误帧用于当节点检测出错误时向其他节点通知错误的帧
过载帧用于接收节点向发送节点通知自身接收能力的帧
帧间隔将数据帧或远程帧与前面的帧分离的帧,可以理解成插入一些空白时间段,防止帧粘连导致区分不出两个帧

3.2、数据帧

3.2.1、帧格式

在这里插入图片描述

3.2.2、DLC编码

在这里插入图片描述

DLC段由4个bit组成,DLC表明后面数据域的字节个数;上面是经典CAN的DLC编码对应关系,如果是CAN FD则数据段最多是支持64字节;

4、为什么CAN总线响应速度快?

(1)CAN总线是非破坏性仲裁机制,相对于其他总线,不会在仲裁上花费额外的时间;
(2)CAN总线上的数据帧有帧ID,帧ID越小优先级越高,可以给重要且紧急的数据赋予小的帧ID,这样能保证在CAN总线空闲时,紧急的数据先被发送出去;

5、为什么CAN的数据帧最多包含8个字节(经典CAN)或者64字节(CAN FD)有效数据?

(1)数据帧携带太多的数据会在发送阶段花费较多的时间,如果在数据帧发送阶段时突然来了一帧紧急的数据帧,这时紧急的数据帧就要等待上一帧发送结束才能发送,降低总线的响应。(仲裁只发生在总线空闲时,紧急的数据帧不会打断正在发送的数据帧)
(2)如果数据帧发送时错误需要重发,数据帧携带的有效数据太多,也会导致出错时花费的时间太多,降低总线实时性;

6、CANopen协议

参考系列博客:《虹科分享 | 简单实用的CANopen介绍,看完你就明白了(1)——CANopen基础概念》;

参考资料

(1)B站的视频:https://www.bilibili.com/video/BV1LV4y1j77s/?spm_id_from=444.41.top_right_bar_window_custom_collection.content.click&vd_source=6ae699e4ea314cc5a50ae4f74ad5e566;
(2)朱有鹏的《智能汽车课程》;

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

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

相关文章

Android安卓实战项目(13)---记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用!!!(源码在文末)

Android安卓实战项目(13)—记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用!!!(源码在文末🐕🐕🐕) 一.项目运行介绍 B站…

说说HTTP 和 HTTPS 有什么区别?

分析&回答 http协议 超文本传输协议,是互联网上应用最多的协议,基于TCP/IP通讯协议来传递信息,用于从WWW服务器传输超文本到本地浏览器的传输协议。 https协议 我们可以将其看作是以安全为目标的http协议。在http协议的基础上增加了S…

C++——vector:resize与reserve的区别,验证写入4GB大数据时相比原生操作的效率提升

resize和reserve的区别 reserve:预留空间,但不实例化元素对象。所以在没有添加新的对象之前,不能引用容器内的元素。而要通过调用push_back或者insert。 resize:改变容器元素的数量,且会实例化对象(指定或…

十一、MySQL(DQL)聚合函数

1、聚合函数 注意:在使用聚合函数时,所有的NULL是不参与运算的。 2、实际操作: (1)初始化表格 (2)统计该列数据的个数 基础语法: select count(字段名) from 表名; ;统…

使用nlohmann json库进行序列化与反序列化

nlohmann源码仓库&#xff1a;https://github.com/nlohmann/json使用方式&#xff1a;将其nlohmann文件夹加入&#xff0c;包含其头文件json.hpp即可demo #include <iostream> #include "nlohmann/json.hpp" #include <vector>using json nlohmann::js…

【Axure高保真原型】多图表动态切换

今天和大家分享多图表动态切换的原型模板&#xff0c;点击不同的图标可以动态切换对应的表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改和删除&#xff0…

v-limit-input + 正则限制特殊字符

src/directives/limitInput.js 设置自定义指令 limitInput 的逻辑 export default {// bind钩子 当 v-XXX 指令绑定到节点上时 触发bind (el) {el.oninput () > {console.log(1, el)let pattern new RegExp("[~!#$^&*()|{}:;,\\[\\].<>/?~&#xff01;#&…

设置TOMCAT SESSIONID 字符长度和生成算法

修改TOMCAT 默认的生成SESSION ID的算法和字符长度非常简单,只需修改context.xml中的<Manager>标签值,比如&#xff1a; <Manager sessionIdLength"20" pathname"SESSIONS.ser" maxActiveSessions"8000" secureRandomAlgorith…

TiDB同城双中心监控组件高可用方案

作者&#xff1a; Prest13 原文来源&#xff1a; https://tidb.net/blog/44b9b8b1 背景 在双中心部署tidb dr-auto sync集群&#xff0c;出于监控的高可用考虑&#xff0c;在物理分离的两个数据中心分别部署独立的prometheusalertmanagergrafana&#xff0c;实现任一监控均…

基于单片机的点阵电子显示屏上下左右移加减速系统

一、系统方案 本设计的任务就是完成一个1616的点阵设计&#xff0c;并能滚动显示“********************”内容。 主要内容是&#xff0c;能同时流动显示汉字&#xff1b;能实现显示汉字无闪烁&#xff1b;能实屏幕亮度较高。本LED显示屏能够以动态扫描的方式显示一个1616点阵汉…

前端Vue仿企查查 天眼查知识产权标准信息列表组件

引入Vue仿企查查天眼查知识产权标准信息列表组件 随着技术的不断发展&#xff0c;传统的开发方式使得系统的复杂度越来越高。在传统开发过程中&#xff0c;一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题…

计网基础面试题

浏览器输入网址之后发生什么 1&#xff0c;DNS解析过程 2&#xff0c;三次握手 3&#xff0c;TLS通信 4&#xff0c;发送数据 5&#xff0c;四次挥手 TCP三次握手和四次挥手 两台计算机通信的过程 局域网通信———交换机——MAC地址 广域网通信———路由器——IP地址 网…

flutter plugins插件【二】【FlutterAssetsGenerator】

2、FlutterAssetsGenerator 介绍地址&#xff1a;https://juejin.cn/post/6898542896274735117 配置assets目录 ​ 插件会从pubspec.yaml文件下读取assets目录&#xff0c;因此要使用本插件&#xff0c;你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…

YOLOV8模型使用-检测-物体追踪

这个最新的物体检测模型&#xff0c;很厉害的样子&#xff0c;还有物体追踪的功能。 有官方的Python代码&#xff0c;直接上手试试就好&#xff0c;至于理论&#xff0c;有想研究在看论文了╮(╯_╰)╭ 简单介绍 YOLOv8 中可用的模型 YOLOv8 模型的每个类别中有五个模型用于检…

Bert和LSTM:情绪分类中的表现

一、说明 这篇文章的目的是评估和比较 2 种深度学习算法&#xff08;BERT 和 LSTM&#xff09;在情感分析中进行二元分类的性能。评估将侧重于两个关键指标&#xff1a;准确性&#xff08;衡量整体分类性能&#xff09;和训练时间&#xff08;评估每种算法的效率&#xff09;。…

Mac不想用iTerm2了怎么办

这东西真是让人又爱又恨&#xff0c;爱的是它的UI还真不错&#xff0c;恨的是它把我的环境给破坏啦&#xff01;让我每次启动终端之后都要重新source激活我的python环境&#xff0c;而且虚拟环境前面没有括号啦&#xff01;这怎么能忍&#xff01;在UI和实用性面前我断然选择实…

React笔记(三)类组件(1)

一、组件的概念 使用组件方式进行编程&#xff0c;可以提高开发效率&#xff0c;提高组件的复用性、提高代码的可维护性和可扩展性 React定义组件的方式有两种 类组件&#xff1a;React16.8版本之前几乎React使用都是类组件 函数组件:React16.8之后&#xff0c;函数式组件使…

ebay测评,物理环境与IP环境:解决平台风控问题的关键

近期eBay平台出现了大量风控问题&#xff0c;导致许多买家账号受到影响。实际上&#xff0c;这主要是由于环境搭建方面存在主要问题。时至2023年&#xff0c;许多人的技术方案仍停留在几年前&#xff0c;要么使用一键新机工具配合国外IP&#xff0c;要么使用指纹浏览器配合国外…

C语言暑假刷题冲刺篇——day6

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂&#x1f390;CSDN新晋作者&#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练✨相关专栏&#xff1a;代码小游戏、C语言初阶、C语言进阶&#x1f91d;希望作者的…

Kotlin inline、noinline、crossinline 深入解析

主要内容&#xff1a; inline 高价函数的原理分析Non-local returns noinlinecrossinline inline 如果有C语言基础的&#xff0c;inline 修饰一个函数表示该函数是一个内联函数。编译时&#xff0c;编译器会将内联函数的函数体拷贝到调用的地方。我们先看下在一个普通的 kot…