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?!
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
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
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 ... |
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?!
>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.
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
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.
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.
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... ...
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.