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


von Rene K. (xdraconix)


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?!

von Rene K. (xdraconix)


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

von Christian K. (the_kirsch)


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

von Axel S. (a-za-z0-9)


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 ...

von Rene K. (xdraconix)


Angehängte Dateien:

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?!

von chris_ (Gast)


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.

von 900ss (900ss)


Angehängte Dateien:

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
von Kirsch (Gast)


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.

von 900ss (900ss)


Angehängte Dateien:

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.

von Hannes (Gast)


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...

...

von Birger Z. (nohelp)


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?

von 900ss (900ss)


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.

von Marius K. (zephram)


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

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.