9
\$\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
    \$\begingroup\$ In order to understand this, you need to understand CSMA/CA. \$\endgroup\$ – Lundin Jul 1 '14 at 7:56
13
\$\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.

| improve this answer | |
\$\endgroup\$
11
\$\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.)

| improve this answer | |
\$\endgroup\$
  • 6
    \$\begingroup\$ Also, CAN bus is Wire-ANDed... And in AND operation, 0 will "dominate" the 1. \$\endgroup\$ – Swanand May 28 '14 at 11:48
  • \$\begingroup\$ that is nice shortcut to remember \$\endgroup\$ – poseid May 28 '14 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\$ – Max Kielland May 12 '15 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\$ – Nicholas Miller Jun 17 '16 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\$ – Martin Thompson Jun 17 '16 at 18:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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