CH341A Mini Programmer Schematic and Drivers

 Author:   Posted on:   Updated on:  2019-02-23T15:03:12Z

CH341A is an USB interface chip that can emulate UART communication, standard parallel port, memory parallel port and synchronous serial (I2C, SPI). The chip is manufactured by Chinese company Jiangsu QinHeng Ltd. CH341A is used by some cheap memory programmers. The IC is somehow limited in this configuration, because the programmer makes use only of the SPI and I2C interface and leaves a lot of pins unconnected. A popular device is the black CH341A MiniProgrammer that you can buy for 2 to 5 USD.

The problem with these devices is that you get them without any documentation or software. Drivers are available from manufacturer's website (but the site is written in Chinese). Also, some source codes are available from manufacturer. There are open source applications that support this programmer. But, first of all, let's have a look at the hardware.

Photo of the black CH341A Mini Programmer

Photo of the black CH341A Mini Programmer

A quick look at the board reveals the main electronic parts used: CH341A, a 12 MHz crystal required by the chip, a 3.3V regulator, two 7 pin headers and the ZIF (zero insertion force) socket. The programmer can be bought with additional sockets and adapters, some of them with voltage shifting circuits.

After some searching I found a schematic of a CH341A based programmer, but it wasn't exactly right and complete. It didn't have the pinheaders on the sides of the ZIF socket which I wanted to know what they are for. I took the multimeter and started to trace lines on the programmer PCB until I got a complete schematic. The schematic is quite simple, based on datasheet.

Schematic of the black CH341A Mini Programmer

Schematic of the black CH341A Mini Programmer

I also found WAVGAT store (a seller on AliExpress). Their product page offered a the PCB design of the device (only top side, however).

CH341A Mini Programmer PCB

CH341A Mini Programmer PCB (by WAVGAT/AliExpress)

Now, let's return to the schematic and analyze it a bit. The chip is powered from 5V, so its I/O ports will also use 5V. Basically this is a 5V device. The problem is that any memory you fit in the socket will be powered from 3.3V. And this seems to be the only function of the 3.3V regulator (besides the 3.3V pin on the SPI connector). I don't know why the designer even used a regulator, if it didn't provide a switch to choose between 3.3V or 5V levels and supply.

By reading the datasheet, we can see that the manufacturer recommended to connect a 0.47 uF capacitor between RSTI (pin 2) and VCC for improved stability. There is none on this board.

Anyway, I used the device with I2C EEPROMS (3.3V and 5V) compatible and also SPI FLASH memories (3.3V devices) without any issues. For improved reliability and to avoid burning memory chips, I highly recommend using a level shifter. In order to turn this programmer into a 3.3V device, you could cut the 5V line from VCC pin (28) and tie it to the 3.3V output from regulator. You will also need to connect V3 pin (9) to VCC (3.3V). User johnmx from EEVblog Forum has succeeded in converting this programmer to 3.3V levels.

Note that the device works as a programmer only if ACT# pin is connected to ground via a resistor. That's why you should put a jumper across pins 1 and 2 of the UART connector. Otherwise the device will be recognized as a standard USB to serial converter.

The manufacturer of CH341A provides a lot of useful things on the product page. Here are the files you can find and what they contain (the first two are the ones you need):

  • CH341SER.EXE - self installing archive with USB to serial driver.
  • CH341PAR.EXE - self installing archive with multiprotocol interface driver (this one is for the programmer mode)
  • CH341SER.ZIP - archive containing driver files and serial API and library (you don't need specific API for standard serial port, but it contains some special functions to get IC version etc.)
  • CH341PAR.ZIP - archive containing driver files for interface mode and API (header and library to access the device and use any protocol you want).
  • CH341PAR_LINUX.ZIP - archive containing Linux driver source code and Linux API
  • CH341SER_LINUX.ZIP - Linux driver source code for serial port (don't need this one, it's already included in kernels)
  • CH341EVT.ZIP - some source code and tools written to be used with an evaluation board (may be useful for programming software that can access this device)
  • CH341DS1.PDF - datasheet, in Chinese
  • CH341DS2.PDF - some additional info and API documentation, in Chinese
  • CH341DP.ZIP - contains an ISP programming tool?
  • CH341DPS.ZIP - probably similar to the above, once required login to download

A regular user only needs the first two. Just double click on each of them and when the dialog appears click on Install. Next thing you'll need is software. Windows users can try AsProgrammer.

The API becomes interesting due to the versatility of the chip. You can build your own software that will read/write data from/to sensors, real time clocks or any other devices that use serial communication. You can also interface parallel devices to the chip, but this will require modification of the programmer board in order to connect to pins. There are also some other programmers and boards based on this chip. You can find most of them by searching "CH341A" on Banggood and AliExpress. Here is an overview of the programmers and development boards available:

CH341A Programmers and boards overview

CH341A Programmers and boards overview

Further reading (for developers): I2C Programming and SPI Programming using Windows API.


  1. Great job. thanks for taking the time to share the information.

    Mike Z

  2. I got the software installed, switched it to English from Chinese, and loaded the drivers. I still could not program a 24C32 EEPROM. After some board level troubleshooting I found that pins 1,2,3,4 and 15 were not connected to anything! That said, there was no chip ground and no connections to the 24C32 address lines. One other pin, socket pin 15, (EEPROM chip pin 7) was not grounded. that is the read/write line. After adding several jumpers to ground the programmer worked.

    Mike Z

  3. the 470nF capacitor should not be between VCC and RSTI, as you say, but between V3(pin9) and ground where is, as the datasheet I found says, and shoud be between 10nF to 470nF.

    1. My bad, indeed for stability there should be an another capacitor as you wrote.

    where files are all zipped together and a good video for this is at

  5. I have one of these arriving to programme some 24Cxx devices. I don't think the 3.3/5.0 volt issue is a problem here because the SDA and SCL voltages are derived from pull up resistors. So 3.3v devices should not be stressed. However if the pull ups are powered from 3.3v via a LED I doubt the 24Cxx specs are being adhered to - ADA and SCL will only go to less than 2V ????

    1. That was a difficult question. I took the multimeter and measured (again) the voltages on the idle I2C bus. 4.9 volts... I unplugged the programmer and tried to measure resistance between I2C bus pins and power line (3.3V and 5V). Nothing conclusive. So I returned to datasheet. Here is what it says in the Chinese PDF at page 3, section 4.2, pin 24 of 341A (translated with Google): "Chip function configuration output, built-in pull-up resistor, can be connected to the serial EEPROM configuration chip SCL pin". The pull-ups are therefore built-in. And look at the schematic again: only SDA is connected to the LED. What would be pulling SCL up if it weren't the built-in resistors?

  6. Hi, reading chinese datasheet for CH341 and at end of chapter 5.2 硬件说明 (Hardware description) is stated:
    CH341芯片支持5V电源电压或者3.3V 电源电压。当使用5V 工作电压时,CH341 芯片的VCC 引脚 输入外部5V 电源,并且V3 引脚应该外接容量为0.01uF~0.1uF 的电源退耦电容。当使用3.3V 工作
    电压时,CH341 芯片的V3引脚应该与VCC引脚相连接,同时输入外部的3.3V电源,并且与CH341芯
    It can be translated:
    The CH341 chip supports a 5V supply voltage or a 3.3V supply voltage. When using a 5V supply voltage, the VCC pin of the CH341 chip inputs an external 5V power supply, and the V3 pin should be externally connected with a power supply decoupling capacitor of 0.01uF to 0.1uF. When working with 3.3V voltage, the V3 pin of the CH341 chip should be connected to the VCC pin, and an external 3.3V power supply is input, and the CH341 core is connected.
    The operating voltage of other circuits connected to the chip cannot exceed 3.3V.

    As far as I understand, that mean, that chip have internal 3.3V regulator and IO pins are NOT 5V tolerant. It mean, it always use 3V3 for communication with eeprom.

    1. "The operating voltage of other circuits connected to the chip cannot exceed 3.3V" when CH341A is powered from 3.3V. Otherwise, I/O pins use 5V when chip is supplied with 5V. There is no mention of an internal regulator in datasheet.

  7. Hello,

    I need a recommendation for a capable and quality device that you consider better than the CH341A that can do everything the CH341A does (and more) that I may be able to get for under $75.00 US.

    Steve Sybesma
    Brighton, CO

  8. Another question would be, can a EZP2010 do everything that a CH341A does (and more)? Are they any more capable/better quality or just the same? It's very hard to evaluate this stuff because I'm just looking at pictures and have no idea of the reputation in the community for any of these. I don't want to waste my time with something that is junk.

  9. You can convert the programmer to 3.3V version by cutting the track from the 3.3V regulator to the chip pin 28 and putting a jumper between 5V and 3.3V pins.

    The track is located underside the board and it is very easy to cut with a knife. The result is the same as explained in the EEvblog but no soldering needed.


Please read the comments policy before publishing your comment.