11
\$\begingroup\$

I am reading data sheets on the LIN bus, but apparently the same terminology is used for CAN.

What does "recessive" and "dominant" stand for, e.g http://hw-server.com/products/rs_optika/prevodniky_optika.html ?

How relate these terms to "low" and "high", or 0 and 1?

\$\endgroup\$
1
  • 1
    \$\begingroup\$ In order to understand this, you need to understand CSMA/CA. \$\endgroup\$
    – Lundin
    Commented Jul 1, 2014 at 7:56

2 Answers 2

15
\$\begingroup\$

Dominant is 0. Recessive is 1. Dominant applies to 0 because if two arbitration ID's are being transmitted at the same time and the first 4 bits are the same and the fifth is 0 for one of them and 1 for the other, the ID with the 0 will end up being transmitted. Transmission of the message with the larger arbitration ID will be tried again after the other message is done.

\$\endgroup\$
12
\$\begingroup\$

In addition to the perfectly accurate answer given elsewhere, it may also be useful to consider the lower level meanings of the phrases dominant and recessive. In both CAN and LIN at the physical layer the bus "floats" to a particular state when no nodes are communicating. This is the recessive state. Any node which drives a dominant bit will override this state (hence the word "dominant").

This is used within the protocol to allow non-destructive arbitration to occur, where the node with the lowest id "wins". This is due to the decision to signify a logic low by a dominant bit.

(The standards could have been written the other way around. There's nothing that demands a dominant bit is interpreted as a zero in any other context.)

\$\endgroup\$
5
  • 6
    \$\begingroup\$ Also, CAN bus is Wire-ANDed... And in AND operation, 0 will "dominate" the 1. \$\endgroup\$
    – Swanand
    Commented May 28, 2014 at 11:48
  • \$\begingroup\$ that is nice shortcut to remember \$\endgroup\$
    – poseid
    Commented May 28, 2014 at 12:52
  • \$\begingroup\$ This is a more correct answer than the flagged one. Dominant and recessive states are used in many bus protocols or logic, not only in LIN or CAN. Open collector outputs are commonly used to create these states. \$\endgroup\$ Commented May 12, 2015 at 7:49
  • \$\begingroup\$ Is this "floating" to the recessive state any different from how a pull-up/down resistor is used for choosing the default (undriven) voltage level (and hence logic level) of the bus? E.G. Some buses will default to logic high via pull-ups if not being driven down. Would this mean that logic high is recessive and logic low is dominant? \$\endgroup\$ Commented Jun 17, 2016 at 14:30
  • 1
    \$\begingroup\$ @NickMiller: it's just the same (see Swanand's comment also) - just that because CAN is differential, there are two wires which need to be pulled to the recessive level (or in CAN's case "together" to the same voltage) \$\endgroup\$ Commented Jun 17, 2016 at 18:32

Not the answer you're looking for? Browse other questions tagged or ask your own question.