Arduino flashen über Makefile

OP #3489461
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?
Angehängte Dateien:
OP #3489609
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.
Gast #3489989
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.
OP #3490216
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.
OP #3490227
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?
OP #3490812
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.
Angehängte Dateien:
OP #3490845
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.
OP #3490865
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.
Gast #3490879
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.
OP #3490903
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren