Arduino UNOにスケッチをアップロード出来ないとき

AVRISP mkIIが必要。

1. シリアル変換のファームウェア(ATmega8u2用)をアップロードする

シリアルポートが見えないときは、ATMega8u2のファームを入れ替える。
http://www.arduino.cc/en/Hacking/DFUProgramming8U2
ArduinoのICSPヘッダじゃない方の6ピンヘッダにAVRISP mkIIを接続する。
書き込み時にはArduinoへの電源供給が必要。
向きはAVRISP mkII上のLEDが青く点灯する方が正しい方向。

avrdude -p at90usb82 -F -P usb -c avrispmkii -U flash:w:UNO-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m

2. Arduinoブートローダ(ATmega328p用)をアップロードする

AVRISP mkIIとArduino IDEのBurn bootloaderでアップロードする。
ProgrammerにはAVR ISP mkIIを指定する。

正しくやってるののにブートローダがアップロードできないときは、ATMega328pチップが破損している可能性がある。
Arduinoに電源を供給した際にチップ自体が発熱しているときなど)
回路の方を疑って、あやうくArduinoを捨てるところだった。