【问题标题】:Does "error frames" on CAN bus delay/ impair the communication?CAN 总线上的“错误帧”是否会延迟/损害通信?
【发布时间】:2022-02-28 22:41:01
【问题描述】:

以下引述来自德州仪器公司的document

错误帧是违反格式的特殊消息 CAN 报文的规则。当节点检测到错误时发送 在一条消息中,并导致网络中的所有其他节点发送一个 错误框架也是如此。原来的发射器然后自动 重新发送消息。复杂的错误计数器系统 CAN控制器确保节点不能通过重复占用总线 传输错误帧。

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

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

一般来说,现代汽车在 CAN 网络上包含 50 多个 ECU(节点)。如果出现错误,"如果"节点会一个接一个地发送错误帧,CAN BUS会被占用相当长的时间。

那么,我在这里想念什么?节点是否同时/同时发送它们的错误帧并且硬件解决了这个问题?如果一个节点发送一个不同的或损坏的错误帧会发生什么?

【问题讨论】:

  • 总线仲裁和冲突避免的全部魔力在于多个节点可以同时发送,只要它们发送相同的消息。错误帧不包含标识符,因此如果多个节点同时检测到同一个错误,它们都会同时发送同一个错误帧。但是请注意,错误帧通常是由严重的硬件问题引起的,因此,如果它们出现,那么错误帧本身会破坏总线负载是最小的问题。
  • @Lundin Cool,您会考虑稍微改进此评论并将其发布为答案吗?

标签: error-handling communication can-bus


【解决方案1】:

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

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

正如@Lundin 在问题 cmets 中所指出的,错误帧是非常不寻常的,因此对总线负载的影响不是主要问题。

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

如果一个节点传输一个不同的或损坏的错误帧会发生什么?

一个节点“不能”传输一个不同的错误帧——它不会是一个错误帧。错误帧被破坏的可能性很小,因为它是一串显性位,这些位被硬驱动,通常一次由几个到多个 ECU 驱动。如果发生这种情况,我认为(但必须检查规范)ECU 会将此视为另一个错误并传输 另一个 错误帧。

【讨论】:

  • 看起来你理解了我想说的问题的最后一部分:)
【解决方案2】:

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

参见Bosch CAN specification 第 63 页

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多