CAN总线仲裁(四)

多设备同时发送遇到的问题

CAN总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源?

解决问题的思路:制定资源分配规则,依次满足多个设备的发送需求,确保同一时间只有一个设备操作总线
​​
在这里插入图片描述

资源分配规则1 - 先占先得

  • 若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)

  • 任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧

  • 一旦有设备正在发送数据帧/遥控帧,总线就会变为活跃状态,必然不会出现连续11个隐性电平,其他设备自然也不会破坏当前发送

  • 若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求

资源分配规则2 - 非破坏性仲裁

  • 若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送

实现非破坏性仲裁需要两个要求:

线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1

回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实的发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1

回读的意思就是,某个设备作为发送方发出一个数据位后,某个设备作为发送方发出一个数据位后,发送方自己,它也会接收这个数据位,确认自己发出的电平是否被真实地发送出去了,因为,根据线与特性,我发出1,如果有别的设备也在发送数据,别的设备发送了0,那么我读回的数据,就不再是1了,因为我的数据1,被别设备的数据,损坏了,这个现象,对仲裁就很重要,我发出1,但是读回的是0,这说明总线上有别的设备,所以这时候,我就退出,不再跟别设备抢总线资源了

非破坏性仲裁过程

  • 数据位从前到后依次比较,出现差异且数据位为1的设备仲裁失利
    在这里插入图片描述

问题:为什么ID小的优先级高

从这个仲裁过程可以看出来,ID号越小,其二进制数据的1出现的就越晚,ID号越大,1出现的就越早,ID号出现差异,且发出数据1的仲裁失利。

数据帧和遥控帧的优先级

  • 数据帧的优先级高于遥控帧
    在这里插入图片描述

    11位相同ID,不能给两者分出高下,这时,就要靠仲裁段的最后一位RTR来决断了,RTR位,遥控帧定义为1,数据帧定义为0,所以单元1会仲裁失利

标准格式和扩展格式的优先级

  • 标准格式的优先级高于扩展格式(SRR必须始终为1,以保证此要求)
    在这里插入图片描述

  • 11位ID号发完,单元1和单元2都没有分出胜负,接着下一位,单元1发出的是SRR位,SRR位,在扩展数据帧中,必须始终为1,单元2,此时要发出RTR位,因为单元2是数据帧,RTR位是0,所以单元1仲裁失利。

  • 当然标准遥控帧优先级也是比扩展数据帧优先级高,因为RTR后标准遥控帧仲裁段虽然结束了,但是扩展数据帧仲裁段仍然没有结束,标准遥控帧RTR之后,跟的是IDE扩展标志位,因为它是标准帧,所以下面IDE为0,而上面,扩展数据帖SRR之后跟的也是IDE,因为它是扩展帧,所以上面IDE为1,在这一位,虽然标准遥控帧已经不再执行仲裁了,但是扩展数据帧仍然执行仲裁,并且扩展数据帧会出现“发1读0”的情况,所以,扩展数据帧仲裁失利,转入接收状态。

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

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

相关文章

Android开发lmageButton与Button控件区别

本文总结Android开发lmageButton与Button控件区别。 目录 lmageButton和Button之间的相同点: lmageButton和Button之间的区别有: lmageButton和Button之间的相同点: lmageButton与Button控件都可以作为一个按钮产生点击事件。 lmageButton和Button之…

列举几种常见的数据结构,以及线性数据结构

数据结构是计算机科学中用来组织、存储和管理数据的方式。它定义了数据元素之间的逻辑关系,以及如何对数据进行操作。数据结构的选择对于算法的效率至关重要,因为它直接影响到数据在计算机中的存储和访问方式。 以下是几种常见的数据结构: …

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯

一、背景 Modbus协议和Profibus协议是两种常用于工业控制系统的通信协议,它们在自动化领域中起着重要的作用。Modbus是一种串行通信协议,被广泛应用于各种设备之间的通信,如传感器、执行器、PLC等。而Profibus则是一种现场总线通信协议&…

基于YOLOv5m的地面飞机及油罐的目标识别(附数据集和Coovally操作步骤)

本文主要内容:详细介绍了利用无人机拍摄的地面停靠的飞机机体以及油罐,进行识别,整个过程从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 飞机识别,在军事侦察、航空安全监…

Unity3D 如何做好版本控制

目前项目这样版本控制: 1、在unity里,应该只对Assets(包含,meta)和ProjectSettings这两个文件夹做版本控制,其他的文件都是unity或工具生成出来的。 2、设置project setting ->editor setting-> Asset seriali…

策略模式在springboot中的使用

策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。 策略模式通常由以下三个角色组成: 抽象策略(Strategy)角色:这是一个抽象角色&…

各国内AI大厂推进大模型的阶段

2022 年 11 月,美国 AI 公司 Open AI 发布旗下 AI 聊天机器人程序 ChatGPT,该程序基于大型语言模型(LLM,Large Language Model) GPT-3.5,使用指令微调 (Instruction Tuning)和基于人…

一招教你房间内灰尘多怎么处理?除粉尘好用的空气净化器分享

在你吸尘、扫地、擦家具的时候,你或许会奇怪,为什么灰尘每天擦,每天有?即使门窗关得好好的,过几天还是会落上一层薄薄的灰。它们究竟是什么?对我们的健康又有什么影响呢?我们每天生活在房屋中&a…

导入excel文档,并且做业务处理,然后返回包含导入结果的excel文档

一、依赖 <easyexcel.version>3.3.4</easyexcel.version> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version> </dependency> 二、编写接…

如何修改 json 对象中的值

在JavaScript中&#xff0c;修改JSON对象&#xff08;实际上是一个JavaScript对象&#xff0c;因为JSON是一种数据格式&#xff0c;而JavaScript对象是一种数据结构&#xff09;中的值非常简单。以下是一些步骤和示例&#xff0c;说明如何修改JavaScript对象&#xff08;通常从…

Gotchi 战士们准备好吧!稀有度挖矿第八季锦标赛即将开始!

我们很高兴地宣布稀有度挖矿第 8 赛季的比赛即将开始&#xff0c;比赛将设立 15 万 GHST 的巨额奖金池&#xff0c;同时还将进行新的更新&#xff0c;让您有更多的方式来制定战略并与您的小鬼好友们一较高下。 本赛季引入了双败淘汰赛&#xff0c;每支队伍可以有两名替补队员&a…

vite项目配置高德api定位功能

项目场景&#xff1a; 用vite项目集成了一个H5页面的小程序&#xff0c;需要调用高德的定位API&#xff0c;在浏览器中测试的时候&#xff0c;出现了一系列定位失败的情况。 问题1 Get ipLocation failed、Geolocation permission denied 本地http访问下&#xff0c;定位失败…

基于PHP的草莓种植信息管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的草莓种植管理系统 一 介绍 此草莓种植管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端采用jquery.js和kindeditor在线HTML编辑器。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqljquery.jsphpstudyvsco…

在评论区的小发现

大约是近期比较频率的缘故&#xff0c;今天收到了系统私信&#xff0c;说我入围了本市博主周榜top100名单。本着虚心学习的态度&#xff0c;我打开了榜单。发现前几名获赞、阅读、评论都比我高多了。于是打开人家的主页&#xff0c;想拜读一下人家的文章。从内容上看&#xff0…

压测怎么做?如何自动化?盘点各大公司全链路压测方案与实践

本文综合盘点各大公司团队的全链路压测技术方案和实践路径&#xff0c;供大家参考。 一、什么是全链路压测&#xff1f; 全链路压测指的是基于实际的生产业务场景、系统环境&#xff0c;模拟海量的用户请求和数据对整个业务链进行压力测试&#xff0c;并持续调优的过程。常用…

comfyui虚拟试衣、ai换装、电商换装源码

一、AI换装技术博客 1. 项目介绍 IDM-VTON 是一个虚拟试衣模型&#xff0c;可以在 ComfyUI 中进行部署。相比于其他虚拟试衣模型&#xff0c;如 OOTDiffusion&#xff0c;IDM-VTON 提升了图像保真度和细节保留&#xff0c;更强调真实感,而且就算是侧面的模特或者背面的模特都…

【Ubuntu】--- 创建用户 删除用户 及其他用户操作大全 持续更新中

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ubuntu】--- 创建用户 删除用户 及其他…

c++中string用法详解

目录 二、案例需求 三、案例实现 1.首先获取strData中的角色数量 2.创造结构体数组&#xff0c;定义两个索引值 3.循环遍历对结构体User中的Id和Exp进行赋值 4.对结构体数组userArr进行排序 5.展示结果以及最终代码 ​四、最后 一、前言 在C中&#xff0c;std::string …

【Git】多人协作 -- 详解

一、多人协作&#xff08;1&#xff09; ⽬前&#xff0c;我们所完成的工作如下&#xff1a; 基本完成 Git 的所有本地库的相关操作&#xff0c;git 基本操作&#xff0c;分支理解&#xff0c;版本回退&#xff0c;冲突解决等等。 申请码云账号&#xff0c;将远端信息 clone…

(微服务实战)聚合支付系统商户线上聚合收银台接口设计

1 概述 聚合支付收款分为线上和线下业务场景&#xff0c;本文中的商户收银台接口设计主要是指线上业务场景&#xff0c;线下业务场景聚合收款方式后续会进行单独设计和分析。 主流的线上支付渠道有微信支付&#xff0c;支付宝支付&#xff0c;云闪付。这三种支付渠道都有各自…