Serial Programming/RS-485

From Wikibooks, open books for an open world
Jump to: navigation, search

All bookshelves > Science bookshelf > Computer Science bookshelf > Serial communications bookshelf > RS-485 Technical Manual


NOTE: You may want to check out wikipedia:RS-485 or wikipedia:RS-232 for more information.

Introduction[edit]

ANSI/TIA/EIA-485, commonly called RS-485, is a standard defining the physical layer of a two wire multipoint communications network. This standard is one of the more misunderstood of EIA’s standards. Some of this misunderstanding comes from the many engineers who have worked on an RS-485 application and think that since their application worked, they must understand exactly what the standard is. Yet few of these engineers have ever seen the standard, let alone read it.

The RS-232, RS-422, and RS-485 standards are not comprehensive communications protocols, but are intended to be used with other standards. There are many pieces of communications protocol needed for two devices to communicate, that are not included in these standards. If two devices are to communicate with each other, the pieces that are not part of the standard must still be implemented. Just because these pieces are used in a particular implementation of RS-232 or RS-485, does not mean they are part of the standard.

A direct quote from the RS-485 standard’s scope:

This Standard does not specify other characteristics, such as signal quality, timing, protocol, pin assignments, power supply voltage, operating temperature range, etc., that are essential for proper operation of interconnected equipment.

Yet many believe that the RS-485 standard includes asynchronous start-stop communication bit protocol (the UART bit protocol commonly used with a "RS-232" serial port), a “standard” connector, etc.

This appendix will attempt to explain what RS-232, RS-422, and RS-485 are and are not; then discuss one of the more common implementations of RS-422 and RS-485, asynchronous start-stop communication with a UART.

History[edit]

The EIA once labeled all its standards with the prefix "RS" (Recommended Standard), but the EIA-TIA officially replaced "RS" with "EIA/TIA" to help identify the origin of its standards.[1] The EIA has officially disbanded and the standard is now maintained by the TIA. The RS-485 standard is obsolete and has been superseded by TIA-485, but many engineers and applications guides continue to use the RS designation even though it has officially changed.

Title: Electrical Characteristics of Generators and Receivers for Use in Balanced Multipoint Systems
[Note: The following information is is believed to be correct but verification is needed]
Developer: Electronics Industries Association (EIA). Association of Industrial Electronics.
RS-485A (Recommended Standard 485 Edition: A) 1983.
EIA 485-A 1986
TIA/EIA 485-A 1998 [Approved: March 3, 1998]
TIA/EIA 485-A 2003 [Reaffirmed: March 28, 2003]

International and national standards based on the standard RS-485
ISO/IEC 8482 (Second edition 1993-12-15, current)
ISO 8284 (1987, obsolete)
ITU-T v.11 (1996, current)
ITU-T v.11 (1993, obsolete)
CCITT v.11 (1988, obsolete)
ANSI/TIA-485-A (1998, unknown)


Document Conventions[edit]

This document is primarily directed at discussion of RS-485 but also includes information about RS-232 and RS-422.

Direct quotations from one of the standards are shown "inside quotation marks in a fixed width font"

Many references and examples are made to "asynchronous start-stop communication with a UART" or "UART" communications. This is the 7 or 8-bit protocol commonly associated with serial ports. This was done since this protocol is a very common bit format used with serial communications. It does not mean that this protocol is part of the standards or that only this protocol may be used with the 232/422/485 standards.

The term network is used to define the wires, terminations, bias networks, and all devices connected as a whole system.

The RS standards, the OSI model, and the serial port[edit]

(stub)

RS-232, RS-422, and RS-485[edit]

RS-232[edit]

The RS-232 standard title is "Interface Between Data Terminal Equipment and Data Circuit Terminating Equipment Employing Serial Binary Data Interchange". This standard is for up to 21 circuits on a 25 pin DB-25 connector. A circuit is a full definition of a signal from the transmitting device to the receiving device, but many now think of these definitions as pin labels. One circuit (signal Common) is required for all interface types. RS-232 defines 13 "standard" interface types lettered A through M, none of which match IBM's implementation of its serial port. A fourteenth interface type, lettered Z, is reserved for applications not covered by types A through M. All of the circuits on interface type Z are optional and are to be specified by the supplier.

RS-232 network. One driver and one receiver per circuit. Signal Common is required for all interface types. Only Tx Data and Rx Data are shown. The DB-25 connector is not shown.

In addition to the 21 circuits, the shield may be connected to pin 1, pins 9 and 10 are "Reserved for Testing", and pin 11 is "unassigned". This defines all 25 pins of the connector.

An interesting point is that the serial data is transmitted from the Data Terminal Equipment [DTE] to the Data Circuit Terminating Equipment [DCE] on pin 2, and this pin is defined as "Transmitted Data" for both the transmitter and the receiver. RS-232 only defines connecting DTE to DCE, so when two computers are connected together this is outside of the standard.

Many engineers think the RS-232 standard completely defines the IBM PC serial port, but this is incorrect. The IBM PC serial port is only partially described by the RS-232 standard. A common and incorrect assumption is that the RS-232 standard defines the bit protocol of the data being transferred asynchronously through the UART. When configuring an IBM PC’s serial port, the parity, number of data bits, and number of stop bits must be set; therefore, many think this must be part of the RS-232 standard. But, the RS-232 standard allows for synchronous communications, which is not compatible with the IBM PC serial port, as well as asynchronous communications, which can be. It can’t be denied that the UART IBM selected for its implementation of the serial port is considered by many as the definition of RS-232, but these parts are not in the RS-232 standard.

Another example of misunderstanding the RS-232 standard is the 9-pin connector. RS-232 specifies two connectors, a 25-pin (DB-25) and an alternate 26-pin connector (pin 26 is "No Connection"). The 9-pin “RS-232” connector used for the IBM PC-AT serial port is not specified in RS-232. EIA/TIA-561 and EIA/TIA-574 are standards for 8-pin and 9-pin connectors that are commonly used with serial ports.

The RS-232 standard defines the connector, the function of each of the pins in the connector (called circuits), and the electrical characteristics of the signals that are on the “circuits”. For example, one of the circuits is “AB”. Circuit AB is on pin 7 and is described as “Signal Common”. This is a rather convoluted way of saying pin 7 of the DB-25 connector is used as a signal common. Two circuits are for transmitting and receiving the serial data, circuit “BA” (TX data on pin 2) and “BB” (RX data on pin 3). A number of circuits are for handshaking and other functions. The RS-232 standard includes secondary serial data circuits (secondary TX data, and secondary RX data), three clocks (timing elements) for synchronous serial data transfer, Signal Quality Detector, and more. Clearly not all of these circuits or signals are included in IBM’s implementation (very few implementations use secondary data lines or many of the other circuits). RS-232 provides a list of circuits and says if you use a circuit; this is what it must do and it must be on this pin of the connector.

RS-232 defines the voltages of these circuits, and the polarity of the logic generating the voltage. When a binary 0 is being transmitted (i.e. when the UART is transmitting a zero), the voltage on the TX data circuit is more positive than +3V, and when a binary 1 is being transmitted, the voltage must be more negative than -3V. Voltages between -3V and +3V are undefined by the standard. There are other electrical characteristics in the standard, but you should be getting the idea that RS-232 specifies the connector, signals, and electrical characteristics. It does not specify bit protocols.

RS-232 allows for both a transmit and receive circuit. If both are implemented then the connection is full-duplex. If only one circuit is implemented then the connection is one way. Half-duplex RS-232 implementations exist but require all of the hardware and wires that a full-duplex network requires. Half-Duplex RS-232 is usually limited by an additional communications device between the two farthest ends that are communicating. For example; Two computers communicating with each other over an older modem. The modem may be limited to half-duplex communications, and therefore the link between the two computers is half-duplex. But, the RS-232 connection from the computer to the modem would still be full-duplex. Other reasons that some RS-232 ports were half-duplex: some very old UARTs may be half-duplex limiting the system, and some very old computers drove the RS-232 drivers directly from the processor without a UART. These old and slow microprocessors did not always have the horsepower to monitor the timing of both the incoming and outgoing bits, limiting the system to half-duplex.

The UART connected to the RS-232 driver/receiver controls the protocol of the bits being transferred. This protocol may include things like the start bit, number of data bits, parity and stop bit(s). This protocol is not part of the RS-232 standard, even though many engineers think of this protocol as “RS-232”.

RS-422[edit]

The RS-422 standard title is "Electrical Characteristics of Balanced Voltage Digital Interface Circuits". This standard is for a network of two balanced pairs of wires for a total of four wires.

RS 422 network. May have multiple receivers. Only one driver per pair of wires is allowed.

One pair is used for the interface generator (driver) to talk to the other device(s) on the RS-422 network, and the second pair is the interface receiver used to listen to the other device (not devices, only one driver can be on this pair of wires) on the network. RS-422 includes the voltage levels of the two wires when a binary 0 or 1 is on the RS-422 lines, but specifically excludes the logic function of the generator or receiver. There are other things specified, but they are all electrical values. Any bit protocol such as that from a UART is specifically NOT included. RS-422 is inherently full-duplex. I.e. the two devices on an RS-422 network can talk to each other at the same time. RS-422 allows for multiple receivers on each pair, but only one driver. This means that in a master/slave configuration, a master can talk to multiple slaves, but only one slave can talk back to the master. This limits most RS-422 bidirectional networks to two devices that talk to each other. RS-422 does not specify any connector.

Since the driver and receiver are differential circuits, the input and output voltages are specified as differential, but are also referenced to a circuit common. See the section on grounding for a discussion of this “extra wire”.

RS-485[edit]

The RS-485 standard title is "Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems". This standard is for a network of a single balanced pair of wires.

RS 485 network. Multiple nodes. Includes a branch line which is not recommended.

Both the generator (driver) and the receiver of all devices on the network are connected to the two wires. A third interface is defined as a transceiver, which has both a generator and receiver. All of the drivers and transceivers must be able to be “made passive” or effectively disconnected from the network to allow other drivers to transmit. The RS-485 standard includes the voltage levels of the two wires when a binary 0 or 1 is on the two RS-485 wires, but specifically excludes the logic function of the generator or receiver. There are other things specified, but they are all electrical values. Any bit protocol such as that from a UART is specifically NOT included. RS-485 is inherently half-duplex. I.e. only one device can talk to the other devices on the RS-485 network at a time. RS-485 allows for multiple devices on the two wires. This means that in a master/slave configuration, a master can talk to multiple slaves, all of the slaves can talk back to the master, and every device on the network can hear every other device. Implementing this requires a higher level addressing scheme so the data being transmitted goes to the correct device. RS-485 does not specify any protocol, addressing scheme, or connector.

Since the driver and receiver are differential circuits, the input and output voltages are specified as differential, but are also referenced to a circuit common. See the section on grounding for a discussion of this “extra wire”.

Please note that a RS-485 network is a single pair of wires, but there is nothing in the RS-485 standard that prevents more than one RS-485 network from being used by each device. One RS-485 network can be used for the master to talk to all of the slaves on the network, and a different RS-485 network can be used for all of the slaves to talk back to the master. This particular implementation of two RS-485 networks is often called 4-wire or full-duplex RS-485. This implementation is very similar to a single RS-422 network. The most significant difference is that more than one slave can talk back to the master. Another implementation of two RS-485 networks is BitBus, which uses one of the RS-485 networks for bidirectional SDLC data communications (very different from asynchronous start-stop communications with a UART), and a second, optional, RS-485 network for RTS (direction control if a repeater is used).

There is no collision detection in RS-485. If multiple devices start to talk at the same time, the data will be corrupted. RS-485 does not define a way for a device to detect that the data it transmitted has been corrupted. This means that a higher-level protocol is usually used to verify that the data has been sent. A simple example is a query/response protocol. A master asks a slave for data. The slave responds to the request providing the master with the information. If the master does not receive the requested information, it asks for the information again. If either the query or response is lost through a collision or other error mechanism, the data will end up being retransmitted. Other error detection mechanisms can be used. A CRC or checksum can be added to the end of the data being transmitted. A receipt response verifying valid data received can be sent back to the master. None of these protocols are part of the RS-485 standard, and implementation is up to the engineer writing the software.

Physical Layer[edit]

The Wires[edit]

RS-232 has one requirements:

  • Maximum circuit capacitance of 2500pF

Its annex also states "desirable ... the DC wire resistance shall not exceed 25 Ω per conductor" Any cable that meets the capacitance requirement can be used. For long cables, heavier gauge wire may be needed to reduce resistance. Shielded cable increases the capacitance between wires and reduces the total cable length.

RS-422 & RS-485 have one requirement

  • "balanced interconnecting media" - "The characteristics of the interconnecting cable are not specified."

Then the standards go on to say things that the cable should have/do:

  • "paired cable with metallic conductors should be employed." [yup, both standards really say the wire should be made of metal]
  • The performance of the cable should work for the application. - "maintain the necessary signal quality required for the specific application"
  • Shielded cable may be used. (RS-422 only - The RS-485 annex says shielded cable may be needed for RFI/EMI or other purpose, but the standard does not mention the word shield)
  • 120 Ω nominal. (RS-485 only)
  • Other impedance cable may be used such as 100 Ω nominal. (RS-485 only)

Note that the RS-422/485 standards call for "balanced interconnecting media", not twisted pair. In reality, the only viable option is twisted pair, but the standards do not require it.

RS-485 calls out TSB-89 for guidelines on TIA/EIA-485-A. TSB-89 discusses wire types and effects, but TSB-89 also says "The designer should empirically determine the performance of the media in these regards."

RS-485 Driver RS-485 Figure 1 Shows A and B connected to a receiver, but does not show a connection to C

Unlike RS-232, which has a "transmit wire", a "receive wire" and a "signal common wire", RS-485 has a single pair of wires that both the transmitter and receiver are connected to. The data is sent down the wires differentially, or when one wire has a high, the other wire has a low and vice versa. In the RS-485 standard, one wire is labeled "A" and the other is labeled "B", and the wires are twisted together (a "twisted pair"). This allows RS-485 to transmit over longer distances than RS-232. Due to the confusion of polarity, some commercial device manufacturers have labeled the wire connections "+" and "-", TX(+) and TX(-), etc. See the section [That Pesky] Polarity for more information.

The RS-485 standard has a diagram (RS-485 figure 1 [not shown for copyright concerns]) showing the cable as being two wires. In this diagram the driver has two leads and connects to the wires at points "A" and "B". A third point on the driver shown as "C" is labeled as a common, but is not shown connecting to any wire. A figure in the annex (which is not considered to be part of the standard) discusses connecting the "Green Wire Ground of Power System" or "Protective Ground or Frame Ground" to "Circuit Common or Circuit Ground" and SC (signal common). The annex says this connection can be wired directly or made through a 100 Ω resistor. This "third wire" is not officially part of the standard and is discussed further in the grounds and grounding section.

The primary difference between RS-422 and RS-485 is that RS-422 requires 4 wires in two pairs and RS-485 requires two wires in a single pair. However, the specifications are different in many other places. The annexes (which are not a formal part of the specification, but are included for information purposes only) are also different. RS-422's annex has a chart of empirical data using 24 AWG copper UTP telephone cable. POTS telepnone cable's impedance is much less controlled impedance than CAT cable and can vary from 600 Ω to less than 100 Ω at different frequencies.

In the end, the cable you use needs to work for the application where you use it. The cable's length, impedance, terminations, stub lengths, and data rate will all have an impact on signal quality. 120 Ω cable should provide the best performance, but the 100 Ω CAT-X cable may you have laying around may also work. Even POTS telephone wire may work for many applications. Low capacitance cable becomes important when pushing line length and data rates to the maximum.

Line Length and Bit Rate[edit]

The legends, folklore, and flat out wrong information that has grown around the line length and data rate limits inherent in RS-485 are truly astounding. Articles, application notes, even data sheets from semiconductor manufacturers discuss both the data rate and line length limits in RS-485, but sadly neither of these limits are in the RS-485 standard.

Data Rate / Line Length chart from RS-422 Annex A
(This chart is not in RS-485)

The graph at right, which is often shown in these app-notes, shows a limit of 1200 meters/DC at one end and 15 meters/10 Mbit at the other. This graph is not in RS-485, the graph is from annex A of RS-422. (This annex specifically states that it is not a formal part of the standard.) Even worse is the fact that annex A states that this graph is a conservative guide based on empirical data of 24AWG telephone cable. The annex also discusses the fact that many applications can handle greater amplitude and timing distortion, and practical experience has show that the cable length can be extended to several kilometers at lower data rates. The graph in RS-422's annex A is not an absolute limit, but a guide to what should always work with cheap telephone wire.

RS-485 has even less to say. The forward to RS-485 references TSB-89 which has topics including data signaling rate vs. cable length, stub length, etc. RS-485 also has some information in its annex (again, which is not considered to be part of the standard) RS-485's annex states: "consideration should be given to some of the problems that may be encountered due to system configuration, data signaling rate vs. cable length, stub length, and grounding arrangements." "High data signaling rates and long cable lengths are possible, however, they are mutually exclusive. High data signaling rate applications should be limited to short cable lengths, while low data signaling rate applications may employ long cable lengths." Low data rates are primarily limited by the DC resistance of the cable and high data rates are limited by the AC effects of the cable on signal quality. There is no graph of cable length vs. data rate in RS-485 or its annex.

RS-485 discusses that it is used for circuits up to 10Mbit/S, then says they need not be limited to 10Mbps. It also states that "the upper bound is beyond the scope of this Standard".

All of the application guides and data sheets that say RS-485 has a limit of 1200 meters or 10Mbit are flat out wrong.

That being said, what is the practical line length limit? It depends on many factors. Data rate is usually the primary factor. Since the majority of RS-485 applications are driven by a USART (by a serial port), the data rate is usually below 100kbit. In this case, POTS telephone wire should work for quite a long line. If you are pushing the data rate above 100kbit or the line length above 1000 meters, you may want to use a better grade of wire. Many cable manufacturers can recommend a 120 Ω cable intended to work with RS-422 or RS-485.

How fast can you go? Maxim has an app note that says speeds of 50Mbps[2] are possible with the right drivers. (and the right cable, terminations, receivers, etc.) Linear Technology claims 52Mbps with their LTC1695 [3]

If your intention is to push the cable length or bit rate to extremes, you should pay careful attention to the cable, drivers, and installation. A conversation with the cable manufacturer can help to define the best available cable for your application. There are many different drivers, receivers, and transceivers available. Not all will provide the same performance. The RS-485 standard requires a minimum performance, but many drivers exceed this performance and some have quirks such as slew rate limiting. Slew rate limiting reduces the maximum bit rate, but will improve signal quality on networks with poor characteristics. And, of course, the installation can make or break the network performance. Stub length, termination, and biasing resistors can have a significant impact on the performance of the network. A higher value termination resistor will reduce the DC losses associated with extreme line lengths, allowing for much longer line lengths at the cost of ringing on the wires. The ringing occurs when the data transitions, and will eventually damp out. This means that low data rates can handle an improperly terminated (or even unterminated) cable better than high data rates.

Some thought should be given to changing the technology for long line lengths. A kilometer of POTS cable can cost hundreds of dollars, two kilometers could be over a thousand, plus the cost of pulling the cable. A gateway that converts the RS-485 data to run over an existing network may be less expensive in the end than running a kilometer of cable.

RS-485 gives limits for rise and fall times as 0.3 of the unit interval. This is a ratio of rise/fall time to bit width. There are no limits given in time units, so there is no minimum or maximum bit rate associated with RS-485.

Grounds and Grounding[edit]

Grounding of the RS-485 hardware is another contentious issue. The reason for this is that different installations have different grounding requirements. No one solution will fit all installations.

The ground between RS-485 devices is often called a "Third Wire". This Chipkin article [4] has some good information on this "third wire", but notice in the comments how there is disagreement on exactly when this wire is needed.

The RS-485 standard has very little to say about grounding. The standard defines the common-mode voltage as being referenced to ground, it defines a term "ground potential difference" as the difference in the signal ground between the driver and receiver, but it does not say that this is earth ground or just a a third wire common. It shows a diagram of the driver and receiver with two wires connecting them, and a third point "C" that is called a common. There is no wire shown connecting this third point between driver and receiver. Then the annex states that consideration should be given to various things including grounding arrangements. Section A.4 of the annex defines two optional grounding arrangements. The first is to connect the signal common of the driver/receiver circuit to "protective or frame ground" through a 100 Ω resistor. This frame ground is shown as being connected to the "green wire ground of power system", more commonly called earth ground. The second optional grounding arrangement is to connect the circuit common directly to the frame ground without a resistor. The annex also says that certain applications may cause the resistor to fail so the installation must allow access for inspection and replacement. I.e., you should be able to change the resistor when it goes up in smoke.

Since the annex admits that the installation can cause physical damage to components, it is not surprising that grounding is a contentious subject. Anyone who has been bitten by a destroyed device, is likely to be very vehement on how to, and how not to wire grounds. The problem with this is that a particular method of grounding may be required for one installation to function and cause damage at another.

RS-485 requires the driver and receiver to function if the common mode voltage is shifted against circuit common (see the section on voltages for more information). If the circuit common is truly isolated from earth ground, then scuffing your feet on carpet (to pick up an ESD charge) and touching the wires can cause the wires to shift potential several thousand volts. In practice this type of isolation is rare. It would require an isolated power supply and optically isolated drivers. Or a couple of laptops running on battery power and sitting on an insulated surface.

Consider three different installations.

RS-485 communications between two computers. One computer is a desktop and one is a battery powered laptop.

The first is a desktop computer talking to a laptop. The desktop is connected to earth ground and the RS-485 port is referenced to the earth ground. The laptop is battery powered and has no connection to earth ground. An ESD shock to the laptop could cause the two RS-485 wires to increase in potential against the earth ground to several thousand volts. This far exceeds the RS-485 voltage of +12V and -7V. If the desktop's port is ESD protected damage may not occur, but there is no guarantee. This installation should have a third wire connecting the earth ground/circuit common from the desktop PC to the laptop's RS-485 port circuit common. Since the laptop has no connection to earth ground, there will normally be little current through this third wire.

RS-485 communications between two computers. The computers are close to each other and the earth grounds have little potential difference between them.

A second installation has two desk top PC's sitting very close to each other. The RS-485 circuit common is connected to earth ground in both PC's. Since the PC's are sitting near each other, they are on the same power circuit,the difference in the earth ground between the two computers is very small. This installation does not require a third wire, but including one will not hurt.

RS-485 communications between two computers. The computers are separated by a long distance of wire and one of the computers has a ARC furnace near it creating a significant ground potential difference.

The third installation uses the same two computers as the second example, but they are separated by several thousand feet of wire, and one of the computers is sitting next to an arc furnace that draws several thousand amps when operating. The difference in earth ground potentials between these two computers may be tens or even hundreds of volts. This difference in earth ground may be high enough to cause damage to the RS-485 devices, but connecting a third wire between their circuit commons/earth grounds would try to bypass the power earth common (this is often called a ground loop) causing excessive current in the third wire. The current could cause damage to the wire, or the RS-485 port. This third example would be a good place to use an isolating RS-485 transceiver. Isolated transceivers are available in IC packages, modules, and gateways.

A shielded cable may be used. A shield is sometimes used to reduce EMI in twisted pair, but will reduce the maximum RS-485 operational line length. The annex of RS-485 states that "When employed, the shield shall be connected only to frame ground at either or both ends depending on the specific application." Shields usually have a lot more copper (and/or aluminum) than a single wire and can therefore carry a lot more current. A thousand feet of 24 AWG wire is in the 26Ω range. This helps to limit the current through the "third" wire. A 10V difference in earth ground potential would only have less than 0.4 amps of current
{10V \over 26} = 0.385A
A shield could have less than 1 Ω of resistance causing 10+ amps with a 10V difference. Beware of ground loops when using the shield as the third wire.

Voltages[edit]

Note: The following discussion gives examples of asynchronous start/stop communications using a UART. This is done because many if not most applications use a UART to communicate between devices. These examples are not meant to imply that the other information only applies when a UART is used.

RS-232[edit]

RS-232 typically has a transmit wire, receive wire and signal common wire. It may also have flow control signal wires. The voltages are measured at the signal wire and are referenced to signal common. The driver must be able to handle an open circuit, or a short to any other conductor in the cable. The receiver is designed to handle voltages between 3 and 15V in magnitude (i.e. both positive and negative voltages) but must be able to handle an input of 25V without damage. The driver must not be able to output more than 25V.

When a binary 1 is transmitted, the signal is spacing, the the voltage on the wire must be more negative than -3V. When a binary 0 is transmitted, the signal is marking, the the voltage on the wire must be more positive than +3V. The region between -3V and +3V is undefined. The driver is designed to output between 5V and 15V into a load of 3k to 7k.

Older driver IC's commonly used +12V and -12V as the voltage sources. This limited the open circuit voltage to ±12V. Lower voltage drivers are now available to allow operation from battery powered devices and the open circuit voltages may be lower than ±12V.

Note that the logic function of the driver and receiver are defined. When the driver is transmitting a 1 (from the UART for example), then the voltage on the wire must be less than -3V. This is considered "inverting" logic by many engineers.

RS-422[edit]

RS-422 has two pair of wires. The signals appear differentially on two wires of each pair. Each device has two wires to which the driver is always connected, and two more wires to which the receiver is always connected. When the driver increases the voltage on one of the wires, it simultaneously decreases the voltage on the other wire. When 5V drivers are used, the driver typically pulls one wire to circuit common, and the other wire to 5V (and vice-versa). This does not mean the voltages will reach 0V or 5V on these wires. The exact voltages will depend on the driver, the loading, biasing, termination, and any shift in ground potential between the driver and receiver.

RS-422 voltages are referenced differentially from one wire to the other, but are also referenced to circuit common. This means the specification has a differential voltage requirement, and a common mode voltage requirement.

The driver produces a differential voltage between 2 and 10V into a loaded/terminated cable. The driver must present a low impedance to the cable of 100 Ω or less. The driver must not exceed 10V differential, or 6V common mode. The driver's output current when shorted to circuit common must be limited to 150mA.

The receiver must have an input impedance of greater than 4k Ω and function over a common mode voltage range of -7V to +7V. The receiver must recognize a differential voltage of greater than 200mV as a binary value. Voltages of less than 200mV are undefined. The receiver may recognize any voltage between -200mV and +200mV as a binary value, but different manufacturers can set the threshold where ever they want. The maximum voltage between either of the wires and circuit common must not exceed 10V absolute magnitude, and voltages up to 10V cannot cause damage to the receiver.

The driver has the capability of driving 10 receivers of 4k impedance, but the actual number that can be driven depend on the actual input impedance, bit rate, wire, stub lengths, biasing and termination of the network.

The logic function of the driver and receiver are not defined, only the binary state of the differential voltages on the wires. A binary 1 may (or may not) be inverted by the driver before it is output. See the section on polarity for more information.

RS-485[edit]

RS-485 has a single pair of wires. The signals appear differentially on these two wires. For each device interface, the the driver and receiver are both connected to these two wires. The driver must be electrically disconnected or "made passive" when it is not transmitting. When the driver increases the voltage on one of the wires, it simultaneously decreases the voltage on the other wire. When 5V drivers are used, the driver typically pulls one wire to common, and the other wire to 5V (and vice-versa). This does not mean the voltages will reach 0V or 5V on these wires. The exact voltages will depend on the driver, the loading, biasing, termination, and any shift in ground potential between the driver and receiver.

RS-485 voltages are referenced differentially from one wire to the other, but are also referenced to circuit common. This means the specification has a differential voltage requirement, and a common mode voltage requirement.

The driver produces a differential voltage between 1.5 and 5V into a loaded/terminated cable. The driver's impedance (when active) is not specified, but the driver needs to be capable of driving 60 Ω. The driver must not exceed 6V differential, or 6V common mode. The driver's output must be limited to 250mA peak output current, but may be limited to much less. The driver must not be damaged when the outputs are shorted together, or to any voltage between -7 and +12V.

The receiver's input impedance is specified in terms of a "unit load" where a unit load is specified as input current in mA at a voltage referenced to ground. It is commonly considered that a 12k resistance is 1 unit load, but unit load is more complex than than a single resistance. The receiver must function with common mode input voltages [referenced to circuit common] over the range of -7V to +12V. The receiver must recognize a differential voltage of greater than 200mV as a binary value. Voltages of less than 200mV are undefined. The receiver may recognize any voltage between -200mV and +200mV as a binary value, but different manufacturers can set the threshold where ever they want.

The driver has to be capable of driving 32 unit loads. Since a receiver may have a loading of less than one, the actual number of receiver that can be connected depend on the unit load rating of the receivers, the wire, bit rate, stub lengths, biasing and termination of the network. The maximum number of receivers may be much greater than 32.

The RS-485 driver must be disabled [effectively disconnected from the wires] when it is not transmitting to allow other devices to transmit. This means there will be times when no driver is connected to the wires. With no driver connected, the differential voltage on the wires will depend on the termination resistor and biasing. If there is no biasing resistors on the wires, they will effectively be at 0V differential, which is in the undefined region between -200mV and +200mV. This can cause a problem if the RS-485 network is using a UART to transmit data. The UART should function correctly if the receiver considers the undriven voltage on the wires to be the idle condition. However, if the receiver considers the undriven wires to be a binary 0, when the driver is turned on and set to transmit a start bit, which is also a binary 0, the receiver will not see a transition, and therefore will not see the start bit. For this application to work, the driver must transmit an idle (binary 1) after the driver is enabled, for some period of time before the start bit is transmitted.

Some manufacturers get around this problem by setting their receivers input threshold to a slightly biased value, such as -50mV, instead of exactly at 0V. When the wire pair is not driven, the receiver will see the input as an idle condition (binary 1). If the transmitter is turned on at the exact same time as the edge of the start bit, the receiver will see the voltage change from idle to start so the UART will always see the first start bit transmitted. This problem can also be fixed by adding bias resistors to force the line to idle condition when a driver is not connected, but this has to be done on a network basis, not a device basis. Adding the biasing resistor to every device on the network can cause termination problems. See the sections on termination and biasing for more information.

The logic function of the driver and receiver are not defined, only the binary state of the differential voltages on the wires. A binary 1 may (or may not) be inverted by the driver before it is output. See the section on polarity for more information.

[That Pesky] Polarity[edit]

Before we discuss polarity lets take a look at logic levels and binary states.

Logic IC's don't output a precision voltage. As a general rule when the voltage measured (with respect to circuit common) is "high" the binary state is considered to be a 1 and when the voltage is low the state is 0. There are exceptions to this rule (such as differential logic and negative logic), but for the purpose of this discussion we'll talk about normal logic. When you turn a switch ON for a lamp, the a voltage is applied to the light bulb and the bulb is on, therefore a voltage is ON and no voltage is OFF. Digital logic usually uses the same convention (but not the same voltage) as the lamp example. The exact voltage level that a logic device considers ON or OFF varies by logic type, but when the voltage is high (usually but not always approaching the IC's supply voltage), a binary 1 is on the wire, and when the voltage is approaching 0 a binary 0 is on the wire.

In logic a binary 0 is usually considered OFF and a binary 1 is ON. All three of the standards, RS-232, RS-422, and RS485, reverse this convention. This can create some confusion.

RS-485 has two interface connection points [wires] labeled "A" and "B". The third point C is discussed in the section on grounding.

RS-485 Driver
RS-485 Signaling Waveforms

The RS-485 standard clearly shows that when a binary 0 (ON) is on the wires, the voltage on wire "A" is positive with respect to "B" and conversely, when a binary 1 (OFF) is on the wires, the voltage on wire "A" is negative with respect to "B". It also very clearly states "The logic function of the generator and the receiver is beyond the scope of this Standard, and therefore is not defined." However, if you look at the symbol you should notice that the "A" output is the non-inverting output and the "B" output is inverting (thats the bubble on "B"). Yet the signaling waveforms show that when a 1 is on the wires "A" is low and "B" is high. In other words, to make the symbol match the waveform, the input to the symbol would have to be inverted.

This brings up "inverting" and "non-inverting" outputs. When the input of an RS-485 driver goes high, one of the outputs will go high in reference to circuit common and the other will go low. The exact voltage of high and low are not usually specified, rather a voltage difference between the two outputs is specified. But, since one of outputs goes high when the input goes high, it is often called the "non-inverting" output, often designated with a "+". Conversely, the output that goes low when the input goes high is often called the "inverting" output designated with a "-". RS-485 does not use the terms inverting or non-inverting nor have the "+" or "-" label on the interface points. RS-485 simply defines the interface connection points as "A" and "B" and shows the voltage relationship between "A" and "B" for the binary states of the two wires, not the binary state of the input to the driver.

Stating that the logic function of the generator and receiver are not defined, then showing a symbol and signaling waveform of the wires that are inverted, adds more confusion.

RS-232 states that when a binary 0 (aka ON or Spacing) is being transmitted (from the logic such as a UART) the voltage on the TXData wire is greater than +3V (referenced to the signal common wire). When a binary 1 (aka OFF or marking) is being transmitted the voltage on TXData must be less than -3V. Some consider this to be inverting since a 0 is the highest voltage and a 1 is the lowest voltage. This is not technically correct since RS-232 requires the use of voltages outside those of normal logic, but the input and output of an RS-232 driver look inverted on an oscilloscope, and most data sheets show the driver as an inverter.

If the RS-485 driver is driven directly from a UART with no added inversion, you would expect the "A" and "B" wires to match the voltages in the RS-485 standard for the voltages on the wires, but they will not (unless the driver inverts its input). They will be exactly backwards. If both the driver and receiver receiver have no inversion, then the A and B lines of both devices should be connected together. But some manufacturers match their A and B labels to the symbol (no inversion), and some match to the signaling waveform (inverted). If an RS-232 to RS-485 converter is used, things start to get even more murky. If the voltage on the RS-232 line is positive or high, the signal is a binary 0. Should this signal be inverted back to a low? See the instructions on the converter you are using. You may not have the polarity you expect.

Finally there is confusion from the IC manufacturers. The datasheet for Linear Technology's LTC2850 [5] shows that when pin 4 (DI - the driver's input pin) is high, the output voltage on pin 6 (The A output) will be positive with respect to pin 7 (the B output).

LTC2850/MAX483 Schematic Symbol
Waveforms for a LTC2850 RS-485 driver. These waveforms are based on a scope capture in the IC's datasheet showing propagation delay with a 20MBit signal.

This is exactly backwards from what is expected based on the RS-485 standard for the "A" and "B" signaling waveform (inverted) because this driver does not invert its input. Many other IC manufacturers make a drop in replacement for this IC and many of them (such as the MAX483) use the same labeling. Some manufacturers have avoided this confusion by changing the name of the output pins to X and Y. There are two things to be noted about this so called "pin mislabeling". The first is that RS-485 denies any control of the logic function of the generator and receiver. The other is that the IC's datasheets never state that pin A is the same thing as RS-485's wire "A". While it may seem quite rational to assume that an RS-485 driver IC pin that is labeled A matches the RS-485 standard's wire "A", this is actually an assumption and is in fact not the case. The designer has to define the logic function of the driver and receiver.

So how do you know what pin is "A" and what is "B"? Well if you paid attention to the previous discussion, there is no way. The result of this is that many RS-232 to RS-485 converters have changed the labeling of their devices to (+)/(-), or TD+/TD-, etc. The good news is that you won't damage the device if you connect it backwards. If you are running asynchronous start/stop communications (a UART) across the RS-485 wires, it simply will not work if the polarity is backwards. It is usually a fairly simple matter to reverse the wires and test the communications again. This is a good first step if the communications are not working. Of course, many other problems can cause a communications failure and these will be addressed in the troubleshooting section.

For those designing or documenting a system, it is a bit more complicated than simply swapping pins. The "pin mislabeling" discussed above is a good starting point. Even though the logic function of the generator and receiver are not defined by RS-485, it makes sense to many engineers to have a binary 1 appear on the RS-485 wires when a binary 1 is being transmitted. You can design the system to accomplish this if you pay careful attention to logic function of the driver being used, as well as the labeling of the terminal on the device. Don't assume that the A and B pins of an IC match the "A" and "B" of the RS-485 standard because they can't. The standard does not define the logic function of the driver or receiver, and the symbol in RS-485 is inverted compared to the output signaling waveforms.

Termination[edit]

Termination is a less controversial subject than a misunderstood subject.

To understand how to terminate a network (the wires) you must first understand transmission lines. This is too complicated a subject to go into depth here but a basic tutorial using oversimplified concepts may help.

[Note that the diagrams below do not take into account phase shift or the ringing that can be induced from the inductance and capacitance of the wires, but this is an oversimplified tutorial and the basic concepts hold.]

A wire has both inductance and resistance. How much of each depends on the wire. A pair of wires has capacitive coupling and a very small amount of resistance between the wires. How much of each depends on the wires and the insulation. The inductance, resistance, and capacitance of the wires are modeled below.

Balanced Transmission Line, LCR Model

Since inductance and capacitance can both be expressed as resistance (actually impedance - not including phase shift), the previous diagram can be redrawn as a purely resistive diagram.

Transmission Line, Balanced, Resistive Model

It should be noted that this model is only valid for one frequency. Increasing the frequency will increase the inductive reactance, thereby increasing the series resistance in this model. Increasing the frequency will decrease the capacitive reactance, thereby decreasing the parallel resistance in this model. For example; at a higher frequency the model's series resistance could increase from 0.5 Ω to 1 Ω (per wire) and the parallel resistance could decrease from 14.52k Ω to 7.32k Ω. None of these values are an absolute, they are going to change with frequency.

Another thing is that different cables have different characteristic impedances at different frequencies. POTS telephone cable varies from 600 Ω at audio frequencies (say 1kHz) to 100 Ω at 1MHz, while CAT-5 cable is around 100 Ω over a wider frequency range.

There are a number of other things to note with this model. The first is that if the line is long enough, an AC "ohmmeter" connected to the input of the model will see the "resistance" of the wires as 120 Ω. How long the lines have to be for this to occur depends of the values of the series and parallel resistances (and therefore the frequency being input). The second thing is that this is effectively an infinite voltage divider. The longer the wires are, the less signal there will be at the end. Again the amount of loss depends of the values of the series and parallel resistance and the loss will increase with frequency. This is why long cables and high frequencies are incompatible.

A final thing to note is that this model falls apart if the lines are not of infinite length. A signal traveling down the wires will reach the end and "reflect" off of it (at the receiver's end). It then travels back to the source and will reflect off of it (at the driver's end). Since the signal is attenuated as it travels, the "reflected" signal decreases in amplitude until its level stabilizes. This phenomenon will appear as ringing on the edges of the signal. If the data bit is sampled while there is ringing it may be sampled as an incorrect value. This means that it is necessary to wait until the signal has stabilized before the bit can be sampled.

Adding a resistor to the end of the cable that matches the value of the cable's impedance will absorb the signal traveling down the line and reduce or prevent reflection. This will decrease the amount of time to wait for the signal to stabilize, increasing the possible bit rate. This resistor will also make any length of cable, even a short length, look like the characteristic impedance of the cable (120 Ω in the model) to the driver. This resistor is called a termination resistor, designated as Rterm in the following diagrams.

Transmission Line, Balanced, LCR Model, Terminated At One End

Since the RS-485 driver is "made passive" (disconnected from the wires) when not transmitting, and the other end of the cable can then drive the network, a termination resistor needs to be added to both ends. The result of this looks like two 120 Ω resistors in parallel (60 Ω) to either end or to any point on the cable. So it does not matter where the driver is connected on the cable, it "sees" a 60 Ω load.

Transmission Line, Balanced, Resistive Model, Terminated At Both Ends

This is why RS-485 states "The use of a cable termination is normally required"..

RS-422 drivers are always connected and act as their own termination at the driver's end of the wire. This will reduce the reflections on RS-422 wires to some extent, but RS-422 also suggests termination resistors at the receiver's end of the wires (well sort of, depending on the "data rate" or the "signal rise time at the load end of the cable").

Any receiver connected at some point in the cable will change the impedance of the cable at that point on the cable. This will cause reflections both back to the driver and forward to other receivers on the cable. Termination resistors will reduce the amplitude of this reflection back from the ends which will improve the signal quality.

A few other things to consider are:

  • Faster rise times will result in greater ringing amplitude. Slew rate limiting drivers will reduce the rise time and decrease the ringing of an unterminated line.
  • The signal will eventually stabilize (until the next bit transition) so the slower the bit rate the more time the signal will have to stabilize before it is sampled (usually by the UART). This means that the lower the bit rate the less termination resistors are needed.
  • Branching the cable to a receiver will cause secondary reflections which will cause more and unpredictable ringing of the signal. Branching on an RS-485 network is always a bad idea, the cable should be daisy chained from device to device.
  • Longer cables take longer for the signal to get to the end (and back and forth ...) so longer cables result in longer periods of ringing on the wires, and longer periods of time for the signal to stabilize. The longer the unterminated wires are the slower the bit rate needs to be. Therefore the longer the cable length, the more important the termination resistor is to improve signal quality.
  • The longer the cable length, the more effect the termination resistor has on the signal level. Therefore the longer the cable length is the more the termination resistor decreases signal amplitude.

If you've been paying attention, you may notice that the last two points are contradictory. This is why some engineers try to ignore the need for termination resistors. A termination resistor can increase the signal's quality (reduce ringing), but it will also reduce the signal's amplitude. There is no way to say that a termination resistor will always increase the line length the network.

A final note on transmission lines is that the termination resistor should match the characteristic impedance of the cable. If CAT-5 (100 Ω cable) cable is used, the termination resistors should be 100 Ω, not the 120 Ω suggested in the standard and the above examples. However, an incorrect value termination resistor will usually improve the signal quality compared to an unterminated network. A 120 Ω termination resistor can cause enough loss with very long cables to stop the network from functioning. In this case a 500 Ω or even a 1kΩ termination resistor may improve the signal quality with out causing too much signal loss. The value will have to be determined empirically for the individual network.

So are termination resistors required? Per RS-485 it is "normally" required. In practice it is often not required. Lower data rates have more time for the ringing to stabilize so the lower the data rate the less needed this resistor is. The ringing will also stabilize faster in shorter cables. If you run a data rate of less than 30kBit and don't need long cables, the termination resistors are probably not required. The higher the data rate and the longer the cable the more likely it will be that you have to add termination resistors.

There are a number of termination techniques, all of which may work great under a narrow range of conditions.

Bob Perrin lists the 4 most popular techniques[6]:

  • Unterminated: This is the simplest system, but only works if both the data rate and length are low enough. A rule of thumb is that if the propagation delay of the data line is much less than one bit width, termination is not needed.[7] Slew rate limited drivers will improve signal quality significantly with an unterminated network. An unterminated network may improve signal quality where a star bus topology has to be used.[8]. But, it should be noted that the network running in the reference was running at 300 baud and had other tweaks such as isolated transceivers and high resistance bias resistors on every node. It also had over 10 miles of wire (WOW). This length of cable would be expected to have significant DC losses if termination resistors were used.
  • One-way resistor termination: RS-422 networks should only have one resistor at the receiver end. Should also be used on RS-485 networks if the driver is always enabled.
  • Two-way resistor termination: Works best on a linear bus, with transmitters anywhere along the bus.[6]
  • AC termination: While AC termination may work well on backplanes[9], others discourage its use on RS-485 lines: "In practice, I have never seen [AC termination] do anything except butcher signal integrity."[6]

Biasing[edit]

Biasing has a number of uses on a RS-485 network, but first lets look at what RS422 and RS-485 have to say.

Biasing, sometimes called fail-safe biasing, is discussed briefly in the RS-422 and RS-485 specifications. But biasing is discussed as an internal receiver characteristic, not an external biasing network. In RS-485, the receiver's internal biasing will be such that the "receiver will remain in the intended binary state when a differential voltage (VR3) of ±0.40 V is applied through matched resistors equal to 1500/nUL 1/2 to each input terminal, as shown in figure 13, with the input voltages VR1 and VR2 (and resulting VR3) to achieve any allowed input condition.". RS-422's requirement is very similar except the resistors are specified as 499Ω rather than a ratio of UL. This is not external biasing resistors, but a receiver characteristic of limiting induced differential noise due to imbalance of the inputs.

Fail-safe is mentioned twice in RS-485. The first time is in the total load limit stating that the total load limit of the network including fail-safe provisions, should be no less than 54Ω. This implies that the fail-safe provisions are resistance external to the receiver. RS-422 is similar (except they leave the hyphen out) Both standards have a section defining why you may want fail-safe operation, but neither discuss how to implement it.

RS-422 and RS-485 state that some fault conditions that can be detected with fail-safe include:

  • generator(s) in power-off condition
  • receiver not connected with the cable
  • open-circuited interconnecting cable
  • short-circuited interconnecting cable
  • input signal to the load remaining within the transition region (±200 mV) for an abnormal period of time (application dependent)

Which fault conditions are to be detected and what is to be done when a fault is detected is application-dependent. Like much of the RS-485 standard, fail-safe operation is left wide open and implementation is not part of the standard.

So why do you need to bias the network? Detecting the faults listed above is one reason, but biasing by itself cannot not detect all of them. Nor can it differentiate between them.

For example: An RS-422 network has an always active driver and receiver. If the driver is transmitting asynchronous start stop data (from a UART and no inversion of the driver's input) the idle condition of the two wires will be a 1. If you bias the network at the receiver so that the receiver see's a 1, you could not tell when the driver was disconnected (without additional hardware) If you bias the network to force the two wires to a 0 (when the transmitter is not connected), the receiver will see a 1 on the wires (when the receiver and the driver are connected without an open in the wires). The receiver can monitor the wires and indicate a fault if a 0 is detected on the wires for an extended period of time. Determining which fault has occurred would take additional hardware.

This example of biasing would be a bad thing on an equivalent RS-485 network. As mentioned above in the Voltages section; On the RS-485 network there will be times when the two wires are not driven by a transmitter. The UART should function correctly if the receiver considers the undriven voltage on the wires to be the idle condition. However, if the receiver considers the undriven wires to be a binary 0, when the driver is turned on and set to transmit a start bit, which is also a binary 0, the receiver will not see a transition, and therefore will not see the start bit. Forcing the wires to the idle condition when no driver is active is the most common reason to need biasing on the network.

Biasing will also improve noise rejection. RS-485 puts the voltage between -200mV and +200mV as undefined, but the IC manufacturer can put the threshold for a 0 and a 1 anywhere they want. They will usually add some hysteresis to the receiver to reduce its sensitivity to noise, but biasing will decrease the receivers noise sensitivity.

The following example is to bias the network to 200mV. You may want to bias the network to a higher differential voltage to improve the noise margin.

RS-485 Biasing. 5V DC, but may be other voltages

This figure shows biasing applied to the termination network. Normally you will want to use a pull-up voltage that matches the driver's supply voltage. 5V is shown in the figure since many drivers are powered by 5Vdc. Other pull-up voltages can be used and it is not an absolute requirement that the pull-up voltage match the driver's supply voltage.

The bias and terminations resistors form a voltage divider and several process can be used to calculate the resistor values. In the following example the desired result is to get 0.2V of bias across Rterm, and Rterm is 120Ω. It should also be noted that this example ignores any current from or to the drivers and receivers.

The ratio of resistance will match the ratio of voltage. Since the total voltage is 5V and the desired voltage across Rterm is 0.2, that leaves 4.8V across the bias resistors
5V - 0.2V = 4.8V
The ratio of voltage across the bias resistors to the voltage across the termination resistor is
({4.8V \over 0.2V} = 24)
24 times the 120Ω termination resistor is 2880Ω. Half of this resistance is in each bias resistor, so each bias resistor should be 1440Ω. So if Rbias+ and Rbias- are 1440Ω and Rterm is 120Ω there will be 0.2V of bias across the termination resistor.

However the bias resistors effect the total termination resistance.

RS-485 Biasing. Thevenin equivelant.

The next figure shows the AC Thevinin equivalent of the bias resistors with the termination resistor. The 5V supply is going to have capacitors on its output. These capacitors will act as a short to AC signals. Therefore the total bias resistance is effectively in parallel with the termination resistor as a load to the cable. The bias resistance needs to be taken into account when selecting the termination resistor.

The total load resistance can be calculated as
R_{TotalTerm} = \frac {1}{{\frac{1}{R_{term}}+\frac {1}{R_{bias+} + R_{bias-}}}}
Using the values from the previous example the total termination resistance with the bias resistors is 115.2Ω:

115.2Ω  = \frac {1}{{\frac{1}{120}+\frac {1}{1440 + 1440}}}

This is within 10% of 120Ω and these values could be used, or you could tweak the termination resistance to 125Ω which would give you a total termination resistance of 119.8Ω. Changing the termination resistance would change the bias voltage across the termination resistor but it would only increase to 0.208V.

In practice you will probably use 5% resistors. Available 5% values for the bias and termination resistors would limit you to 120Ω and 1.5kΩ. This would result in a total termination resistance of 115.4Ω and a bias voltage of 0.192V. Or you could use 130Ω and 1.5kΩ. This would result in a total termination resistance of 124.6Ω and a bias voltage of 0.208V.

Even if you use 1% resistors, the standard values would be 127Ω and 1.47kΩ. This would result in a total termination resistance of 121.7Ω and a bias voltage of 0.207V. Since the tolerance of the resistors means that you will never get the ideal calculated values, don't sweat it. If you can get within 10%, you can expect it to work.

These examples are for bias resistors that just barely meet the 0.2V differential voltage. Lowering the bias resistor values will increase the bias voltage which will increase the noise immunity at the cost of increased current from the 5V supply.

Another thing to note is that biasing may not be required. Just because RS-485 says the voltage between +0.2V and -0.2V is undefined does not mean the engineer designing the receiver cannot define the exact voltage that switches from a received 0 to a 1. Some RS-485 IC manufacturers such as Maxim[10] and Analog Devices[11] have set the threshold of some of their receivers so that 0V differential on the two wires results in a 1 being detected. This provides some noise immunity as well as resolves the problem of missing the start bit, but only for the receivers that implement this internal biasing. Other receivers on the wires that do not have this internal biasing may require that external bias resistors added to the network.

A final note is that RS-485 receivers commonly switch at the +0.2V and -0.2V levels. When the differential voltage into the receiver goes above +0.2V the receivers output switches to a 1 and when the voltage goes below -0.2V the receivers output switches to a 0. (or vice versa if there is inversion on the receiver) Since the last bit from a UART will be the stop bit (1), then the transmitter is turned off (the differential voltage goes to 0V, but not having gone less than -0.2V), this should leave the receiver with a 1 being output to the receiving UART. The first bit a UART transmits is the start bit (0) and the receiving UART should see this transition. But this is only true if there is no ringing or noise on the line that switches the receiver back to a 0 at the end of the stop bit. A termination resistor may reduce the ringing on the wires enough that biasing resistors are not required.

Pinouts [Common Application - Not Part of the Standard][edit]

(stub)

Handshaking[edit]

There is no hardware handshaking in the RS-485 standard and in most cases it is no longer needed.

The purpose of handshaking is to tell the transmitting device to "shut up, I'm full of data and will loose anything more you send me". This stopped the data flow to the receiving end and allowed the receiver to process the data in its buffer. When it was able to receiver more data, the receiver would signal the transmitter that it was OK to send more data.

When the microprocessor in the computer was very slow, it was so horsepower limited that this was necessary. The stop sending / OK to send lines would toggle on and off with every byte sent. When the microprocessor's in the computers and peripheral's ran at a blistering 1MHz, it was still necessary, but the stop sending / OK to send lines would toggle less often. The advent of UARTs with buffers helped even more. The processor could check the level of the buffer and only had to stop the data when the buffer was too full. Modern processors are fast enough that handshaking is rarely needed.

If handshaking is required, it can be attempted using using X-On / X-Off handshaking protocol, but it is unlikely to work. Since RS-485 is half-duplex, it is difficult for the receiver to tell the transmitter to "shut up" when it can't get a byte into the incoming data.

Some RS-232 to RS-485 transceivers originally used the handshaking signals such as RTS to control the enable of the RS-485 transmitter. The software would set the pin from the serial port active before it would stuff a byte into the UART's transmit buffer. When the transmitter was empty it would set the pin inactive to allow other devices on the RS-485 network to transmit. There are advantages and disadvantages to this. An advantage is that this allows the software (if properly written) to take control of the network and hold it for a short time before transmitting the data. This would ensure that the network has a period of marking before the start bit was transmitted, eliminating the need for a bias resistor to force the network to a marking state. A couple of disadvantages are that the network is being driven without data on it so contention is more likely, and software complexity increases.

Another RS-232 to RS485 scheme is to monitor the data stream going into the the RS-485 transmitter and trigger a one-shot timer when an edge occurs. The RS-485 driver's enable is controlled by the timer. This scheme will automatically take control of the network when a byte is transmitted, but there will not be any guaranteed marking time so bias resistors may be required. Another problem with this scheme is that the transmitter needs to stay enabled during the transmission of all of the data, and if a 0 is transmitted this means the timer has to keep the driver enabled long enough to transmit 8-bits with no edges to be detected. Since data rates on a PC serial port can vary from 300 baud (26mS for 8-bits) up to over 100k baud (0.08mS for 8-bits), the timer will have to either be limited in the baud rates that it can work with, or keep control of the RS-485 network for much longer than it needs. The latter significantly increases the probability of collisions.

The entire subject of handshaking is obsolete with modern USB to RS-485 adapters since the PC's driver's and/or hardware handle driver enabling, and a modern PC can handle data rates much faster than can be transmitted over an RS-485 network.

USB to serial converters come with ADDC (Automatic Data Direction Control) to automatically sense and control data direction, making the handshaking control method obsolete. [12]

[editors note, the preceding paragraph is legacy and the reference is unclear on a number of things and may not be a good citation]

Hardware handshaking can be used by adding extra hardware, software, and wires, but this is outside the RS-485 standard. If this is required, it can be accomplished by any means desired including RS-485 drivers on an additional network, RS-232 drivers on extra wires, TTL levels, or really anything you can dream up since it won't work with any other RS-485 network except the one you are designing.

Legacy[edit]

[All information below this point is legacy and very questionable. It has been left in at this time to provide a starting point for future expansion of this article (and to show just how misunderstood RS-485 is)]

RS-485 is the physical layer for many higher-level protocols, including Profibus and other fieldbus systems, SCSI-2, SCSI-3, and BitBus. [13]

Some RS-485 implementations (in particular, some Ethernet configurations) (also some Macintosh GPIO socket) use 4 wires (2 pairs) for point-to-point communication. One of the pairs is dedicated to PC-to-peripheral communication. The other pair is dedicated to peripheral-to-PC communication. Each pair can transmit at full speed whether or not the other pair is transmitting (full-duplex).


Typically the bit sequence is generated by a UART inside a microcontroller, which is wired to a RS-485 interface IC (also called a "RS485 Line Driver/Receivers" or "RS-485/RS422 Transceiver"). Many manufacturers make such interface chips [14] . From there the RS-485 signaling typically travels over CAT-5 cable [15] . At the other end of the cable is (typically) the same thing -- the connectors, the RS-485 interface IC, and a UART inside a microcontroller.

RS-485 in the Real World[edit]

Now being used commonly in the pro audio industry to control digital audio and signal processors such as the DBX driverack and other manufacturers equivalent products. Preferred to RS232 due to cheaper cabling run costs and the common availability of cables (similar to RJ-45).

When wiring a RS-485 network, always connect "A" to "A", "B" to "B", and "G" to "G".[16]

Many people recommend writing prototype software as if it will be connected to a half-duplex RS-485 network. Then the software will work unchanged when connected to a full-duplex RS-485 network, a RS-232 network, and a variety of other communication media.

Many people recommend wiring things up on a prototype with Category 5 cable connected as point-to-point full-duplex RS-485. The CAT-5 cable allows you to relatively quickly switch -- to half-duplex RS-485, or the 3 wires of RS-232, or a variety of other communication protocols -- without pulling any new cables. The point-to-point full-duplex RS-485 network allows you to get the complete prototype system fully operational quickly, since it is easier to debug and more immune to certain common problems on other systems (noise problems on RS-232, turn-around problems on half-duplex RS-485, etc.).


Applications[edit]

Applications

Nonstandard Connectors and Wiring[edit]

see the 4 wires in the socket? Localtalk only uses the outer pair.

The LocalTalk network uses RS-485-compatible differential signaling on standard 4-wire RJ11 telephone connectors and cable. LocalTalk only connects to the next-outermost pair of wires (the "outer pair" on a standard 4-wire cable).

The innermost pair of wires is ignored by LocalTalk, so the inner pair is often used for standard analog telephones.

(Is there a similar standard for RS-485 on a RJ45?)

RJ45 connections are used for RS-485 frequently, due to the ease of using the modular connectors and availability of cables and connectors. A RS-485 interface will usually use pins 7 and 8 for the two data lines, since they comprise a twisted pair. This avoids conflict with both Ethernet (Pins 1-3, 6) and analog phone (Pins 4-5). Grounding can be problematic depending on the application. Often, use of shielded CAT5/6 cable can give an adequate signal ground, although this is not recommended.

Physical Limitations in Practice[edit]

(stub)

Differences between RS-232 and full-duplex RS-485[edit]

(stub)

From a software point of view, full-duplex RS-485 looks very similar to RS-232. With 2 pairs of wires -- a dedicated "transmit" pair and a dedicated "receive" pair (similar to some Ethernet hardware), software can't tell the difference between RS-485 and RS-232.

From a hardware point of view, full-duplex RS-485 has some major advantages over RS-232 -- it can communicate over much longer distances at higher speeds.

Alas, a long 3-conductor cable intended for RS-232 can not be switched to full-duplex RS-485, which requires 5 conductors.

RS-232 is only defined for point-to-point connections, so you need a separate cable for each sensor connected to a host CPU. RS-485 allows a host CPU to talk to a bunch of sensors all connected to the same cable.

Differences between RS-232 and half-duplex RS-485[edit]

But a lot of RS-485 hardware uses only 1 pair of wires (half-duplex). In that case, the major differences are

  • Each RS-485 node, including the host CPU, must "turn off the transmitter" when done transmitting a message, to allow other devices their turn using the shared medium
  • The RS-485 hardware generally receives on the receiver every byte that was transmitted by every device on the shared medium, including the local transmitter. So software should ignore messages sent by itself.

A long 3-conductor cable intended for RS-232 can often be switched to half-duplex RS-485, allowing communication at higher speeds and at higher external noise levels than the same cable used with RS-232 signaling.

RS-232 is only defined for point-to-point connections, so you need a separate cable for each sensor connected to a host CPU. RS-485 allows a host CPU to talk to a bunch of sensors all connected to the same cable.

Alas, half-duplex RS-485 networks are often more difficult to debug when things go wrong than RS-232 networks, because

  • When a "bad message" shows up on the cable, it is more difficult (but not impossible) to figure out which node(s) transmitted that message when you have a shared-medium with a dozen nodes connected to the same single cable, compared to a point-to-point medium with only 2 nodes connected to any particular cable.
  • Transmitting data bidirectionally over the same wire(s), rather than unidirectional transmission, requires a turn-around delay. The turn-around delay should be proportional to the baud rate -- too much or too little turn-around delay may cause timing problems that are difficult to debug[16]


Differences between RS-232 and both kinds of RS-485[edit]

RS-485 signal levels are typically 0 to +5 V relative to the signal ground.

RS-232 signal levels are typically -12 V to +12 V relative to the signal ground.

RS-232 uses point-to-point unidirectional signal wires: There are only two devices connected to a RS-232 cable. The TX output of a first device connected to the RX input of a second device, and the TX output of the second device connected to the RX input of the first device. In a RS-232 cable, data always flows in only one direction on any particular wire, from TX to RX.

RS-485 typically uses a linear network with bidirectional signal wires: There are typically many devices along a RS-485 shared cable. The "A" output of each device is connected to the "A" output of every other device. In a RS-485 cable, data typically flows in both directions along any particular wire, sometimes from the "A" of the first device to the "A" of the second device, and at a later time from the "A" of the second device to the "A" of the first device.

Alternatives to ASCII UARTs that drive RS-485 signal levels[edit]


I've been told that 10BASE-T Ethernet and SCSI cables use a bunch of RS-485 pairs -- is that right ? In the case of 8 bit SCSI this is not the case, the drivers are single wire with a 220/330 Ω terminator at each end of the buss. Half of the conductors in a 50 way cable are ground return wires. This applies to the 8 bit version of the original 50 way SCSI interface. Ultrawide SCSI does use differential drive but whether it is RS485 compatible, I don't know.

further reading[edit]

  1. "Trim-the-fat-off-RS-485-designs". EE Times. 2000. http://www.eetimes.com/document.asp?doc_id=1224773. 
  2. "How Far and How Fast Can You Go with RS-485?". Maxim IC. 2006. http://www.maximintegrated.com/app-notes/index.mvp/id/3884. 
  3. "LTC1685 - 52Mbps, Precision Delay, RS485 Fail-Safe Transceiver". Linear Technology. 1997. http://www.linear.com/product/LTC1685. 
  4. "RS485 Cables – Why you need 3 wires for 2 (two) wire RS485"
  5. "LTC2850 Datasheet". Linear Technology. 2007. http://www.linear.com/docs/19198. 
  6. a b c "The art and science of RS-485: Termination". Circuit Cellar. 1999. http://www.canarysystems.com/nsupport/ArtScienceRS485.pdf. 
  7. "RS-422 And RS-485 Applications Ebook". B&B Electronics. 2010. http://www.bb-elec.com/Learning-Center/All-White-Papers/Serial/RS-422-and-RS-485-Applications-eBook/RS-422-RS-485-eBook-graphics-embedded.pdf. 
  8. PicList Thread: "Reflections in RS485 PIC Network?" 1998.
  9. Bus Terminations
  10. "Guidelines for Proper Wiring of an RS-485 (TIA/EIA-485-A) Network". Maxim Integrated. 2001. http://www.maximintegrated.com/app-notes/index.mvp/id/763. 
  11. "RS-485/RS-422 Circuit Implementation Guide". Analog Devices. 2008. http://www.analog.com/static/imported-files/application_notes/AN-960.pdf. 
  12. "Selecting the Right USB to Serial adapter"
  13. http://interfacebus.com/Design_Connector_RS485.html
  14. "EIA-458 Bus Interface IC Manufacturers"
  15. "Cable Selection for RS-422 and RS-485 Systems"
  16. a b "Basics of the RS-485 Standard"