Forum: Mikrocontroller und Digitale Elektronik AVRISP MKII mit AVRDude?


von Mathias R. (soulcollector)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

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.

von Mathias R. (soulcollector)


Lesenswert?

Mit AVRStudio funktioniert es einwandfrei, auch unter 2000. Die Probleme 
treten nur mit AVRDude auf.

von Bene (Gast)


Lesenswert?

Brauchst du den AVR Studio Treiber? Mir kommt das so vor als ob der da 
blockiert. Vielleicht kannst du den mal deinstallieren?


Gruss Bene

von Mathias R. (soulcollector)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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/?5655
https://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.

von Mathias R. (soulcollector)


Lesenswert?

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 Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Mathias R. (soulcollector)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

yacc ist "yet another compiler compiler", ein Parsergenerator.  Den
(und auch lex bzw. flex) musst du mit installieren.  Ich sehe gerade,
es gibt bei MinGW keinen yacc-Port, aber einen von bison.  Das ist
das GNU-Pendant zu yacc.

Du brauchst also:

http://downloads.sourceforge.net/mingw/bison-2.3-MSYS-1.0.11.tar.bz2?modtime=1190626772&big_mirror=1
http://downloads.sourceforge.net/mingw/flex-2.5.33-MSYS-1.0.11.tar.bz2?modtime=1190626832&big_mirror=1

von Mathias R. (soulcollector)


Lesenswert?

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

von Mathias R. (soulcollector)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dann musst du wohl das regex-Paket auch noch mit installieren. :-/

Wenn mich nicht alles täuscht, ist das:

http://downloads.sourceforge.net/mingw/regex-0.12-MSYS-1.0.11.tar.bz2?modtime=1190249198&big_mirror=1

Früher[tm] hatten die glaub ich mal einen Installer, der einen das
interaktiv auswählen lassen hat, was man alles installiert haben
will.

von Mathias R. (soulcollector)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
1
sh yourscript.sh

ausführen.  Ist geupft wie gesprungen.

von Mathias R. (soulcollector)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
2
configure:3686: gcc -o conftest -g -O2 -I/tmp/suse868/include -I/tmp/suse868/include -L/tmp/suse868/lib conftest.c -lus
3
b  -lreadline -lncurses -ltermcap  >&5
4
configure:3692: $? = 0
5
configure:3696: test -z 
6
                         || test ! -s conftest.err
7
configure:3699: $? = 0
8
configure:3702: test -s conftest
9
configure:3705: $? = 0
10
configure:3718: result: yes

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.

von Mathias R. (soulcollector)


Lesenswert?

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.

von Mathias R. (soulcollector)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das klingt dann irgendwie nach einem Treiberproblem, oder?

Die libusb besitzt auch noch irgendwelche Debugschalter, die kann
man auch im Sourcecode setzen.

von micro (Gast)


Lesenswert?

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 :-)

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.