The CH341A is the $5 USB programmer that flashes BIOS chips, router firmware and monitor EEPROMs — and it’s genuinely good if you pair it with the right software and dodge one hardware trap. This guide gives you both: AsProgrammer (the best free Windows tool for it, hosted below) and the 3.3 V warning that saves chips.

⬇ AsProgrammer 2.1.2 + CH341A driver

Windows 10/11 · open-source (GitHub: nofeletru/UsbAsp-flash) · supports CH341A black/blue editions

Download AsProgrammer 2.1.2

File: AsProgrammer_2.1.2.zip · 20.4 MB (21,436,082 bytes) · released 24 Jan 2025, still the latest release on 19 Oct 2026 · MIT licence · SHA-256: 7921dcaa0296e73eb4cc66f91698ca879ce2164790fce335e64afb89597a152f (identical to the GitHub release asset, re-checked 19 Oct 2026) · unmodified mirror of GitHub nofeletru/UsbAsp-flash

 
Download CH341A driver

File: CH341PAR_Driver.zip · 0.5 MB (531,174 bytes) · SHA-256: 6d8284cfe12ffebfd42a8ca9f0a867bacca4c5bcf70bd08b16eec673ed9cab1d · contains WCH’s CH34XPAR.EXE (580,400 bytes, SHA-256 7f8d4c822b4a5f1bd146e90df17666f0c435878f488c5d0828a00254b65ccf77, the same file AsProgrammer ships in drivers\CH34X); its CH341WDM.INF reads DriverVer = 10/10/2023, 2.4.2023.10 · unmodified mirror of wch-ic.com

Driver is the official WCH CH341PAR package, version 2.4. WCH’s download page lists version 2.6 (uploaded 24 Apr 2025) as current; if 2.4 gives you trouble on a new Windows build, take 2.6 from wch-ic.com. Install the driver first, then unzip AsProgrammer anywhere. It is portable, with no installer.

What Device Manager shows, and which software can use it

The hardware IDs and names below are copied from the CH341WDM.INF inside the hosted driver (version 2.4.2023.10). The same INF also binds WCH’s newer CH347, which AsProgrammer has supported since 2.1.0.

USB ID Device Manager name Driver What it means
1A86:5512 USB-EPP/I2C… CH341A CH341PAR (CH341WDM.SYS / CH341W64.SYS) Programmer mode, correct driver. AsProgrammer, NeoProgrammer and WCH’s own tools see it.
4348:5512 USB-EPP/I2C… CH341 CH341PAR Same chip under WCH’s older vendor ID; same software works.
1A86:5523 USB-SERIAL CH341A CH341SER (serial driver) The chip came up in its serial (UART) mode. AsProgrammer will not find it; on boards with a mode jumper, move it to the programmer position.
1A86:5512 under “Universal Serial Bus devices” whatever name Zadig gave it WinUSB (installed by Zadig) Only flashrom can use it now. To go back to AsProgrammer, uninstall that device with “delete the driver” ticked and reinstall CH341PAR.
1A86:55DB, 55DD (CH347T), 55DE (CH347F) USB HighSpeed-SPI/I2C… CH347T / CH347F CH341PAR (same INF) Not a CH341A: pick “CH347” in AsProgrammer’s Hardware menu (2.1.0 and later). Mode table, drivers per interface and the chip-revision problems are in the CH347 programmer on Windows 11 guide.

AsProgrammer versions and what changed

From the project’s release notes. The 2.1.2 chip list (chiplist.xml) holds 892 SPI parts from 57 manufacturers, 12 I²C EEPROMs and 6 Microwire parts.

Version Released Change that matters for a CH341A user
2.1.2 24 Jan 2025 Microwire on CH347T; IS25LP/WP080D-020D and Fudan FM25Q128 added
2.1.1 10 Dec 2024 MX25L51245G, W25Q128JW, GD25B256E and others added; CH347 SPI speed setting now saved
2.1.0 7 Sep 2024 CH347 programmer support
2.0.4 26 Jul 2023 “About 10% speed-up for CH341A SPI write”; Winbond SR2 now written correctly; 0xAB release-from-power-down option
2.0.3a 16 Dec 2021 I²C start/stop fix for FT232H

The two error messages you will actually see

⚠️ The 5-volt trap (read before connecting a chip)

Most cheap CH341A boards (the classic black edition) feed the chip’s data lines at 5 V while the chip expects 3.3 V. SPI flash is usually tolerant enough to survive a read, but it’s out-of-spec stress and occasionally kills chips or corrupts writes. Three ways out:

Wiring: socket vs clip

Before either: make sure the clip you own actually fits the chip you have, and that pin 1 is where you think it is. The SOIC-8 test clip guide covers pitch and body width, the 1.8V-versus-3.3V part number trap, and how to tell a bad contact from a bad chip.

There is a third option the clip-vs-socket debate skips: take the chip off the board. When the clip will not read reliably — powered rails fighting you, a chip wedged under a shield — hot air is the honest answer. See the hot air rework station guide for how to lift a 25xx without taking the pads with it.

  1. Desoldered chip: into the ZIF socket, pin 1 (dot) toward the lever, in the SPI position (the socket silk shows 25xx placement);
  2. In-circuit (SOIC-8 clip): red wire = pin 1, clip firmly seated. In-circuit works when the board doesn’t back-power — if reads are garbage or the chip reads all 00/FF, stop fighting and desolder;
  3. Plug into a rear USB port (hubs cause dropouts on long reads).

First flash with AsProgrammer

  1. Open AsProgrammer → Hardware → CH341a;
  2. Click the magnifier (detect) — or pick the exact part from the IC list if detection guesses wrong;
  3. Read IC → save the dump. Read twice, compare sizes/content — cheap clips make flaky contact and a bad backup is worse than none;
  4. Load your new image → Erase → Program → Verify. Green “Verify OK” or it didn’t happen.

Common questions

Windows doesn’t see the programmer? Install the driver from the box above, replug. Device Manager should show “USB-EPP/I2C… CH341A”. Still nothing: try another cable — the bundled ones are often charge-only garbage. Note that the CH341A uses the WCH driver, not a generic one — do not run Zadig on it; that tool is for devices like the USBasp.

Can I use flashrom instead of AsProgrammer? Yes, and it is the better answer if you want something scriptable across several programmers. It costs you a driver swap — flashrom needs WinUSB bound to the CH341A with Zadig, not the WCH driver above, so the two tools cannot share the device. There is also no official Windows binary; our flashrom on Windows guide covers the ten-minute build and the commands.

Chip detected as wrong model? Auto-detect reads the JEDEC ID, but clones confuse it. Select the exact printed part number manually — capacity mismatch is how you get a half-written brick.

The chip is 8-pin but it is not SPI flash? Check the board first: an 8-pin part sitting next to an MCU on a control board is usually a 24Cxx I²C EEPROM, not 25-series flash. The same $5 board reads it, but with a different bus, a different addressing scheme per capacity and a write-protect pin that acknowledges writes it never performs — see 24Cxx EEPROM with a CH341A.

CH341A vs a real programmer? For 8-pin SPI flash, the CH341A does the job. The moment you touch parallel chips, MCUs or need speed and reliability daily, step up to a T48 — see also the XGpro software page.

When AsProgrammer is not enough: SPI NAND, Microwire 93Cxx, OTP/security registers or ASUS .CAP files are jobs the same $5 board can do with different software. That is what NeoProgrammer adds — with the caveat that it is closed source and has no official download page, so verify the hash before running it.

Is there a case where the 5-volt trap is not a trap? Yes, and it is the most common eight-pin job outside a PC: the EDID EEPROM behind a monitor’s video connector. That bus is specified to run at 5 V on the cable side, so a stock CH341A is in spec there — but only there, and only on the cable side of the level shifter. Our guide to fixing a monitor EDID works through where the 5 V is intended and where it still is not.

Verdict

Five dollars, fits in a pocket, saves motherboards. Know the voltage trap, keep backups religious, and the CH341A + AsProgrammer combo is the best value in all of bench electronics.

Sources