RS485 Non-Isolated Breakout Board

Revision Status

Revision Status Changes
Rev A Active (Initial release)

RS485 Non-Isolated Breakout Board

The RS485 Non-Isolated Breakout Board is a clean, compact differential serial interface designed purely for half-duplex communication. Derived from the earlier RS485 + 48 V Passthrough Board, it removes the high-voltage power routing to eliminate potential noise coupling and high-voltage risks near logic lines.

Features

  • Transceiver: Based on the SP3485EN 3.3 V half-duplex RS485 transceiver.
  • Compact Footprint: Uses smaller 2.54 mm pitch screw terminals and 0603/0402 passive component footprints to reduce overall board size.
  • Direction Control: A pin jumper links the Receiver Enable (/RE) and Driver Enable (DE) lines, allowing a single microcontroller GPIO to control the half-duplex direction state.
  • Robust Termination: Features a jumper-selectable 120 Ω termination resistor in a conservative 1206 package to comfortably handle common-mode voltages (commonly -7 V to +12 V).
  • Improved Biasing: Jumper-selectable bus biasing options configured with 470 Ω and 4.7 kΩ resistors to establish a stable bus idle state.
  • Brighter Indicators: RX/TX LED indicator resistors reduced from 2.2 kΩ to 470 Ω for better visibility. Solder jumpers can be cut if low-power mode is required.
  • ESD Protection: Built-in TVS diode array on the differential A/B lines to protect the transceiver from electrostatic discharge and line transients.

Hardware Configuration & Pinout

Microcontroller Interface (Logic Side)

Pin Label Description
1 RO Receiver Output (UART RX)
2 DI Driver Input (UART TX)
3 DE Driver Enable (Active High)
4 /RE Receiver Enable (Active Low, usually tied to DE)
5 3.3V 3.3 V Logic Supply
6 GND Common Ground

Bus Side Interface (Screw Terminals)

Two terminal blocks are provided that are electrically connected to the same lines, allowing for easy daisy-chaining of the bus.

Pin Terminal Description
1 D1/B RS485 Inverting Line
2 D0/A RS485 Non-inverting Line
3 GND Bus Ground Reference

Schematic

RS485 Non-Isolated Breakout Board Schematic

Bill of Materials (BOM)

Reference Qty Value Footprint LCSC Part No MFR Part No Description
C1 1 100nF Capacitor_SMD:C_0805_2012Metric C49678 CC0805KRX7R9BB104 Unpolarized capacitor, small symbol
D1,D2,D7 3 SML-D12M8WT86 LED_SMD:LED_0603_1608Metric C510025 SML-D12M8WT86 Light emitting diode
D4 1 SM712_SOT23 Package_TO_SOT_SMD:SOT-23 C7420375 SM712 7V/12V, 600W Asymmetrical TVS Diode Array, SOT-23
J2,J3 2 Screw_Terminal_01x03 TerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-3-2.54_1x03_P2.54mm_Horizontal C5288763 1725669 Generic screw terminal, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)
JP1,JP7 2 Jumper_2_Small_Open Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical C42431798 PH2.54-1X2P-H25 Jumper, 2-pole, small symbol, open
JP5,JP6 2 Jumper_3_Open Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical C42431836 PH2.54-1X3P-H25 Jumper, 3-pole, both open
Q1 1 AO3401A Package_TO_SOT_SMD:SOT-23 C15127 AO3401A -4.0A Id, -30V Vds, P-Channel MOSFET, SOT-23
R1,R2,R3,R4 4 100R Resistor_SMD:R_0603_1608Metric C22775 0603WAF1000T5E Resistor
R5,R6 2 10K Resistor_SMD:R_0402_1005Metric C25744 0402WGF1002TCE Resistor
R7,R9 2 4K7 Resistor_SMD:R_0603_1608Metric C23162 0603WAF4701T5E Resistor
R8 1 120R Resistor_SMD:R_1206_3216Metric C17909 1206WAF1200T5E Resistor
R10,R11 2 22R Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder C23345 0603WAF220JT5E Resistor
R12,R13,R18 3 470R Resistor_SMD:R_0402_1005Metric C25117 0402WGF4700TCE Resistor
R15,R16 2 470R Resistor_SMD:R_0603_1608Metric C23179 0603WAF4700T5E Resistor
U1 1 SP3485EN-L/TR Package_SO:SOIC-8_3.9x4.9mm_P1.27mm C8963 SP3485EN-L/TR Industrial 3.3V Low Power Half-Duplex RS-485 Transceiver 10Mbps, SOIC-8

Test Verification & Code

This board has been tested successfully at baud rates ranging from 300 baud up to 921,600 baud over 20 meters of Cat 6 cable using Raspberry Pi Pico 2 W nodes.

MicroPython Transmit Example

This script runs on the transmitting node, sending a counter value every second.

from machine import UART, Pin
import time

# Configure UART
uart = UART(0, baudrate=921600, tx=Pin(0), rx=Pin(1))

# Define the Driver Enable / Receiver Enable pin
de_re = Pin(2, Pin.OUT)

counter = 0

while True:
    # Enable transmit mode
    de_re.value(1)

    message = "Okay here's a counter value: " + str(counter)
    uart.write(message.encode())
    print("Sent:", message.strip())

    uart.flush()
    time.sleep(1)

    if counter >= 10:
        counter = 0
    else:
        counter += 1

MicroPython Receive Example

This script runs on the receiving node, reading the differential signal and decoding it.

from machine import UART, Pin
import time

# Configure UART
uart = UART(0, baudrate=921600, tx=Pin(0), rx=Pin(1))

# Define the Driver Enable / Receiver Enable pin
de_re = Pin(2, Pin.OUT)

# Set board to receive mode
de_re.value(0)

print("Waiting for data...")

while True:
    if uart.any():
        data = uart.read()
        try:
            decoded_text = data.decode("utf-8")
            print("Received Raw:", data)
            print("Decoded Text:", decoded_text.strip())
        except UnicodeError:
            print("Received data, but could not decode as UTF-8.")

    # Small delay to avoid hogging the CPU
    time.sleep(0.1)

Project Files