我正在尝试使用以下示例来理解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
答案 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通道)。
首先,您应该了解通用物理通道通信的概念。 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