嵌入式Linux学习(2)——经典CAN介绍(上)

目录

一. CAN与ISO-OSI Model

二. CAN通信

2.1 接线方式

2.1.1 闭环网络

2.1.2 开环网络

2.2 收发流程

2.2.1 发送

2.2.2 接收 

三. CAN BUS访问与仲裁

3.1 “线与”机制​

3.2 仲裁机制

REF


CAN(Controller Area Network)总线协议是由 BOSCH 发明的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而广泛应用于工业自动化、船舶、医疗等其它领域。 

与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。由于 CAN 总线协议的物理层只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN 通讯是半双工的,收发数据需要分时进行。在 CAN 的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。

CAN帧抓取:Ubuntu安装PCAN-View-CSDN博客

一. CAN与ISO-OSI Model

在 ISO-OSI 模型中 CAN 属于 L2 层的协议。 


 

二. CAN通信

CAN总线是一种多主控(Multi-Master)的总线系统。CAN网络的消息是广播式的,即在同一时刻网络上所有节点侦测的数据是一致的,它是一种基于消息广播模式的串行通信总线。采用CAN总线网络结构,可以达到信息共享、减少布线、降低成本以及提高总体可靠性的目标。

2.1 接线方式

2.1.1 闭环网络

上图是遵循 ISO11898 标准的高速、短距离“闭环网络”,也称之为“高速CAN”的接线方式。它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。两端的R电阻是为了避免信号的反射和干扰。

2.1.2 开环网络

上图是遵循 ISO11519-2 标准的低速、远距离“开环网络”,也称之为“低速CAN”的接线方式。它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。

2.2 收发流程

2.2.1 发送

发送数据时CPU将信号发给CAN Controller,CAN Controller再将信号转为逻辑电平(逻辑0表示低电平,逻辑1表示高电平)发给CAN Transceiver,CAN Transceiver再将逻辑电平转为差分信号发到CAN总线上。 

差分情况如下:静态情况下CAN-High和CAN-Low两条信号线的电压都处于2.5V;逻辑0表示显性电平,即CAN-High拉高到3.5V,CAN-Low拉低到1.5V;逻辑1表示隐性电平,即CAN-High和CAN-Low都是2.5V。

2.2.2 接收 

差分信号的0/1表示不变,只是把上述过程逆向而已。

三. CAN BUS访问与仲裁

3.1 “线与”机制

1. “0”表示显性,“1”表示隐性,在&操作中,但凡有0则CAN-Bus即为0,也称之为“显性”位可以覆盖“隐性”位;

2. 只有所有节点都发送“隐性”位, 总线才处于“隐性” 状态。

上述1,2即为“线与”机制的特点,这些特点使CAN总线呈现显性优先的特性。显性优先的特点奠定了后面所提到的“ID越小,优先级越高”。例如ID为0x75(1110101)就比0x100(1111000)的优先级更高,因为从左往右比较,0为显性。

3.2 仲裁机制

CAN总线的仲裁是一种“非破坏性仲裁机制”。非破坏性仲裁机制是一种既不会造成已发送数据的延迟,也不会破坏已经发送的数据的仲裁机制。

CAN总线的仲裁的原则:

1. 在总线空闲状态下,任意节点都可以向总线上发送信息。最先向总线发送信息的节点获得总线的发送权。

2. 当多个节点同时向总线发送消息时,优先级高的节点仲裁成功,从而获得总线的发送权;仲裁失败的节点,会在下次总线空闲时自动重发ID越小,优先级越高

3. 高优先级的节点不能中断低优先级节点的发送。例如ID-75的节点正在向总线发送报文,这时候ID-25的节点也想向总线发送报文,即使ID为25的优先级更高,但是也不能中断ID为75的报文的发送。

在 t1 时刻节点 A、B、C 同时向 CAN 总线上发数据触发总线仲裁,节点 A 的 ID 为75,优先级最高,所以节点 A 发送数据;等到 t2 时刻总线空闲了,再来仲裁节点 B 和节点 C ,节点 B 优先级更高,获得发送权...依次类推。

ID为20和ID为80的报文不能中断ID为100的报文发送 ,只能等到总线空闲后再来仲裁ID-20和ID-80的报文发送。

通过上图进一步来说明发送节点是如何获取到发送权的。节点在发送数据的同时还会回读总线的状态,在第10-6位比对中,A/B/C都是相同的电平信号;当到第5位的时候,通过“线与”机制可知,此时总线也是0,这时候 A 发现读出来的总线电平状态和自己的不一样,因此 A 就变为监听状态,丧失总线发送权;同理, B 和 C 继续比对到 RTR 位,节点 B 这时候读到的总线状态和自己不一样,因此节点 B 这时候也变为监听状态。最终节点 C 获取到总线的发送权。

REF

https://www.eet-china.com/mp/a211601.html

CAN_C: CAN学习模块 | Vector E-Learning

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

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

相关文章

【蓝桥杯选拔赛真题26】C++字符串逆序 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++字符串逆序 一、题目要求 1、编程实现 2、输入输出 二、算法分析

MySQL 中的锁(三)

8.7. 死锁和空间锁 一般来说,只要有并发和加锁这两种情况的共同加持下,都会有死锁的身影。 死锁的具体成因,借用我们在并发编程中的内容: 8.7.1. 死锁 8.7.1.1. 概念 是指两个或两个以上的进程在执行过程中,由于竞…

JSON.stringify方法详解 后端接受JSON数据格式

1、方法定义:JSON.stringify(value, replacer, space) 参数说明: value:js对象 replacer:替换对象,可以是一个方法、对象或数组,将value按照替换规则展示。 space:填充参数,可以是数…

Linux常用命令——rm 命令

文章目录 Linux系统中的rm命令是一个非常强大且危险的工具,用于删除文件和目录。由于其具有不可逆的特性,了解其参数和正确使用非常重要。 1. 基本用法 rm命令的基本格式是rm [选项] 文件或目录。不带任何选项时,rm命令仅删除文件。 示例&a…

数据结构-二叉树(2)

3.4堆的应用 3.4.1 堆排序 堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 1.升序:建大堆; 2.降序:建小堆。 2. 利用堆删除思想来进行排序 这种写法有两个缺点: 1、先有一个堆的数据结构 …

springboot整合websocket

websocket和传统http协议 http 概念 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是基于TCP/IP协议来传输数据的,是Web浏览器和Web服务器之间进行数据交换的标准协议。 HTTP协议的主要特点包括:…

JAVA小游戏“飞翔的小鸟”

第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下: 代码如下: package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO; public class Bird { Image image; in…

YOLOv8改进实战 | 更换主干网络Backbone(六)之轻量化模型VanillaNet进阶篇

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

Linux(11):Linux 账号管理与 ACL 权限设定

Linux 的账号与群组 每个登入的使用者至少都会取得两个 ID,一个是使用者 ID(User ID ,简称UID)、一个是群组ID (Group ID ,简称GID)。 Linux系统上面的用户如果需要登入主机以取得 shell 的环境来工作时,他需要如何进行呢? 首先…

每日一题(LeetCode)----链表--链表中的下一个更大节点

每日一题(LeetCode)----链表–链表中的下一个更大节点 1.题目(1019. 链表中的下一个更大节点) 给定一个长度为 n 的链表 head 对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第…

Umi-OCR图片批量识别文字工具

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/粘贴/批量导入图片,段落排版/排除水印,扫描/生成二维码。内置多国语言库。 项目地址:https://github.com/hiroi-sora/Umi-OCR

F. Magic Will Save the World

首先积攒了能量打了怪再积攒是没有意义的,可以直接积攒好,然后一次性进行攻击 那么怎么进行攻击了?可以尽量的多选怪物使用水魔法攻击剩余的再用火魔法进行攻击, 也就是只要存在合法的体积(即装入背包的怪物的体积之…

封装一些可能会用到的JS的Dom操作方法(非JS自带的方法)

1. 父元素节点下的子元素节点逆序 HTMLElement.prototype.childRevers function () {var all_num this.childElementCount;if (all_num) {while(all_num--){this.appendChild(this.children[all_num]);}} } // 获取 ul 父节点对象 var oul document.getElementsByTagName(u…

Python web自动化测试 —— 文件上传

​文件上传三种方式: (一)查看元素标签,如果是input,则可以参照文本框输入的形式进行文件上传 方法:和用户输入是一样的,使用send_keys 步骤:1、找到定位元素,2&#…

在很多nlp数据集上超越tinybert 的新架构nlp神经网络模型

在很多nlp数据集上超越tinybert 的新架构nlp神经网络模型 网络结构图测试代码网络结构图 测试代码 import paddle import numpy as np import pandas as pd from tqdm import tqdmclass FeedFroward(paddle.nn.Layer):

图面试专题

一、概念 和二叉树的区别:图可能有环 常见概念 顶点(Vertex): 图中的节点或点。边(Edge): 顶点之间的连接线,描述节点之间的关系。有向图(Directed Graph)&…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

[BJDCTF2020]The mystery of ip1

提示 ssti模板注入head头x-forwarded-for 每一次做题的最开始流程都大致因该是 信息收集找可以操控的地方 查看hint页面的源代码又发现它提示说 ####你知道为什么会知道你的ip吗 查看flag页面 从刚才给我的提示以及他这里显示的我的ip,大概找到了我可操作的可控点 …

【Java SE】带你在String类世界中遨游!!!

🌹🌹🌹我的主页🌹🌹🌹 🌹🌹🌹【Java SE 专栏】🌹🌹🌹 🌹🌹🌹上一篇文章:带你走近Java的…

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…