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