Leonardo nicht mehr programmierbar

Hallo Leute,

kann plötzlich meine Leonardo nicht mehr programmieren (normal über USB). Es kommt folgende Fehlermeldung:

Binäre Sketchgröße: 6.374 Bytes (von einem Maximum von 28.672 Bytes)
Found programmer: Id = "B«J"; type = 
    Software Version =  . ; Hardware Version =  .
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?

Kann man sich den Bootoader zerschießen?
Falls der Bootloader defekt ist, wie kann ich den wieder herstellen?

Danke für Eure Antworten.

Hast Du den Upload mittel "Upload using Programmer" versucht? Welches Board und welcher Port ist ausgewählt?

Unter Board: hatte ich "Arduino Leonardo" und unter Serial Port: "Com6" ausgewählt. Hat ja auch ein paar mal funktioniert.
mit Datei\Upload mit Programmer kommt gleich der Fehler:

avrdude: usbdev_open(): did not find any USB device "usb"

Ist aber für mich erstmal nicht weiter verwunderlich, denn unter Programmer ist "AVRISP mkII" (standard?) eingestellt
und einen externen Programmer habe ich ja nicht angeschlossen. Zur Not hätte ich eine Dragon, der erscheint mit diesem
Namen aber nicht in der Programmerliste.

Aber erst einmal Danke!

ich habe gerade herausgefunden, dass es eine "verbose output" gibt:

Binäre Sketchgröße: 11.348 Bytes (von einem Maximum von 28.672 Bytes)
Forcing reset using 1200bps open/close on port COM6
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, COM6, } => {}
PORTS {COM1, COM6, } / {COM1, } => {}
PORTS {COM1, } / {COM1, COM6, } => {COM6, }
Found Leonardo upload port: COM6
C:\Users\xxxxxx xxxxxx\Desktop\Arduino Leonardo\Software\arduino-1.0.2-windows\arduino-1.0.2\hardware/tools/avr/bin/avrdude -CC:\Users\xxxxxx xxxxxx\Desktop\Arduino Leonardo\Software\arduino-1.0.2-windows\arduino-1.0.2\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P\.\COM6 -b57600 -D -Uflash:w:C:\Users\XXXXXX~1\AppData\Local\Temp\build3311597198084708295.tmp\midi_t2_disp.cpp.hex:i

avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "C:\Users\xxxxxx xxxxxx\Desktop\Arduino Leonardo\Software\arduino-1.0.2-windows\arduino-1.0.2\hardware/tools/avr/etc/avrdude.conf"

Using Port : \.\COM6
Using Programmer : avr109
Overriding Baud Rate : 57600
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


eeprom 65 10 8 0 no 1024 8 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : butterfly
Description : Atmel AppNote AVR109 Boot Loader

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53]
avrdude: Recv:

avrdude: Recv:
avrdude: Send: V [56]
avrdude: Recv:
avrdude: Send: v [76]
avrdude: Recv:
avrdude: Recv:
avrdude: Send: p [70]
avrdude: Recv:
Found programmer: Id = "öÿ("; type = |
Software Version = E. (hier kommt noch mehr, läßt sich aber nocht mit copy paste einfügen. Entspricht aber dem Output des ersten Beitrages)

Ich nehme mal an, Ausstecken und wieder Einstecken hast Du versucht und hat nicht gefruchtet...

Dann scheint Dein Bootloader irgendwie in Mitleidenschaft gezogen worden zu sein.

Mit dem Atmel Studio könntest Du mit dem Dragon den Bootloader wieder aufspielen:

Hallo pylon,
you made my day :wink:

Danke für den Tip und das Video. Bootloader wiederherstellen hat geklappt. Den Fehler (die "Zerstörung" des Bootloaders) kann ich auch reproduzieren.
Der Übeltäter ist erkannt:

Aufruf von
lcd.print(getMidiNote(9)[0]);
in setup();


getMidiNote() ist wie folgt definiert:


char* midi_notes[128][4] = {
	{ /*0  */ "C-2 "},
	{ /*1  */ "C#-2"},
	...
	{ /*126*/ "F#8 "},
	{ /*127*/ "G8  "}};
	
char** getMidiNote(int byte) {
  return midi_notes[byte];
}

Das ich mich mit den Pointern vergallopiert habe, würde mich nicht wundern. War halt mein erster Versuch (irgendwie fehlen auch die abschließenden Nullen in den Strings). Wäre mir das alles um die Ohren geflogen, hätte ich mich nicht gewundert. Das Programm mit diesem Code "funktioniert" aber wie erwartet. Kommentiere ich den Aufruf aus, kann ich x mal uploaden. Ist der Aufruf aktiv, funktioniert genau einmal der upload, dann nie wieder. Was passiert da eigentlich?

Nochmals vielen Dank!

Das ist das Problem beim Leonardo: der USB-Code läuft auf dem Haupt-Prozessor und ist somit nicht mehr ansprechbar, wenn sich der Prozessor komplett verabschiedet. Beim normalen UNO wird beim Upload ein Reset ausgelöst und in einem kurzen Zeitfenster danach ist nur der Bootloader aktiv. Beim Leonardo kann es aber passieren, dass dies nicht mehr geschieht (wenn z.B. die Interrupts deaktiviert werden und dann in eine Endlos-Schleife gesprungen wird).