CAN 总线上的 [​​=10=] 是否会延迟/损害通信?

Does "error frames" on CAN bus delay/ impair the communication?

下面的引述来自 Texas Instruments 的 document

The error frame is a special message that violates the formatting rules of a CAN message. It is transmitted when a node detects an error in a message, and causes all other nodes in the network to send an error frame as well. The original transmitter then automatically retransmits the message. An elaborate system of error counters in the CAN controller ensures that a node cannot tie up a bus by repeatedly transmitting error frames.

此外,此 wikipedia page 提供了有关错误帧的更多信息。

几个回答中提到(link1, link2),CAN总线是半双工的,即节点不能同时发送和接收数据。

一般来说,一辆现代汽车在一个CAN网络上包含50多个ECU(节点)。万一出错," if "节点会陆续发送错误帧,CAN总线会被占用相当长的时间。

那么,我在这里错过了什么?节点是否同时/同时发送它们的错误帧并且硬件解决了该问题?如果节点传输不同的或损坏的错误帧会怎样?

重复发送活动错误帧的节点首先进入“警告”状态,然后进入“总线关闭”状态。这可以防止损坏的节点变成“冒泡白痴”。

参见 Bosch CAN specification 第 63 页

其他节点在大多数情况下不会依次发送error-frames。如果总线上出现错误,那么很可能所有节点都会感知到该错误。然后他们将在(接近)同时发送他们的error-frames。因为他们都希望看到“他们的”error-frame,谁先到达并不重要。

在(不寻常的情况)错误仅被一个节点注意到(可能是 ECU 内的一些瞬态),它将传输 error-frame。其他 ECU 将用它们自己的 error-frames 对此 error-frame(“简单地”违反填充规则)做出反应。但同样,他们都会同时看到它,因此上述情况适用。他们将在大约同一时间发送他们“自己的”error-frame。

正如@Lundin 在问题评论中指出的那样,error-frames 非常不寻常,因此对 bus-loading 的影响不是主要问题。

我不明白你问题的这一部分:

What happens if a node transmitted a different or corrupted error frame?

节点“不能”传输不同的 error-frame - 它不会是 error-frame。 error-frame 被损坏的可能性很小,因为它是一串显性位,它们被硬驱动,并且通常一次由几个到多个 ECU 驱动。如果发生这种情况,我认为(但必须检查规范)ECU 会注意到这是另一个错误并传输 another error-frame.