USB to Serial Port Adapters for Programming Microcontrollers

Electronics BasicsBy November 14, 2026Fact-checked by Hugo Lindgren
USB to Serial Port Adapters for Programming Microcontrollers

By Fact-checked by Hugo Lindgren Published

Most “dead” USB to serial port adapters work fine. They’re the wrong type for the device on the other end, or Windows 11 refuses to drive the chip inside. Before you buy, check two things: the signal type (RS-232 on a DB9 connector, or 3.3 V/5 V TTL on pin headers) and the bridge chip inside (FTDI, Silicon Labs CP210x, WCH CH340/CH343 or Prolific PL2303).

Works withArduino, ESP32, Raspberry Pi
DifficultyBeginner
Setup time15 to 30 minutes
Key choiceVoltage first, chipset second

Key takeaways

  • A DB9 port needs an RS-232 adapter. Bare TX/RX pins need a USB to TTL adapter set to the right voltage.
  • Never wire an RS-232 DB9 adapter straight to microcontroller pins. Its ±V levels can destroy a 3.3 V board.
  • Pick the DB9 gender opposite to your device’s port. A gender changer does not cross TX and RX.
  • A branded adapter needs the driver for the chip inside. Device Manager’s hardware ID (VID_0403, VID_10C4, VID_1A86, VID_067B) tells you which chip that is.
  • If Windows says “PL2303HXA phased out since 2012”, don’t hunt for a driver. Replace the adapter.

Driver versions in this guide were last checked on November 15, 2026.

Fact-checked

We checked these key facts against the sources named, on November 15, 2026:

  • Not always. “USB to serial” covers RS-232, TTL and RS-485 adapters (source: digikey.com)
  • Converting RS-232 to USB is exactly what a USB to RS-232 adapter does (source: industrialmonitordirect.com)
  • Its Windows 11 WHQL driver (v5.2.11.0, January 2026) arrives through Windows Update (source: treexy.com)
  • On an RS-232 adapter, a transceiver converts the 3.3 V logic into the ±V swing RS-232 expects (source: sparkfun.com)
  • Most Modbus RTU networks run over RS-485. :::tip Maker tip Before you buy, look at the other end (source: rtautomation.com)

Quick answer: which USB to serial adapter do you need?

The connector on your target device tells you which adapter to buy. Answer three questions in order: what’s on the other end, what voltage it uses, and which operating system you run.

  1. What’s on the other end? A 9-pin D-shaped port means RS-232. A row of pins labelled TX, RX and GND means TTL UART. Screw terminals marked A and B (or D+ and D−) mean RS-485.
  2. What voltage? For TTL, check the board. Raspberry Pi and ESP32 are 3.3 V only. Classic Arduino Uno and 5 V Pro Mini boards are 5 V.
  3. What OS? All four major chip families work on Linux. On Windows 11, avoid old Prolific chips. On Apple Silicon Macs, FTDI and CDC-class chips like the CH343 give the least trouble.

If your device has a 9-pin DB9 port

Buy a USB to RS-232 adapter with a genuine FTDI or Prolific PL2303G-series chip. The StarTech ICUSB2321F is a well-documented example. StarTech’s datasheet lists the FTDI FT232R chipset and Windows 11 support, and the two-port ICUSB2322F uses the FTDI FT2232D. Adapters like these suit lab instruments, older CNC controllers, UPS units and router consoles. If the port on your device is male, read the gender section below before you order.

If your device has TX/RX/GND pins

Buy a USB to TTL adapter, sometimes sold as a USB serial dongle. Choose one with a CP2102N, FTDI FT232R or CH340 chip and a 3.3 V/5 V jumper. Set the jumper to match the target before you plug anything in.

If your device has screw terminals marked A/B (RS-485)

Buy a USB to RS-485 adapter. Pay extra for an isolated one if the cable runs between buildings, near motors or into industrial cabinets. Most Modbus RTU networks run over RS-485.

Maker tip

Before you buy, look at the other end. A DB9 port means RS-232. Bare TX/RX pins mean USB to TTL, set to the same voltage as the board: 3.3 V for Raspberry Pi and ESP32.

What a USB to serial adapter actually does

A USB to serial adapter is a small bridge. A USB interface chip speaks UART, and sometimes a level-shifting transceiver sits next to it. Your computer sees the adapter as a virtual COM port (VCP), so old serial software keeps working even though the machine has no real serial port.

The bridge chip contains a USB device controller, buffers and a UART. On a TTL adapter, the chip’s pins go almost straight to the header. On an RS-232 adapter, a transceiver converts the 3.3 V logic into the ±V swing RS-232 expects. Some chips have it built in, such as Prolific’s PL2303GT.

Does USB use serial? Yes, in the sense that USB is a serial bus: it sends bits one after another over a differential pair. It is not a UART or RS-232 port, though. Its packet-based protocol, signalling and voltages are completely different, so you always need a bridge chip.

Can RS-232 go to USB? Yes. Converting RS-232 to USB is exactly what a USB to RS-232 adapter does. The device on the DB9 side never knows a USB port is involved.

Virtual COM ports: COM3 on Windows, /dev/ttyUSB0 on Linux, /dev/cu.usbserial on macOS

Each operating system gives the adapter a different name.

OS Typical name Where to find it
Windows 11 COM3, COM4, and so on Device Manager > Ports (COM & LPT)
Linux (FTDI, CP210x, CH340, PL2303) /dev/ttyUSB0 ls /dev/ttyUSB* or dmesg
Linux (CDC ACM chips such as CH343, CH9102, native-USB boards) /dev/ttyACM0 ls /dev/ttyACM*
macOS /dev/cu.usbserial-XXXX or /dev/cu.usbmodemXXXX ls /dev/cu.*

On macOS, use the cu.* device for outgoing connections. The matching tty.* device waits for a carrier-detect signal and can appear to hang.

Why latency differs from a real COM port

USB moves data in scheduled packets, not byte by byte, so a USB adapter adds delay a motherboard COM port never had. FTDI chips hold partial packets for a latency timer, 16 ms by default. A serial console won’t notice. Modbus RTU and other protocols that frame messages with gaps between characters will.

On Windows, you can lower the FTDI latency timer to 1 ms. Go to the port’s Properties > Port Settings > Advanced. On Linux, write to sysfs:

cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
echo 1 | sudo tee /sys/bus/usb-serial/devices/ttyUSB0/latency_timer

RS-232 vs USB to TTL vs RS-485: don’t fry your board

RS-232 swings between roughly ±3 V and ±15 V with inverted logic. TTL UART swings between 0 V and the board’s supply (3.3 V or 5 V). If you connect an RS-232 adapter to microcontroller pins, you can push −10 V or more into a pin rated for 0 to 3.6 V.

What is USB to TTL? It’s a USB to serial adapter whose output stays at logic level, with no RS-232 transceiver. You use one to program an Arduino Pro Mini, flash an ESP32 or open a Raspberry Pi console.

Standard Voltage levels Logic polarity Typical connector Max practical distance Typical devices
RS-232 ±3 V to ±15 V (often ±5 to ±10 V in practice) Inverted: logic 1 (mark) is negative DE-9 (DB9), older DB-25 About 15 m (50 ft) at modest baud rates Instruments, UPS units, Cisco consoles, CNC, old modems
TTL UART 0 V to 3.3 V or 0 V to 5 V Non-inverted: logic 1 is high 0.1 in pin header, 6-pin FTDI header Under about 1 m Arduino, ESP32, Raspberry Pi GPIO, GPS and Bluetooth modules
RS-485 Differential, roughly ±1.5 V to ±5 V between A and B Set by the A/B difference Screw terminals, RJ45 Up to about 1,200 m (4,000 ft) Modbus RTU, PLCs, VFDs, energy meters
RS-422 Differential, like RS-485 Set by the line difference Screw terminals, DB9 Up to about 1,200 m Point-to-point industrial links, broadcast gear

Did you know?

On RS-232, a logic 1 is a negative voltage, the opposite of TTL, according to Universal-Solder’s RS-232 explainer. Swapping wires can’t fix the mismatch. You need a transceiver chip.

RS-232 (DB9) levels and pinout

A PC-style RS-232 port is a male DE-9 connector, usually called DB9, wired as DTE (data terminal equipment). Pin 2 receives, pin 3 transmits and pin 5 is ground. The other pins carry handshake lines.

DB9 pin Signal Direction (on a PC/DTE port)
1 DCD (data carrier detect) In
2 RXD (receive data) In
3 TXD (transmit data) Out
4 DTR (data terminal ready) Out
5 GND (signal ground) Reference
6 DSR (data set ready) In
7 RTS (request to send) Out
8 CTS (clear to send) In
9 RI (ring indicator) In

Nearly every USB to RS-232 adapter has a male DB9 and behaves like an old PC port. A modem or instrument wired as DCE usually has a female connector and connects with a straight-through cable.

Do you need a male or female DB9 USB adapter?

Buy the gender opposite to the port on your device: a female port takes a male adapter, and a male port takes a female adapter or cable. Gender alone doesn’t tell you the wiring, though. DCE-style instruments often need a male-to-female straight-through link, while two DTE ports (both male) need a null modem crossover.

Plugs fitting together tells you nothing about whether TX meets RX. So decide two things: the gender of the device’s port, and whether the device is DTE or DCE. The manual usually says. If it doesn’t, measure between pin 3 and pin 5 with the device powered: a steady negative voltage (around −5 to −12 V) on pin 3 means the device transmits there and is wired as DTE.

Device port Adapter to buy Cable type
Female DB9 (DCE: modems, many instruments, some GPS receivers) Standard male-DB9 adapter such as the StarTech ICUSB2321F Direct plug-in, or a male-to-female straight-through extension
Male DB9, wired DTE (PC-style ports, many PLCs, another computer) Female-DB9 null modem adapter such as the StarTech ICUSB232FTN, or a male adapter plus a female-to-female null modem cable Null modem (crossed)
Male DB9, wired DCE (some lab and industrial instruments) Male-DB9 adapter Female-to-female straight-through cable

The ICUSB232FTN is worth knowing about because “RS232 female to USB” searches often end at it. It pairs an FTDI FT232RL with a female DB9 and has the null modem crossing built in. That suits DTE devices with a male port. It is the wrong choice for a male-port device that is already wired DCE, because the built-in crossover then crosses the lines a second time.

Check the screw locks too. Standard D-sub hardware uses 4-40 UNC threads: the threaded hex posts (jackscrews) sit on one connector, and the thumbscrews on the mating cable thread into them. Some European equipment uses metric M3 posts instead, and mixed 4-40/M3 parts exist. A 4-40 thumbscrew won’t seat properly in an M3 post. Never force one, because cross-threading strips the post out of the panel. If both connectors have posts and neither has a thumbscrew, unscrew one pair of posts or buy a cable with thumbscrews.

TTL UART at 3.3 V vs 5 V: the jumper on your adapter

Most cheap USB to TTL boards have a jumper or switch that selects 3.3 V or 5 V. It usually sets both the TX output level and the voltage on the VCC pin. Check it every time, because defaults vary. SparkFun’s CH340C Serial Basic ships set to 3.3 V, for example, while SparkFun’s FTDI Basic breakouts ship set to 5 V.

Logic level shifters, such as the 74-series translator chips or small MOSFET boards, can bridge mismatched levels on a board. On a serial link, though, the simplest fix is an adapter set to the target’s voltage.

Power check

Raspberry Pi GPIO and ESP32 pins are 3.3 V only and are not 5 V tolerant. A USB to TTL adapter left on 5 V can damage them on the first byte.

RS-485/422 for long cables and Modbus

RS-485 sends each bit as the voltage difference between two wires, A and B. Noise picked up equally on both wires cancels out, so the link holds up over long runs. A single RS-485 bus can connect many devices (32 standard unit loads), which is why it’s the default for Modbus RTU in factories and building automation.

Terminate both ends of a long bus with 120 Ω resistors. Watch the A/B labels, too, because some vendors swap them. If nothing answers, swapping A and B is a safe first test.

Going from a microcontroller to a real RS-232 device with a MAX3232

To connect an Arduino, ESP32 or Raspberry Pi to a real RS-232 device, put a MAX3232 module between them. The chip uses charge pumps to generate the ± voltages from a single supply. The classic MAX232 needs 5 V. The MAX3232 runs from 3.0 to 5.5 V, so it works with 3.3 V boards.

From To Purpose
Board 3.3 V MAX3232 module VCC Power the transceiver at the board’s logic level
Board GND MAX3232 module GND Common ground
Board TX (e.g. ESP32 GPIO17) MAX3232 T1IN (TTL TX in) Data out, TTL side
Board RX (e.g. ESP32 GPIO16) MAX3232 R1OUT (TTL RX out) Data in, TTL side
MAX3232 DB9 RS-232 device ±V signals to the instrument

Maker tip

Never connect a DB9 RS-232 adapter straight to microcontroller pins. Put a MAX3232 module in between, powered from the same 3.3 V or 5 V rail as your board.

Chipsets compared: FTDI, CP210x, CH340/CH343, PL2303

The bridge chip matters more than the brand on the plastic shell, because the chip decides which driver loads and how well it holds up. This ranking weighs four things: current Windows 11 driver status, macOS and Linux support, the risk of buying a counterfeit, and fit for common maker and industrial jobs.

Chipset Common boards/adapters Windows 11 driver (version/date) macOS Linux Fake-chip risk Best for
FTDI FT232R / FT231X StarTech ICUSB2321F, FTDI-style TTL cables, 6-pin FTDI breakouts VCP 2.12.36.20, WHQL, 2025-03-04 (ARM64: 2.12.36.20A) Built-in Apple FTDI driver ftdi_sio in kernel High: most-cloned chip RS-232 gear, Modbus, anything critical
FTDI FT2232D / FT4232H Multi-port adapters (ICUSB2322F) Same VCP package Built-in ftdi_sio Moderate 2- and 4-port setups
Silicon Labs CP2102 / CP2102N ESP32-DevKitC, many TTL dongles CP210x Universal 11.3.0, 2023-05-26 Silicon Labs VCP driver cp210x Moderate ESP32 and general TTL work
WCH CH340 / CH341 Arduino Nano and Uno clones, NodeMCU, cheap dongles 3.9.2024.9 via Windows Update, Sept 16, 2024 WCH package; recent macOS often recognises it natively ch341 Low: genuine chips are already cheap Hobby boards and budget dongles
WCH CH343 / CH9102 Newer ESP32 and ESP32-S3 dev boards In-box Windows CDC driver; WCH VCP optional CDC built in; WCH package optional cdc_acm (/dev/ttyACM0) Low Driver-free modern boards
Prolific PL2303HXA / XA Old blue DB9 cables None: end of life, phased out 2012 Unreliable pl2303 still works Very high Replace it
Prolific PL2303HXD / TA DB9 cables from the 2010s HXD driver dated Dec 30, 2025 Prolific driver pl2303 High OK if genuine
Prolific PL2303G series (GT, GC, GS, GE, GL) Current DB9 cables v5.2.11.0, Jan 22, 2026, via Windows Update (ARM: v5.3.11.0, Jan 28, 2026) Prolific driver pl2303 on recent kernels Moderate Current RS-232 cables

FTDI FT232R/FT231X

Future Technology Devices International (FTDI) makes the reference chips in this market. FTDI’s driver page lists Windows VCP 2.12.36.20 (Desktop), 2.12.36.20U (Universal) and 2.12.36.20A (ARM64), released 2025-03-04 and WHQL certified. One package installs both the VCP driver and the D2XX direct-access library. The older 2.12.36.4 (July 2021) now sits in FTDI’s “No Longer Supported” table.

FTDI is the safe choice for RS-232 instruments and timing-sensitive protocols, because the latency timer is tunable and the drivers are mature. Its weak point is counterfeits, covered below.

Silicon Labs CP2102/CP2102N

The CP2102N is the current version of the chip on Espressif’s ESP32-DevKitC and on many clean, cheap TTL dongles. According to Silicon Labs’ release notes, CP210x Universal Windows Driver 11.3.0 (2023-05-26) supports the CP2102N, CP2102, CP2103, CP2104, CP2105, CP2108 and CP2109. It requires Windows 10 1803 or later, adds WHQL for Windows 11 22H2 and fixes data loss on close. Version 11.2.0 (2022-10-21) dropped installation without the INF file. The 11.x line won’t install on Windows 7 or 8.1.

WCH CH340/CH343/CH9102

WCH (Jiangsu Qinheng) chips are on most Arduino Nano clones and budget ESP8266 boards. The Microsoft Update Catalog lists CH340 driver 3.9.2024.9, dated September 16, 2024, for Windows 11 22H2 and later, and most Windows 11 PCs now install it automatically.

Newer WCH chips such as the CH343 and CH9102 can run as standard USB CDC ACM devices, so Windows, macOS and Linux all drive them with built-in class drivers. The WCH VCP driver is optional. On Linux, these chips show up as /dev/ttyACM0, not ttyUSB0.

Is CH340 fine, or is FTDI worth paying more for? For flashing hobby boards and reading debug prints, a genuine CH340 does the job. Pay for FTDI or CP2102N for long-running RS-232 links, Modbus timing, or a machine where a driver surprise would cost real money.

Prolific PL2303: HXA (dead) vs HXD/TA vs G-series

“PL2303” covers several generations. The PL2303HXA and PL2303X were phased out in 2012 because of widespread counterfeits. Windows 10 and 11 don’t support them, and vendors such as Carmanah tell customers to use adapters with a PL2303HXD or PL2303TA instead. Prolific’s current line is the G series. Prolific’s driver information lists the supported PL2303 chip models and Windows versions, so check it for your exact chip.

Recommended adapters by use case

Choose by job first, then pick a model whose maker publishes the chip inside. Every model below names its bridge chip in the manufacturer’s own datasheet or product page, which is the main thing that separates a predictable adapter from a driver gamble. A model is listed only if it has a documented genuine chipset, a connector that suits the job and a current driver for that chip. Price tiers are rough: budget is under about $15, mid is about $15 to $40, higher is above that.

Use case Example model Chip Connector Isolation Price tier Why
RS-232 instruments, consoles, UPS (female-port DCE devices) StarTech ICUSB2321F FTDI FT232R DB9 male No Mid Documented FTDI chip, Windows 11 support, behaves like a PC COM port
RS-232 to male-port DTE devices StarTech ICUSB232FTN FTDI FT232RL DB9 female, null modem wired No Mid Built-in crossover saves a separate null modem cable
TTL 3.3 V/5 V for Arduino Pro Mini and ESP32 Adafruit FTDI Friend FTDI FT232RL 6-pin FTDI header No Mid Signal and power lines settable to 3.3 V or 5 V, FTDI-cable pin order
TTL budget and USB-C SparkFun Serial Basic Breakout (DEV-15096) WCH CH340C 6-pin FTDI-style header, USB-C No Budget Ships at 3.3 V, jumper to 5 V, 600 mA regulator, driver-light on most OSes
Isolated RS-485 / RS-422 (Modbus, PLCs, VFDs) Waveshare USB to RS485/422 Industrial Isolated FTDI FT232RL with SP485EEN transceiver Screw terminals Yes, galvanic Mid Isolation and protection for long, noisy industrial runs
Isolated RS-232 plus RS-485 on a DIN rail Waveshare USB TO RS232/485 (B) FTDI FT232RNL Screw terminals Yes, galvanic Mid (listed at $15.99) Both standards in one DIN-rail box, hardware direction control on RS-485
Two instruments from one USB port StarTech ICUSB2322F FTDI FT2232D 2 × DB9 male No Higher Two independent COM ports from one chip and one driver

Two honest counterpoints. First, for a single ESP32 or Arduino you may not need any of these, because most dev boards already carry a CP2102N, CH340 or CH9102. Second, a no-name adapter with a genuine chip works as well as a branded one. The extra money buys documentation, a predictable chip revision and a warranty, and for a bench console that may not be worth paying for.

Counterfeit chips: how to spot them and what happens

Fake FTDI and Prolific chips are common because the genuine parts cost more than clones. The vendors’ drivers deliberately detect fakes and refuse them, so a counterfeit often works on Linux and then fails or misbehaves on Windows.

FTDI has punished fakes more than once. In 2014, a driver delivered through Windows Update reset fake chips’ USB product ID to 0, which stopped them working on any OS until the ID was rewritten. FTDI pulled that driver after the backlash. In 2016, Hackaday and The Register reported that a later driver sent the text “NON GENUINE DEVICE FOUND!” into the serial data stream in place of real data.

Checking an FTDI chip

The quickest check is the USB serial number. Genuine FTDI chips get unique serials at the factory. Many clones share one identical serial.

lsusb | grep -i ftdi
sudo lsusb -v -d 0403:6001 | grep -E "iSerial|iProduct|bcdDevice"

Plug in two adapters from the same batch. If both report the same iSerial (a common clone value is A50285BI), treat them as counterfeit. Other warning signs include chip markings that look printed rather than laser-etched, an unusually low price for “FTDI” on a marketplace listing, and a case that feels loose.

Did you know?

Counterfeit FTDI chips often all report the same USB serial number, while genuine chips get unique ones, according to a 2016 roundup of counterfeit FTDI adapters on SoftSolder. That means lsusb -v can expose a fake in seconds.

The “PL2303HXA phased out since 2012” message

If Windows 11 Device Manager shows “PL2303HXA PHASED OUT SINCE 2012. PLEASE CONTACT YOUR SUPPLIER,” the current Prolific driver has found an end-of-life or cloned chip and is refusing it on purpose. Prolific’s CheckChipVersion utility confirms which chip you have.

Forums offer patched “legacy” drivers and tricks to roll back to an old driver. These break with the next Windows update, and drivers from random download sites are a malware risk. The fix that lasts is a new adapter with an FTDI, CP210x or PL2303G-series chip.

Maker tip

If a Prolific adapter shows “PL2303HXA phased out” or Code 10, don’t hunt for patched drivers. Replace it with an FTDI, CP210x or PL2303G-series adapter.

Installing drivers on Windows 11, macOS and Linux

On Windows 11, most genuine adapters install themselves through Windows Update. Linux has drivers for all four chip families built into the kernel. macOS is the only OS where you sometimes have to install and approve a vendor driver. Download drivers only from the chip makers: ftdichip.com, silabs.com, prolific.com.tw and wch.cn (or WCH’s official GitHub).

Windows 11 (Device Manager, Windows Update, manual INF)

Build steps

  1. Plug the adapter in using a USB data cable, not a charge-only cable.
  2. Open Device Manager and expand Ports (COM & LPT).
  3. If the adapter appears under Other devices with a yellow mark, run Windows Update and check Optional updates > Driver updates.
  4. If nothing arrives, download the chip maker’s installer or INF package and install it.
  5. Unplug, replug and note the COM number.

Current vendor packages as of this check:

Chip maker Package Version and date
FTDI Windows VCP (Desktop, Universal, ARM64) 2.12.36.20 / 20U / 20A, 2025-03-04
Silicon Labs CP210x Universal Windows Driver 11.3.0, 2023-05-26
WCH CH340 (Microsoft Update Catalog) 3.9.2024.9, 2024-09-16
Prolific PL2303G Windows 11 64-bit WHQL 5.2.11.0, 2026-01-22
Prolific PL2303HXD Windows 11 driver Dated 2025-12-30
Prolific PL2303 ARM driver 5.3.11.0, 2026-01-28
Prolific Driver installer 4.9.0.0, 2026-03-06

On Windows on ARM laptops (Snapdragon machines, for example), use FTDI’s 2.12.36.20A package or Prolific’s ARM driver. A CDC-class chip such as the CH343 needs no vendor driver at all.

Which driver does a StarTech (or other branded) adapter need?

Install the driver for the chip inside, not one for the brand. The StarTech ICUSB2321F, ICUSB232FTN and ICUSB2322F all use FTDI chips, so they need FTDI’s VCP package (2.12.36.20 as of this check), which Windows 11 usually fetches by itself. The same goes for Waveshare, Adafruit, SparkFun and unbranded cables.

If the box doesn’t name the chip, Windows will tell you:

  1. Open Device Manager and right-click the adapter (under Ports or Other devices).
  2. Choose Properties > Details, then pick Hardware Ids from the drop-down.
  3. Read the VID and PID values, for example USB\VID_0403&PID_6001.
Hardware ID starts with Chip maker Common PID Driver to install
VID_0403 FTDI 6001 (FT232R), 6010 (FT2232), 6015 (FT231X) FTDI VCP 2.12.36.20
VID_10C4 Silicon Labs EA60 (CP210x) CP210x Universal 11.3.0
VID_1A86 WCH (Jiangsu Qinheng) 7523 (CH340) CH340 driver via Windows Update
VID_067B Prolific 2303 (PL2303 family) Prolific PL2303G or HXD driver

On Linux, lsusb prints the same pair as 0403:6001, and on macOS, System Information > USB lists Vendor ID and Product ID. A VID_0403 adapter that throws errors on the FTDI driver is a counterfeit candidate. Run the serial-number check above.

macOS (Intel and Apple Silicon, allowing the system extension)

macOS includes a driver for FTDI chips and the standard CDC ACM class driver, so FTDI adapters and CH343/CH9102 boards usually work out of the box on M1, M2, M3 and newer Macs. Silicon Labs and Prolific publish macOS drivers. After installing one, approve it in System Settings > Privacy & Security, then restart if prompted.

Does the CH340 driver work on Apple Silicon? Recent macOS versions usually recognise CH340 boards without extra software. If yours doesn’t, WCH’s official macOS package covers the CH340, CH341, CH342, CH343, CH344, CH9101, CH9102 and CH9103. One caveat: the Homebrew cask for the WCH CH34x driver is built for Intel macOS and needs Rosetta 2 on Apple Silicon. Install only one CH34x driver at a time, because duplicate drivers create duplicate ports.

ls /dev/cu.*

Linux and Raspberry Pi (in-kernel drivers, dialout group, udev names)

The Linux kernel ships ftdi_sio, cp210x, ch341 and pl2303, plus cdc_acm for CDC devices, so you almost never install anything. The usual blocker is permissions. On Debian, Ubuntu and Raspberry Pi OS, serial ports belong to the dialout group.

sudo dmesg | tail -n 20          # shows which driver claimed the adapter
ls -l /dev/ttyUSB* /dev/ttyACM*
sudo usermod -aG dialout $USER   # log out and back in afterwards
ls -l /dev/serial/by-id/         # stable names that survive replugging

The /dev/serial/by-id/ links include the chip’s serial number. Use them in scripts so a second adapter doesn’t swap ttyUSB0 and ttyUSB1. On Arch-based systems, the group is uucp, not dialout.

Wiring it up: TX, RX, GND and null modem cables

Serial wiring follows one rule. The adapter’s TX goes to the target’s RX, the adapter’s RX goes to the target’s TX, and the grounds connect. Without a shared ground, the receiver has no reference voltage and you get garbage or silence.

Maker tip

Run a loopback test first. Short the adapter’s TX and RX with a jumper (pins 2 and 3 on a DB9), open a terminal and type. If the characters echo back, the adapter and driver both work, and any remaining problem is in your wiring or the target.

You can also run the loopback test as a script with pyserial:


import serial

# Use "COM3" (or your port) on Windows, "/dev/cu.usbserial-XXXX" on macOS
with serial.Serial("/dev/ttyUSB0", 115200, timeout=1) as port:
    port.write(b"loopback ok\n")
    print(port.readline())  # prints b'loopback ok\n' if TX and RX are shorted

If readline() returns b'' after one second, nothing came back. Either the jumper isn’t on TX and RX, or the port name is wrong.

DB9 pinout and null modem wiring

Do you need a null modem cable? You need one when both ends are DTE devices: both have male DB9s and both transmit on pin 3. A null modem cable crosses the data lines. A straight-through cable connects a DTE to a DCE device, such as a modem or many instruments.

DB9 end A DB9 end B Purpose
Pin 2 RXD Pin 3 TXD Data crossed
Pin 3 TXD Pin 2 RXD Data crossed
Pin 5 GND Pin 5 GND Common ground
Pin 7 RTS Pin 8 CTS Hardware flow control crossed
Pin 8 CTS Pin 7 RTS Hardware flow control crossed
Pin 4 DTR Pins 6 DSR and 1 DCD Handshake crossed

For a Cisco console, plug the vendor’s RJ45 to DB9 console (rollover) cable into the USB adapter’s DB9 and connect at 9600 baud 8N1. Many UPS units, APC models included, use proprietary serial cables, so check the manual before you assume a standard null modem. For PLCs, follow the manufacturer’s cable drawing. A gender changer only changes the connector’s gender. It doesn’t cross the data lines.

TTL wiring to Arduino, ESP32 and Raspberry Pi

Adapter pin Arduino (Uno/Pro Mini) ESP32 DevKit (UART0) Raspberry Pi GPIO DB9 (RS-232 adapter only)
TX D0 (RX) GPIO3 (U0RXD) GPIO15 RXD, physical pin 10 Pin 3 TXD
RX D1 (TX) GPIO1 (U0TXD) GPIO14 TXD, physical pin 8 Pin 2 RXD
GND GND GND GND, physical pin 6 Pin 5
VCC VCC on 5 V Pro Mini only (match jumper) Leave unconnected, power via USB Leave unconnected Not present
DTR DTR on Pro Mini header (resets via 0.1 µF) EN via auto-reset transistors Not used Pin 4
Jumper setting 5 V or 3.3 V to match board 3.3 V 3.3 V Not applicable to TTL

On an Arduino Uno, D0 and D1 are shared with the board’s own USB chip. An external adapter on those pins will fight the onboard one unless you hold the Uno in reset or use a different board. Our general purpose input output (GPIO) guide covers pin roles and voltage limits on these boards in more depth.

Should you power the target from the adapter’s VCC?

Only small, low-current targets. On an FT232R, the 3.3 V output comes from the chip’s internal regulator, rated for about 50 mA. The CP2102’s regulator is rated higher, around 100 mA, but that still can’t handle an ESP32’s Wi-Fi current spikes. Boards with a separate regulator do better: SparkFun rates the CH340C Serial Basic’s 3.3 V regulator at 600 mA, and it falls back to 150 mA in short-circuit shutdown. The 5 V pin is usually USB VBUS passed straight through, which is fine for an Arduino Pro Mini and a few sensors.

Power ESP32 boards, Raspberry Pis and anything with motors from their own supply. If you need a stable rail from a battery, a buck-boost converter is the usual answer. Never connect the adapter’s VCC to a board that already has its own power, because the two supplies will push current into each other.

Maker projects: three setups that work

These three setups cover most of what makers do with a USB to TTL adapter: a headless Raspberry Pi console, ESP32 flashing and programming boards that have no USB port.

Raspberry Pi GPIO serial console

A serial console gives you a login prompt on a Pi with no network or screen. Set the adapter to 3.3 V and wire it as in the table above: GND to pin 6, adapter RX to GPIO14/pin 8, adapter TX to GPIO15/pin 10. Then enable the UART in the boot config. On Raspberry Pi OS Bookworm and newer, that’s /boot/firmware/config.txt:

enable_uart=1

You can also turn it on with sudo raspi-config under Interface Options > Serial Port. Connect at 115200 baud, 8N1, no flow control. The Raspberry Pi 5 is different: raspi-config sends the console to its separate three-pin debug UART connector, not GPIO14/15. Either use that connector or enable UART0 on the GPIO pins manually.

screen /dev/ttyUSB0 115200

Flashing ESP32 with esptool

Most ESP32 dev boards already have a CP2102, CH340 or CH9102 on board. Its DTR and RTS lines drive two transistors that pull EN (reset) and GPIO0 (boot) automatically. That’s why esptool can put the chip into download mode without you pressing anything.

pip install esptool
esptool.py --port /dev/ttyUSB0 flash_id
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash 0x1000 firmware.bin

Newer esptool releases (v5) install an esptool command and use hyphenated subcommands such as flash-id and write-flash. With a bare 3.3 V TTL adapter and no auto-reset circuit, hold GPIO0 low (the BOOT button), pulse EN, then release GPIO0 once flashing starts. If uploads fail at higher speeds with cheap clones, drop the baud rate to 115200.

Arduino Pro Mini via an FTDI header

The Pro Mini has no USB port, only a six-pin FTDI-compatible header. Its pin order depends on the board revision and vendor, and the official Arduino Pro Mini pinout lists GND, GND, VCC, RXI, TXO, DTR. Check the labels on your board against the adapter before plugging in. An FTDI-style adapter such as the Adafruit FTDI Friend or SparkFun Serial Basic plugs in directly when the pin order matches. Match the voltage: the 5 V/16 MHz Pro Mini needs a 5 V adapter, and the 3.3 V/8 MHz version needs 3.3 V.

In the Arduino IDE, choose Arduino Pro or Pro Mini, then the matching processor option: ATmega328P (5V, 16 MHz) or ATmega328P (3.3V, 8 MHz). The DTR line resets the board through an onboard 0.1 µF capacitor, so uploads start without a button press. This echo sketch confirms both directions work:

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    Serial.write(Serial.read());  // send back every byte received
  }
}

The same setup can stream potentiometer readings or debug output from robot boards that drive motors and servos. Keep motor power separate from the adapter.

Talking to the port: terminal software and settings

Most serial devices use 8N1: 8 data bits, no parity, 1 stop bit. Flow control is usually off. Baud rate is the setting you change most often: 9600 for Cisco consoles and many instruments, and 115200 for Raspberry Pi, ESP32 boot logs and most maker projects.

Tool OS Example Notes
PuTTY Windows, Linux Connection type Serial, line COM3, speed 115200 Set flow control under Connection > Serial
Tera Term Windows Setup > Serial port Handy for logging and macros
screen macOS, Linux screen /dev/cu.usbserial-XXXX 115200 Exit with Ctrl-A then K
minicom Linux minicom -D /dev/ttyUSB0 -b 115200 Turn off hardware flow control in setup (Ctrl-A O)
Arduino Serial Monitor All Pick the port, set baud at bottom right Baud must match Serial.begin()

Only one program can hold a serial port at a time. If PuTTY says it can’t open COM3, close the Arduino Serial Monitor or any other tool using that port.

Troubleshooting: no COM port, Code 10, garbage characters

Most serial failures come from a short list of causes: a charge-only USB cable, a rejected driver, a wrong baud rate, uncrossed TX/RX, or the wrong adapter type. Work down the table.

What you see Likely cause Fix
Nothing appears in Device Manager or dmesg Charge-only USB cable or bad port Swap to a known data cable and a different USB port
Appears under Other devices, no COM port Driver missing Read the hardware ID, then install that chip maker’s driver
“PL2303HXA phased out since 2012” End-of-life or fake Prolific chip Replace the adapter
Code 10 on a Prolific or “FTDI” adapter Counterfeit chip rejected, or wrong driver Check the chip; replace with a genuine adapter
Code 43 Descriptor failure: bad cable, hub or chip Try another cable and a direct port, not a hub
Code 39 Damaged or conflicting driver files Uninstall the device with its driver, reinstall from the vendor
Port vanishes after idle USB selective suspend Disable it in Power Options
Garbled characters Baud mismatch or wrong voltage standard Match baud and 8N1; confirm RS-232 vs TTL
Port opens, nothing received TX/RX not crossed, missing GND, wrong cable type Swap TX/RX, add GND, try a null modem
“Permission denied” on Linux User not in dialout sudo usermod -aG dialout $USER, then log in again

Port not showing up

Why doesn’t a cheap USB to serial adapter show up as a COM port in Windows 11? Usually the cable or the driver is to blame. Many USB cables bundled with gadgets are power-only, a common trap with older connectors (our micro USB vs USB-C guide explains how to tell them apart). If the device appears with a yellow warning, the driver is the problem. If nothing appears at all, suspect the cable or the adapter itself.

Adapters you’ve unplugged also leave “ghost” ports behind. In Device Manager, choose View > Show hidden devices, expand Ports and uninstall the greyed-out entries you no longer use.

Code 10 / Code 43 / Code 39

My PL2303 worked on Windows 7 but says “phased out since 2012” on Windows 11. Is there a fix? Not one that lasts. That chip generation has no Windows 10 or 11 driver, and Windows Update replaces rolled-back drivers. A G-series Prolific, FTDI or CP210x adapter fixes it for good.

Code 43 points to hardware or USB enumeration, so test another cable and plug straight into the computer, not through a hub. Code 39 usually clears after you uninstall the device, tick the option to delete its driver, and reinstall from the vendor’s own package.

To stop a port dropping out after idle time, open Control Panel > Power Options > Change plan settings > Change advanced power settings. Then set USB settings > USB selective suspend setting to Disabled.

Garbled text or nothing received

Port shows up but you get garbage or nothing: wrong baud or wrong cable? Garbage almost always means a baud mismatch, or an RS-232 adapter on TTL pins (or the reverse). Try 9600 and 115200 first. Silence usually means wiring: TX not crossed, no ground, or a straight-through cable where you needed a null modem. Run the loopback test to rule out the adapter, then check the cable.

Legacy software that needs COM1–COM4

Your legacy software only sees COM1 to COM4. How do you change the COM number? In Device Manager, open the adapter’s Properties > Port Settings > Advanced and pick a number from COM Port Number. If Windows marks it “in use”, a ghost device usually holds it, and you can remove that via Show hidden devices. The number sticks to that adapter, and for FTDI and CP210x chips to that adapter’s serial number. Plug into the same USB port each time to keep it stable.

Isolated adapters, USB-C, and multi-port hubs

Pay for galvanic isolation when the serial device runs on a different power system from your computer: industrial panels, long RS-485 runs, mains-powered machinery, or anything bonded to a different earth. Isolation breaks ground loops and protects your laptop’s USB port from surges. For benchtop Arduino and ESP32 work, a non-isolated adapter is fine.

Option Best for Trade-off
Non-isolated TTL dongle Arduino, ESP32, Raspberry Pi on the bench No protection from ground faults
Non-isolated DB9 (FTDI or PL2303G) Instruments, consoles, short cables Fine indoors on one power circuit
Isolated USB to RS-485/RS-232 (e.g. Waveshare industrial FTDI models) PLCs, VFDs, Modbus over long runs Costs more and is bulkier
ESD-protected chips (e.g. PL2303GE) Field service and frequent plugging Protects against static, not ground loops
Multi-port FTDI (FT2232D, FT4232H) Racks of instruments, test fixtures Each port gets its own COM number

USB-C adapters use the same bridge chips, so their drivers behave exactly as they do on USB-A models. A USB-C to USB-A dongle in front of a good USB-A adapter works too.

Power check

Wiring that touches mains voltage, such as inside a VFD cabinet or a building’s electrical panel, is a job for a qualified electrician. Keep your work on the low-voltage signal side of the terminals.

Before you order anything, look at the connector on your device, note its gender and check the board’s voltage. Then choose the chip. A genuine FTDI or CP2102N adapter, set to the right voltage and wired TX to RX, should get you a working port on the first try.

FAQ

Does USB use serial?

USB is a serial bus because it sends bits one at a time, but it isn’t a UART or RS-232 port. It uses packets and different voltage levels, so you need a bridge chip to talk to serial devices.

How do I install a USB serial converter driver on Windows 11?

Plug the adapter in and let Windows Update find the driver, including under Optional updates. If no COM port appears, read the hardware ID in Device Manager, download the installer from that chip maker (FTDI, Silicon Labs, WCH or Prolific) and install it. Device Manager then shows the port under Ports (COM & LPT).

Which driver does a StarTech USB to serial adapter need on Windows 11?

It needs the driver for its chip. The ICUSB2321F, ICUSB232FTN and ICUSB2322F use FTDI chips, so they run on FTDI’s VCP driver 2.12.36.20, which Windows Update normally installs automatically.

What is an RS232 to USB adapter driver?

It’s the virtual COM port driver for the bridge chip inside the adapter. Find the chip from the hardware ID (VID_0403 FTDI, VID_10C4 Silicon Labs, VID_1A86 WCH, VID_067B Prolific) and install that maker’s package.

Can RS232 be converted to USB?

Yes. A USB to RS-232 adapter converts the device’s ±V RS-232 signals into USB, and your computer sees it as a virtual COM port. The serial device itself needs no changes.

Do I need a female DB9 USB adapter?

Only if the port on your device is male. If that device is wired as DTE, a female null modem adapter such as the StarTech ICUSB232FTN connects directly. If it is wired as DCE, use a male adapter with a female-to-female straight-through cable.

What is USB to TTL?

It’s a USB to serial adapter that outputs logic-level UART at 3.3 V or 5 V instead of RS-232 voltages. It connects to the TX/RX pins of microcontrollers and Raspberry Pi boards.

What is the best USB to serial adapter?

For RS-232 equipment, a genuine FTDI adapter such as the StarTech ICUSB2321F. For microcontrollers, an FTDI, CP2102N or CH340C TTL board with a voltage jumper, such as the Adafruit FTDI Friend or SparkFun Serial Basic. For industrial RS-485, an isolated FTDI-based converter.

Is a Prolific USB to serial adapter still worth buying?

A current PL2303G-series adapter is fine. Its Windows 11 WHQL driver (v5.2.11.0, January 2026) arrives through Windows Update. Avoid anything with a PL2303HXA or PL2303X chip, which has had no Windows 10 or 11 support since the 2012 phase-out.

FTDI vs CH340 vs CP2102: which is better?

FTDI has the most mature drivers and the most tuning options, but it’s also the most counterfeited. The CP2102N is a strong, well-supported middle option. A genuine CH340 is cheap, gets its driver from Windows Update and is fine for hobby work.

Why does my Prolific USB to serial adapter show Code 10?

Usually the current driver has found an end-of-life PL2303HXA/XA chip or a clone and refused it. Replacing the adapter is the reliable fix.

Do I need a null modem cable?

Only when you connect two DTE devices, such as a PC-style adapter and another PC-style port. To connect a DTE to a DCE device, use a straight-through cable. For Cisco gear, use the console cable.

Is a USB to serial adapter the same as a USB to RS232 adapter?

Not always. “USB to serial” covers RS-232, TTL and RS-485 adapters. A USB to RS-232 adapter is the specific kind with a DB9 connector and ±V levels.

Can I plug a DB9 RS232 adapter into my Raspberry Pi or ESP32 pins?

No. RS-232 voltages can destroy 3.3 V GPIO. Use a 3.3 V USB to TTL adapter instead, or a MAX3232 module if you need to reach a real RS-232 device.

Does a USB to serial adapter work on Mac M1/M2/M3?

Yes. FTDI and CDC-class chips (CH343, CH9102) usually work natively on Apple Silicon. CP210x and Prolific adapters need the vendor’s macOS driver, approved in Privacy & Security.

How do I tell if my FTDI chip is fake?

On Linux, run lsusb -v and compare the iSerial values across adapters, because clones often share the same serial. Fuzzy chip markings and very low prices are further warning signs.

Notes on this article

Written by

Grace writes Artoo Maker Lab's Arduino and electronics basics guides, plus sensors, modules and workshop tools like soldering irons. She explains circuits the way she would want them explained on day one, with the wiring, the numbers and the common mistakes.

Covers: Electronics Basics, Arduino

  • Fact-checked by Hugo Lindgren against the sources listed below before publication.
  • Published

Fact-checking

  • Researched from 8 sources, listed below.
  • Every claim is checked by Hugo Lindgren; anything we cannot confirm is corrected, labelled or removed.
Sources (8)
  1. FTDI Virtual COM Port Drivers (ftdichip.com)
  2. FTDI driver 2.12.36.20 release information (iTechguides) (itechguides.com)
  3. Silicon Labs CP210x Universal Windows Driver Release Notes (silabs.com)
  4. Prolific PL2303 Windows driver download (prolific.com.tw)
  5. Prolific PL2303GT product page (prolific.com.tw)
  6. PL2303GT USB to RS232 Serial Bridge Controller (Prolific USA) (prolificusa.com)
  7. How to install PL2303 (Prolific) driver on Windows 11 (oemdrivers.com)
  8. Fix PL2303 phased out error (Systweak) (systweak.com)