嵌入式Linux学习(1)——经典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与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.mzph.cn/news/155319.shtml

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

相关文章

路线规划问题

文章目录 1、问题描述2、节点类设置3、设置节点之间的关系4、路线规划5、完整类6、结果7、优化 1、问题描述 如下图,存在A~F六个地点,已知所有地点的相关关系(每个地点能到达的下一节点名称以及对应的路程); 计算某个…

OpenStack-train版安装之环境准备

环境准备 环境介绍VMware配置WMware虚拟机最低配置WMware添加网卡WMware添加硬盘 基础环境安装修改各节点的主机名修改各节点的hosts文件修改各节点的内核参数关闭各节点的防火墙和selinux安装NPT(时间同步)安装OpenStack基础服务包 CentOS升级内核 环境…

手把手设计C语言版循环队列(力扣622:设计循环队列)

文章目录 前言描述分析力扣AC代码 力扣: 622.设计循环队列 前言 队列会出现“假溢出”现象,即队列的空间有限,队列是在头和尾进行操作的,当元素个数已经达到最大个数时,队尾已经在空间的最后面了,但是对头…

枚举 小蓝的漆房

题目 思路 核心思想是枚举 首先利用set记录每一种颜色 然后依次从set取出一种颜色作为targetColor,遍历房子 如果当前房子的颜色和targetColor不相同,就以当前房子为起点,往后长度为k的区间都涂成targetColor,并且需要的天数递增…

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

动手学深度学习(三)---Softmax回归

文章目录 一、理论知识 softmax回归 一、理论知识 回归估计一个连续值分类预测一个离散类别 回归单连续数值输出自然区间R跟真实值的区别作为损失 分类通常多个输出输出i是预测为第i类的置信度 一般我们使用交叉熵用来衡量两个概率的区别 将它作为损失 其梯度是真实概率和…

同一台电脑访问gitee多个仓库代码

在开发上我们经常遇到,需要跟别人共享代码,特别是跟有些客户联合开发的情况下,有很多个客户。有些git仓库是客户建立的,比如有两个客户A和分布建了gitA和gitB两个代码仓库。我们在支持这两个客户的时候可能是同一个工程师&#xf…

【机器学习】033_反向传播

一、计算图、反向传播原理 1. 回顾前向传播 例:假设现在有一个神经网络,其仅有一个输出层和一个神经单元 定义 定义 ,即激活函数对激活值不再做具体处理 定义平方损失函数 ,计算a的值与真实值的差距 此时,通过计算…

2023年亚太杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II

一、LeetCoed62. 不同路径 题目链接:62. 不同路径 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下…

通明智云宣布完成数千万元A+轮融资, 引领云原生与信创两翼齐飞的应用交付解决方案

近日,通明智云(北京)科技有限公司(简称:通明智云)宣布完成数千万元A轮融资,由全聚合与信公投资联合投资,明论资本担任本轮融资独家财务顾问。本轮融资资金将主要用于NJet云原生应用引…

智能时代的智能工具(gpt)国产化助手

目前gpt对代码以及其他领域都是可以支持,在国内有很多,常用的百度的 文心一言 ,阿里的 通义千问 ,还有(“豆包”,“”讯飞星火“”)等,除了写代码可以外,也可以很好的支持…

【蓝桥杯省赛真题44】Scratch像素画板 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

scratch像素画板 第十四届青少年蓝桥杯scratch编程省赛真题 一、题目要求 编程实现 1.点击绿旗,角色、背景如图所示(三种颜色调色盘、清除图标及方格角色请自行创建,点击绿旗后立刻呈现下图效果); 2.用鼠标点击红色调色盘,红色调色盘变为选中状态(如下图所示),此时鼠…

docker和docker-compose生产的容器,不在同一个网段,解决方式

在实际项目中,使用docker run xxXx 和docker-compose up -d 不在同一个网段,一个是默认是172.17.x.x, 另一个是172.19.x.x。为解决这个问题需要自定义一个网络,我命名为“my-bridge” 首先熟悉几条命令: docker network ls 或…

vue动态获取目录结构进行配置静态路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发,可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题 路由…

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MAT…

echarts折线图修改特定点的颜色

$.ajax({url:"/plc1672Ctrl/selectPage2.ctrl",dataType:"json",type:"POST",cache:false,data:{"serNo":$("#search").val().trim()},success:function(data){var list data.list;// x坐标var x new Array();// y坐标var…

凸包的学习之路

凸包的学习之路-CSDN博客 5.算法策略5:Graham Scan Algorithm 算法思路: 给定二维点集,求其凸包 1)presorting: (1)先找到 ltl点 ,也就是y值最小的点,若是存在y值相…