Forum: Mikrocontroller und Digitale Elektronik Atmega32u2 über USB per AVRDUDE programmieren


von Matthias W. (matt007)


Lesenswert?

ein Atmega32u2 auf Teensy-kompatiblem board soll programmiert werden 
mittels AVRDUDE per "Make program".

der Gerätemanager zeigt "Atmega32U2 DFU". Das gelbe Rufzeichen 
verschwindet durch Installation des Treibers von Flip 3.4.7.

Mit FLIP 3.4.7 for Windows (Java Runtime Environement included) kann ich 
ein hex-file main.hex aufspielen. Die LED blinkt. So weit so gut.

Die USB-Treiber sind installiert.

nun soll das Aufspielen von main.hex per "Make program" mit AVRDUDE 
gehen.

Laut Beschreibung von AVRDUDE Version 6.3 wird Atmega32U2 unterstützt 
(S.5). Programmierung über USB sollte über libusb möglich sein (S.2). 
Siehe USBasp ISP.

der Atmel DFU-Bootloader wird unterstützt - FLIP Protokoll 1 (S.2). 
Unter 5.2 gibt es programmerspezifische Informationen zu Atmel DFU 
Bootloader using Flip Version 1.

Es sollte also möglich sein per AVRDUDE das Chip über USB zu 
programmieren. Nur wie muss die Zeile im Makefile dazu aussehen?

im Netz finden sich Hinweise zu Atmega32u2/u4 wie:
https://www.pololu.com/docs/0J61/6.3
PORT=\\\\.\\USBSER000
MCU=atmega32u4
program: $(TARGET).hex
        avrdude -p $(MCU) -c avr109 -P $(PORT) -U flash:w:$(TARGET).hex

oder
https://codeandlife.com/2016/01/30/usb-mouse-with-atmega32u4-pro-micro-clone-and-lufa/

avrdude -p atmega32u4 -c avr109 -P COM9 -U flash:w:blink.hex

leider komme ich mit diesen Hinweisen nicht weiter. Eine COM-Port-Nummer 
sehe ich nicht im Gerätemanager. Flip lädt das hex-file jedoch und die 3 
USB-dll scheinen installiert.

wenn ich Einträge probiere wie z.B.
avrdude -p atmega32u2 -c avr109 -P COM9 -U flash:w:main.hex
avrdude -p atmega32u2 -c avr109 -P COM10 -U flash:w:main.hex
avrdude -p atmega32u2 -c avr109 -P USBSER000 -U flash:w:main.hex

kommen Meldungen der Art: "avrdude: ser_open(): can't open device "\\. 
\COM9": Das System kann die angegebene Datei nicht finden."

da ich kein Leonardo-Board habe kann ich nicht schauen was die 
Arduino-IDE im Makefile zur Programmierung des Atmega32u4 einträgt.

auch das Laden der Teensy-Erweiterung hat nichts gebracht da 
Teensy1.0-boards nicht mehr unterstützt werden.

daher die Frage:
was muss in der Zeile avrdude... im Makefile stehen um das hex-file das 
ich manuell mit Flip laden kann über avrdude mit Flip-Support zu laden?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn FLIP funktioniert, warum verwendest Du nicht das anstelle von 
avrdude?

von Einer K. (Gast)


Lesenswert?

Matthias W. schrieb:
> kommen Meldungen der Art: "avrdude: ser_open(): can't open device "\\.
> \COM9": Das System kann die angegebene Datei nicht finden."

Wenn du keinen COM Port im Gerätemanager siehst, dann ist es auch 
unsinnig einen anzugeben!
Oder?

Statt:
> -P COM9

-P USB

? ? ?

---
Wobei ich mir sicher bin, dass der Arduino Bootloader das AVR109 
Protokoll spricht.
Nicht der native Bootloader, da ackerst du auf der falschen Baustelle..

----

Matthias W. schrieb:
> da ich kein Leonardo-Board habe kann ich nicht schauen was die
> Arduino-IDE im Makefile zur Programmierung des Atmega32u4 einträgt.
Das hilft hier auch nicht weiter, da Arduino mit 32U4 einen anderen 
Bootloader nutzen.
Und ein Makefile gibts da sowieso nicht.

von Stefan F. (Gast)


Lesenswert?

Moment mal, die Appnote AVR109/AVR910 sind steinalt und beschreiben 
einen Bootloader bzw. ISP Programmieradapter mit seriellem Port.
http://ww1.microchip.com/downloads/en/AppNotes/doc1644.pdf
http://ww1.microchip.com/downloads/en/appnotes/atmel-0943-in-system-programming_applicationnote_avr910.pdf

Ich habe hier absichtlich beide genannt, weil sie oft miteinander 
verwechselt wurden.

Die Application Note AVR4023 beschreibt hingegen das Flip DFU Protokoll 
v2 http://ww1.microchip.com/downloads/en/AppNotes/doc8457.pdf über USB, 
ohne seriellen Port.

Laut Manual Page unterstützt avrdude das Flip DFU Protokoll.
https://manpages.debian.org/testing/avrdude/avrdude.1.en.html

Zitat:
> The Atmel DFU bootloader is supported in both, FLIP protocol version 1
> (AT90USB* and ATmega*U* devices), as well as version 2 (Xmega devices).

Die richtige avrdude Option für den Bootloader in v2 wäre

-c flip2  (ohne Angabe eines COM Port!)

Allerdings bin ich wegen dem obigen Zitat unsicher, ob diese Version auf 
dem ATmega16u2 überhaupt unterstützt wird. Wenn das so einfach wäre, 
würde man das in der Arduino IDE so sicher nutzen. Stattdessen wird auf 
ein externes Programm (Teensy Loader) verwiesen. Das machen die sicher 
nicht nur aus Spaß.

Wenn der Chip den Bootloader in Version 1 verwendet, solltest du dazu 
ebenfalls die Manual Page konsultieren, denn der funktioniert auch nur 
sehr eingeschränkt.

Welchen Bootloader hast du verwendet, und in welcher Version?

von Matthias W. (matt007)


Lesenswert?

Rufus Τ. F. schrieb:
> Wenn FLIP funktioniert, warum verwendest Du nicht das anstelle von
> avrdude?

Danke für den Hinweis Rufus !

Flip könnte ich in der Tat nutzen. Dazu müsste ich jedoch jedesmal unter 
Win7 dieses etwas sperrige Paket installieren mit JRE. Das mache ich nur 
ungern.

Probieren möchte ich es ggf. schon einmal um zu sehen wie gut das geht.

dazu muss ich wissen/nachlesen/erfragen wie die korrekte Kommandozeile 
heißt die ich im Makefile einbinden kann.

von Matthias W. (matt007)


Lesenswert?

Arduino Fanboy D. schrieb:
> -P USB

Danke. Das geht leider auch nicht.

von Stefan F. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Welchen Bootloader hast du verwendet, und in welcher Version?

Wer Hilfe sucht sollte auf die Rückfragen eingehen.

von Matthias W. (matt007)


Lesenswert?

Arduino Fanboy D. schrieb:
> da Arduino mit 32U4 einen anderen
> Bootloader nutzen.

danke für den Hinweis.

> Und ein Makefile gibts da sowieso nicht.

bei meinem Test mit dem Atmega2560 und Arduino vor Jahren fand ich in 
der Arduinoumgebung ein Makefile und darin die nötige Zeile um den 2560 
korrekt über USB/seriell mittels AVRDUDE flashen zu können.

diese Zeile nutze ich in meinem Makefile nun erfolgreich seit Jahren.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Die Application Note AVR4023 beschreibt hingegen das Flip DFU Protokoll
> v2 http://ww1.microchip.com/downloads/en/AppNotes/doc8457.pdf über USB,
> ohne seriellen Port.

vielen Dank Stefanus !

von Stefan F. (Gast)


Lesenswert?

Matthias W. schrieb:
> Bei meinem Test mit dem Atmega2560 und Arduino vor Jahren fand ich in
> der Arduinoumgebung ein Makefile und darin die nötige Zeile um den 2560
> korrekt über USB/seriell mittels AVRDUDE flashen zu können.

Das nützt Dir beim ATmega32u2 aber nichts, der funktioniert ja anders.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Die richtige avrdude Option für den Bootloader in v2 wäre
> -c flip2  (ohne Angabe eines COM Port!)

vielen Dank Stefanus für den wertvollen Hinweis.

mit -cflip1 geht es !
der ATmega32u2 wird erkannt und das Flash gelöscht, programmiert, 
verifiziert.

AVRDUDE meldet danach 4 Zeilen
Error: "lfuse" memory not accessible using Flip
Error: "lfuse" memory not accessible using Flip
Error: "lfuse" memory not accessible using Flip
Error: "lfuse" memory not accessible using Flip
safemode: sorry, reading back fuses was unreliable. I have given up and 
exited program mode.

dabei steht doch nur Uflash:w:main.hex in der Zeile. Fuses sind da doch 
keine angegeben.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Das nützt Dir beim ATmega32u2 aber nichts, der funktioniert ja anders.

ja.

Auf dem mega2560 board das ja von der Arduino-IDE unterstützt wird ist 
ein Atmega16u2 als USB-Treiber verbaut. Das Board hat 2 
ISP-Schnittstellen und USB. Über "wiring" kann man den 2560 per 
Make/AVRDUDE programmieren.

es wäre denkbar daß die Arduino-Umgebung auch die Programmierung des 
Atmega16u2 unterstützt. Das habe ich bisher nicht näher angesehen.

das Leonardo-Board hat einen ATmega32u4 und wird unterstützt. Den 
mega32u4 den ich heute bestellt habe müsste ich ggf. mit der Umgebung 
bearbeiten können und nachschauen können wie das gemacht wird, falls 
noch ein Makefile verwendet wird.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Welchen Bootloader hast du verwendet, und in welcher Version?

keine Ahnung was für ein Bootloader auf dem Chip installiert ist. Das 
Chip hatte ich 2011 erworben zusammen mit dem Loader.

das Teil meldet sich als "Atmega32U2 DFU" - siehe oben.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Wer Hilfe sucht sollte auf die Rückfragen eingehen.

das mache ich doch. Ein wenig Zeit zum Lesen, Nachdenken, Posten am 
Sonntag solltest Du mir schon lassen :-)

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Welchen Bootloader hast du verwendet, und in welcher Version?

danke für den Hinweis Stefanus !

der Meldung nach klingt es wie DFU von Atmel?
wie kann ich die Version ermitteln?
welches Tool soll ich dazu nehmen?

von Einer K. (Gast)


Lesenswert?

Du nutzt den Hardware Bootloader.
Deaktivierbar über Fuse und/oder Pin

Und Arduino arbeitet wirklich nicht mit Makefiles....
Kannste glauben, oder auch nicht.
Wenn da eins bei liegt, dann ist das ein Relikt aus einer anderen 
Problemstellung und wird nicht von der IDE genutzt.

Matthias W. schrieb:
> es wäre denkbar daß die Arduino-Umgebung auch die Programmierung des
> Atmega16u2 unterstützt. Das habe ich bisher nicht näher angesehen.

Nicht in direkter Form.
Aber ja, auch das geht, mit der passenden Boarddefinition.

Matthias W. schrieb:
> Fuses sind da doch keine angegeben.
Und der Flip1 kompatible Bootloader kann das trotzdem nicht
Was dir dann AVRdude sagt.

Fuses wirst du über ISP modifizieren dürfen.
So bekommst du dann auch den Arduino/Catarina Bootloader drauf, wenn dir 
das Herz danach steht.

von Stefan F. (Gast)


Lesenswert?

Matthias W. schrieb:
> Ein wenig Zeit zum Lesen, Nachdenken, Posten am
> Sonntag solltest Du mir schon lassen :-)

Antrag genehmigt :-)

> AVRDUDE meldet danach 4 Zeilen
> Error: "lfuse" memory not accessible using Flip

Deswegen habe ich weiter oben geschrieben, dass du die Hinweise in der 
Maual Page lesen sollst. Insbesondere diesen:

"These bootloaders have no option to access memory areas other than 
Flash and EEPROM."

Will sagen: Avrdude liest normalerweise immer die Fuses aus, um sie 
anzuzeigen. Der darunter liegende Layer für das Flip Protokoll 
unterstützt aber keinen Zugriff auf die Fuses. Diese Meldungen musst du 
als "normal" hinnehmen.

> Auf dem mega2560 board das ja von der Arduino-IDE unterstützt
> wird ist ein Atmega16u2 als USB-Treiber verbaut

Auf diesem Board dient der kleine ATmega mit dem "U" als USB-UART 
Adapter. Mit der Arduino IDE programmierst du normalerweise nur den 
ATmgea2560.

Es geistert eine Anleitung im Netz, wie man die Firmware des kleinen 
ATmega erneuern kann. Dabei wird aber dessen ISP Schnittstelle mit einem 
separaten ISP Programmieradapter benutzt - nicht der Bootloader.

> wie kann ich die Version ermitteln?

Ich weiß nicht. Ich würde mal versuchen, das Flip Programm von Atmel zu 
benutzen und schauen, was das alles so anzeigt.

von Matthias W. (matt007)


Lesenswert?

Arduino Fanboy D. schrieb:
> Fuses wirst du über ISP modifizieren dürfen.

Danke. Ich wollte die Fuses ja gar nicht modifizieren. Daher verstehe 
ich die Warnung nicht.

> So bekommst du dann auch den Arduino/Catarina Bootloader drauf, wenn dir
> das Herz danach steht.

Danke für den Hinweis. Einen ISP-Programmer (USBasp) habe ich bestellt. 
Wenn es Sinn macht einen anderen Bootloader zu flashen kann ich es 
versuchen wenn das Teil da ist.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> dass du die Hinweise in der Maual Page lesen sollst. Insbesondere diesen:
> "These bootloaders have no option to access memory areas other than
> Flash and EEPROM."

Danke. Das hatte ich gelesen.

> Will sagen: Avrdude liest normalerweise immer die Fuses aus, um sie
> anzuzeigen.

Danke. Nun verstehe ich.

> Diese Meldungen musst du als "normal" hinnehmen.

Ggf. lassen sich die Meldungen wohl unterdrücken? Weglassen von -v 
ändert nichts.

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> das Flip Programm von Atmel nutzen und schauen, was das alles so anzeigt.

Danke für den Hinweis !

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Dabei wird aber dessen ISP Schnittstelle mit einem
> separaten ISP Programmieradapter benutzt - nicht der Bootloader.

ok. Verstanden.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Bitteschön

von Matthias W. (matt007)


Lesenswert?

Stefanus F. schrieb:
> Bitteschön

Vielen Dank Stefanus. Bei mir steht auch Ver. 1.0.0 drin.

Wenn es einen Sinn macht einen anderen Lader aufzuspielen kann ich das 
ja per ISP dann machen.

Das kleine Board hat halt keinen ISP-Stecker. Da müsste ich Drähte an 
die zu kleinen Löcher löten um einen Stecker dranzubekommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.