Arduino Uno R3 failure

Recently I’ve got a genuine Arduino Uno R3 from my friend to repair. The problem with his board was actually very generic – it has just stopped working. Personally, I don’t buy such boards, because  they are extremely overpriced. I have been using several Chinese clones around for years and I have not encountered any problems so far.

At first sight, the USB interface was working fine and the board was detected by the system without any problems.

[18955.789736] usb 1-1: new full-speed USB device number 6 using xhci_hcd
[18955.973387] usb 1-1: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[18955.973388] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[18955.973389] usb 1-1: Manufacturer: Arduino (www.arduino.cc)
[18955.973390] usb 1-1: SerialNumber: 7543931373735141E020
[18955.993292] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[18955.993570] usbcore: registered new interface driver cdc_acm
[18955.993571] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

However, there was a problem with flashing a program with avrdude. The result log:

avrdude: Version 6.3, compiled on Jan 17 2017 at 11:00:16
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         Using Port                    : /dev/ttyACM0
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done.  Thank you.

The microcontroller was fine, I successfully burned the bootloader to ATmega328P using another board acting as ArduinoISP. After several retries to flash the Arduino board via USB, I found out that the device sometimes disappeared from the system.

Finally, I took an oscilloscope… and immediately tracked down a faulty component. The 16 MHz crystal oscillator for ATmega16U2 was providing very weak signal level.

I replaced it with another 16 MHz crystal, which is a reliable clock source.

The Arduino board works perfectly again.

The photo below presents the faulty crystal oscillator.

Leave a Reply

Your email address will not be published. Required fields are marked *