CAN总线的个人理解

news2025/1/18 6:54:28

部分内容可以参考:https://blog.csdn.net/xwwwj/article/details/105372234?

CAN概念简介

CAN是Controller Area Network 的缩写
CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。根据具体使用场景和传输介质以及波特率的不同CAN协议有很多种
在这里插入图片描述

CAN特点

下面图引用参考连接中的两张
在这里插入图片描述
在这里插入图片描述

物理信号特点

在这里插入图片描述
、CAN总线的逻辑信号是根据两根线(CAN-LOW,CAN-High)的压差确定的,
、总线上连根线的压差是0,则对应信号逻辑1压差是2.5v左右,则对应信号逻辑0.这和普通的认知不太一样
逻辑0对应的是显性信号逻辑1对应的是隐性信号

协议特点分析

、总线上每个设备都有发送信息的权力。根据发送信息帧中包含的ID(标识符)的优先级确定那个做为可以发送的设备。对优先级判断是通过仲裁得到结果
、由于CAN中无地址的概念,只有一个可以表示优先级高低的标识符(ID),因此多加入设备也不用考虑物理地址连线的问题
、速度快
、每个设备都会检测错误;若出现错误,本设备也会立即停止发送,并立即会将这个错误通知所有其他设备;这个单元会重新发送这个消息直到成功
、判断故障种类,若是持续故障,这个设备会被总线隔离
、根据二中提到的协议方式,理论上可连接无数设备,但根据实际情况中的电气特点,负载多通信时间会慢。但相比于其他需要地址的协议来说,CAN总线能连接的设备还是很多的

CAN通信共有5中帧类型

在这里插入图片描述
数据帧和遥控帧标准格式和扩展格式两种格式。 标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID

数据帧

D为显性电平逻辑0,R为隐形电平逻辑1,以下也是
在这里插入图片描述
帧起始:标准帧和扩展帧都是由一个显性电平表示帧起始(1→0)
仲裁段:两种格式。
仲裁段有以下特点:

ID(identify):高位在前,低位在后。
基本ID,禁止高7位都为隐性,即不能:ID=1111111XXXX。
RTR,远程请求位。0,数据帧;1, 远程帧;
SRR,替代远程请求位。设置为1(隐性电平);
IDE,标识符选择位。0,标准标识符;1,扩展标识符;

在这里插入图片描述
控制段:6个位构成,但并不是表示数据段字节数0~26 个字节,只有0-8个字节有效,但接收方不认为9-15个字节错误

r0,r1:保留位。必须以显现电平发送,但是接收可以是隐性电平。
DLC:数据长度码。0~8,表示发送/接收的数据长度(字节)。
IDE,标识符选择位。0,标准标识符;1,扩展标识符;

在这里插入图片描述
在这里插入图片描述
数据段:从上段可知,数据段可传送最多8字节。也就是64个bit位。从最高位(MSB)开始输出
在这里插入图片描述
循环冗余校验(Cyclic Redundancy Check, CRC)CRC段。该段用于检查帧传输错误。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的:

CRC的值计算范围包括:帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

在这里插入图片描述
CRC段计算方式参考:https://blog.csdn.net/qq_37960317/article/details/110818193,https://zhuanlan.zhihu.com/p/256487370
ACK段。此段用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位组成。标准帧和扩展帧在这个段的格式也是相同的:
发送单元ACK段:发送2个隐性位(逻辑1)。
接收单元ACK段:接收到正确消息的单元,在ACK槽发送显性位,通知发送单元,正常接收结束。称之为发送ACK/返回ACK。
注意:发送 ACK 的是既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送ACK)。正常消息是指:不含填充错误、格式错误、CRC 错误的消息。

在这里插入图片描述
帧结束。由7个位的**隐性位(逻辑1)**组成。标准帧和扩展帧在这个段格式完全一样

判断那个设备占用总线——仲裁段

规律:1,总线空闲时,最先发送的单元获得发送优先权,一但发送,其他单元无法抢占。
2,如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级。
3,多单元同时发送,从ID开始比较,如果ID相同,还可能会比较RTR(数据帧/遥控帧)和SRR(标准格式/扩展格式)等位。

同时发送,但ID不同

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。**连续输出显性电平(逻辑0)**最多的单元可继
续发送。
在这里插入图片描述

同ID时,比较比较RTR(数据帧/遥控帧)和SRR(标准格式/扩展格式)

RTR,远程请求位。0,数据帧;1, 远程帧;
SRR,替代远程请求位。设置为1(隐性电平);
其他条件相同,遥控帧优于远程帧,标准优于扩展ID

这时,两个位的显性电平起作用,所以遥控帧>远程帧,标准数据帧>扩展数据帧,看出SRR位一定为隐形电平逻辑1.
在这里插入图片描述
在这里插入图片描述

CAN总线数据传输时间

位速率。简单说就是每秒钟发送位数传送一个位的时间一般可以分为如下四段:

同步段(SS):又叫做同步段,它的作用就是判断节点与总线的时序是否一致,如何判断我们稍后再讲。先留一个疑点。它的长度为1tq
传播时间段(PTS):用于补偿网络的延时时间
相位缓冲段1(PBS1),相位缓冲段2(PBS2):都是用来补偿阶段的误差

构成这四个时间段的最小单位是,Time Quantum(以下称为Tq),这样通过这个最小单位可以知道传送一位数据的时间,也就是传送一位数据周期。下图中,总线的一个逻辑变化就是传送一位数据时间,而每一位的传送都经过四个阶段
在这里插入图片描述

在这里插入图片描述

数据同步

硬件同步

在这里插入图片描述

再同步

分为两种情况,当逻辑下降沿在PTS阶段时,若接收的下降沿晚了几个Tq,会通过在PBS1和PBS2之间填充Tq来把逻辑下降沿同步;当逻辑下降沿在PBS2阶段,需要将PBS2中的时间减少使得下降沿在SS阶段。
在这里插入图片描述

结合STM的CAN 控制器看

CAN控制器框图

在这里插入图片描述
从上面整体的图看出

1.一对主从CAN同时在一个512k的SRAM中
2,每个CAN单元都有两个三层FIFO接收邮箱(所以一个FIFO可以同时存三个完整报文),和三个发送邮箱
3 ,主和从CAN共用接收过滤(互联网型是28个,103系列是14个),从CAN单元的过滤器开始是通过设置FMR寄存器完成的(互联网型)

整体数据发送接收过程

在这里插入图片描述

在这里插入图片描述

接收过程:从第一个有效报文接收后,再次接收则FMP的状态改变,而FIFO中有两个完整报文,FIFO中最多保存三个报文。软件可以读取FIFO输出邮箱来读出新收到的报文,也就是一直读取FIFO挂号1的报文。
在这里插入图片描述
CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文
报文FIFO具有锁定功能(由CAN_MCR,RFLM位控制),锁定后,新数据将丢弃,一直存的是旧的三个报文;不锁定则新数据将替代老数据

数据传递四种工作模式

在这里插入图片描述

寄STM32中有关CAN协议的寄存器

控制寄存器

在这里插入图片描述

CAN主控制寄存器 (CAN_MCR)

在这里插入图片描述
设置INRQ=0,可使CAN从初始化模式进入正常工作模式。
设置INRQ=1,可使CAN从正常工作模式进入初始化模式

CAN错误状态寄存器 (CAN_ESR)

在这里插入图片描述
在这里插入图片描述
高8位用于记录错误次数,次8位是返回错误记录次数低8位;最低的7位是错误代码错误标志等

位时序寄存器CAN_BTR

在这里插入图片描述在这里插入图片描述图片引用参考链接中

发送邮箱标识符寄存器CAN_TIXR(X=0~2)

通过IDE说明是标准ID还是扩展ID,高11位可以是标准ID或扩展ID的高11位,
在这里插入图片描述

邮箱寄存器

在这里插入图片描述

邮箱发送数据长度寄存器

在这里插入图片描述
DLC四位确定是发送几个字节的数据

发送邮箱高字节数据寄存器 (CAN_TDHxR) (x=0…2)

知道最多发送8字节数据,需要两个32位寄存器放置数据
在这里插入图片描述

邮箱接收寄存器和发送寄存器的不同

在这里插入图片描述

整体说几乎一样,下面是不同
1,CAN_RDTxR 寄存器的FMI域;
在这里插入图片描述
2, 接收邮箱是只读的;
3, 发送邮箱只有在它为空时才是可写的,CAN_TSR寄存器(发送状态寄存器)的相应TME位为’1’,表示发送邮箱为空。

过滤器或筛选器组

在这里插入图片描述

筛选器组,两个32位CAN_FxR1和CAN_FxR2,过滤器位宽寄存器FS1R

主要用于屏蔽ID,ID号(CAN_TIXR中)和FS1R每位做为掩码进行按位与,所以FS1R中是1的位才是有用的位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

适合制造业的ERP推荐?使用ERP系统的好处有哪些?

对于制造型企业来说,除了涉及到产品的生产制造和原料采购,还需要管理库存、销售、财务等方方面面。制造业的ERP系统的使用,尤为重要。一个好的制造业的ERP系统在企业管理中起到至关重要的作用,针对制造业的ERP系统提供贴合行业特性…

用cmd命令窗口运行第一个java程序同时分享idea写的代码用cmd编译运行【建议收藏】

在上一篇文章https://blog.csdn.net/qq_52545155/article/details/128651296?spm1001.2014.3001.5502教大家安装了jdk版本,那么我们来编写一个java程序,通过cmd命令运行起来看看效果叭!!! 一、基本代码准备 1、打开记…

超全的SQL注入姿势总结

目录 常见姿势 环境搭建 信息收集 报错注入 延时注入 布尔注入 堆叠注入 绕过方法 绕过引号 or and xor not绕过 绕过注释符 内联注释绕过 类型转换绕过 绕过 WAF绕过-应用层 常见姿势 环境搭建 use mysql; create table if not exists my_table( id int PRIMA…

HC小区管理系统安装记录一次群里小伙伴梓豪方式安装问题

记录一次群里小伙伴安装,供大家参考 问题排查 打开梓豪地址查看 Redis MySQL Nginx 是否启动成功,查看日志启动成功 MySQL正常 redis 没有报错 Nginx也正常 查看hc 是否启动成功,点击控制台 查看docker 发现8008 端口被占用了&#xff0c…

【异常】原来提示SocketTimeoutException:connect timed out还可能是外部因素导致

一、现象截图 一大早收到ELK的邮件提醒,让我来看看,又是哪个妖怪在作孽? 二、问题定位 2.1 SocketTimeoutException:connect timed out 经验告诉我,这个问题一般是第三方平台的问题,大部分原因是发起Http请求&…

惠普M329打印机更换副厂硒鼓后提示墨粉不足并无法打印

买了一个惠普M329打印机,打印效果不错,速度快,大量复印比较方便。因为最近打印和复印比较多,很快原装墨粉用完了。又买了一个副厂(带芯片)的硒鼓换上。不到一个月,又用光了,这次买了同一个副厂的硒鼓(不带芯片)。将原来的芯片(副厂的)拆下来,装在新硒鼓上。装到M3…

喜讯!华秋电子荣获千峰奖“2022年度产业互联网百强”,持续为电子产业增效降本!

12月28日,2022全球数字贸易大会专题活动“跨境产业互联网峰会暨2022年度千峰之夜”在武汉隆重举行,大会聚集了全国产业互联网、跨境电商平台、数字经济、资本市场等嘉宾,共同探讨产业互联网公司出海的机会和路径。 亿邦动力董事长郑敏介绍&am…

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (三)奇偶校验

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (三)奇偶校验 🔈声明: 😃博主主页:王_嘻嘻的CSDN博客 🧨未经作者允许,禁止转载 🔑系列专栏:牛客Verilog习…

房产管理系统平台架构安全需求分析

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。…

JavaAccessBridge(Java访问桥)详细介绍

Java Access Bridge 通过 Java 访问桥 API,您可以给使用Java应用程序编写的在windows系统上运行的图形化系统开发辅助技术应用程序。它包含本机方法,使您能够查看和操作有关 Java 应用程序中 GUI 元素的信息,这些信息将通过 Java 访问桥转发…

二维数组中各个三角形的关系,三角形的打印同理

给你一个n*n矩阵,按照顺序填入1到n*n的数,例如n5,该矩阵如下 (这是一个题目,但是我这个写法在牛客刷题中是不能正确的得分的,但是我找到了各个关系,然后分享给大家) 然后再对其进行求和处理,是…

在IntelliJ IDEA中使用.ignore插件忽略Git不必要提交的文件

第一步: 点击File->Settings,在左侧菜单找到Plugins,点击搜索栏搜索.ignore,点击Install 第二步: 重启idea -->在项目上右键->New ->.ignore file ->.gitignore file(Git) 第三部: 在项目中…

http协议的简单总结

目录 1.http协议的特性 2.http协议的请求 3.get请求和post请求的区别 4.http协议的响应 1.http协议的特性 http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080 http协议的的特点是无状态,无连接(短连接) 2.http协…

【面试题】京东面试查漏补缺

目录一:笔试题1.如何获取URL中的参数方法一方法二2.怎么平铺多维数组方法一方法二:递归方法三: flat() 和 flatMap()二:面试题1.promise相关问题2.vue nextTick的作用和原理3.http状态码304缓存相关问题4.其他常规问题省略wh零售事…

在线学习(online learning)——Chapter 2 Problem Formulations and Related Theory

在线学习(online learning)——Chapter 2 Problem Formulations and Related Theory 本章中,我们将首先给出一个经典的在线学习问题的形式化描述,即在线二分类(online binary classification),然后介绍统计学习理论、在线凸优化和博弈论的基…

Zabbix“专家坐诊”第179期问答汇总

欢迎大家加入乐维社区zabbix问答专栏,除了在论坛发帖求问外,还可以在QQ群里交流进步,并且每周三我们会进行免费的技术答疑活动。 问题一: Q:Zabbix alert syncer processes more than 75% busy,这个告警&…

Live800:优秀的在线客服系统配置哪些功能模块?

在线客服系统是企业客服解决客户疑惑的软件系统,是企业统一对外联系的窗口。为了提升客户服务质量,提高客服人员工作效率,越来越多的企业配置了在线客服系统。那一款优秀的在线客服系统需要配置哪些功能模块呢?一、在线沟通模块在…

简明精要Android IPC通信

目录 一、Android应用层IPC通信方式 二、IPC通信数据拷贝次数 这里指的从应用层角度,IPC通信方式。简单记录一下。 一、Android应用层IPC通信方式 Bundle:四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中…

MySQL学习之一条SQL更新语句的执行

文章目录前言一、MySQL更新操作大致流程二、redo log介绍三、binlog介绍四、MySQL更新操作的具体流程前言 今天我们通过一条SQL更新语句,了解MySQL的日志系统 一、MySQL更新操作大致流程 更新数据库表上的操作,跟这个表有关的查询缓存会失效。这条语句…

MyBatisPlus(MP)学习记录(分页查询的开启+日志打印配置+乐观锁+映射匹配+字段匹配和表名匹配+null值判定+代码生成器等等)

MP介绍(官网链接) MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 前言 本篇文章展示的MP教学中涉及到的版本如下: IDE…