您的位置 首页 应用

CAN总线裁定机制

最近在学习CAN总线,原先一直不太明白,若有A,B2个节点同一时刻一起向总线上发送数据,CAN总线是怎么仲裁的,来让A,B其中一个节点退出,

最近在学习CAN总线,原先一向不太理解,若有A,B2个节点同一时间一同向总线上发送数据,CAN总线是怎样裁定的,来让A,B其间一个节点退出,确保高优先级的节点优先传输,今日又在网上查了一些材料,总算搞理解了一些。

在CAN总线上,若同一个时间,既有节点向总线上发送隐形电平(1),也有节点发送显性电平(0),那么此刻总线上表现出来的为显性(0)。

当总线闲暇时,有多个节点一起需求发送报文,那么每个节点的发送器将会对发送位的电平缓被监控的总线电平做比较,假如电平相同,那么该节点能够持续发送,假如发送的为一“隐性”电平(1),可是监控到一“显性”电平(0),那么该节点失掉裁定,有必要退出发送状况,只到下一次总线闲暇的时分在参加总线的裁定竞赛。

由以上也能够看出,当有多个节点一起抢夺总线的控制权,ID最小的那个节点将会胜出,所以在CAN总线上,节点的ID越小,优先级越高。

先罗列2种特殊情况,依据裁定来判别优先级。

1.若在同一时间,标准格局的报文与扩展格局的报文一起抢占总线,且它们的根底ID相同,则发标准格局的报文节点就会PK成功。这是由于扩展格局在根本ID后,紧接着是SRR位,与IDE位,且这两位都是隐性位。而在标准格局中,这两位别离对应的位为RTR与r1,其间RTR既能够为隐性位,也能够为显性位,,可是r1有必要为显性位。由裁定规矩能够此刻标准帧必定胜出。

2.同理,假如在同一时间,具有相同格局,且具有相同ID的数据帧与长途帧抢夺总线控制权,那么数据帧必定胜出。由于RTR显性表明数据帧,隐性表明长途帧。

今日又发现了一个问题,前几天也是在21IC的论坛上看见有这样一条帖子,上面说假如有2个节点具有相同的ID,一起向总线上发送不同的数据帧,那么这两个节点将会持续裁定数据场,只到有一方退出。开端我也是这样以为的,可是下午在看到CAN-bus标准V2.0上,关于应对场(ACK)部分的时分,想到了, 假如真是如上所述,就会呈现一种比较古怪的现象:

即假如总线上,只要A,B2个节点,当时只要A节点发送报文,B节点再接纳,依照以上的观念,那么将会产生什么呢?在应对场(ACK)应对空隙(ACK SLOT)的时分,A节点将会发送一个“隐性”位(1),可是一起,B节点却会发送一个“显性位”(0)来以示应对(这儿假定B节点正确接纳到有用的报文),那么此刻总线上表现出来便是“显性”(0)了。可是A却是发送的是“隐性”(1)啊,那么依照上述说法,此刻A节点就要退出总线了,也就不在发送应对界定符(ACK DELIMITER)(显性1),了,此刻总线上就会一向坚持显性(0)状况,只到位过错的产生。

因而,以上说法是不成立的,其实由CAN-bus标准V2.0的P8页上有如下句子:

Arbitration
Whenever the bus is free, any unit may start to transmit a message. If 2 or more units
start transmitting messages at the same time,the bus access conflict is resolved by
bitwise arbitration using the IDENTIFIER. The mechanism of arbitration guarantees that
neither information nor time is lost. If a DATA and a REMOTE with the
same IDENTIFIER are initiated at the same time, the DATA prevails over the
REMOTE . During arbitration every transmitter compares the level of the bit
transmitted with the level that is monitored on the bus. If these levels are equal the unit
may continue to send. When a ’recessive’ level is sent and a ’dominant’ level is
monitored (see Bus Values), the unit has lost arbitration and must withdraw without
sending one more bit.

由以上赤色部分可知,参加逐位裁定的位只要裁定场!!!

那么假如有2个节点具有相同的裁定场,可是他们的数据场不同,将会产生什么呢?我感觉可能在数据场之间可能会产生位过错(Bit Error),接纳完CRC序列后,可能会产生一个应对过错,或许一个CRC过错。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/233342.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部