Category Archives: Arduino

Non-functional Arduinos from Banggood.com

I recently ordered some Arduino Nano clones from a Chinese site called banggood.com. The price was hard to resist at €5.93 each, compared to twice as much for a clone bought locally or about six times as much for an “original” Nano. I had previously used Nanos in a few one-off projects and found them to be small, useful and easy to work with.

Top side of faulty Arduino Nano
Top side of Chinese Arduino Nano clone

After a couple of weeks the goods arrived and I started playing with the boards. I did however immediately run into problems like the boards sometimes not being recognized by the Windows driver, but more often, after trying to upload a sketch, I was greeted with the infamous error message:

avrdude: stk500_getsync(): not in sync: resp=0x00

It seemed like the boards simply did not respond to the requests sent to them. Maybe I was able to program a board once (not sure), but that was at best a rare occurrence. Googling the above error message yields many, many hits – mostly forum discussions – claiming to have the solution to the problem. In reality there seems to be very many things that can cause it, including improper FTDI driver issues, wrong COM port or incorrect board type being selected.

Bottom side of faulty Arduino Nano
Bottom side of Chinese Arduino Nano clone

After some tries at uninstalling and re-installing drivers I gave up that path and figured that maybe the bootloader/firmware was faulty in the Nano clones. It turns out that all that is needed to (re-)program a  bootloader into an Arduino is present inside the Arduino environment and another (functional) Arduino can easily be used as the programmer. How this is done is described on this site. I had a working Nano since previously and it was straightforward to hook it up to a 6-pin header to connect to the ICSP connector on the Nano to be programmed.

Reprogramming worked fine, but the board still did not respond. I then realized that not only can one program a new bootloader into another Arduino using the ICSP connector, but it is actually easy to program a sketch that way as well. I did that with the “physical pixel” sketch that turns on or off an LED when the characters H or L is sent to the board. This experiment yielded no positive result. The LED remained off, despite the RX LED showing that some data was received by the Arduino.

I then tried a sketch that repeatedly sends the string “abc” back to the host computer once every second, but the characters did not appear in the serial monitor. Or rather there seemed to be some kind of non-printable characters data being sent from the Arduino, but not the string “abc”.

More googling gave hints that there are fake/counterfeit FT232RL USB-to-serial converter chips out there and I started suspecting that this was the case here as well.

Time for low-level troubleshooting. I hooked up an oscilloscope to the RX pin of a known good Nano and sent the character ‘a’ to the board. The resulting waveform can be seen as the light red upper trace in the figure below. I then did the same thing for the faulty Nano from Banggood.com and the waveform is shown in yellow below.

Good and bad RX trace
The red waveform is the RX pin on a working Nano when the character ‘a’ is sent from a computer. The yellow trace is the same thing for a faulty Chinese clone from Banggood.com.

So the FT232RL chip on the faulty board just sent out a long low pulse instead of the ASCII bit pattern of the character. Regardless of what data was sent to the board, the same pulse appeared. So obviously the chip does not work as it should.

I ordered some FT232RL chips from a local vendor and replaced it on one of the Chinese boards. And eureka! The board started working! The new RX pin waveform is is shown below.

Reference (top) and waveform on RX pin after replacing the FT232RL chip with a good one.
Reference (top) and waveform on RX pin after replacing the FT232RL chip with a good one.

With the good chip in place, everything seems to work, including uploading sketches and to have sketches communicate over USB.

Below are close-up photos of the two chips. The one that I suspect to be fake looks a little different. The text seems to be laser engraved instead of printed, but that might not be a reliable indicator of fake FT232RL chips. I did however check the text on the FT232RL chip on a working Bus Pirate and that text was also printed, so maybe laser engraved text is something to look out for.

This is an FT232RL that I de-soldered from a non-working Arduino. I suspect it to be counterfeit.
This is an FT232RL that I de-soldered from a non-working Arduino clone. I suspect it to be counterfeit.
I ordered this FT232RL from a local (Swedish) distributor and with this chip on the Arduino it works.
I got this FT232RL from a local (Swedish) distributor and with this chip on the Arduino clone it works.

I reported the problems to Banggood.com and they replied after a couple of days and requested some photos and other documentation that I then provided. After that I did not hear anything for several more days.

Lessons learned: If you really need it to work, do not order stuff from one of those cheap Chinese sites. Counting the hours I have spent troubleshooting these boards, they turned out to be outrageously expensive rather than extremely cheap. But to be a bit positive, I am now an experience richer as I have (probably) encountered counterfeit chips for the first time. I also learned about how to use an Arduino to reprogram the bootloader of another Arduino. And I found yet another cause of the “stk500_getsync(): not in sync” error.

Update on September 18th

After some more e-mails back and forth with Banggood’s customer support, they offered to refund the cost of the Arduino clones. A few days  later, the money appeared on my credit card balance. So Banggood seems to be at least somewhat reachable and responsive. Cudos to them for that. I hope they feed the scope plots and problem description I provided on to their supplier and make sure they stop shipping defective products. I will however not buy more Arduino clones from them. My time is much too valuable, and for ideological reasons it might be worth the extra money supporting the companies that actually contribute to the development of the Arduino ecosystem.

I ordered more FT232RL chips and replaced them on the four remaining boards. Two of the Arduino clones then worked as they should, but the other two did not, despite the soldering looking fine. The response code in the error message that came up when trying to program a sketch did change from 0x00 to 0xe0:

avrdude: stk500_getsync(): not in sync: resp=0xe0

It was also apparent that some more communication was going on with the Arduino clone based on the way the RX and TX LEDs were flashing. After some contemplation, I decided to update the firmware on the two broken units and lo and behold: Both boards started working! Perhaps I had already updated the bootloader of the two boards that happened to work after the chip replacements. In that case, it turns out that not only were there fake FT232RL chips on these Arduino clones, but also broken bootloaders.

Someone who does not have access to quite a bit of equipment and experience would be completely unable to get these Arduino clones to work.

After this episode I really cannot recommend buying “Arduino compatible” clones. I guess, sometimes, you really get what you pay for.

Update on January 4th

I finally received the new Arduino Nano from Banggood and I did a review on it in a new blog post. Unfortunately, there are still problems with the FT232RL chip on the new version.