Introduction: How to Fix Bad Chinese Arduino Clones

Have you ever wondered if a cheap Chinese Arduino clone will actually work?
You pay only a few bucks and get the same product. Sounds to good to be true right?

The truth is that some work and some won't. Follow the rest of this instructable and I'll explain you how to make them all work in no time.

Here is where I got my Cheap Arduino clone

Step 1: Genuine Arduino and Chinese Clone - the CH340 Chip Problem

Picture of Genuine Arduino and Chinese Clone - the CH340 Chip Problem

I use an Arduino Uno for this example but it is the same process for most Arduino models.
So here we have a genuine Arduino and a Chinese clone. Let's do the test.

My Arduino environment has been installed and is working properly. First I plug in the genuine Arduino. Everything works just fine. Now I use my cheap Chinese copy and.... the computer does not recognise the hardware.

The problem is that the clone does not use the standard serial to usb chip but a chip marked CH340. Your computer will not recognize these CH340 chips on your computer. To fix this is very easy.

Step 2: Download Software

Picture of Download Software

Download the manufacturer software and istall it on your computer. This software will work for all versions of windows.
Here is the link:

This instructable is based on pc but here is a link for a solution for Mac users:

Now plug in your Chinese clone and try again. It should work just fine.

The board should be visible now in the Arduino IDE and ready to use.

I upload the blink sketch to the board and it all works.

In some cases the board might still not work. This is because there is no bootloader installed on the Atmel microcontroller ship. To solve this problem we need a working Arduino and the clone Arduino we want to fix.

Step 3: Make an ISP Programmer From Your Working Arduino

Picture of Make an ISP Programmer From Your Working Arduino

First we connect the working Arduino to our computer and open the Arduino IDE.

We go to File -> Examples and click ArduinoISP and upload this to the Arduino. Ones uploaded disconnect the Arduino.

Step 4: Connecting the Wires

Picture of Connecting the Wires

Next we connect the wires from the working Arduino to the clone as follows.

Pin 10 goes to reset pin 11 goes to 11,

pin 12 to 12,

pin 13 to pin 13.

5v to 5v and ground to ground.

Connect a 10 uF capacitor between reset and ground on the working Arduino.

Step 5: Burn the Bootloader

Picture of Burn the Bootloader

Next we connect the working Arduino with a usb to the computer.

Go to Tools -> Board and select the chinese board that is not working. in my case it's an Arduino Uno.

Next we go to Tools again -> Programmer and select Arduino as ISP.

Go to Tools again and select "Burn Bootloader".

Go back to Tools -> Programmer and set back to ArduinoISP.

Your clone should work just fine now.

Step 6: Contribute

Picture of Contribute

Arduino is great software an completely free to use.

If you are buying Chinese copies of the Arduino controller, consider making a donation to support the Arduino software. Here is a link.

Step 7: Final

If this instructable was helpfull for you, please click the favorite button.

Comments and suggestions below.

Also check out my 2$ ARDUINO INSTRUCTABLE here.

See you in the next instructable.

Tom Heylen


Donate to help me keep doing this work:


SoloPlax (author)2015-10-11

These are the direct words of Mazzimo Banzi, co-founder of Arduino in his book, page 1: "Getting Started with Arduino, 2nd Edition":

"Arduino is different from other platforms on the market because of these


>> It is open source hardware and software—if you wish, you can

download the circuit diagram, buy all the components, and make your

own, without paying anything to the makers of Arduino."

I do not need to say anything further.

Durtyoleman (author)SoloPlax2016-10-10

You are correct that one need not pay them anything. The suggestion to contribute to them was that in supporting them in their open source will hopefully insure that they will be able continue to give such great quality projects in the future.

tomheylen (author)SoloPlax2015-10-12

Thanks for your post. This should make things clear.

For those who want to support The Arduino software.
Step 6 in this instructable contains a link to make a donation to the Arduino software.

Rick Hubka (author)2017-10-09


I bought several clones on AliExpress. Installing
CH341SER.EXE fixed my problems with COM port uploading.
Win 10 Pro x64

PacquitoS (author)Rick Hubka2018-01-04

Simply download CH341SER.EXE, install, enjoy.

roorge (author)2017-08-30

I tried both instructions and neither worked - is ther a particular polarity that should be used with the capacitor?

PacquitoS (author)roorge2018-01-04

Since capacitors are polarized, yes, there is a mounting side. Anyway, if you don't use it, it should work.

Arni Geir made it! (author)2017-12-31

Awesome! Thanks so much! Now I'll compile my program for the robot that I gave to my son for X-mas :D

needfulthing (author)2017-12-12

Thank you for the valuable article. I figured out that the CH340 seems to be very sensitive to distortions caused by bad USB cables or USB cables that are too long. It should be the first step to check your cable before you dig deeper with the advises above. After I changed the cable I didn't even need the extra drivers from the manufacturer - the sketches load up without any problems. Happy hacking.

Nelsnels (author)2017-10-15

Hello. Where can I find driver for my clone Arduino Uno R3 with mega16u2 USB controller? ID: USB\VID_2341&PID_0043&REV_0001

musti14 (author)2016-12-25

hey tom

i do the same like you

but i get the error code :

ik doe het zelfde zo als je uitlegt

maar ik krijg de fout melding :

avrdude: WARNING: invalid value for unused bits in fuse "efuse", should be set to 1 according to datasheet

This behaviour is deprecated and will result in an error in future version

You probably want to use 0xfd instead of 0x05 (double check with your datasheet first).

kun je mij hier bij helpen ?

can you help me with this problem ?

SajjadA28 (author)musti142017-07-14

HI musti,

I have the same problem, if you have fixed it, please help me.

SajjadA28 (author)SajjadA282017-07-26

Hurrah! I solved my problem, after installing driver and uploading boot-loader, my cable was not working well. By exchanging cable, Now it's working.

richfiles (author)2016-09-19

Oddly enough, the CH340G chip has proven to be a solution to a problem plaguing people building controllers/cockpits for Kerbal Space Program. The stock standard Atmel 16U2 based Arduinos were not properly communicating under Windows 10, and we STILL have not found a solution. It was discovered that communication is fine when using the CH340G and it's different drivers.

Weird, but hey, whatever works, right! Still trying to track down the 16U2 communication issue with Windows 10 though. For the time being... I'm simply not gonna use an Arduino that uses a 16U2 for my build.

Now the fun part... Finding an eBay listing that doesn't annoyingly put BOTH 16U2 and CH340G in the listing title to stage extra hits.


adouble42 (author)richfiles2017-05-02

i'm not sure if this will help but i have a 16u2, and after much wrestling, i'm now quite proficient at moving it between acting as a legit clone of the atmel AVRISP MKii, and it's old role. i don't run windows generally, but i am heavy in to vmware, so i set up an XP vm (if i have to run something in an MS environment, XP is about where my trust ends with MS, plus, it gets the job done reliably so i'm not going to upgrade a system that i essentially knock off throwaway instances of for one singular purpose anyway), installed flip, it's dependencies, and this part seemed to matter, atmel studio 6.2. then , downloaded a bootloader firmware i found on the web which i would be happy to put up for anyone needing it, that's basically a clone of the AVRISP mkii firmware you can use the extra ISP header on the Uno to burn. you have to solder one wire to the part hat lacks pins, for the reset, but after having no joy with SPI on the god given SPI header i was able to jump the 16u2 in to DFU mode, and use Flip to load the MKii firmware. from there, you - and this is the part that might benefit you yourself, even using another programming solution - install something that allows you to switch the atmel USB driver to libusb. apparently, the newer atmel drivers have a problem where the software expects them to install libusb support but they don't, also from another forum, i installed something i think it was callled "zadig", and after connecting my newly flashed uno/avrisp mkii clone, you open zadig and have it replace whatever usb device your atmel appears as with a usb version. i went from getting all kinds of lockups and errors in atmel studio to burning internally oscillating 328ps with no problem and now i love being able to switch the atmega16u2 firmware around, and use it to program bootloaders without a shield, etc...why use a shield when you have a perfectly good programmer right at your disposal? anyhow i may have missed something but would be happy to help, just know, i bashed my head in to that 16u2 for hours, but when you make it work you have turned your $7 uno in to a $50 AVRISP MKii that not only programs SPI, but JTAG and debugwire, and that weird tiny mode i can't remember the name of that muxes miso and mosi for the real tiny attinys, which incidentally nothing else on the market programs. and you can switch it by shorting a pin and running flip which takes all of 30 seconds...all you need to do, probably, is fix your USB. i know i said i used XP, but the problem was supposed to be across the board. is where i got the fix and this tutorial is pretty much spot on, if you want to try using the 16u2 as an ISP, i highly reccommend it. there's another method that uses a TTL to USB adapter to achieve the same end but don't waste your time on that one it's a lot of extra work and overly complicated when the 16u2 has a perfectly good DFU mode

richfiles (author)adouble422017-05-03

Sadly, most of that flew right over my head... I'm a hardware guy, TTL, logic gates, CPLDs. etc. It's someone else who's been maintaining the software plugin for KSP to do the communication. Amazingly enough, we now have THREE different plugins that do this, all in different ways.

The one thing I got out of your info... Our temporary solution was to use clone Arduinos with the CH340G chip... Or to use a USB to TTL serial adapter! XD

I think the person maintaining that plugin did eventually get the stock Arduino devices working natively again, but yeah... Hats off to guys like you, and the guy that maintains that plugin for actually knowing how to do all this type of stuff! I'm using a custom mechanical keyboard and this Kerbal Space Program controller as an excuse to force myself to learn C... SO far, i just keep building hardware... O_o Oh well, eventually I HAVE to learn, or I'll have very expensive paperweights!

linux_author (author)2016-08-09

for OS X users life is too short - return the board to the seller and get one that works - at this price point it's not worth the effort and time is better spent on other projects - i ran across this problem with an UNO - funny how a Mega from the same maker worked properly though...

adouble42 (author)linux_author2017-05-02

you aren't kidding, it's too short to use os x, they have been killing me with the insane release schedule...only ever owned one and when this laptop kicks the bucket i don't care who offers me one to maintain what the answer shall be no. apple is evil, been way worse without jobs, one day, they deleted all of my SDKs as part of a silent xcode update i wasn't even aware i was subject to, you should have seen my confusion when i went to build and thought i had a breach, when i figured it out, it still felt like one. they have the nerve to pull something like that and then slip me an SDK for the new version, sierra, that i was deliberately not using because it breaks the usability of a full disk encryption app i maintain, and i kind of need to stay consistent with that....f them...the release notes on that SDK were obnoxious too, i run el cap, you delete my 10.11 sdk, - and i'm running os x 10.11 -, along with deleting every other sdk, which is just annoying, i keep them all backed up because of that dumbassery, and tell me to change up..i'm sorry who owns this hardware again cupertino? i could go on for hours with the issues i have with them regarding xcode alone, and the last two releases i put time maintaining in on, el cap and sierra, both released with obvious an potentially disastrous still unpatched bugs (i'd bet they're still unpatched, try to start the sierra recovery console consistently and get to a terminal, have fun at language chooser...and i had to slipstream an el cap installer because it doesn't work from USB, it bitches about 500mb of google fonts being missing and crashes after 24-48 hours of spewing tens of thousands of errors). nice handle though, i have a couple of interesting linux projects, one is involving arm and i386 of all things, privacy , security and pentesting platform that your grandmother could use to get away with some very interesting feats of espionage, for now, just crypto is released though..., check out rotor and nemesis if you're interested

Tirnbo (author)2016-08-09

I have a genuine Uno - can I use this board to write the boot loader on a mega or mini?

adouble42 (author)Tirnbo2017-05-02

if it has a 16u2 with some effort (not much, one solder point and finding software is most of it, see my comment above for links) you can put the 16u2 in DFU mode, and reflash to make it in to an AVRISP MKii clone, that you can then connect with jumper wires across the board to the ISP header and reprogram the bootloader of whatever you've got on the board, using atmel studio, or just about any other chip atmel makes, it even will do debugwire and JTAG like that

i feel somewhat amused having been trying out a bunch of different programmers to see what was the most flexible and not realizing until the end that the most ideal one for my situation was already soldered to my arduino in the form of the atmega16u2. although i've got a flashcat with an atmega32, it doesn't have much in the way of support or usability...if you have a genuine uno you have a really badass ISP setup at your disposal. check the links, it's worth the effort

AnandR37 (author)2017-04-23

For Mac Sierra users download and use the signed driver (worked for me without having to do anything else) -

Thanks to

ShahalumN (author)2017-04-06

if any one had query related the port identification of colony aurdino UNO R3 on window 7,8.1, vesta,10 .so contact me on

PoisonousAlien (author)2017-04-02

Why is the 10uF capacitor actually?

PoisonousAlien (author)2017-04-01

That really worked, thank you very much!

I bought chinese nano board for $3 and of course I couldn't upload any sketch to it as there were no drivers to run it. But after "completing" your tutorial it worked and now I can upload without any problems.

Note for other users: After doing it, it will work, but every time you connect the clone board it will have different port. Also, in the "Control Panel\Hardware and Sound\Devices and Printers" it won't be displayed as "Arduino device" but as a CH340 device. But don't worry, it works perfectly!

Oh and also I forgot to say that the link for the chinese program that fixes the CH340 works great;

And I am using Windows 7 professional 64 bit.

werejag (author)2017-03-30

Arduino: 1.8.1 (Windows 7), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cstk500v1 -PCOM10 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xD8:m -Ulfuse:w:0xFF:m

avrdude: Version 6.3, compiled on Dec 16 2016 at 13:33:19
Copyright (c) 2000-2005 Brian Dean,
Copyright (c) 2007-2014 Joerg Wunsch

System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

Using Port : COM10
Using Programmer : stk500v1
Overriding Baud Rate : 19200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x03
AVR Part : ATmega2560
Chip Erase delay : 9000 us
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Error while burning bootloader.
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

avrdude done. Thank you.

<this is one working 2560 clone and one non working. please help

SteveW69 (author)2017-03-26

Hi Mate, This didn't work for me. I have a Mac, boards are not recognised on it but are on some pc's. The command coding came back in errors. Any ideas?

conundrum2142 (author)2017-02-13

Also relevant. I have had "fake" units with defective 12 MHz crystals, the fix is to replace the part with a genuine unit. Also bad regulators, defective "FakeCaps" (tm), micros which only emulate the responses expected for "Hello World", etc. FFS.

VItariaV (author)2017-01-18

On windows 10 the second step will not help to make the Ch340 be visible nor in arduino ide nor in device manager...:( any suggestions?

LailsonL (author)VItariaV2017-02-03

i change usb port. usb 3 doesn't function. usb 2 ok.

VItariaV (author)LailsonL2017-02-04

Thanks for getting back!


I FOUND WHAT MY PROBLEM WITH CH340 and Windows 10 was - it was not discover-able SIMPLY because the Ch340 chip was burned accidentally by me not using Vcc correctly. :( ugh, spent so much time with drivers even downgraded to Windows 7 just to learn that simple thing.


giantpair (author)2016-12-29

Pro Mini does not have 0, 1 and 5V. How to do please?

banman11 (author)2016-12-02

Dear tomheylen

Thank you so much.!!!!

Spent days trying to figure out a 3D printer I got that wouldn't recognize on 3 pc / laptops.

Need to watch those Clones.....

You are a computer god. :-)

Thank you.....

Paschenberger (author)2016-10-18

Thank you, good on ya for suggesting donating to Arduino.

More Than the Sum (author)2016-10-06

I have several arduino uno R3 clones with micro USB that have the CH340G chip. I have the driver installed, and it recognizes other devices with the same chip, but my computer will not recognize that this particular device is connected. Are there any other potential reasons why the arduino clone would not communicate with the computer? Or are there reasons the CH340G chip would not function with the driver?

DannyT48 (author)2016-10-05

Thank you. Clone is running again. Glad that I discovered this tutorial to repair my Arduino clone.

lucanletter (author)2016-08-26

Thank you very much for this article!

kurbler (author)2016-08-05

me again, i have some aditional info. the smd LED (L) is all the time on, after powerup or reset it will flash 3 times und then it will be on. i had writen a sketch that pin 0 to pin 16 set to output and set all of them to LOW, but the LED is still on, strange

kurbler (author)2016-08-05

thx for the great Tutorial, i have the same clone like in this tuterial. i can upload the led blink example, i get no error, but the sketch dosen't work, nothing will happens no LED is blinkging. Does it mean the sketch is uploaded well??? When i try another Board Model i get an error. So i installed with my working Uno the bootlaoder, but it dosen't fix the problem :-(. when i do a get board info: i will get BN: Unknown Board VID: 1A86 PID: 7523 SN: Upload any sketch to obatin it. what does it mean?, pls, can somebody explain me, i also put a external LED on the Pin13 but it wont' be blink :-(

Gideon Rossouwv (author)2016-08-04

Thanks, without you I'd be lost!

Basemfatayer (author)2016-07-28

But when After selecting port, then selecting board info. It shows bn: unknown board. Despite I uploaded sketch

Basemfatayer (author)2016-07-28

Thank you. I was going to through this chinees uno. But now is working

Stew82 (author)2016-07-23

Was stuck trying to use a few old generic units but all working fine now. Thankyou so much for your advice and links :)

Muhamad HafizA (author)2016-07-19

Done burning bootloader but the clone still won't work

asimpson15 (author)2016-07-16

Thanks so much! I bought some clone Arduino Mini's which weren't working at all. I followed the "burn bootloader" steps and they are now working.

maroelawerner (author)2015-10-16

I'm using Linux and have not had a problem with the CH340 chip at all.

PetrS33 (author)maroelawerner2016-07-09

I am using Linux and I see a problem with CH340G!

There is an example for ArduinoISP, it is part of Arduino IDE. When I load it to Nano V3 with FTDI, it works fine. When I load it to Nano V3 with CH340G, it doesn't work!

I am not sure what is a problem, it could be that CH340G has smaller buffer for FIFO and buffer overruns or some problem in Linux driver.

Load ArduinoISP example to your arduino; no real ISP wiring is needed, it fails before it starts to take care about other chip. Try this command, it works with FTDI and doesn't work with CH340G (protocol error):

avrdude -c stk500v1 -P /dev/ttyUSB0 -b 19200 -p m328p -vvvv

maroelawerner (author)PetrS332016-07-12


Have you tried using a lower baud rate? Have you got more than one CH340G? If so, do they all behave the same way. Might be a faulty chip.

tomheylen (author)PetrS332016-07-10

I'm sorry but I don't have experience with Lunix and Arduino. But some say it should work without installing the driver.

PetrS33 (author)tomheylen2016-07-11

Yes, it really works, no need to install drivers at Linux. When I run a simple application to send data over serial port, Arduino with CH340G works great. Unfortunately, I ordered this Arduino to build an ISP programmer and avrdude has a problem with CH340G. I have found how to modify source code of avrdude to talk to Arduino with CH340G. The point is that Arduino with FTDI chip works better than Arduino with CH340G...

About This Instructable




Bio: I like to make stuff in my free time. Especially programming, cooking, electronics etc. Lately I'm making tutorials about stuff I made the last ... More »
More by tomheylen:Long range, 1.8km,  Arduino to Arduino wireless communication with the HC-12.How to connect a FT232RL programmer to the Arduino ATMEGA328 for uploading sketches$2 Arduino. The ATMEGA328 as a stand-alone. Easy, cheap and very small. A complete guide.
Add instructable to: