其他节点如何在CAN总线上确认传输的CAN消息?

8
我知道一个占优应答位是由消息的接收者发送的,该消息是由另一个节点传输的。
我无法理解的是,接收方是否在接收到整个消息后发送了单个占优位,还是以占优位字段的形式发送相同的消息?
或者是接收器在发射器传输数据帧时将 ACK 字段驱动到不同的电压水平?
另外,两个 CAN 节点能否确认同一条消息?如果可以,那么如何实现?如果不行,为什么?
我需要对此进行澄清。

在编程中,“接收器”指的是物理层面上的任何ECU,只要它能正确接收CAN帧并具有正确的校验位和CRC,而不仅仅是设置了实际接收过滤器并使用消息内容的那个。 - kesselhaus
ECU发送主导确认位和仅读取消息内容的ECU之间有区别吗?基本上,我无法理解这一句话。“不仅是具有实际接收过滤器设置并使用消息内容的那个。” - Sachin Kedar
任何接收到CAN帧的ECU都会成功设置ACK位,即使该消息在更高层次上没有被接收/使用。例如,考虑一个BasicCAN邮箱,在其中通过软件过滤CAN消息。ACK位处理是CAN协议物理层的事情。 - kesselhaus
2个回答

6

还是因为当发射机正在传输数据帧时,接收器会将ACK字段驱动到不同的电压水平吗?

这是正确的答案。

在CAN帧的确认槽中,发射器将总线设置为隐性状态。

每个已无误地接收到帧的接收器都会在确认槽中将CAN总线驱动到显性状态。所以一个接收器就足够了。多个接收器确认消息并没有任何区别,因为一个接收器就足以将CAN总线驱动到显性状态。

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


1
这里重要的是“至少还有一个节点”。由于CAN总线是广播形式,任何接收到消息并正确发送确认应答(ACK)的节点都有可能在不进行处理的情况下丢弃该消息。 - Swanand
2
同时:拥有ACK并不意味着每个节点都收到了消息。至少有一个节点收到了,但不一定是全部节点! - Victor Lamoine

0

除了@oh.dae.su的答案之外,您应该注意,在CAN总线上多个设备可以同时写入数据。由于电气特性,一个主导位(0)会覆盖任何隐性位(1),因此接收器可以随时将线路拉高到主导状态。这被用于通过任何接收器即时向发送方发出确认信号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接