Forum: Mikrocontroller und Digitale Elektronik Arduino flashen über Makefile


von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

ich habe einen Arduino nano 3. Das Blink-Beispiel mit der IDE klappt. 
Nun möchte ich jedoch dasselbe ohne die IDE mit einem Makefile 
bewerkstelligen.

In der main.c wird nur der Portpin wo die LED hängt ein/ausgeschaltet 
mit Delay. Beim Upload mit "make program" kommt die obige Meldung. Die 
serielle Schnittstelle findet er. Danach klemmt es dann.

In der Arduino IDE sieht der Aufruf von AVRDUDE so aus:

C:\Programme\Arduino\hardware/tools/avr/bin/avrdude 
-CC:\Programme\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v 
-patmega328p -carduino -P\\.\COM10 -b57600 -D 
-Uflash:w:C:\DOKUME~1\notebook\LOKALE~1\Temp\build7349331130724293468.tm 
p\entlader_1_c.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:\Programme\Arduino\hardware/tools/avr/etc/avrdude.conf"

         Using Port                    : \\.\COM10
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
         AVR Part                      : ATMEGA328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         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                 :

Daher habe ich versucht das Makefile daran anzupassen. Offenbar klemmt 
es noch.

Der Teil im Makefile zu AVRDUDE sieht so aus:

UPLOAD_RATE = 57600
AVRDUDE_PROGRAMMER  = arduino

AVRDUDE_PORT = com10  # Arduino nano an COM10

AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See 
<http://savannah.nongnu.org/projects/avrdude>;
# to submit bug reports.
AVRDUDE_FLAGS += -v -v

# Program the device.
program: $(TARGET).hex $(TARGET).eep
  $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) 
$(AVRDUDE_WRITE_EEPROM)

was habe ich falsch gemacht?

von Lutz H. (luhe)


Lesenswert?

Matthias W. schrieb:
> $(TARGET).hex

Was heißt  Error1 ?


Es könnte sein, dass (TARGET) nicht gefunden wird, oder den falschen 
Namen hat, ist nur  eine Vermutung.

von Matthias W. (matt007)


Lesenswert?

lutz h. schrieb:
> Es könnte sein, dass (TARGET) nicht gefunden wird, oder den falschen
> Namen hat, ist nur  eine Vermutung.

Danke Lutz !

von Matthias W. (matt007)


Lesenswert?

ein Unterschied sind die conf-files avrdude.conf. Das eine liegt ja im 
Programme-Ordner bei der Arduino-Umgebung und das andere bei der 
WinAVR-Umgebung. Vielleicht muss letzteres noch angepasst werden?

von Matthias W. (matt007)


Lesenswert?

in den AVRDUDE.conf-Dateien scheinen die Definitionen des ATmega328P 
gleich zu sein. In der einen Datei liegt es ab Zeile 9233, in der 
anderen bei 8545 - selbe "ID" und selbe "DESC". Auch den Programmer 
"arduino" gibt es bei beiden:

# PROGRAMMER DEFINITIONS
programmer
  id    = "arduino";
  desc  = "Arduino";
  type  = arduino;
;

daran sollte es also nicht liegen.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

lutz h. schrieb:
> Es könnte sein, dass (TARGET) nicht gefunden wird, oder den falschen
> Namen hat, ist nur  eine Vermutung.

TARGET = main   steht im Makefile.
Das Übersetzen klappt fehlerfrei. Siehe Datei. Daran sollte es nicht 
liegen.

Hat jemand eine Idee?

von chester (Gast)


Lesenswert?

Matthias W. schrieb:

> Hat jemand eine Idee?

make gibt durch "Error 1" nur den Fehler von avrdude weiter.
d.h. das Flashen geht nicht.

http://www.arduinoforum.de/arduino-Thread-Upload-nicht-m%C3%B6glich-avrdude-stk500-getsync-not-in-sync-resp-0x00

von Matthias W. (matt007)


Lesenswert?

chester schrieb:
> make gibt durch "Error 1" nur den Fehler von avrdude weiter.
> d.h. das Flashen geht nicht.

die Frage ist warum das Flashen nicht über dieses Make geht. Von der 
Arduino-Umgebung aus geht es ja. Auch diese nutzt AVRDUDE. Ich nehme 
dieselben Parameter (port COM10, programmer arduino) und doch klemmt es.

von rred (Gast)


Lesenswert?

Ist nur eine vermutung, da ich ähnliche sync-fehler mit
avrdude auch schonmal beobachtet hatte:
Hast du überprüft, dass keine andere Anwendung auf den seriellen Port
zugreift wähend du mit avrdude flasht? Unter Linux hatte ich wie gesagt
einen ähnlichen sync-fehler während ich via minicom mit der 
Schnittstelle verbunden war.

von chester (Gast)


Lesenswert?

Matthias W. schrieb:
> die Frage ist warum das Flashen nicht über dieses Make geht. Von der

jetzt versteh ich das Problem.

fakt ist, dass make avrdude version 5.10 verwendet
und dass arduino die version 5.11 von avrdude verwendet.

also im Makefile den 5.11 pfad eintragen.

von Matthias W. (matt007)


Lesenswert?

rred schrieb:
> Ist nur eine vermutung, da ich ähnliche sync-fehler mit
> avrdude auch schonmal beobachtet hatte:
> Hast du überprüft, dass keine andere Anwendung auf den seriellen Port
> zugreift wähend du mit avrdude flasht?

Danke für den Hinweis. Meines Wissens sollte keine andere Anwendung 
zugreifen. Es ist jedoch so daß ich das Arduino-IDE-Fenster noch offen 
hatte während des Aufrufens des Make von WinAVR.

Es schien jedoch COM10 korrekt erkannt zu werden. Ich kann das Fenster 
der IDE schließen und schauen was dann passiert.

von Matthias W. (matt007)


Lesenswert?

chester schrieb:
> jetzt versteh ich das Problem.

prima ! Danke.

> fakt ist, dass make avrdude version 5.10 verwendet
> und dass arduino die version 5.11 von avrdude verwendet.

Danke für den wertvollen Hinweis. Es müsste doch möglich sein bei WinAVR 
den neueren AVRDUDE einzuspielen? Leider gibt es ja seit 2010 kein 
neueres WinAVR-Paket mehr.

> also im Makefile den 5.11 pfad eintragen.

und wenn ich das neue AVRDUDE einfach herüberkopiere? Das sollte doch 
nur eine exe-Datei sein?

von chester (Gast)


Lesenswert?

Matthias W. schrieb:
> und wenn ich das neue AVRDUDE einfach herüberkopiere? Das sollte doch
> nur eine exe-Datei sein?

"herüberkopieren geht", wobei du avrdude.exe UND avrdude.conf ersetzen 
musst.

von chris_ (Gast)


Lesenswert?

Man kann Eclipse verwenden, dort ist die Unterstützung des AVR-Dude für 
Arduino gleich mit drinn:
Beitrag "Arduino mit Eclipse AVR-gcc Plugin programmieren"

von Matthias W. (matt007)


Lesenswert?

chester schrieb:
> "herüberkopieren geht", wobei du avrdude.exe UND avrdude.conf ersetzen
> musst.

Danke. Habe ich gerade gemacht.

von Matthias W. (matt007)


Lesenswert?

chris_ schrieb:
> Man kann Eclipse verwenden, dort ist die Unterstützung des AVR-Dude für
> Arduino gleich mit drinn:
> Beitrag "Arduino mit Eclipse AVR-gcc Plugin programmieren"

Danke für den Hinweis Chris.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

chester schrieb:
> "herüberkopieren geht", wobei du avrdude.exe UND avrdude.conf ersetzen
> musst.

beides gemacht. Meldung leider wie zuvor - nur daß diesmal die 5.11 
gemeldet wird. Mit der sollte es ja gehen. Die Arduino-IDE arbeitet ja 
auch damit.

Muss ich wirklich gesondert noch den Pfad der avrdude.conf angeben, so 
wie die Arduino-Leute das gemacht haben? Im Makefile von Jörg Wunsch war 
das ja nicht so angegeben.

von Matthias W. (matt007)


Lesenswert?

avrdude.exe und avrdude.conf sind nun also angepasst.
Das Aufrufen von Com10 geht auch. So scheint es.
Der Unterschied ist daß
+ bei Arduino steht: Using Port: \\.\COM10 und
+ bei WinAVR steht: Using Port: com10.

Es gibt Unterschiede im Aufruf von avrdude:
C:\Programme\Arduino\hardware/tools/avr/bin/avrdude 
-CC:\Programme\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v 
-patmega328p -carduino -P\\.\COM10 -b57600 -D 
-Uflash:w:C:\DOKUME~1\notebook\LOKALE~1\Temp\build7349331130724293468.tm 
p\entlader_1_c.cpp.hex:i

und im Vergleich dazu WinAVR über Makefile, das klemmt:
avrdude -p atmega328p -P com10 -c arduino -v -v -U flash:w:main.hex

Auffällig ist daß beim Make von WinAVR beim Aufruf von avrdude nach den 
Optionen noch ein Space folgt im Vergleich zum Arduino-Aufruf von 
avrdude.

Am Ende folgt bei der Arduino-Zeile noch ein ":i". Das fehlt bei WinAVR.

von Matthias W. (matt007)


Lesenswert?

jede dieser 3 Zeilen scheint wahlweise zu funktionieren:
AVRDUDE_PORT = com10 # Arduino nano an COM10
AVRDUDE_PORT = COM10 # Arduino nano an COM10
AVRDUDE_PORT = \\\.\COM10 # Arduino nano an COM10

nur leider ändert das an der berühmten Fehlermeldung
stk500_getsync(): not in sync: resp=0x00 nichts.

von Franz (Gast)


Lesenswert?

>nur leider ändert das an der berühmten Fehlermeldung
>stk500_getsync(): not in sync: resp=0x00 nichts.

Ist die Schnittstelle eventuell schon wo anders geöffnet und damit 
blockiert?
Das passiert mir immer wieder, wenn ich ein Terminal Programm verwende 
und mit AVR-Dude flashen will.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

auch das Herausnehmen der Space im Makefile hat nichts gebracht. Noch 
immer dieser Fehler: stk500_getsync(): not in sync: resp=0x00

von Matthias W. (matt007)


Lesenswert?

Die Codierung des Makefile im Notepad++ steht auf ANSI. Kann es daran 
liegen? Soll UTF-8 ohne BOM eingestellt werden?

von Matthias W. (matt007)


Lesenswert?

Franz schrieb:
> Ist die Schnittstelle eventuell schon wo anders geöffnet und damit
> blockiert?

gute Frage, Franz. Mir ist da nichts bewusst. Die Arduino-IDE habe ich 
ja geschlossen. 3 Textdokumente sind offen. Die sollten nicht auf COM10 
wollen. Ein Dos-Fenster ist auf.

> Das passiert mir immer wieder, wenn ich ein Terminal Programm verwende
> und mit AVR-Dude flashen will.

ja. Guter Hinweis. Es ist kein hterm an und kein Bray-Terminal. Ich kann 
natürlich den Rechner mal neu booten und dann nur das Make noch mal 
machen und schauen.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

neu gebootet, Makefile aufgerufen. Fehler wie gehabt.
Hier das Makefile, das ich unter WinAVR verwende und das main.c.
So ein Hexenwerk sollte das doch nicht sein.

von Matthias W. (matt007)


Lesenswert?

als Treiber für den FTDI-Baustein habe ich einen Download direkt von der 
FTDI-Seite benutzt. Unter der Arduino-IDE geht das ja auch.

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.