8

I know a dominant acknowledge bit is sent by the receiver of the message which is transmitted by another node.

The thing I am not able to grasp is whether a single dominant bit is sent by the receiver after the entire message is received or the receiver sends the same message with the ACK bit field as dominant?

Or is it that the receiver drives the ACK field to a different voltage level while the transmitter is transmitting the Data frame?

Also, Can two CAN Nodes acknowledge the same message? If yes, then how? If no, then why?

I need clarification on this.

Lundin
  • 195,001
  • 40
  • 254
  • 396
Sachin Kedar
  • 93
  • 2
  • 7
  • Receiver here means on physical level, meaing any ECU receiving the CAN frame with correct stuff bits and CRC, and not just the one having an actual reception filter set and using the message content. – kesselhaus Feb 14 '19 at 01:23
  • Is there a difference between ECU which actually sends the dominant ack bit and between the ECU that only reads message content? Basically, I could not get this line. "not just the one having an actual reception filter set and using the message content." – Sachin Kedar Feb 14 '19 at 04:37
  • ANY ECU receiving the CAN frame successfully sets the ACK bit, even though, the message is not received / used in higher layers. e.g. think about a BasicCAN mailbox, which filters the CAN messages out in SW. ACK bit handling is a CAN protocol physical layer thing. – kesselhaus Feb 25 '19 at 09:08

2 Answers2

5

Or is it that the receiver drives the ACK field to a different voltage level while the transmitter is transmitting the Data frame?

That's the correct answer.

In the acknowledgement slot of the CAN frame the transmitter sets the bus to the recessive level.

Each receiver that has received the frame without error drives the CAN bus to the dominant state in the acknowledge slot. So one receiver is enough to do this. Multiple receivers acknowledging the message does not make a difference, as one is enough to drive the CAN bus to the dominant state.

The transmitter on the other hand detects that the CAN bus is driven to the dominant state and thus knows that the message has been received by at least one other node without errors.

oh.dae.su
  • 607
  • 6
  • 12
  • 1
    "At least one other node" is important here. As CAN is broadcast, any node which received message correctly will send ACK. That node may discard the message without processing. – Swanand Feb 19 '19 at 12:56
  • 2
    Also: having the ACK does NOT mean that every node has received the message. At least one, not necessarily all of them! – Victor Lamoine Mar 26 '19 at 09:59
0

Additional to @oh.dae.su's answer you should be aware, that on CAN multiple devices can write on the lines at the same time. Due to the electrical properties, a dominant (0) bit will overwrite any recessive (1) bits, and thus a receiver can pull the lines up to dominant state any time. This is used to signal back the acknowledge to sender on the fly by any receiver.

trapicki
  • 1,881
  • 1
  • 18
  • 24