Arduino flashen über Makefile

OP #3489461
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?
Angehängte Dateien:
OP
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.
OP
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.
Gast
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.
Gast
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.
OP
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.
OP
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?
OP
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.
Angehängte Dateien:
OP
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.
OP
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.
Gast
>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.
OP
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.