CAN总线通信协议学习4——数据链路层之仲裁规则

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

解决问题的思路:制定资源分配规则,依次满足多个设备的发送需求,确保同一时间只有一个设备操作总线(因为以下“先占先得”部分的图为例,若两个设备同时发,之前提到了0强于1的原则,那么如果出现0和1则在总线上只能传输0,则本来要发的1就被破坏了)。

这一节可以理解为CAN总线如何处理多个设备有发送需求时的情况。


CAN总线规定的仲裁情况有两种:先占先得非破坏性仲裁

1 先占先得

若某一设备先发送了数据,中途另一设备也想发送数据(如下图),则只能遵循先占先得原则。

先占先得原则如下:

  • 若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(即不能抢占优先级,可以发送错误帧/过载帧破坏当前数据)。
  • 任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时设备才能发送数据帧/遥控帧。
  • 一旦有设备正在发送数据帧/遥控帧,总线就会变为活跃状态,必然不会出现连续11个隐性电平,其他设备自然也不会破坏当前发送。
  • 若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求。

解释:如图,根据“先占先得”原则,A数据先发送,B数据中途想发送时被制止,不能发送,只能等到出现连续11个隐性电平(框部分),表示总线空闲了,才能尝试发送,因此,B波形要移到红框位置结束才尝试发送。

为什么说“尝试发送”呢?如果出现连续11个隐性电平,总线空闲了,但是不止B设备想发送,可能还有C、D...别的设备也在等待总线空闲想发送,那么此时应该如何确定哪个设备发送呢?就要用到下面的“非破坏性仲裁”规则。

    2 非破坏性仲裁

    2.1 何时进入非破坏性仲裁?

            若多个设备的发送需求同时到来因等待而同时到来(比如A设别输出波形,输出到三分之一位置,B也想发,进入等待;A输出到一半时,C也想发,进入等待;那么等到A发完后,总线空闲,等待的却有B和C两个设备,这就是因等待而同时到来),则CAN总线协议会根据I仲裁段(ID号+RTR)进行非破坏性仲裁。

    2.2 如何实现?

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

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

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

    非破坏性仲裁的本质就是:两设备同时发送,某设备发出0读回0则不影响继续发送,而若发出1读回0时则会主动退出,仲裁失败,等待下一次发送,即先出现1的设备会仲裁失利退出。(且位填充规则加的填充位也需要进行仲裁规则的判定,但位填充规则加入的位并不影响仲裁规则)。

    由上图例子来理解非破坏性仲裁的过程(可看哔哩哔哩“江协科技”,讲的非常好!!!):

    如图,在仲裁失利前(红色前),可以看到,单元1和单元2发出的波形完全一致,总线电平也一致,此段单元1和单元2都是发什么读回什么,直到红色部分单元1发出了逻辑1,单元2发出了逻辑0,由于线与特性,那么总线收到的数据是0,则读回时,单元1和单元2读回都为0,则此时单元1出现了发1读回0情况,单元1就明白了总线有其他设备在使用,单元1此后就会默默退出,仲裁失利,等待下一次发送。


    根据其本质可得到以下仲裁特点:

    • ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。(因为ID大的根据二进制证明1比较前出现,则会仲裁失利)
    • 数据帧和遥控帧ID号一样时,数据帧的优先级高于遥控帧(帧格式一章说明了数据帧RTR位设置为0,遥控帧RTR为1)

    • 标准格式11位ID号和扩展格式29位ID号的高11位一样时,标准格式的优先级高于扩展格式(SRR必须始终为1,以保证此要求)


    以上均是通过学习参考文献、哔哩哔哩网站上江协科技官方号以及网络资源所得的个人经验,如有侵权,请联系我,欢迎指正。

    内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158和192.168.0.159)上安装和配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFS和YARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala和Flink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础和大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台建提供详细的安装指南,确保各组件能够顺利安装和配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释和故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令和配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
    在无线通信领域,天线阵列设计对于信号传播方向和覆盖范围的优化至关重要。本题要求设计一个广播电台的天线布局,形成特定的水平面波瓣图,即在东北方向实现最大辐射强度,在正东到正北的90°范围内辐射衰减最小且无零点;而在其余270°范围内允许出现零点,且正西和西南方向必须为零。为此,设计了一个由4个铅垂铁塔组成的阵列,各铁塔上的电流幅度相等,相位关系可自由调整,几何布置和间距不受限制。设计过程如下: 第一步:构建初级波瓣图 选取南北方向上的两个点源,间距为0.2λ(λ为电磁波波长),形成一个端射阵。通过调整相位差,使正南方向的辐射为零,计算得到初始相位差δ=252°。为了满足西南方向零辐射的要求,整体相位再偏移45°,得到初级波瓣图的表达式为E1=cos(36°cos(φ+45°)+126°)。 第二步:构建次级波瓣图 再选取一个点源位于正北方向,另一个点源位于西南方向,间距为0.4λ。调整相位差使西南方向的辐射为零,计算得到相位差δ=280°。同样整体偏移45°,得到次级波瓣图的表达式为E2=cos(72°cos(φ+45°)+140°)。 最终组合: 将初级波瓣图E1和次级波瓣图E2相乘,得到总阵的波瓣图E=E1×E2=cos(36°cos(φ+45°)+126°)×cos(72°cos(φ+45°)+140°)。通过编程实现计算并绘制波瓣图,可以看到三个阶段的波瓣图分别对应初级波瓣、次级波瓣和总波瓣,最终得到满足广播电台需求的总波瓣图。实验代码使用MATLAB编写,利用polar函数在极坐标下绘制波瓣图,并通过subplot分块显示不同阶段的波瓣图。这种设计方法体现了天线阵列设计的基本原理,即通过调整天线间的相对位置和相位关系,控制电磁波的辐射方向和强度,以满足特定的覆盖需求。这种设计在雷达、卫星通信和移动通信基站等无线通信系统中得到了广泛应用。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值