【发布时间】:2012-05-28 11:06:47
【问题描述】:
我接受了采访。面试官问我:
如果两个节点发送两条具有相同标识符(0x100)但数据不同的消息,谁将赢得仲裁?巴士上会显示哪条消息?
如果节点 1 获胜,那么节点 2 的消息呢?节点2的消息什么时候发送?
【问题讨论】:
标签: ipc communication can-bus
我接受了采访。面试官问我:
如果两个节点发送两条具有相同标识符(0x100)但数据不同的消息,谁将赢得仲裁?巴士上会显示哪条消息?
如果节点 1 获胜,那么节点 2 的消息呢?节点2的消息什么时候发送?
【问题讨论】:
标签: ipc communication can-bus
这里有两种情况
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 的错误处理,在这种情况下最终将导致其中一个传输节点被关闭(总线关闭模式)。
【讨论】: