The CH340G is the SOP-16 USB-to-UART bridge from WCH — the chip on every Arduino Nano clone and half the USB-TTL adapters in the world. Sixteen pins, a 12MHz crystal requirement, and a driver that works on Windows, macOS, and Linux out of the box.
But which pins do you actually wire on a fresh board? That's what this guide is for — the full pinout, the functions that matter, and the mistakes that show up on forum threads every week.
| Pin | Name | Type | Function |
|---|---|---|---|
| 1 | GND | Power | Ground — connect to USB ground |
| 2 | TXD | Output | Serial transmit (to the MCU's RX) |
| 3 | RXD | Input | Serial receive (from the MCU's TX) |
| 4 | V3 | Power | Internal 3.3V regulator output — 4.7-20nF cap to GND (5V mode) or tie to VCC (3.3V mode) |
| 5 | UD+ | I/O | USB D+ data line |
| 6 | UD- | I/O | USB D- data line |
| 7 | XI | Input | 12MHz crystal input |
| 8 | XO | Output | 12MHz crystal output |
| 9 | CTS# | Input | Clear to Send — modem flow control, active low |
| 10 | DSR# | Input | Data Set Ready — modem flow control, active low |
| 11 | RI# | Input | Ring Indicator — modem flow control, active low |
| 12 | DCD# | Input | Data Carrier Detect — modem flow control, active low |
| 13 | DTR# | Output | Data Terminal Ready — the auto-reset pin on Arduino boards |
| 14 | RTS# | Output | Request to Send — second flow-control / auto-reset pin |
| 15 | R232 | Input | Auxiliary RS232 enable — active high, internal pull-down, inverts RXD when asserted |
| 16 | VCC | Power | Supply rail — 5V or 3.3V (0.1µF decoupling) |
Per the WCH CH340 datasheet: the "#" suffix means active low. Pins 9-12 are inputs you can leave floating when you don't use hardware flow control — the driver handles the rest.
What the 16 pins do — where the SOP-16 budget goes:
Nearly half the package is modem flow control — pins most UART designs never wire. The core circuit needs only 10 pins; the rest exist for RS232-era compatibility.
SOP-16 pinout: pins 1-8 carry the essentials — power (1, 4, 16), the serial pair (2, 3), the USB lines (5, 6) and the 12MHz crystal (7, 8). Pins 9-14 are the modem flow-control set (all active low), pin 15 the RS232 mode latch, and VCC/ GND close the loop.
TXD (pin 2) and RXD (pin 3) — the serial pair. TXD transmits to the MCU's RX; RXD receives from the MCU's TX. Cross them — TX to RX, RX to TX. Wiring them straight-through is the most common "why is nothing coming through" mistake.
Note that RXD sits at 5V logic on a 5V-supplied CH340G; a 3.3V MCU's TX needs a divider or level shifter into it, and the CH340G's TXD at 5V needs protection before a 3.3V MCU's RX.
V3 (pin 4) — the mode switch. In 5V operation, decouple the internal 3.3V regulator with a 4.7-20nF capacitor to ground. In 3.3V operation, tie V3 directly to VCC. The 10nF value on most Arduino schematics sits inside the official window.
What you must not do: run 5V VCC and tie V3 to VCC — that shorts the internal regulator output to 5V.
XI (pin 7) and XO (pin 8) — the 12MHz clock. A 12MHz crystal with two ~22pF load caps across XI/XO is the standard circuit. Or feed an external oscillator into XI and leave XO unconnected.
Why does the clock matter so much? Because the CH340G has no internal oscillator — no 12MHz on XI, no enumeration, no COM port.
DTR# (pin 13) and RTS# (pin 14) — the auto-reset pair. On Arduino boards, DTR# goes through a 100nF capacitor to the MCU's RESET. When the host opens the serial port, DTR# pulses low and the capacitor couples the edge into RESET.
RTS# is the second flow-control output — some boards use it for the EN pin on ESP8266 modules. Why does the capacitor matter? Because a direct connection would hold the MCU in reset the whole time the port is open.
R232 (pin 15) — the RS232 mode latch. Asserting it (high) inverts the RXD signal, for use with external RS232 transceivers. It's latched during power-on reset, so it must be set at power-up, not mid-run. Floating it (internal pull-down) is the normal UART-TTL configuration.
USB-to-UART wiring: USB D+/D- into pins 5/6, a 12MHz crystal on 7/8, TXD to the MCU's RX and RXD from the MCU's TX (with a divider for 3.3V MCUs). The DTR# to RESET path through 100nF gives the auto-reset that makes Arduino-style uploads work.
1. TXD/RXD wired straight-through. The serial pair is crossed: CH340G TXD goes to the MCU's RX. Straight-through gives you a port that opens fine and transfers nothing.
2. V3 tied to VCC in 5V mode. That shorts the internal 3.3V regulator output to 5V. V3 gets a 4.7-20nF cap in 5V mode; it ties to VCC only in 3.3V mode.
3. No crystal on XI/XO. The CH340G has no internal oscillator. No 12MHz clock = the chip never enumerates, no COM port appears. (This is the main reason the CH340C with its built-in crystal exists.)
4. 5V TXD into a 3.3V MCU's RX. The CH340G runs its serial pins at VCC logic. A 5V TXD into a 3.3V STM32 or ESP32 RX can latch up or damage the pin. Divide it down or use a level shifter.
5. Forgetting the DTR auto-reset capacitor. DTR# must couple through a capacitor (typically 100nF) to RESET. A direct connection holds the MCU in reset while the port is open — "board won't upload, but serial monitor works" is the symptom.
6. Wrong V3 capacitor value. The official window is 4.7-20nF — the 10nF on Arduino schematics is correct. A 100nF there is out of spec, and leaving V3 empty in 5V mode leaves the internal reference noisy.
7. Assuming the 2023+ driver works with clone chips. WCH's newer Windows drivers dropped support for counterfeit CH340G parts. If a board stops enumerating after a driver update, that's the tell — genuine parts keep working. Buy from traceable stock.
A: Mostly, but the crystal pins differ in practice. The CH340C (SOP-16) has the same footprint but a built-in crystal — its XI/XO pins don't need external components. On a CH340G board, the crystal and caps sit on pins 7/8; a CH340C drops onto the same board and the empty crystal pads are harmless.
A: 2Mbps (the official spec). Standard rates up to 921600 are rock solid; above that, quality of the crystal and PCB layout start to matter. For production, stick to 115200 or 921600 unless the host and cable are known-good.
A: The 2023 WCH drivers dropped clone-chip support. If your board uses a counterfeit CH340G, the newer driver refuses it. Fixes: install the 2019-era driver, or replace the chip with a genuine one. Genuine CH340G parts keep working with current drivers.
A: The CH340G's serial pins run at VCC (5V) logic. A 5V TXD into a 3.3V MCU's RX pin can back-feed the MCU's ESD diodes and pull the rail up. Add a divider (2:1) or a level shifter between the CH340G TXD and the 3.3V MCU's RX.
A: Auto-programming. RTS# drives the EN (enable) pin through a capacitor while DTR# drives GPIO0 — the esptool sequence toggles them to enter bootloader mode. Wire them through 100nF caps, and keep the polarity per the board's schematic; getting them swapped is a classic "can't flash the ESP" cause.
A: Yes. Without hardware flow control, all four float fine — the driver treats them as inactive. Only wire them if you're building an RS232-style modem interface with full flow control.
A: Check the marking and the driver behavior. Genuine parts carry a clean WCH logo mark and keep working with the 2023+ drivers; clones typically fail after the driver update. On the bench, a genuine part also enumerates with a stable COM port across reboots — clones sometimes drop after sleep/wake cycles.





