CAN总线的仲裁机制简述

Controller Area Network简称CAN总线是一个在汽车电子上用得非常广泛的一种协议,CAN总线有众多优点…
好,说了那么多CAN的特点之后激起了我对CAN总线工作原理的兴趣。CAN总线的总线仲裁机制是我觉得设计的非常精妙的,下面总结几个CAN总线的特征点,这几个特征点对理解CAN的总裁机制非常重要。

1、CAN总线在物理层上只有两根线CANH和CANL,根据两根线的的电位差来判断总线电平,而不是两根线单独传输数据(像串口的TXD和RXD一样)。总线电平分为显性电平和隐形电平两种,相当于二进制中的0和1。

2、CAN总线上可以挂载很多和CAN控制器单元,每个单元都可以是主机,可以发送和接收数据。但是有与总线上单元众多,所以会导致发送冲撞。为了避免发送冲撞,CAN协议规定只有等信道空闲的时候某一个CAN单元才能占有总线并发送数据。但是仅仅这样做还不足以避免所有的信号冲撞,例如如果有两个单元同时要发送数据的时候,他们同时检测信道是否空闲,同时准备发送数据,这样就会产生冲撞。

3、为了解决2中所说的冲撞问题,CAN协议提出了优先级的概念。规定每一个CAN的数据帧都有一个标识符(Identification)简称ID,这个ID标识了CAN数据帧的优先级。多个单元同时发送数据帧的时候,优先级较高的数据帧优先发送数据,低优先级的数据帧则等待空闲后发送。

4、就像3中说的,通过数据帧的优先级来决定哪个数据帧所在的CAN单元优先发送数据,但是每个CAN单元并不知道与自己同时发送数据的单元的优先级到底是比自己高还是比自己低。解决办法就是使用1中所说的CAN总线的物理特性来解决。举一个例子来形象地说明一下,这里暂时先抛开CAN总线的物理特性,使用我们自己的熟知的数字电路知识,假设单元之间只使用一根线连接,线路的电平状态为0或者1,且0为显性1为隐形,也就是0电平和1电平进行“线与”操作的话会出现0电平(0 & 1 = 0)。好,假设这里有两个单元:单元1和单元2,单元1要发送的数据帧的优先级为0010 0011(b),单元2要发送的数据帧的优先级为0011 0101(b),我们规定优先级数值越小的单元优先级越高,也就是0000 0000(b)的优先级最高而1111 1111(b)的优先级最低。那么我们知道单元1的优先级是要高于单元2的。就在公元2018年1月22号早上10点41分22秒276毫秒33微秒的时候,两个单元要同时发送数据,虽然我们不想他们两个发生冲撞,但是还是不可避免的发生了。按照正常的手续来,第一步,两个单元先检测信道是否是空闲,检测结果是空闲,两个单元都可以进行数据发送,但是彼此不知道对方也要进行数据发送。第二步,发送各自的优先级ID,我们规定先发送高位,这时候单元1发送了0,单元2发送了0,在物理线上进行线与之后得到了0,单元1和单元2都说了:“啊,太开心了,我发出去了0,线上的状态的确是0”,好进行下一位数据的发送,单元1发送了0,单元2发送了0,在物理线上进行线与之后得到了0,单元1和单元2都说了:“啊,真好,我发出去了0,线上还是0”,但是其实他们都是“傻逼”,因为0和任何数进行与操作都是0,所以发出去是0检测线上的信号一定也是0。好,继续下一位数据,这次两个单元的数据都是1了,这样线与之后线上的电平还是1,单元1和单元2都说了:“啊,你才是傻逼,我发出去1了,我还是能收到1!”。好好好,我不跟你犟,我们再看下一个数据,这下就有好戏看了,单元1发出去了一个0,而单元2发送出去了一个1,进行线与操作后得到了0,也就是说单元0发送出去0,线上结果是0,但是单元1发送出去1但是线上结果是0,这时候单元1笑了说:“哈哈,我发出去的和检测到的是一样的”,而单元2哭着说:“我发出了1但是检测到了0,这说明总线上还有一个单元在发送数据,并且他发送的是0,也就是说他的优先级比我要高,我要让他先走”,好了终于分出个高下了,单元1继续发送数据,单元2等待单元1发送之后再进行发送。好,例子说完了,总线上不同单元同时发送数据的情况完美地解决的,虽然有的单元心里可能有点憋屈,但是谁叫别人的优先级更高呢!这是我们规定的物理层通信协议,其实CAN总线的总线仲裁方式跟我们的例子是如出一辙的,是不是很佩服设计者的脑子!

  • 70
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
CAN总线是一种广泛应用于汽车、工业控制等领域的串行总线标准,其主要特点是高可靠性、高抗干扰性和高实时性。为了保证多个CAN节点之间的数据传输的顺序和正确性,CAN总线需要使用总线仲裁机制。 总线仲裁是指当多个CAN节点同时发送消息时,通过比较CAN节点发送的消息标识符来确定哪个节点具有优先权,从而避免多个节点同时发送数据导致的冲突。总线仲裁的基本过程如下: 1. 发送准备阶段:CAN节点在发送数据前,首先要检测总线是否空闲,如果总线空闲,则该节点可以直接发送数据,否则该节点必须等待总线空闲。 2. 仲裁阶段:当多个CAN节点同时发送数据时,它们会同时发送消息标识符,标识符包含了消息的优先级信息。CAN节点通过比较自己发送的消息标识符和总线上的标识符来确定哪个节点具有优先权。在这个过程中,CAN节点发送的标识符中,标识符的高位表示优先级,优先级越高的节点将具有更高的优先权。 3. 数据传输阶段:仲裁胜利的节点将继续发送它的数据,并且其他节点将停止发送数据,直到仲裁胜利的节点完成数据传输。 总之,总线仲裁是为了避免多个CAN节点同时发送数据导致的冲突,保证多个节点之间的数据传输的顺序和正确性,是CAN总线能够实现高可靠性、高抗干扰性和高实时性的重要因素之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值