MediumCH341 Programmer — Installation Guide | by Your-IoT | Oct, 2026 | Medium
Sitemap
Your-IoT

Your-IoT

IoT related projects based on web interfaces, ESP32, ESP8266 microcontrollers. Visit more at: https://your-iot.github.io/Watmonitor/

CH341 Programmer — Installation Guide

8 min readOct 22, 2026

The CH341-based programmer is an affordable tool most commonly used for programming hardware that utilizes UART, RS232, or RS485 communication interfaces — such as microcontrollers, peripherals, and control systems. Another widespread application involves working with I2C (2-wire) or SPI (4-wire) hardware, for instance, EEPROM memory chips, which are frequently found in automotive electronics. The CH341 is also used for flashing the BIOS on computer motherboards and various other electronic devices.

Press enter or click to view image in full size
CH341 Programmer software, EEPROM memory contents — 24C32 4 kB

This programmer allows you to work with EEPROM memory chips found on the circuit boards of control units, instrument clusters (dashboards), radios, and more. It is particularly popular for use with Volkswagen vehicles, as the version of the programmer featuring the CH341 chip (for I2C and SPI interfaces) is designed to support the 24 and 25 series EEPROMs — types commonly found in older, yet still widely used, car models. The programmer enables you to read the contents of EEPROMs of various capacities — such as 2 kB for the 24C16 or 4 kB for the 24C32 (among others) — and save the data as a binary dump (.bin file).

Press enter or click to view image in full size
EEPROM programmer with a USB-A connector and a CH341 converter
24C16 EEPROM memory in a DIP-8 package
24C16 EEPROM memory in an SOIC-8 package

Using specialized or associated software, you can analyze a memory dump, modify specific bits or bytes, and then use a programmer to write the data back into the EEPROM. One of the most common applications is retrieving the PIN (login code) required to unlock a car radio — or replacing the existing code with a known one — to easily unlock the unit. Alternatively, you can reset the code-entry attempt counter; this prevents the need to wait an hour for the radio to exit “SAFE” mode when it is powered on. Depending on the specific unit or component, various other functions are also available — for instance, you can enable or disable advanced features.

Programmers based on the CH341 chip typically feature a ZIF (Zero Insertion Force) socket (8x2 pins), which allows you to secure an EEPROM chip — provided it is in a DIP package and has been desorbed from its original board. The board layout is designed to accommodate both 24-series and 25-series memory chips, ensuring that the I2C or SPI pinout aligns correctly with the inserted chip.

ZIF socket 8*2

The correct orientation for the EEPROM chip is also indicated on the PCB via silkscreen markings. Furthermore, you can connect wires to the ZIF socket — for example, by soldering them directly to the SDA and SCL signal lines on a car radio’s PCB (in the case of 24-series EEPROMs) — eliminating the need to desolder the chip entirely. A ZIF socket utilizes a spring-loaded mechanism in which a lever presses the contact surfaces together, creating a preload that ensures sufficient contact.

There are also versions of the programmer that include a clip with a pinout matching these memory chips. The power cable is clearly marked to prevent polarity errors. The clip allows you to connect directly to a chip that is already soldered onto the PCB. This is particularly useful for EEPROM chips in SOIC (SOP) packages. In practice, however, using a clip for automotive electronics of this type is often impractical; you frequently need to disassemble the radio to make room for the clip. Furthermore, SOIC packages are typically soldered using SMT (surface-mount technology) — meaning they sit on the surface of the board — rather than THT (through-hole technology, such as with DIP packages), where the pins would be accessible from the underside.

Programmer with CH341 converter and a clip for direct connection to an EEPROM in an SOIC package

Consequently, connecting wires directly to the SDA and SCL signals is usually a more viable solution. If you have a clip, you will also have an expansion board; you can solder pins with a 2.54 mm pitch onto this board and insert it into the ZIF socket, with wires connected according to the EEPROM’s pinout.

When using a programmer to connect to an EEPROM chip on a circuit board — for instance, inside a car radio — you must also consider how to supply power. While you could potentially power the EEPROM chip directly via a clip (without powering the entire radio), it is better to desolder the chip; this avoids signal interference and prevents surrounding components from affecting the reading or writing process. Another approach is to solder signal wires and a ground wire to the board, connecting the other ends to a ZIF socket, while powering the radio externally — for example, using a car battery. In the case of a VW MFD1 radio, for instance, you would need to connect the UB+, SAFE, and S-kont pins to a 12V source, and connect the ground pin to the battery’s negative terminal. It is essential to power all these pins; otherwise, the radio might not accept the new code when you attempt to enter it.

Get Your-IoT’s stories in your inbox

Join Medium for free to get updates from this writer.

Today, we will look at how to set up this programmer — which uses a CH341 converter — on a Windows system, and we will cover compatible software and related topics. Many users struggle during the installation process — or even give up entirely — because the programmer fails to work. In some cases, even after installing the driver, the device remains listed as “Unknown” in Device Manager, and users find themselves stuck, unable to resolve the issue despite repeated attempts to reinstall the driver.

This occurs because the CH340 or CH341 chip is frequently used in open-source hardware as a USB-to-UART converter. In this context, the converter operates in serial mode. To work with EEPROM memory, this programmer must be set to parallel mode. Some programmers feature a jumper that must be correctly configured for parallel mode; if left disconnected, the CH341 operates in serial mode — suitable for UART-style communication (using RX/TX signals). This jumper is typically labeled “P/S,” or it may correspond to pins 1 and 2, depending on the specific version of the CH341-based programmer. Generally, connecting the jumper enables parallel mode, while disconnecting it enables serial mode (on versions with pins 1, 2, and 3, the jumper must be moved from the 1–2 position to the 2–3 position).

Many users mistakenly download the CH340/CH341 driver labeled “CH341SER” (CH341SER.INF) simply because it appears first in Google search results. This installs a driver intended for serial communication. Instead, you must download the “CH341PAR” (CH341WDM.INF) driver for the parallel interface, which also includes the low-level driver required for SPI/I2C communication. In this mode, the programmer can convert SPI/I2C signals to USB (and vice versa).

Where can you download the CH341PAR driver?
From the official website of Nanjing Qinheng Microelectronics Co., Ltd.:
https://www.wch-ic.com/downloads/CH341PAR_EXE.html

Where can you download the control software? The most commonly used tool is the CH341 Programmer, which allows you to both read from and write to EEPROM memory:
https://github.com/Keeyees/CH341A-Manual-NEW-JP/blob/main/CH341A%20Programmer%20v1.34.7z, or alternatively, AsProgrammer: https://github.com/YTEC-info/CH341A-Softwares/tree/main/Programas/Windows

Press enter or click to view image in full size
AsProgrammer (CH341 Programmer software alternative)

If you have the programmer software installed, you can connect the programmer via USB and check whether the software indicates a “Connected” status and allows you to select functions such as “Read” or “Write” in the upper section. If the driver is not installed, or if the connection has failed, these options will be unavailable. Furthermore, you will not see the programmer listed under COM devices in the Device Manager when it is in parallel mode; this is normal.

Press enter or click to view image in full size
AsProgrammer — EEPROM memory contents 4kB, 24C32 Atmel

For viewing EEPROM memory content — useful for analysis or comparing .bin files — I recommend the HxD HEX Editor:
https://mh-nexus.de/en/hxd/

How do you read the EEPROM content from a VW MFD1 radio?
The correct procedure is as follows (assuming an external power supply is connected to the radio, and wires are soldered onto the PCB for GND and the I2C bus signals — SDA and SCL):

First, check the voltage levels of the target memory chip. In VW radios, the operating logic is most commonly 5V; however, 3.3V logic is also possible. In such cases, you must perform voltage level shifting to avoid the risk of destroying the communication port. Some programmer boards based on the CH341 chip include a jumper for switching between 3.3V and 5V logic, though this is not always the case.

Connect the programmer to the PCB via the SDA, SCL, and GND points.
Connect power to the radio — specifically 3x 12V inputs (UB+, SAFE, and S-kont) plus GND.

Blaupunkt — MFD1 radio, connection of I2C signals and ground on the radio PCB

Power on the programmer (via USB).
Power on the radio. Wait for the radio screen to boot up and display the code entry prompt (or the “SAFE” screen).
Launch the CH341 (programmer) control software — e.g., AsProgrammer.

Configure the software as follows:
Select “24 EEPROM,” choose the type based on the memory size, and set the corresponding addressing mode.
Click “READ.”
Once the EEPROM content is displayed, you can save the dump for backup or analysis.
To extract the actual unlock code for the car radio, you will need specialized software (unless you know how to perform the extraction manually).
If you already know the code from another radio, you can copy the relevant lines from that MFD1 unit to the current one, allowing you to unlock it using the known code. Specifically, these are lines 10, 20, and 30 for a 24C16 (2 KB) chip, or lines 20, 40, and 60 for a 24C32 (4 KB) / 24C64 (8 KB) chip.
Read the .bin file multiple times and save each instance separately. If there is a poor physical connection, you may notice discrepancies between the different .bin dumps. This is problematic; if you write such data back to the chip, the radio may not function correctly — or it might fail to power on entirely due to corrupted EEPROM content.

CH341 Datasheet: https://www.wch-ic.com/downloads/CH341DS1_PDF.html

--

--

Your-IoT
Your-IoT

Written by Your-IoT

IoT related projects based on web interfaces, ESP32, ESP8266 microcontrollers. Visit more at: https://your-iot.github.io/Watmonitor/