The RS422 communication protocol (formally TIA/EIA-422) is a 4-wire, full-duplex differential serial standard engineered for noisy industrial environments. It delivers up to 10 Mbps at 10 meters, or 100 kbps at 1200 meters, supporting one driver and up to 10 receivers on a single bus. Unlike single-ended RS232, RS422 uses differential voltage pairs to reject common-mode noise, making it the backbone of legacy PLCs, aircraft telemetry, and long-run sensor networks.
The Physical Layer: Differential Signaling and Bus Mechanics
RS422 operates on the principle of differential signaling. The transmitter sends a signal and its exact inverse across a twisted pair of wires. The receiver measures the voltage difference between the two wires rather than comparing a single wire to ground. This mathematically cancels out any electromagnetic interference (EMI) induced equally on both wires. According to the Texas Instruments RS-422 standard overview, a logic high is registered when the differential voltage (V+ minus V-) is greater than +200mV, and a logic low when it is less than -200mV.
| Parameter | RS422 Specification |
|---|---|
| Minimum Wires | 4 signal (TX+, TX-, RX+, RX-) + 1 Signal Ground (GND) |
| Max Data Rate | 10 Mbps (at 10 meters / 33 ft) |
| Max Distance | 1200 meters (4000 ft) at 100 kbps |
| Topology | Point-to-Multipoint (1 Driver, up to 10 Receivers) |
| Duplex Mode | Full-Duplex (Simultaneous TX and RX) |
| Common-Mode Limit | ±7V (Exceeding this destroys the receiver) |
Protocol Selection: When to Pick RS422 Over RS485 or RS232
Choosing the right serial standard prevents costly board respins. RS232 is for short, single-device bench connections. RS485 is for multi-drop networks where multiple nodes need to transmit. RS422 occupies a specific middle ground: long distance, full-duplex, but strictly one transmitter per bus.
| Criteria | RS232 | RS422 | RS485 |
|---|---|---|---|
| Wiring | 3 (TX, RX, GND) | 5 (TX±, RX±, GND) | 3 (A, B, GND) or 5 |
| Max Distance | 15 meters | 1200 meters | 1200 meters |
| Nodes | 1 to 1 | 1 to 10 | 1 to 32 (or 256) |
| Duplex | Full | Full | Half (usually) |
The Decision Path
- If your cable run is under 15 meters, you only have two devices, and cost is the primary driver → Use RS232 (Part: MAX232).
- If your run exceeds 15 meters, and multiple nodes need to take turns transmitting data on the same pair of wires (multi-drop) → Use RS485 (Part: MAX485).
- If your run exceeds 15 meters, you need simultaneous transmit and receive (full-duplex), and you only have one master transmitting to multiple listening slaves → Use RS422.
Biasing, Termination, and the Classic Failures
The physical layer is where most RS422 implementations fail. Differential signaling is robust, but it is not magic. You must manage impedance and common-mode voltage.
Termination and Fail-Safe Biasing
At data rates above 115,200 baud, or cable lengths over 50 meters, signal reflections will corrupt your data. You must place a 120Ω terminating resistor across the RX+ and RX- lines at the furthest receiver node. Do not terminate the transmitter end.
When the master transmitter is powered down or disconnected, the receiver inputs float. Ambient EMI can induce enough voltage to trigger phantom UART frames. To prevent this, apply fail-safe biasing at the receiver: pull RX+ to VCC via a 560Ω resistor, and pull RX- to GND via a 560Ω resistor. This forces the bus into a known idle (mark) state when undriven.
The Classic Failures
- The Missing Signal Ground (Ground Loop): The most fatal mistake in RS422 wiring is omitting the signal ground wire. Engineers assume "it's differential, I don't need a ground." If the ground potential between the transmitter and receiver differs by more than ±7V, the common-mode limit is exceeded, and the receiver's input stage will instantly vaporize. Always run a dedicated GND wire alongside your twisted pairs.
- Missing Biasing Resistors: Results in random garbage characters in your serial terminal when the bus is idle, caused by noise crossing the 200mV threshold.
- Baud Mismatch: If your receiver is set to 9600 baud but the transmitter is at 19200, you will read valid framing but garbage ASCII. Always verify the baud rate with an oscilloscope by measuring the width of the shortest bit pulse (e.g., 104µs for 9600 baud).
Minimal Working Exchange: Wiring and Code
Below is a complete, working implementation using an ESP32 and a MAX3490 transceiver. This setup reads a remote sensor node over a 4-wire RS422 bus.
Wiring Pinout (ESP32 to MAX3490)
| ESP32 GPIO | MAX3490 Pin | Function |
|---|---|---|
| GPIO 17 (TX2) | DI (Pin 4) | Data In (UART TX to Transceiver) |
| GPIO 16 (RX2) | RO (Pin 1) | Receiver Out (Transceiver to UART RX) |
| 3.3V | VCC (Pin 8) | Power (MAX3490 is 3.3V native) |
| GND | GND (Pin 5) | Signal Ground |
| N/A | DE & /RE (Pins 3 & 2) | Tie DE to VCC, /RE to GND (Always Enabled) |
ESP32 Arduino Code
#include <HardwareSerial.h>
// Define the RS422 serial port on UART2
HardwareSerial RS422_Serial(2);
const int RX_PIN = 16;
const int TX_PIN = 17;
const long BAUD_RATE = 115200;
void setup() {
// Initialize debug serial
Serial.begin(115200);
// Initialize RS422 hardware serial
// Note: SERIAL_8N1 is standard for RS422
RS422_Serial.begin(BAUD_RATE, SERIAL_8N1, RX_PIN, TX_PIN);
Serial.println("RS422 Master Node Initialized.");
}
void loop() {
// Transmit a poll command to the slave node
RS422_Serial.print("POLL_SENSOR\n");
// Wait for and read the response
unsigned long timeout = millis() + 500; // 500ms timeout
String response = "";
while (millis() < timeout) {
if (RS422_Serial.available()) {
char c = RS422_Serial.read();
response += c;
if (c == '\n') break; // End of message
}
}
if (response.length() > 0) {
Serial.print("Slave Response: ");
Serial.println(response);
} else {
Serial.println("Error: No response from slave (Check wiring/baud).");
}
delay(1000); // Poll every 1 second
}
Sniffing and Debugging the Differential Bus
When your RS422 bus throws frame errors or returns garbage, standard single-ended logic analyzers will fail you. Probing just the TX+ line with a standard 3.3V logic analyzer ignores the differential nature of the signal and will trigger falsely on common-mode noise.
Hardware Debugging Tools
- Oscilloscope Math Channel: Connect Channel 1 to TX+ and Channel 2 to TX-. Set the scope to display the Math function (Ch1 - Ch2). This reveals the true differential "eye diagram." A clean RS422 signal should show sharp transitions crossing the 0V centerline with a peak-to-peak amplitude of at least 1.5V. If the math trace shows heavy ringing, your 120Ω termination is missing or mismatched.
- Differential Probes: For high-speed runs (1 Mbps+), standard scope leads act as antennas. Use a dedicated active differential probe to maintain the high common-mode rejection ratio (CMRR) during measurement.
- USB Bus Sniffers: For protocol-level debugging without an oscilloscope, use a dedicated USB-to-RS422 adapter like the FTDI USB-RS422-WE-1800-BT cable. This cable contains a built-in FT232R chip and differential transceivers, allowing you to plug directly into a PC and use terminal software (like PuTTY or Tera Term) to sniff the ASCII traffic natively.
By respecting the physical layer constraints—specifically the 120Ω termination, the fail-safe biasing network, and the mandatory signal ground—the RS422 communication protocol remains one of the most reliable, noise-immune serial standards available for long-distance embedded systems. For your next full-duplex, point-to-multipoint build, source the MAX3490, wire it with CAT5e twisted pairs, and terminate the far end.






