CAN总线仲裁方法

时间:2016-12-15 20:35:00

标签: can-bus

我正在尝试使用以下示例来理解CAN总线仲裁方法,但我不明白为什么总线级别在某处和其他地方为0(零)。这里s1,s2,s3是三个节点,具有三个不同的标识符和逻辑零表示显性水平,逻辑1表示隐性水平。任何人都可以帮我理解下面的例子吗?

s1           1 0 0 0 1 0 0 0 0 1 1

s2           0 0 1 1 1 0 0 1 0 1 1

s3           0 0 1 1 1 0 1 0 0 1 0

bus level    0 0 1 1 1 0 0 1 0 1 1

2 个答案:

答案 0 :(得分:2)

在表中,发件人1在第10位开始时失去仲裁,发件人3在第4位失去仲裁,这使得发送者2具有更高的优先级,并且它将其数据传输到总线上。

另一种思考仲裁的方法是ID值较低:

S1 - 0x443 - 1091
S2 - 0x1CB -  459 <- lowest value wins arbitration
S3 - 0x1D2 -  466

答案 1 :(得分:1)

总线级别为1,或者0表示位1的数字表示,或者在CAN通信的物理层上设置了位0。为了表示differential signalling中的2位,CAN节点收发器如下图所示设置CAN_H和CAN_L的电平。这种方式将在通道上发送bit = 1或bit = 0( CAN_H和CAN_L的双绞线电缆将形成单个CAN通道)。

enter image description here

首先,您应该了解通用物理通道通信的概念。 CAN通道中的每个节点都必须调制它们共享的相同连接(相同电平)。

类比

  

这就像一个四口之家和一台单电视,每个人都有一个个人遥控器。如果该家庭中的每个人都想看第1频道,   他们都按下通道1的按钮,每个人都很高兴。如果相同   每个人都将遥控器推到Channel 2,每个人都很高兴,   每个人都看他们想要的东西,电视不必改变   渠道。

     

当有人想要同一个频道时,就会出现问题   时间。他们需要在这里进行仲裁,该频道将保留在电视上。

     

他们都同意的自定义规则是渠道1是   占主导地位,而渠道2是隐性。意思是,如果至少一个   家庭成员希望频道1,电视将保留在频道1,否   有多少家庭成员想要第2频道。

这也是CAN通道的仲裁规则。 如果其中一个节点要表示通道上的bit = 1,但之后又回读了bit = 0,则表明有另一个节点已经在发送消息。在这种情况下,要发送bit = 1,将放弃仲裁,并完全停止发送其消息,等待发送当前消息(获胜的消息),然后他们将从头开始整个消息。

这仅在消息的仲裁字段(即ID字段)中发生,并且仅在两个或两个以上的节点希望同时发送消息的情况下发生。

在其他情况下,当一个节点要发送消息而另一个节点已经在发送过程中时,它将知道自己已经迟到,并且必须在成功发送当前正在进行的消息之后等待总线空闲阶段,以发送自己的消息。

顺便说一句,您的示例是不正确的,因为节点丢失仲裁后将立即停止发送ID,例如第一列中的s1,第七列中的s3 。正确的仲裁应如下所示:

s1           1 - - - - - - - - - -

s2           0 0 1 1 1 0 0 1 0 1 1

s3           0 0 1 1 1 0 1 - - - -

bus level    0 0 1 1 1 0 0 1 0 1 1