The CH341A USB Programmer reads and writes the two chip families that hold most of the worldβs firmware: 25xx-series SPI NOR flash (the BIOS chip on motherboards, the firmware chip in routers, TVs, and countless embedded boards) and 24xx-series I2C EEPROMs. The WCH CH341A chip on the board bridges USB to SPI and I2C, so from your computer the whole device looks like a simple USB peripheral β no external power supply needed.
Chips drop into the 16-pin ZIF socket, which has marked zones for 25xx and 24xx parts, and a lever that clamps the pins without force. For chips still soldered to a board, the SPI pin leaders next to the socket accept a SOIC-8 test clip cable, letting you attempt in-circuit reads without desoldering. An AMS1117 regulator supplies 3.3Β V, and the output header exposes both 3.3Β V and 5Β V for adapters and clips.
On the software side you have mature options on every OS: AsProgrammer and NeoProgrammer on Windows, and flashrom, IMSProg, and ch341eeprom on Linux β including the Raspberry Pi, which makes a compact dedicated flashing station. This manual covers chip placement, clip use, the standard back-up-first workflow, and the commands you will actually run.
At a Glance
Programmer IC
WCH CH341A
Programs
25xx SPI flash & 24xx I2C EEPROM
Socket
16-pin ZIF with locking lever
Interface
USB-A, USB 2.0
Software
AsProgrammer, flashrom, IMSProg
Power Outputs
3.3 V and 5 V pins
Specifications
Parameter
Value
Bridge chip
WCH CH341A (USB to SPI / I2C / UART)
USB interface
USB 2.0 full speed, USB-A plug
SPI flash support
25xx series: W25Q, MX25, GD25, EN25, S25FL and compatibles
EEPROM support
24xx series I2C: 24C01 β 24C512 and compatibles
Typical capacity range
Up to 128 Mbit (16 MB) SPI flash
Chip socket
16-pin ZIF, marked 25XX / 24XX zones
In-circuit option
SPI pin leaders for SOIC-8 test clip
On-board regulator
AMS1117 3.3 V
Power output header
3.3 V and 5 V
Indicators
Power LED + read/write activity LED
Clock
12 MHz crystal
OS support
Windows (AsProgrammer / NeoProgrammer), Linux & Raspberry Pi (flashrom, IMSProg)
Pinout Diagram
The diagram below maps the board: the USB plug at the top, power and read/write LEDs, the AMS1117 regulator, the 12Β MHz crystal, the CH341A chip itself, the SPI pin leaders used with test-clip cables, the 3.3/5Β V output header, and the ZIF socket with its 25XX / 24XX placement zones and locking lever.
Wiring Guide
Placing a 25xx SPI Flash Chip
Item
Setting
Notes
Chip family
25xx SPI NOR flash
W25Q32/64/128, MX25, GD25, EN25, S25FLβ¦
Socket zone
Rows marked 25XX
Follow the silkscreen next to the socket
Pin 1 (dot)
Toward the ZIF lever
Wrong orientation usually just fails to detect
Package
DIP-8 drops straight in
SOIC-8 parts need a SOP8 adapter or test clip
Supply
3.3 V
Nearly all modern SPI flash is 3.3 V β never feed it 5 V
Back up before you write. Read the chip twice, compare the two dumps, and store the backup somewhere safe before erasing or writing anything. A verified backup is the only undo button a firmware chip has.
Placing a 24xx I2C EEPROM
Item
Setting
Notes
Chip family
24xx I2C EEPROM
24C02 through 24C512 and compatibles
Socket zone
Rows marked 24XX
Different position than 25xx chips
Pin 1 (dot)
Toward the ZIF lever
Check the silkscreen outline
I2C address
0x50
Address pins are tied low in the socket
Exact part number
Select manually in software
24xx chips have no ID register to auto-detect
Pick the right size. Because 24xx EEPROMs cannot be auto-identified, selecting a 24C32 profile for a 24C64 silently truncates your dump. Read the marking on the chip package and match it exactly in your software.
Linux & Raspberry Pi Setup
Task
Command
Notes
Install flashrom
sudo apt install flashrom
Debian, Ubuntu, Raspberry Pi OS
Probe the chip
sudo flashrom -p ch341a_spi
Prints the detected flash part
Read / back up
sudo flashrom -p ch341a_spi -r backup.bin
Run twice, compare checksums
Write an image
sudo flashrom -p ch341a_spi -w new.bin
Erases, writes, and verifies
GUI option
sudo apt install imsprog
IMSProg handles 25xx and 24xx chips
No drivers needed on Linux. The kernel ships CH341 support, so the programmer works the moment you plug it in. A Raspberry Pi running flashrom makes a tidy, dedicated flashing bench that keeps risky writes off your main machine.
Using a SOIC-8 Test Clip (In-Circuit)
Item
Setting
Notes
Clip red wire
Chip pin 1 (dot corner)
Line the red stripe up with the dot before clamping
Clip cable
SPI pin leaders / adapter board
Match the pin-1 marking on the programmer end too
Target board power
Fully unpowered, ideally unplugged
The programmer supplies the chip through the clip
Read strategy
Read twice, compare hashes
Identical hashes = solid clip contact
In-circuit reads are not guaranteed. Other components hanging on the SPI bus can drag the signals down, and backfeeding a whole board through the clip sometimes browns out the read. If dumps keep differing or detection fails, desolder the chip and use the ZIF socket β that always wins.
Code Examples
Windows β AsProgrammer Workflow
asprogrammer-session.txt
1. Driver: run Zadig, pick the CH341A device, install WinUSB
(the classic WCH CH341PAR driver also works with most builds)
2. Seat the chip: pin 1 dot toward the lever, in the 25XX zone
3. IC > Detect β or select the exact part number by hand
4. Read IC, then save the buffer as backup1.bin
5. Read IC again, save as backup2.bin, confirm both files match
6. Open your new image, then Program IC (erase + write)
7. Verify IC β only pull the chip after verify passes
Linux β flashrom Backup & Write
terminal.sh
# Install and probe
sudo apt update
sudo apt install flashrom
sudo flashrom -p ch341a_spi
# Read the flash TWICE and make sure the dumps match
sudo flashrom -p ch341a_spi -r backup1.bin
sudo flashrom -p ch341a_spi -r backup2.bin
md5sum backup1.bin backup2.bin
# Write a new image (flashrom erases and verifies automatically)
sudo flashrom -p ch341a_spi -w firmware.bin
# Explicit verify against a file, any time
sudo flashrom -p ch341a_spi -v firmware.bin
24xx EEPROM β IMSProg / ch341eeprom
eeprom-session.sh
# GUI route (Debian 12+ / Ubuntu 24.04+ / recent Raspberry Pi OS)
sudo apt install imsprog
imsprog # pick the 24Cxx part, then Read / Write / Verify
# CLI route: the open-source ch341eeprom tool
# (build it from its GitHub repo if your distro has no package)
sudo ch341eeprom -s 24c64 -r dump.bin # read a 24C64
sudo ch341eeprom -s 24c64 -w dump.bin # write it back
Raspberry Pi β Dedicated Flashing Station
raspberry-pi.sh
# Same flashrom workflow, on Raspberry Pi OS
sudo apt update
sudo apt install flashrom
# Plug the CH341A into any USB port, then:
sudo flashrom -p ch341a_spi -r router_backup.bin
sha256sum router_backup.bin
# Optional: allow running without sudo
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="5512", MODE="0666"' | sudo tee /etc/udev/rules.d/99-ch341a.rules
sudo udevadm control --reload-rules
Frequently Asked Questions
Windows does not see the programmer. Which driver do I need?
Modern tools (AsProgrammer, NeoProgrammer) talk to the CH341A through WinUSB: run Zadig, select the CH341A entry, and install the WinUSB driver. Older tools expect the WCH CH341PAR driver instead. If a tool cannot open the device, the driver is almost always the mismatch β switching between the two in Zadig takes seconds.
The software says no chip detected. What should I check?
In order: pin 1 orientation (dot toward the lever), correct socket zone (25XX vs 24XX rows), the ZIF lever fully locked, and clean chip legs. With a test clip, re-clamp until two consecutive reads hash identically. If the chip ID is reported but unknown, update the software β newer builds carry bigger chip databases.
Can it read 1.8 V flash chips?
Not directly. The programmer drives 3.3 V logic, and 1.8 V parts (common in newer laptops and phones) can be damaged or simply fail to respond. Use a 1.8 V adapter board β a small level-shifting PCB that sits between the chip and the ZIF socket β and the same software workflow applies.
Why read the chip twice before writing anything?
A single read can silently contain bit errors from a marginal clip contact or a dirty leg. Two reads with matching checksums prove the link is stable and give you a trustworthy backup. Skipping this step and writing over the only copy of a laptopβs BIOS is the classic way to turn a repair into a brick.
Can it program AVR, STM32, or PIC microcontrollers?
No. The CH341A programmer targets memory chips β SPI NOR flash and I2C EEPROMs β not microcontroller flash. For MCUs you want their native tools: USBasp or an Arduino-as-ISP for AVR, ST-Link for STM32, PICkit for PIC.
Is 5 V going to damage my 3.3 V flash chip?
Keep everything at 3.3 V: use the 3.3 V supply position and avoid the 5 V pins when working with SPI flash. Be aware that some low-cost CH341A boards push the data lines close to 5 V even with a 3.3 V supply; chips usually tolerate short sessions, but for valuable targets a 3.3 V-clean board revision or adapter is the safe choice.
How big a chip can it handle, and how long does flashing take?
Chips up to 128 Mbit (16 MB) are routine, which covers BIOS and router flash. The CH341A is not fast: a 16 MB read takes a few minutes, and a full erase-write-verify cycle proportionally longer. For repeated large jobs that is the trade-off for a programmer this inexpensive.