RS-422 Bus Mechanics and Physical Layer Specs
Before pulling wire, you must understand the physical boundaries of the standard. The most common mistake bench engineers make is treating RS-422 and RS-485 as interchangeable; they share similar transceiver architectures, but their bus mechanics differ fundamentally.| Parameter | Specification / Value | Practical Engineering Notes |
|---|---|---|
| Topology | Point-to-Multipoint (1 Driver, N Receivers) | Full-duplex requires 4 wires (2 pairs). No DE/RE flow-control pins needed. |
| Maximum Distance | 1,200 meters (4,000 ft) at 100 kbps | Rule of thumb: Baud rate × Distance (meters) ≤ 10^8. |
| Maximum Data Rate | 10 Mbps (at 10 meters) | Speed degrades linearly with cable length due to attenuation and jitter. |
| Unit Load Limit | 10 Standard Unit Loads | 1 Unit Load = 4mA. Using 1/4-load receivers (e.g., MAX3093) allows 40 nodes. |
| Differential Voltage | ±2V to ±6V (across A and B lines) | Logic 1: A > B by 200mV+. Logic 0: B > A by 200mV+. Common-mode range: ±7V. |
Protocol Selection Framework: Which fits your build?
Choose RS-232 when you need a simple, short-distance (< 15m) point-to-point link between two devices (like a PC to a legacy PLC) and don't care about noise.
Choose RS-422 when you have a single master broadcasting high-speed data to multiple remote displays, sensors, or slaves over long distances, and you require full-duplex (simultaneous TX/RX) without bus contention.
Choose RS-485 when multiple devices need to take turns transmitting on the same wire pair (multi-drop half-duplex), such as in Modbus RTU sensor networks.
Choose RS-232 when you need a simple, short-distance (< 15m) point-to-point link between two devices (like a PC to a legacy PLC) and don't care about noise.
Choose RS-422 when you have a single master broadcasting high-speed data to multiple remote displays, sensors, or slaves over long distances, and you require full-duplex (simultaneous TX/RX) without bus contention.
Choose RS-485 when multiple devices need to take turns transmitting on the same wire pair (multi-drop half-duplex), such as in Modbus RTU sensor networks.
Physical Wiring, Termination, and Bias Networks
RS-422 relies on measuring the voltage difference between the A (non-inverting) and B (inverting) lines, which inherently rejects common-mode noise. However, the physical layer will fail if you ignore termination and biasing.The Cable and The Forgotten Ground
Use twisted-pair cable. Standard Cat5e works exceptionally well for RS-422 because it provides four twisted pairs, allowing you to run full-duplex (one pair for TX, one for RX) while keeping spare pairs for ground. You must run a common ground wire between the transmitter and receivers. While the differential signal rejects noise, the transceiver chips themselves have a common-mode voltage limit (typically ±7V). Without a shared ground reference, ground potential differences between buildings or heavy machinery can exceed this limit, destroying the RS-422 transceiver IC.Termination and Fail-Safe Biasing
Signal reflections at high baud rates will corrupt your data. You must terminate the bus at the furthest receiver.- Termination: Place a 120Ω resistor across the A and B lines at the physical end of the cable run. This matches the characteristic impedance of standard twisted-pair cable.
- Biasing (Fail-Safe): If the transmitter is disconnected or powered down, the floating A/B lines can pick up ambient noise, causing the receivers to output garbage data. To force the bus into a known idle state (Logic 1, where A > B), use a bias network at the transmitter: pull the A line up to VCC via a 390Ω resistor, and pull the B line down to GND via a 390Ω resistor.
Debugging Classic RS-422 Failures
When the bus refuses to communicate, the issue is almost always physical. Here is how to diagnose the classic failure modes.1. Exceeding the Unit Load Limit
Symptom: The transmitter chip overheats, or the differential voltage drops below the 200mV receiver threshold, causing intermittent bit errors. The Fix: Count your receivers. A standard RS-422 driver can only source/sink 40mA total. If you have 15 standard receivers on the bus, you are overloading the driver. Swap the receiver ICs for fractional-load variants (like the MAX3093, which draws only 1mA, presenting a 1/4 unit load) to safely support up to 40 nodes.2. Baud Mismatch and Clock Drift
Symptom: Perfect communication at 9600 baud, but total garbage at 115,200 baud. The Fix: Long cables act as low-pass filters, rounding off sharp digital edges. If you must run 1 Mbps over 100 meters, standard UART hardware might fail due to jitter. Use an oscilloscope with a differential probe to measure the actual rise/fall times at the receiver. If edges are too slow, lower the baud rate or use a cable with lower capacitance (like Belden 9841).3. How to Sniff and Debug the Bus
Do not rely solely on software terminal outputs. To properly sniff an RS-422 bus:- Logic Analyzer: Connect a logic analyzer to the A and B lines. Modern software (like Saleae Logic 2) has built-in RS-422/RS-485 decoders that will map the differential voltage directly to ASCII/Hex, instantly highlighting framing errors.
- Oscilloscope: Use a differential probe (or two channels in A-B math mode) to view the eye diagram. A healthy RS-422 signal should show a clean, wide "eye". A collapsed eye indicates severe cable capacitance or missing termination resistors.
- Hardware Loopback: At the transmitter, short TX+ to RX+ and TX- to RX-. Send a string via your terminal. If it echoes back perfectly, your transmitter and local wiring are good; the fault lies in the cable run or remote receivers.
Minimal Working Hardware Exchange
Below is a complete, minimal setup to get an ESP32 communicating over a full-duplex RS-422 bus using the popular 3.3V MAX3490 transceiver. Because RS-422 is full-duplex and single-driver, we do not need to toggle DE/RE (Driver Enable/Receiver Enable) pins, vastly simplifying the code compared to RS-485.Wiring Pinout Table
| ESP32 DevKit Pin | MAX3490 Pin | Function / Notes |
|---|---|---|
| 3V3 | VCC (Pin 8) | Power supply (3.0V to 3.6V) |
| GND | GND (Pin 5) | Common ground reference |
| GPIO 17 (TX) | DI (Pin 4) | Driver Input (Data from ESP32 to Bus) |
| GPIO 16 (RX) | RO (Pin 1) | Receiver Output (Data from Bus to ESP32) |
| N/A | DE (Pin 3) & RE (Pin 2) | Tie DE to VCC, RE to GND (Always transmit/receive) |
ESP32 Arduino Code
This sketch initializes UART2 on the ESP32, transmits a heartbeat ping every second, and echoes any incoming data from the remote RS-422 receivers back to the USB serial monitor.
#include <HardwareSerial.h>
// Define the RS-422 Serial Port using UART2
HardwareSerial RS422_Port(2);
const int RX_PIN = 16;
const int TX_PIN = 17;
const long BAUD_RATE = 115200;
void setup() {
// Initialize USB Serial for debugging
Serial.begin(115200);
// Initialize RS-422 Hardware Serial
// Note: RS-422 is full duplex, no flow control pins needed
RS422_Port.begin(BAUD_RATE, SERIAL_8N1, RX_PIN, TX_PIN);
Serial.println("RS-422 Master Node Initialized.");
}
void loop() {
// Transmit a heartbeat ping to the multi-drop receivers
static unsigned long lastPing = 0;
if (millis() - lastPing >= 1000) {
lastPing = millis();
RS422_Port.println("PING: Master Heartbeat");
}
// Listen for any incoming data from the bus
if (RS422_Port.available()) {
String incoming = RS422_Port.readStringUntil('\n');
Serial.print("Received from bus: ");
Serial.println(incoming);
}
}
Bench Tip: Transceiver Selection
If you are designing a custom PCB for a 5V system, swap the MAX3490 for the MAX490. If you need to isolate the bus to prevent ground loops in industrial environments, use a digital isolator (like the ISO7721) between your microcontroller UART pins and the transceiver DI/RO pins, and power the transceiver side from an isolated DC-DC converter.
If you are designing a custom PCB for a 5V system, swap the MAX3490 for the MAX490. If you need to isolate the bus to prevent ground loops in industrial environments, use a digital isolator (like the ISO7721) between your microcontroller UART pins and the transceiver DI/RO pins, and power the transceiver side from an isolated DC-DC converter.






