我接受了一次采访。面试官问我:
如果两个节点发送两条具有不同数据的相同标识符(0x100)的消息,谁将赢得仲裁?总线上会有哪条消息?
如果节点1获胜,那么节点2的消息呢?节点2的消息何时发送?
答案 0 :(得分:2)
这里有两种情况
案例1:当两个节点尝试传输相同的ID和相同的数据字段时,CAN会将其视为单个消息,并将其发送到CAN总线上。在这里你真的不能说节点1是发送还是节点2正在发送,因为两者都有相同的ID和数据。
案例2:此处数据字段不同。直到仲裁领域都没有问题。由于两个节点的数据不同,您将收到总线错误。这是因为您的数据字段受CRC保护,并且位填充也会出现在图片中。
答案 1 :(得分:0)
我在 Controller Area Network - CAN Information 中找到了答案。
网络上的两个节点不允许发送具有相同ID的消息。如果两个节点同时尝试发送具有相同ID的消息,则仲裁将不起作用。相反,其中一个发送节点将检测到他的消息在仲裁字段之外失真。然后,节点将使用CAN的错误处理,在这种情况下最终将导致其中一个发送节点被关闭(总线关闭模式)。
答案 2 :(得分:0)
在CAN N / W中,如果2个设备具有相同的节点ID,则两个设备都不会检测到&不会发生消息的重新获得/响应。 (没有什么可行的......比如Bit Stuffing,Arbitration,Error Detection,Bit monitoring,ACK,CRC)。
如果我们有不同的ID,则在N / W中,我们可以传输相同或不同的消息。为了控制CAN N / W,我们使用仲裁的概念。