Hallo,
seit etwa einer Woche nenne ich einen AVRISP MKII Clone mein Eigen
(usbprog v3 -> http://www.embedded-projects.net).
Im AVRStudio kann ich diesen ohne Probleme betreiben. Laut Beschreibung
sollte AVRDude auch mit einem AVRISP klarkommen, doch dort bekomme ich
massive Probleme.
Unter Windows XP bekomme ich die Meldung :
avrdude: usbdev_open(): Found AVRISP mk2 Clone, serno: 0000A00128255
Dort bleibt er etwa 10 - 15 Sekunden hängen, danach flasht er ganz
normal.
Unter Windows 2000 geht mit AVRDude leider gar nichts. Dort erhalte ich
folgenden Fehler :
-----------------------------------------------------------------------
avrdude: usbdev_open(): Found AVRISP mk2 Clone, serno: 0000A00128255
avrdude: stk500v2_recv_mk2: error in USB receive
avrdude: usbdev_send(): wrote 13 out of 1 bytes, err = usb_reap: reaping
request failed, win error: Der E/A-Vorgang wurde wegen eines Threadendes
oder einer Anwendungsanforderung abgebrochen.
avrdude: stk500_send_mk2(): failed to send command to serial port
make.exe: *** [program] Error 1
-----------------------------------------------------------------------
Wenn ich glück habe flasht er unter 2000 direkt nach dem Hochfahren
einmal, bevor der Fehler kommt.
Ich habe jetzt die ganzen letzten Tage mit recherchen im Netz verbracht,
aber so wirklich weitergekommen bin ich dabei nicht. Das Problem scheint
häufiger aufzutreten, zumindest findet man in zahlreichen Foren was
dazu, aber niemand scheint eine Lösung zu haben. AVRDude sollte doch
eigentlich mit einem AVRISP mk2 zusammenarbeit, oder? Gibt es
irgendjemanden, der diese Kombination erfolgreich einsetzt/eingesetzt
hat?
Danke schonmal im Vorraus für eure Hilfe.
Gruß
Mathias
Hast du schon mal versucht, das Ding mit AVRStudio (unter W2K) zu
testen?
Mit dem STK500 hatte ich damals auch unter W2K Probleme. Die haben sich
aber bei XP erledigt gehabt.
Wenn ich das AVR Studio deinstalliere dann geht gar nichts mehr. Er
erkennt zwar beim Anschliessen den AVRISP MKII, findet aber keinen
Treiber und kann somit nichts damit anfangen.
Ich habe zwar libusb installiert, aber das scheint nichts zu bewirken
... gibt es noch einen anderen Treiber, den ich einsetzen kann?
Wenn du Lust hast, dir dein AVRDUDE selbst zu compilieren (man braucht
eine MinGW/Msys-Installation dafür, oder aber ein Cygwin), dann kannst
du dir die beiden hier mal ansehen:
https://savannah.nongnu.org/patch/?5655https://savannah.nongnu.org/bugs/?19882
Was mich daran stört ist, dass der vorgeschlagene Patch technisch
inkorrekt ist, offenbar aber trotzdem bei einigen Leuten funktioniert.
Mir wäre es lieber, die Ursache des Problems einzukreisen und zu
wissen, warum das systemabhängig mal geht, mal nicht. Leider scheinen
all diejenigen, die sich da mal damit befasst haben, nicht mit mir
drüber diskutieren zu wollen, und ich selbst habe den Bug noch
nirgends selbst in einer Form erlebt, in der ich ihn hätte debuggen
können.
Danke für den Tip, aber da muss ich jetzt mal ganz blöd fragen : Wie
gehe ich denn da vor? Gibt es irgendein Tutorial dafür?
Ich nehme mal nicht an, dass ich einfach den Source-code in meinem
Visual Studio öffnen und dann auf Kompilieren klicken kann.
Von Visual Studio habe ich keine Ahnung. Prinzipiell könnte es sein,
dass das sogar damit compiliert. Die einzigen systemabhängigen
Teile in AVRDUDE ist die Ansteuerung der seriellen Schnittstelle, und
die ist mit dem Win32-API implementiert, wenn man unter Windows
compiliert.
Aber was dir natürlich fehlt dann, ist der configure-Schritt, bei dem
der entsprechende Script automatisch feststellt, welche #defines er
alle nach ac_conf.h schreiben muss für dein System.
Kai Klenovsek hat mal eine Beschreibung verfasst:
http://kk.elektronik-4u.de/index.php?Sid=12
Ich hab' sie mir jetzt nicht genau angesehen, aber im Großen und
Ganzen sollte die noch so zutreffen. avrdude hat er zwar nicht
konkret erwähnt, aber im Wesentlich läuft es bei all diesen Tools
hinaus auf:
./configure
make
make install
Wenn du das AVRDUDE zum ersten Mal erfolgreich gebaut hast, dann
melde dich nochmal wieder. Das Einbinden der libusb erfordert dann
noch einen Schritt mehr, aber nimm erstmal die erste Hürde.
Habe jetzt MinGW und Msys installiert und mich dabei eigentlich genau an
die Reihenfolge von Kai Klenovsek gehalten. Allerdings habe ich ein
Problem, das ich nicht gelöst bekomme.
./configure läuft einwandfrei, aber schon beim Make bekomme ich fehler
----------------------------------------------------------------
make[2]: Leaving directory `/home/Gast/avrdude-5.5/windows'
make[2]: Entering directory `/home/Gast/avrdude-5.5'
yacc -d config_gram.y
/bin/sh: yacc: command not found
make[2]: *** [config_gram.c] Error 127
make[2]: Leaving directory `/home/Gast/avrdude-5.5'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Gast/avrdude-5.5'
make: *** [all] Error 2
----------------------------------------------------------------
Danach wird abgebrochen. Das ganze kommt bei jedem make, also auch schon
bei den binutils aus der Anleitung.
Mir scheint das irgendwie so, als ob eine Einstellung oder ein Parameter
fehlen würde. Was genau soll denn "yacc" sein, und wieso fehlt das? Gibt
es eine Tabelle, wo man sehen kann was Error 127 / Error 1 bedeuten?
Wo genau muss ich die denn hinkopieren? Wenn ich den /usr Ordner in
meinem /mingw Ordner kopiere ändert sich gar nichts. Kopiere ich den
/usr/bin Ordner (mit den bison.exe / flex.exe) dateien in meinen
/mingw/bin Ordner, dann bleibt der Fehler bestehen, nur mit anderen
Pfadangaben.
yacc -d config_gram.y
/mingw/bin/yacc: /usr/bin/bison: No such file or directory
/mingw/bin/yacc: exec: /usr/bin/bison: cannot execute: No such file or
directory
Ok, das mit dem Pfad hat sich erledigt. Habe es jetzt in den richtigen
Ordner kopiert, allerdings erhalte ich jetzt beim configure eine
Windows-Errorbox mit der Meldung, dass msys-regex-0.dll nicht im
angegebenen Pfad gefunden wurde.
Super, es funktioniert. Habe gerade erfolgreich mein erstes eigenes
avrdude erstellt. Danke für deine Geduld mit mir :-)
Nun werde ich mich mal ans Einbinden der USB Unterstützung wagen.
Mathias Reinhard wrote:
> Nun werde ich mich mal ans Einbinden der USB Unterstützung wagen.
OK, hier das Kochrezept:
Du installierst irgendwohin die libusb-win32. Nehmen wir mal an, sie
steht in C:\Programme\LibUSB-Win32-0.1.10.1. Du schreibst dir jetzt
folgendes in eine kleine Datei, landläufig "script" (kurz für
"shell script") genannt:
1
LIBUSB=/c/Programme/LibUSB-Win32-0.1.10.1
2
export CFLAGS="-g -O -I$LIBUSB/include"
3
export CXXFLAGS="-g -O -I$LIBUSB/include"
4
export CPPFLAGS="-I$LIBUSB/include"
5
export LDFLAGS="-L$LIBUSB/lib"
Diesen script ziehst du dir innerhalb des Msys-Fensters vor dem
Konfigurieren und Bauen in deine laufende Shell rein mit dem
Punkt-Kommando:
1
. yourscript.sh
Damit werden die daring genannten Environment-Variablen in deiner
laufenden Msys-Shell wirksam. Im einzelnen bedeuten sie:
CFLAGS - Optionen für den C-Compiler
CXXFLAGS - Optionen für den C++-Compiler (braucht avrdude nicht,
aber vielleicht willst du ja als nächstes avarice machen?)
CPPFLAGS - Optionen für den C-Präprozessor, werden zuweilen von den
configure-Scripts gebraucht
LDFLAGS - Optionen für den Linker
Die -I-Optionen in den ersten drei Variablen bewirken, dass der
Compiler das libusb.h findet. Die -L-Option in LDFLAGS bewirkt, dass
der Linker die libusb selbst beim Linken findet (libusb0.dll oder wie
auch immer sie konkret heißt), wenn er ein -lusb gesagt bekommt.
Damit sollte dann der USB-Teil auch funktionieren.
Alternativ kannst du im Script auch gleich noch das ./configure und
make mit reinschreiben und ihn mit
Ok, habe jetzt die Schritte genau befolgt. Es hat auch alles fehlerfrei
funktioniert, nur meldet meine avrdude.exe nach dem Aufruf immer noch,
dass sie ohne USB Unterstützung sei.
Muss die libusb.h auch genauso heissen? Bei mir ist nur eine usb.h
vorhanden. Möglicherweise sucht ja der Compiler nach der falschen Datei?
Mathias Reinhard wrote:
> Ok, habe jetzt die Schritte genau befolgt. Es hat auch alles fehlerfrei> funktioniert, nur meldet meine avrdude.exe nach dem Aufruf immer noch,> dass sie ohne USB Unterstützung sei.
Hmm, beim ./configure muss sowas zu sehen sein:
1
checking for usb_get_string_simple in -lusb... yes
Wenn dort "no" steht, hat er sie noch nicht gefunden. Dann kannst
du mal ins config.log gucken, dort nach usb_get_string_simple
suchen. Das hier steht da bei mir:
1
configure:3656: checking for usb_get_string_simple in -lusb
Da sollte bei dir dann mehr über den Fehler zu finden sein.
> Muss die libusb.h auch genauso heissen? Bei mir ist nur eine usb.h> vorhanden.
Das ist korrekt, da hatte ich mich geirrt.
Ok, es funktioniert nun alles so wie es sollte. Besten dank für die
Hilfe.
Ich suche jetzt mal nach dem entsprechenden Codeabschnitt der den Fehler
verursacht, und werde mich nochmal melden wenn ich es (hoffentlich)
gelöst habe.
Tja, das kompilieren klappt mittlerweile ganz gut, aber die in den
obigen Foren vorgeschlagene Lösung hilft bei mir leider nicht, der
Fehler bleibt bestehen.
Ich habe mal über einen USB Sniffer versucht mitzulesen was denn da
tatsächlich übertragen wird, aber es scheint überhaupt keine
Kommunikation seitens AVRDude stattzufinden. Unter AVRStudio werden mir
Daten angezeigt, aber beim Dude kommt gar nichts, was mich nur umso mehr
verwirrt. An der selbst kompilierten Version kann es nicht liegen, denn
die tut auf meinem WinXP Rechner ihren Dienst einwandfrei.
Das klingt dann irgendwie nach einem Treiberproblem, oder?
Die libusb besitzt auch noch irgendwelche Debugschalter, die kann
man auch im Sourcecode setzen.
Hallo,
ich habe die Anleitung hier befolgt, und habe es nun auch geschafft mit
MinGW/Msys avrdude selber kompiliert, da ich auch den seltsamen Fehler
bei meinem AVRISP MKII hatte (Win XPSP2, CoreDuo).
wie ich nun danach gesucht habe, bin ich auch auf den patch gestossen,
den Jörg Wunsch anspricht, und auf einen anderen der von einem Mac User
in einer Mailingliste stammt.
vielleicht liegt es an Intel Macs, aber das ist nur reine Vermutung von
mir.
Vielen Dank nochmals für die Hilfestellungen :-)