Wiki / Hardware

USB-UART Adapter

A small USB dongle built around a bridge chip (FT232, CP2102, CH340) that turns a target's TX/RX/GND pins into a /dev/ttyUSB port, the standard way to reach a device's serial console.

Adapter to target, three wires
USB-UART adapter Target board RX TX GND VCC TX RX GND VCC
Data lines cross, ground is shared. VCC stays disconnected on a board that has its own supply: connecting it back-powers the target through the adapter and gives you brownouts, resets, and confusing half-boots.

A USB-UART adapter (also called a USB to serial adapter, TTL serial cable, or console cable) is a small dongle whose bridge chip converts USB into an asynchronous serial link at logic level. It is the piece of hardware that connects your laptop to a target's Wiki: uart-header, and for most embedded work it is the single most used tool on the bench.

What it is

The adapter is one chip and a connector. The chip enumerates over USB and presents a serial port to the host, then drives a TX line and reads an RX line at 3.3V or 5V logic level. Common bridges:

Chip Linux driver Notes
FTDI FT232R / FT232H ftdi_sio see Wiki: ftdi-ft232, FT232H also does JTAG/SPI via MPSSE
Silicon Labs CP2102 / CP2104 cp210x very common on cheap boards
WCH CH340 / CH341 ch341 cheapest, occasionally flaky clones
Prolific PL2303 pl2303 many counterfeits, some refused by vendor drivers

Under Linux these appear as /dev/ttyUSB0. A device that implements USB CDC-ACM natively instead (an ESP32-S3 or an RP2040 board, for example) appears as /dev/ttyACM0. Either way the port then behaves like any serial port and takes a baud rate, usually 115200 8N1.

Why it matters

This is the cheapest path to a device's own debug output. With three wires you get the bootloader banner, the kernel log, and frequently a login prompt or an unauthenticated root shell. The same adapter also carries flashing traffic: esptool talks to an ESP32 over it, and U-Boot happily accepts commands typed into it. Nothing else gives you that much of a device's internals for that little money.

How to use it

Wire TX to RX, RX to TX, GND to GND. Leave VCC alone unless you are deliberately powering a bare module.

# Which port did it enumerate as?
dmesg | tail -20
ls -l /dev/ttyUSB* /dev/ttyACM*

# Talk to it. 115200 8N1 first, then sweep if the output is garbage.
picocom -b 115200 /dev/ttyUSB0
screen /dev/ttyUSB0 115200

# Same adapter, flashing an ESP32.
esptool.py --port /dev/ttyUSB0 flash_id

If you get Permission denied on the port, add yourself to the dialout group (sudo usermod -aG dialout $USER, then log out and back in) rather than running everything as root.

Logic level, the part that damages boards

The bridge chip's IO voltage must match the target. Most embedded targets are 3.3V.

  • A 5V TTL adapter on a 3.3V target can damage the target's RX pin and the SoC behind it.
  • The 3.3V/5V jumper on many cheap modules switches only the VCC output pin, not the IO level of TX/RX. Read the module's schematic or measure before trusting it.
  • An RS-232 cable is not a TTL adapter. RS-232 swings roughly plus or minus 12V and is inverted; connecting a DB9 serial cable straight to a 3.3V header destroys the pin. TTL means logic level, idle high at VCC.

The safe check is a Wiki: multimetre on the target's idle TX line before you connect anything: idle high tells you the level the board expects.

Pitfalls

  • TX/RX swapped. The classic. Total silence, no error message. Swap the two data wires before you doubt anything else.
  • Wrong baud rate. Rhythmic garbage rather than silence. Sweep 115200, 57600, 38400, 9600.
  • No common ground. Without a shared GND the two sides have no voltage reference and you get noise or nothing.
  • Back-powering. VCC connected to a self-powered board fights its regulator and causes resets. Share ground only.
  • Counterfeit chips. Clone FT232R and PL2303 parts exist in volume and vendor drivers have historically refused or bricked them on Windows. On Linux the mainline drivers do not care, which is one reason people keep a Linux box for serial work.
  • Only three usable pins. Many targets bring out TX/RX/GND and nothing else, and some depopulate RX so the console is read-only by design. That is the vendor hardening, not your wiring.

Further reading