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.