【问题标题】:How are transmitted CAN messages acknowledged on CAN bus by other nodes?其他节点如何在 CAN 总线上确认传输的 CAN 报文?
【发布时间】:2019-02-13 18:27:48
【问题描述】:

我知道一个显性确认位是由另一个节点传输的消息的接收者发送的。

我无法理解的是,接收方是在接收到整个消息后发送单个显性位还是接收方发送相同的消息,其中 ACK 位字段为显性?

或者是接收器在发送数据帧时将 ACK 字段驱动到不同的电压电平?

另外,两个 CAN 节点可以确认相同的消息吗?如果是,那么如何?如果不是,那为什么?

我需要澄清一下。

【问题讨论】:

  • 这里的接收器是指物理级别的,表示任何 ECU 接收到具有正确填充位和 CRC 的 CAN 帧,而不仅仅是设置了实际接收过滤器并使用消息内容的那个。
  • 实际发送显性 ack 位的 ECU 和只读取消息内容的 ECU 之间有区别吗?基本上,我无法得到这条线。 “不仅仅是设置了实际接收过滤器并使用消息内容的那个。”
  • 任何接收到 CAN 帧的 ECU 都成功设置了 ACK 位,即使高层没有接收/使用该消息。例如考虑一个 BasicCAN 邮箱,它在 SW 中过滤掉 CAN 消息。 ACK 位处理是 CAN 协议物理层的事情。

标签: embedded can-bus


【解决方案1】:

或者是接收器将ACK场驱动到不同的电压 发送端发送数据帧时的电平?

这是正确的答案。

在 CAN 帧的确认槽中,发送器将总线设置为隐性电平。

每个接收器都正确接收到帧,将 CAN 总线驱动到确认槽中的显性状态。所以一个接收器就足以做到这一点。多个接收器确认消息并没有什么区别,因为一个就足以将 CAN 总线驱动到显性状态。

另一方面,发送器检测到 CAN 总线被驱动到显性状态,因此知道消息已被至少一个其他节点正确接收。

【讨论】:

  • “至少一个其他节点”在这里很重要。由于 CAN 是广播的,任何正确接收到消息的节点都会发送 ACK。该节点可能会丢弃消息而不进行处理。
  • 另外:有 ACK 并不意味着每个节点都收到了消息。至少一个,不一定全部!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 2019-11-07
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多