help replacing bootloader

Background - I've been using an Uno R3 as a USB joystick, by uploading a sketch to the ATmega328P & then replacing the standard firmware on the ATmega16u2 with a USB HID joystick firmware based on LUFA using DFU mode. Each time I wanted to make a change to the sketch, I would do the following;

  • put the board into DFU mode
  • restore original firmware to 16u2
  • upload new sketch to 328p
  • put board into DFU mode
  • upload USB HID joystick firmware to 16u2

This wasn't very convenient so I bought an Olimex AVR ISP500-TINY hoping that it would let me upload new sketches directly to the 328p whilst the 16u2 still had the joystick firmware on it.

To get to grips with the Olimex unit I put the original firmware back on the 16u2 using DFU mode, downloaded & compiled the Blink example & tried to upload it to the 328p using the Olimex unit. The upload seemed to go successfully, however the LED was not blinking & I am now left with what appears to be a bricked Uno.

Current status - When I connect the Uno via USB the ON LED & the L LED light & remain lit; the L LED does not switch off after a moment as it should. Pressing the reset button on the board has no discernible effect whatsoever. I can still successfully change the firmware on the 16u2, as I just erased it & flashed the normal firmware once again.

The Uno appears in lsusb;

Bus 004 Device 007: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

& as a serial device at the usual place of /dev/ttyACM0 that is recognised in the Arduino IDE. If I try to upload Blink to the Uno using the IDE (with the correct Board & Serial Port selected in the Tools menu) it fails with the following (verbose) output, the important bit probably being at the end - "programmer not responding";

/array_flatline/PhD/Arduino/arduino-1.0/hardware/tools/avrdude -C/array_flatline/PhD/Arduino/arduino-1.0/hardware/tools/avrdude.conf -v -v -v -v -patmega328p -carduino -P/dev/ttyACM0 -b115200 -D -Uflash:w:/tmp/build5950306848241325424.tmp/Blink.cpp.hex:i 

avrdude: Version 5.11, compiled on Sep  9 2011 at 16:00:41
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/array_flatline/PhD/Arduino/arduino-1.0/hardware/tools/avrdude.conf"
         User configuration file is "/home/cj/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyACM0
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: ser_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding

avrdude done.  Thank you.

Question - Is it likely that the bootloader is just fried? Can I replace the bootloader & rescue the board, or is it junk?

I tried connecting the Olimex to the ICSP header & using the IDE to burn the bootloader, however whatever settings I try just results in 'programmer is not responding'. Does anybody have experience with this particular programmer (in Linux)?

...and I've fixed it. Typing out all of that must've helped me collect my thoughts logically. Anyway, for those that might happen upon this thread via Google, I managed to replace the bootloader using avrdude from the command line where the IDE didn't succeed.

avrdude -c stk500v2 -P /dev/ttyACM0 -p m328p -v -e -U flash:w:/array_flatline/PhD/Arduino/arduino-1.0/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex -U lock:w:0x0F:m

This is for an Arduino Uno R3 connected via its ICSP header to an Olimex AVR ISP500-TINY which is then in turn connected to the computer via USB & appearing in Linux as /dev/ttyACM0. Obviously you will need to change the path to the .hex file to wherever it is after you downloaded/unzipped the Arduino software from the Download link