Arduino Leonardo via AVRDUDE programmieren.

OP #4451720
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?!
OP #4451837
Lesenswert?

Ich hab was gefunden.... mit nem Python Script ist dies möglich:
1
import sys
2
import subprocess as sub
3
from time import sleep
4
 
5
# command line arguments are:
6
# first is the arduino IDE installation dir
7
# second is the arduino board type
8
# third is the .hex file
9
# fourth is the upload port
10
# fifth *** only used if Leonardo; omit otherwise *** serial port used to put leonardo into bootloader mode 
11
 
12
arduinoPath = sys.argv[1]
13
boardType = sys.argv[2]
14
hexFile = sys.argv[3]
15
port2 = sys.argv[4]
16
 
17
if(boardType == 'leonardo'):
18
   import serial
19
   port = sys.argv[len(sys.argv)-1]
20
 
21
avrconf = arduinoPath + '/hardware/tools/avr/etc/avrdude.conf'
22
avrdude = arduinoPath + '/hardware/tools/avr/bin/avrdude'
23
avrsize = arduinoPath + '/hardware/tools/avr/bin/avr-size'
24
 
25
boardsFile = open(arduinoPath + '/hardware/arduino/boards.txt',
26
   'rb').readlines()
27
 
28
boardSettings = {}
29
 
30
for line in boardsFile:
31
    if(line.startswith(boardType)):
32
          # strip board name, period and \n
33
        setting = line.replace(boardType + '.', '', 1).strip()
34
        [key, sign, val] = setting.rpartition('=')
35
        boardSettings[key] = val
36
 
37
    # check program size against maximum size
38
p = sub.Popen([avrsize,hexFile], stdout=sub.PIPE, stderr=sub.PIPE)#, shell=True)
39
output, errors = p.communicate()
40
if errors != "":
41
    print 'avr-size error: ' + errors + '\n'
42
    exit
43
 
44
    print ('Progam size: ' + output.split()[7] +
45
    ' bytes out of max ' + boardSettings['upload.maximum_size'] + '\n')
46
 
47
programCommand = [avrdude,
48
    '-C'+avrconf,
49
     '-F' ,
50
     '-p'+boardSettings['build.mcu'] ,
51
     '-c'+ boardSettings['upload.protocol'] ,
52
     '-b' + boardSettings['upload.speed'] ,
53
     '-P'+port2,
54
     '-Uflash:w:'+hexFile+':i']
55
 
56
    # open and close serial port at 1200 baud. This resets the Arduino Leonardo
57
if(boardType == 'leonardo'):
58
    ser = serial.Serial(port, 1200)
59
    ser.close()
60
    sleep(4)  # give the bootloader time to start up
61
 
62
p = sub.Popen(programCommand, stdout=sub.PIPE, stderr=sub.PIPE)#, shell=True)
63
output, errors = p.communicate()
64
# avrdude only uses stderr, append it
65
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
#4451892
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
#4452029
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:

1
avrdude -c avr109 -P COM7 -p ...
OP #4452191
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?!
Angehängte Dateien:
#4452747
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.
Angehängte Dateien:
Gast #4452866
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.
#4453374
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.
Angehängte Dateien:
#4885630
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?
#4885792
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.

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