Forum: Mikrocontroller und Digitale Elektronik AT90USB und DRAGON die ersten Schritte


von Holger P. (Gast)


Lesenswert?

Da ich ja noch immer beim kennenlernen und erlernen der µC von Atmel 
bin. Mich nun ein wenig mit dem Assembler beschäftigt habe, schon mal 
ein bisschen ATtiny2313 & ATmega88 berührt habe, habe ich nun so ein 
Dragon bekommen. Habe da noch keine Ahnung was ich mit dem machen soll / 
kann aber schauen wir mal.

Unter anderem wollte ich nun auch mal ein wenig am AT90USB rum 
schnuppern.

Die erste Aufgabe die ich mir gestellt habe ist mit dem AT90USB zu 
kommunizieren und zwar über USB. Hoffe das ich als erstes so eine 
virtuelle Schnittstelle hinbekomme so das ich auf der PC Seite erst mal 
keine Baustelle anfangen muss.

Also so wie beim ATMega88 bzw. ATtiny2313 LEDON an den AT90USB senden 
und der macht halt einen Port Low damit die LED an geht.

Soweit ich mich nun schlau gemacht habe ist das gar nicht so einfach da 
die USB-Schnittstelle von AT90USB eigentlich nix kann. Somit müsste ich 
alles was ich für eine Virtuelle COM benötige selber Programmieren. Sehe 
ich das richtig?

Habe auch schon einiges gefunden im Netz LUFA zum Beispiel ist aber 
alles in C. Ich möchte dem Assembler treu bleiben.

Ich suche auch nix fertiges, ich möchte ja verstehen was ich da mache 
doch wäre ein richtungsweisender Weg schon hilfreich.

Könnte mich da mal jemand an die Hand nehmen?

Was den DRAGON betrifft, habe von dem Teil echt noch keine Ahnung 
eventuell könnte man ja diesen auf diesem Weg miteinbeziehen.

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


Lesenswert?

Holger P. schrieb:
> Ich möchte dem Assembler treu bleiben.

Viel Vergnügen dann.

Das Zusammenspiel zwischen Host und Device beim Eingliedern
("enumeration") eines USB-Geräts in den Host ist von vielfältiger
Kommunikation dominiert.  Der Host fordert das Gerät auf, sogenannte
Deskriptoren rüberzureichen.  Anhand der darin enthaltenen Daten
versucht er dann, einen passenden Treiber zuzuordnen.  Erst, wenn
all dies reibungslos abläuft, wird man auf dem Host irgendetwas
anderes als eine Fehlermeldung vom Gerät wahrnehmen können.

Sicher kann man alles in Assembler bauen, aber wenn du ein Haus
bauen willst, fängst du vermutlich auch nicht damit an, den Brennofen
für die Ziegel zu nehmen und die Ziegel selbst zu machen, oder?

Ich würde mir an deiner Stelle zumindest einmal die C-Beispiele
herannehmen um zu verstehen, was da so abläuft.  Dann kannst du dir
immer noch überlegen, ob du das alles neu schreiben willst oder lieber
eben einfach nur als Baustein in dein Projekt einbindest, damit du
dich deinen eigentlichen Aufgaben zuwenden kannst.

Wenn dir LUFA zu komplex ist, ich habe mal für µracoli eine
Minimalimplementierung eines CDC (communication device class)
geschrieben, die letztlich komplett in diesen beiden Dateien
enthalten ist:

http://hg.savannah.gnu.org/hgweb/uracoli/file/0ab76d1d8fd6/Src/Lib/Ioutil/hif_at90usb.c
http://hg.savannah.gnu.org/hgweb/uracoli/file/0ab76d1d8fd6/Src/Lib/Ioutil/hif_usb.h

Ich habe eine Weile gebraucht, bis ich alle Deskriptoren dabei in
einer Form hatte, in der sie einerseits minimal waren, andererseits
die entsprechenden CDC-Treiber aller mir zugänglichen Betriebssysteme
gewillt waren, das Gerät als ein gültiges anzuerkennen.  So ein Kram
wie die "call management functional descriptor" oder "abstract control
management functional descriptor" muss daher enthalten sein, auch
wenn man diese Dinge eigentlich nicht braucht.  Auch der interrupt
endpoint muss da sein.

von Holger P. (Gast)


Lesenswert?

Danke Dir für die klasse Antwort.

Es geht mir ja nicht darum etwas zu entwickeln sondern darum etwas zu 
verstehen..

Eben habe ich folgendes gefunden: 
http://www.weigu.lu/b/usb/key/vendor/index.html

Dort wird so einiges erklärt. Eventuell bringt mich das weiter. Wie 
gesagt ich möchte ja nur auf den richtig Weg gebracht werden. Und wissen 
um was es geht.

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


Lesenswert?

Holger P. schrieb:

> Eben habe ich folgendes gefunden:
> http://www.weigu.lu/b/usb/key/vendor/index.html

Die sind zwar auf der Controllerseite noch etwas einfacher gehalten,
dafür brauchen sie (zumindest unter Windows) auf Host-Seite einen
expliziten Treiber.  Der Vorteil der CDC-Implementierung dagegen ist,
dass alle gängigen Betriebssysteme dafür bereits Treiber mitbringen,
und dass man dort dann einen "virtual COM port" geliefert bekommt.

Aber dafür hast du natürlich dein gewünschtes Assemblerbeispiel. ;-)

von Holger P. (Gast)


Lesenswert?

OK soweit ich das verstanden habe ist das für den usb1287 und ich habe 
ja den AT90USB646 aber ich hoffe dadurch einwenig zu verstehen um was es 
geht.

Nun erst mal auf der Windows Seite würde mir reichen. Kleine Brötchen 
backen.

Doch ist natürlich Deine Geschichte wesentlich besser wenn man keinen 
Treiber benötigt und das auch noch Betriebssystem unabhängig ist.

Doch ob ich jemals so weit komme.

Bekomme ja immer nur etwas hingelegt und gesagt. Da haste wieder was zum 
spielen. Wie wo was ich damit machen kann ????

So auch mit dem Dragon.

Väter halt.

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


Lesenswert?

Holger P. schrieb:
> OK soweit ich das verstanden habe ist das für den usb1287 und ich habe
> ja den AT90USB646 aber ich hoffe dadurch einwenig zu verstehen um was es
> geht.

AT90USB646,647,1286,1287 sind zueinander kompatibel.  Klar, der
offensichtliche Unterschied ist, dass die 64x nur 64 KiB Flash
haben, und die 6er haben jeweils keine "USB OTG"-Funktionalität
(on-the-go, so eine Art Mini-USB-Host).  Aber als Device sind
sie untereinander gleich zu handhaben.

Lediglich die kleineren AT90USB82/162 bzw. deren Nachfolger
(ATmega*U2) sind ein wenig anders, denen fehlt ein Teil der
Hilfsfunktionen, die die "großen" AT90USB bereits in Hardware
haben.

> Nun erst mal auf der Windows Seite würde mir reichen. Kleine Brötchen
> backen.

Windows ist in dieser Hinsicht übrigens der mit Abstand
schwierigere Gegenpart.  Die Opensource-Unixe sind da allesamt
viel angenehmer, weil sie bereits von Haus aus einen generischen
USB-Gerätetreiber mitbringen, auf den sie zurückfallen, wenn kein
spezifischer Treiber passt.  Auf diesem kann man dann mit seiner
Applikation immer per libusb aufsetzen.  Das einzige zu lösende
Problem ist dann das mit den Rechten, aber das hat man unter
Windows ohnehin auch ("Neue Hardware gefunden ...").

Bei Windows gibt's sowas nicht.  Entweder man schreibt ein Gerät,
welches auf einen der wenigen Standard-Gerätetreiber passt (HID
oder CDC sind da die beliebtesten, weshalb es halt allerlei Geräte
in der freien Wildbahn gibt, die "HID" sein wollen, obwohl sie mit
"Human Interface" im ursprünglichen Sinne nichts zu tun haben), oder
aber man muss zumindest einen eigenen Stub-Treiber liefern.  Sowas
gibt's bei der LibUSB-Win32 wohl als Beispiel.

> Bekomme ja immer nur etwas hingelegt und gesagt. Da haste wieder was zum
> spielen.

Versuche zu verstehen, was da passiert.

von Holger P. (Gast)


Lesenswert?

Jörg Wunsch schrieb:

> Versuche zu verstehen, was da passiert.

Genau so, und nachher sagen siehste geht doch. Er weiß es ja, aber sagt 
mir nix   grrrr

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.