Document RS-485 vs RS-422 signaling, connector pinouts, and MAX490 failsafe

Add comprehensive section covering half-duplex RS-485 vs full-duplex
RS-422 differences, dual-mode Trav'ler pinout (T/R + RXD pairs),
G2 wire color mapping, adapter chain table, and DIYables MAX490
module notes including bus tri-state failsafe concern with
workaround options.
This commit is contained in:
Ryan Malloy 2026-02-11 10:31:11 -07:00
parent e0488eb85a
commit da066cfb3b

View File

@ -96,16 +96,83 @@ Five known Winegard dish variants documented by Gabe Emerson (KL1FI) / saveitfor
- Console does not accept backspace — hit enter to clear on typo
- Firmware prompt character is `>` (ASCII 62) — used for reliable response termination in prompt-terminated read strategies
### RS-485 Pinout (RJ-25, bottom view, tip up)
### RS-485 vs RS-422 — Serial Bus Differences
| Pin | Function |
|-----|----------|
| 1 | GND |
| 2 | T/R- |
| 3 | T/R+ |
| 4 | RXD- |
| 5 | RXD+ |
| 6 | Not used |
The Winegard variants use two different differential signaling standards. Understanding which one matters for choosing the right USB adapter.
**RS-485 half-duplex (2-wire):** One shared differential pair carries both TX and RX. Only one device talks at a time — the transmitter drives the bus, then releases it so the other side can respond. This is how the Trav'ler IDU communicates with the ODU: the IDU sends a command on the shared T/R pair, then listens for the response on the same wires. Simple wiring (2 signal wires + ground), but throughput is limited by the turn-around time between send and receive.
**RS-422 full-duplex (4-wire):** Two separate differential pairs — one dedicated TX pair and one dedicated RX pair. Both sides can transmit simultaneously because the signals don't share wires. Higher throughput (no bus turnaround penalty), and the Carryout G2 uses this at 115200 baud. Point-to-point only (one transmitter per pair).
**RS-485 full-duplex (4-wire):** Electrically identical to RS-422 wiring (same 4-wire differential pairs), but the RS-485 spec allows multiple transmitters on each pair (multi-drop bus). For our point-to-point dish↔computer connection, 4-wire RS-485 and RS-422 are interchangeable.
| Property | RS-485 half-duplex | RS-422 / RS-485 full-duplex |
|----------|-------------------|----------------------------|
| Signal wires | 2 (+ GND) | 4 (+ GND) |
| Direction | One direction at a time | Both directions simultaneously |
| Max nodes | 32 drivers + 32 receivers | 1 driver + 10 receivers (RS-422) |
| Max distance | 1200m / 4000ft | 1200m / 4000ft |
| Max baud | ~10 Mbps | ~10 Mbps |
| Voltage swing | ±1.5V to ±5V differential | ±2V to ±5V differential |
| Bus turnaround | Required (adds latency) | Not needed |
| Typical adapter | USB-to-RS485 (DTECH, etc.) | USB-to-RS422 (FTDI, DIYables, etc.) |
**Practical consequence for this project:** The Trav'ler's RJ-25 connector exposes **both** a half-duplex pair (pins 2-3, labeled T/R) **and** a dedicated receive pair (pins 4-5, labeled RXD). Gabe's code uses only the half-duplex pair via an RS-485 adapter. Davidson's G2 code uses all four wires as RS-422. The same physical connector may support both modes depending on the firmware — this is unconfirmed on the Trav'ler but worth testing if you have a 4-wire adapter available.
### Serial Connector Pinout
The physical connector is an RJ-25 (6P6C) on the Trav'ler or RJ-12 (6P6C) on the G2 — same form factor, same 6-pin modular jack.
**Trav'ler pinout (RJ-25, bottom view, clip up):**
| Pin | Label | RS-485 use | RS-422 use |
|-----|-------|-----------|-----------|
| 1 | GND | Ground | Ground |
| 2 | T/R- | Shared data- | TX- (computer→dish) |
| 3 | T/R+ | Shared data+ | TX+ (computer→dish) |
| 4 | RXD- | (unused in half-duplex) | RX- (dish→computer) |
| 5 | RXD+ | (unused in half-duplex) | RX+ (dish→computer) |
| 6 | N/C | Not connected | Not connected |
**Carryout G2 pinout (RJ-12, clip away, per Davidson's wiring guide):**
| Pin | Wire Color | RS-422 Function |
|-----|-----------|-----------------|
| 1 | White | GND (PE) |
| 2 | Red | TX+ (TA) — computer→dish |
| 3 | Black | TX- (TB) — computer→dish |
| 4 | Yellow | RX+ (RA) — dish→computer |
| 5 | Green | RX- (RB) — dish→computer |
| 6 | Blue | Not connected |
**Adapter chain by variant:**
| Variant | Adapter | Wires Used |
|---------|---------|-----------|
| Trav'ler (Gabe's setup) | USB→RS232→RS485 (DTECH) | Pins 2-3 only (half-duplex) |
| Carryout G2 (Davidson) | USB→RS422 (5V TTL) | Pins 2-5 (full-duplex) |
| Carryout G2 (ESP32) | ESP32 UART2→RS422 module (DIYables) | Pins 2-5 (full-duplex) |
### RS-422 Module Notes (DIYables MAX490)
The DIYables RS422-to-TTL module uses the **MAX490** transceiver chip (2.5 Mbps max, well above our 115200 baud). Key specs:
- 5V TTL logic on the microcontroller side (RXD/TXD)
- 15 kV ESD protection on RS-422 lines
- TVS diode for lightning/spike suppression
- 10 ohm current-limiting resistors for overcurrent protection
- Built-in 120 ohm termination resistor (reduces echo on long runs)
- Power + TX/RX activity LEDs
- Board size: 5.0cm x 2.7cm
**Failsafe concern:** The MAX490 does not have failsafe logic, and the module has no provisions for passive failsafe bias resistors. When the RS-422 bus tri-states (no driver active — e.g., between commands, during power transitions, or if the dish firmware is slow to respond), the receiver inputs float and may see random transitions interpreted as garbage data. This can cause spurious bytes in the serial stream.
Workaround options:
1. **Add external bias resistors** — pull A/RX+ toward V+ and B/RX- toward GND through ~560 ohm resistors. This biases the idle bus to a known logic-high state (RS-422 "mark" / idle). Solder to the module or add inline on the RJ-12 breakout.
2. **Use the prompt-terminated read strategy** — our `CarryoutG2Protocol._send()` reads until `>` (ASCII 62) which naturally filters out garbage between commands, since random transitions are unlikely to produce a valid `>` in context.
3. **Ignore idle noise in firmware** — the Winegard firmware likely ignores unexpected input while it's processing or idle, but any bytes received during the bus float could corrupt the next valid command if they land in the UART buffer at the wrong time.
For short cable runs (under ~3m between ESP32 and dish), the built-in 120 ohm termination is sufficient and bus float is less likely to cause issues. For longer runs or electrically noisy environments (near motors, power supplies), add the bias resistors.
### Firmware Console Commands