mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino Leonardo via AVRDUDE programmieren.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Rene K. (xdraconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gerne einen Arduino Leonardo via AVRDUDE programmieren....

Den Bootloader möchte ich aber vorerst erstmal darauf lassen, nun 
geschieht dies ja so:

- Leonardo ist angestöpselt und bekommt COM7 als UART zugewiesen
- Der Com Port muss mit 1200 Baud geöffnet werden und wieder geschlossen 
werden
- Der Leonardo geht in den Programmiermodus (via Atmel Appnote 109) und 
bekommt COM17
- AVDUDE brennt die HEX

Nun, wie kann ich unter windows eine Befehlszeile hinbekommen der den 
Leonardo mit 1200Baud öffnet und schließt?!?

Jemand nen Tipp?!

Autor: Rene K. (xdraconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab was gefunden.... mit nem Python Script ist dies möglich:
import sys
import subprocess as sub
from time import sleep
 
# command line arguments are:
# first is the arduino IDE installation dir
# second is the arduino board type
# third is the .hex file
# fourth is the upload port
# fifth *** only used if Leonardo; omit otherwise *** serial port used to put leonardo into bootloader mode 
 
arduinoPath = sys.argv[1]
boardType = sys.argv[2]
hexFile = sys.argv[3]
port2 = sys.argv[4]
 
if(boardType == 'leonardo'):
   import serial
   port = sys.argv[len(sys.argv)-1]
 
avrconf = arduinoPath + '/hardware/tools/avr/etc/avrdude.conf'
avrdude = arduinoPath + '/hardware/tools/avr/bin/avrdude'
avrsize = arduinoPath + '/hardware/tools/avr/bin/avr-size'
 
boardsFile = open(arduinoPath + '/hardware/arduino/boards.txt',
   'rb').readlines()
 
boardSettings = {}
 
for line in boardsFile:
    if(line.startswith(boardType)):
          # strip board name, period and \n
        setting = line.replace(boardType + '.', '', 1).strip()
        [key, sign, val] = setting.rpartition('=')
        boardSettings[key] = val
 
    # check program size against maximum size
p = sub.Popen([avrsize,hexFile], stdout=sub.PIPE, stderr=sub.PIPE)#, shell=True)
output, errors = p.communicate()
if errors != "":
    print 'avr-size error: ' + errors + '\n'
    exit
 
    print ('Progam size: ' + output.split()[7] +
    ' bytes out of max ' + boardSettings['upload.maximum_size'] + '\n')
 
programCommand = [avrdude,
    '-C'+avrconf,
     '-F' ,
     '-p'+boardSettings['build.mcu'] ,
     '-c'+ boardSettings['upload.protocol'] ,
     '-b' + boardSettings['upload.speed'] ,
     '-P'+port2,
     '-Uflash:w:'+hexFile+':i']
 
    # open and close serial port at 1200 baud. This resets the Arduino Leonardo
if(boardType == 'leonardo'):
    ser = serial.Serial(port, 1200)
    ser.close()
    sleep(4)  # give the bootloader time to start up
 
p = sub.Popen(programCommand, stdout=sub.PIPE, stderr=sub.PIPE)#, shell=True)
output, errors = p.communicate()
# avrdude only uses stderr, append it
print errors

In z.b. Atmel Studio wird das ganze dann so aufgerufen:

Command = pyhton.exe
Argument= “C:\Documents and Settings\Adam\My Documents\Atmel 
Studio\Serial Uploader.py” “C:\Program Files\Arduino” leonardo 
“$(ProjectDir)Debug\$(ItemFileName).hex” COM6 COM7

Autor: Christian K. (the_kirsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene K. schrieb:
> - Der Com Port muss mit 1200 Baud geöffnet werden und wieder geschlossen
> werden

Dies ist eine Funktion der Arduino-HAL/Framework.
Wenn du ein Programm drauf Flasht das dies nicht benutzt geht der Trick 
nicht mehr, und man muss per Hand den Reset-Knopf drücken.

Rene K. schrieb:
> Nun, wie kann ich unter windows eine Befehlszeile hinbekommen der den
> Leonardo mit 1200Baud öffnet und schließt?!?

Mit Windows Boardmittel ist das nicht möglich.
Du kannst das Terminal-Programm PuTTY verwenden, und es mit den 
richtigen Commandline-Parameter aufrufen.

Wird der Reset ausgelöst sobald die Verbindung geöffnet wird, oder erst 
wenn sie geschlossen wird?
Bei ersteres wird PuTTY eine Fehlermeldung ausspucken, da das USB-Gerät 
durch den Reset verschwunden ist. Bei letzterem müsstest du noch den 
PuTTY-Prozess abschießen.


http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene K. schrieb:
> Ich würde gerne einen Arduino Leonardo via AVRDUDE programmieren....
>
> Den Bootloader möchte ich aber vorerst erstmal darauf lassen, nun
> geschieht dies ja so:
>
> - Leonardo ist angestöpselt und bekommt COM7 als UART zugewiesen

Er bekommt irgend einen COM-Port zugewiesen.

> - Der Com Port muss mit 1200 Baud geöffnet werden und wieder geschlossen
> werden
> - Der Leonardo geht in den Programmiermodus (via Atmel Appnote 109) und
> bekommt COM17
> - AVDUDE brennt die HEX
>
> Nun, wie kann ich unter windows eine Befehlszeile hinbekommen der den
> Leonardo mit 1200Baud öffnet und schließt?!?

Gar nicht?

Wenn der Bootloader auf dem Leonardo gemäß Atmel Appnote AVR109 
funktioniert, dann sollte man einfach den dafür den passenden Modus von 
avrdude verwenden:

avrdude -c avr109 -P COM7 -p ...

Autor: Rene K. (xdraconix)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja das ist ja das Problem, der Leonardo geht bloß nach einem Reset oder 
halt eben durch das Öffnen des Ports in den Resetmodus um den Bootloader 
zu laden, ansonsten is er im Arduino Loader.

Ich hab es nun ganz anders gemacht und programmiere ihn eben über die 
ISP Schnittstelle. Ich benötige den Arduino Bootloader auch nicht 
unbedingt. Ich will ja eh nur einen USB-Serial Konverter über die USB 
Schnittstelle laufen lassen.

Das Phyton Script funktioniert zwar, aber er überschreibt mir dann 
jedesmal den kompletten AVR incl. Bootloader. Kann man das irgendwie 
verhindern?!

Autor: chris_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann man das irgendwie verhindern?!
Normalerweise steht die Startadresse im Hex-File. Du musst dem Linker 
mitteilen, wo das Programm beginnt und dann das entsprechende Hex-File 
compilieren.

Autor: 900ss D. (900ss)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang ein kleies EXE welches ich in Pureb@sic geschrieben habe.
Aufruf: leonardoReset COM-Port

Der Leonardo wird zurückgesetzt und es meldet sich der Bootloader mit 
einem anderen(!) COM-Port am PC. Jetzt kannst du mit AVRDUDE mit AVR109 
Protokoll dein Programm flashen.

Räusper: den Source zum Pureb@sic Programm hab ich leider nicht mehr da 
mir durch eine Blödheit der Source anhanden gekommen ist :-(.

Ich weiß, es ist Vertrauen nötig, um das Programm zu nutzen, aber bei 
mir macht es keinen Blödsinn.

: Bearbeitet durch User
Autor: Kirsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene K. schrieb:
> Das Phyton Script funktioniert zwar, aber er überschreibt mir dann
> jedesmal den kompletten AVR incl. Bootloader. Kann man das irgendwie
> verhindern?!

Da ist nicht möglich, der Bootloader kann sich nicht selbst 
überschreiben.
Bootloader und Fuse lassen sich nur über ISP oder JTAG ändern.

Autor: 900ss D. (900ss)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, damit keiner glaubt, ich habe oben irgendeine bösartige SW 
hochgeladen, hier gibt es den Source, den ich eben nochmal geschrieben 
habe. Ist ja nicht so lang und mich hat es auch genervt, dass ich den 
Source nicht mehr hatte. Die neue EXE dazu gibt es auch.

Wer der EXE nicht traut, kann den Source mit der Testversion der 
PureB@sic-Version übersetzen.

Für diese kleinen Tools ist Pureb@sic wirklich klasse. Und auch große 
Programme lassen sich gut damit machen.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
900ss D. schrieb:
> ür diese kleinen Tools ist Pureb@sic wirklich klasse. Und auch große
> Programme lassen sich gut damit machen.

Das kann ich bestätigen...

...

Autor: Birger Z. (nohelp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der Suche den Arduino Leonardo via USB Bootloader außerhalb der 
Arduino-IDE zu programmieren, bin ich hier gelandet. Die 
leonardoReset.exe s.o. scheint aber einen Virus zu haben. Bei mir 
schlägt der Virenscanner an.
Gibt es Alternativen mein Vorhaben ohne ISP aber mit USB-Bootloader 
umzusetzen?

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Typischer Fall von false positive.

Die Datei, die ich hochgeladen habe, hat keinen Virus. Na gut, must du 
glauben.

Ich habe mal die Suchmaschine danach befragt. Ist bei Pureb@sic 
Executables nicht selten, wenn sie so klein sind. Da melden Virenscanner 
scheinbar gerne.

No N. schrieb:
> Gibt es Alternativen

900ss D. schrieb:
> Wer der EXE nicht traut, kann den Source mit der Testversion der
> PureB@sic-Version übersetzen.

Autor: Marius K. (zephram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte dasselbe Problem. Habe eine batch Datei im Internet gefunden die 
ich für meine Zwecke modifiziert habe, findet sich hier:

https://github.com/zephram2015/avrdude_autoreset_wrapper

Viele Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.