Documentation

CH341A USB EEPROM & BIOS Flash Programmer (24/25 Series) | ShillehTek Product Manual
Documentation / CH341A USB EEPROM & BIOS Flash Programmer (24/25 Series) | ShillehTek Product Manual

CH341A USB EEPROM & BIOS Flash Programmer (24/25 Series) | ShillehTek Product Manual

manualshillehtek

Overview

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.

CH341A USB programmer diagram showing the USB plug, status LEDs, AMS1117 regulator, CH341A chip, 12 MHz crystal, SPI pin leaders, 3.3V/5V output, and 16-pin ZIF socket for 25xx SPI flash and 24xx EEPROMs

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.

Related Tutorials