Hallo,
im Rahmen meiner Diplomarbeit hab ich einen freien USB Host Stack für
eingebettete Systeme entwickelt. Enstanden sind die Grundstukuren,
d.h. ein Treiber für den SL811HS von Cypress, ein Klassentreiber für
Massenspeicher (USB-Flash-Sticks), ein einfacher Treiber für den
FT232BM.
Vielleicht hat ja jemand Lust mitzubasteln.
http://www.embedded-projects.net/usbport
Gruss Benedikt
Das Projekt sieht echt interessant aus!
Da hätt ich aber gleich eine Frage zu:"[...] Host-Controller-Treiber für
den AT90USB1287 Mikrcocontroller von Atmel."
Geht das nur mit AVRs, die das USB-OTG haben? Die Verwendung als
USB-Host muss von der Hardware vorgesehen sein, oder?
Ich les mir grad deine Diplom-Arbeit durch ... das ist genau das, was
ich schon länger gesucht habe :-)
Mfg
Thomas Pototschnig
Ja genau, aber ich hab ein Host-Controller für Lowspeed Geräte mal
gesagt bekommen. Ich such den Link mal. Damit kann man wie mit den AVR
USB Implementierungen genauso mit jedem AVR USB-Geräte ansteuern.
Man müsste für diese Software Host-Controller Implementierunh nur ein
Host-Controller-Treiber schreiben.
Gruss Bene
Ich weiss, dass es noch viele Sachen zu machen gibt, dass es eine Chance
hat eine gute Konkurenz zu den komerziellen zu sein, aber denke das ist
machbar. Ich würd mich freuen, wenn da der eine oder andere Lust hat mit
weiterzubasteln.
Ich finde das auf jeden Fall interessant, habe heute die Rockbox-Crew
(zu der ich auch mal gehörte) hierauf aufmerksam gemacht. Es gibt
mp3-Player mit einem integriertem USB-OTG Chip, den wir bisher noch
nicht nutzen können.
Mit einem geeigneten USB-Stack könnte Rockbox externe Platten benutzen.
Code für Filesystem ist ja schon vorhanden.
Nachtrag:
Ein USB-Stack für Rockbox ist ein laufendes Google Summer-of-Code
Projekt, siehe hier:
http://www.rockbox.org/twiki/bin/view/Main/UsbSoftwareStack
Der Focus ist zunächst ein Device Stack, für die Player die keine
Hardware-Bridge haben. Host wäre die Kür... ;-)
Noch ein Nachtrag:
Ich habe mich jetzt endlich mal "richtig" bei mikrocontroller.net
angemeldet, kein Gast mehr.
So erkennen mich die Rockbox-Kollegen wenigstens. ;-)
Da wahnsinn, genau sowas suche ich auch schon lange.
Mein erster USB Stack war der hier:
http://usbn2mc.berlios.de
Vielleicht wollt Ihr den auch mit in eure Liste aufnehmen, dann kann ich
euch verlinken.
Gruss Bene
Du meinst sicher den USB-Teil, nicht das svn-Repository oder dessen
Tarballs. Wende dich mal an Christian Gmeiner oder Peter D'Hoye. Im IRC
erwischt man die Entwickler sehr zuverlässig.
Kennst du eigentlich diesen Stack (auf AVR, per Bitbanging):
http://www.obdev.at/products/avrusb/index.html
Tolle Sache. Ich werde es zwar nicht verwenden (Zeit und fehlende
Anwendung) finde es aber sehr interessant. Und die Arbeit scheint auf
den ersten Blick gut strukturiert und übersichtlich...Vielleicht heute
Nachmittag mal lesen :-)
Hallo Benedikt,
suche schon seit einigen Monaten nach einer USB-Host Lösung mit 'nem µC.
Bisher ohne Erfolg - bis Du nun mit Deiner Arbeit daher kommst.
Alle Achtung! Werde mir bald Deine Diplomarbeit näher anschaun.
Was ich bisher in den Foren las war eher nach dem Motto "USB Host - viel
zu kompliziert". Ich muss sagen, dass ich von USB-Programmierung (in
welcher Art auch immer) generell noch nicht viel gemacht habe. Bisher
habe ich noch alles mit RS232 und TCP/IP erledigen können. Bis jetzt. In
meinem aktuellsten Vorhaben (Projekt ist vielleicht schon zu hoch
gesprochen) will ich eine Kommunikation µC <-> PDA über USB realisieren.
Fast alle PDA's haben nämlich ein USB Device, d.h. mein µC muss
irgendwie ein Host sein. Jetzt lese ich Deinen Beitrag und habe wieder
Hoffnung...
Ich würde gerne Deine Experimentierplatine dazu aufbauen. Könntest Du
eine Bauteileliste freigeben? Vielleicht ist eine in der brd-Datei (hab
aber kein Eagle o.ä.). Eine Frage noch dazu. Kann ich das
Experimentierboard mittels AVR Dragon programmieren/debuggen? Das habe
ich vor ein paar Tagen bei spoerle erworben.
Vielen Dank für die Antworten/Infos
Gruß
Jörg
Hallo Jörg,
hier ist mein Eagle kram:
http://svn.berlios.de/svnroot/repos/usbport/trunk/boards/evaluationboard/
Wenn du willst, kann ich mal die Grössen und Werte der Bausteine
draufschreiben, die fehlen grad.
Das Boards kannst du mit dem AVR Dragon programmieren. Wenn sich noch
der ein oder andere findet könnte ich mal 10 Platinen oder so machen
lassen. Es gab auch noch 4 kleine Fehler auf der Platine den müsste man
noch entfernen.
Ich kann nachher mal ein Foto von meiner Platine Online stellen.
Gruss Bene
Hallo Benedikt,
vielen Dank für die schnelle Antwort.
Ich würde gerne am Di Abend die Bauteile bestellen.
Könntest Du bis dahin mir die Bauteilgrößen nennen bzw. eine
Bauteilliste geben oder ins berlios stellen? Das wäre super nett.
Eine Info bzgl. der 4 kleinen Fehler wäre natürlich hilfreich :-)
Habe gestern auch mal im www nach dem Cypress gesucht aber nirgends
gefunden (reichelt, schuricht,...). Hast Du da eine Idee wo man den
bestellen kann?
Super, das klingt ja alles schon sehr vielversprechend.
Grüße
Jörg
Hallo Jörg,
http://www.ixbat.de//files/admin/projekte/usbport/usbport.jpg
Ja die Fehler kann ich nachher zusammenschreiben. Geb dir dann bescheid.
http://catalog.digikey.com/scripts/partsearch.dll?Detail?name=428-1721-ND
Ich hab damals einfach Samples geordert. Für den SL811 ist der erste
Hosttreiber ja geschrieben, aber eigentlich kann man flexibel
verschiedene Bausteine integrieren. Aktuell arbeite ich an einen fuer
den AT90USB von Atmel, oder hab auch einen ISP1161 von Phillips da. Für
den könnte man auch mal einen Treiber schreiben. Gerne kann ich mal ein
Wochenende investieren fuer sowas.
Gruss Bene
Ahso mit faellt gerade ein ich kenne auch ein Projekt das mit IO Ports
des AVR ein Host anbietet. Würde eigentlich fuers erste testen auch
reichen.
Wäere das was? Dann würde ich mal beginnen dafuer einen Treiber zu
schreiben.
Gruss Bene
Hallo,
jetzt wird es spannend :-)
Natürlich wäre mir der Atmega32 als (SW-)USB Host sehr lieb.
Zumal könnte ich dann mit meinem STK500 beginnen
(das Anfang Oktober eintreffen soll). Dann müßtest Du Dir nicht mehr die
Mühe machen die Fehlerliste und Bauteilliste bereitzustellen - und ich
brauch keine Platine aufbauen (abgesehen von dem Lochraster-Platinchen
"Hex Tri-State Buffer" das kriege ich noch in meinem Keller hin :)
Du sagst, du müsstest dafür einen Treiber schreiben? Ist das notwendig?
Ist das viel Aufwand? Würde der Treiber dann die Software der
SIAM32-Truppe "wrappen"? Oder verstehe ich das jetzt falsch mit dem
Treiber?
Grüße
Jörg
Ja genau, da nehm ich nur die Routinen und baus bei mir ein. Hab vorhin
mal ein Adapter begonnen zu loeten.
Man muss es auch nicht in meinen Stack bauen. Man kann genauso die
Firmware von denen verwenden, wobei ich durch meinen Stack erhoffe das
man viele Treiber mit der Zeit zusammensammeln kann und die man in den
wildesten Konfigurationen (Hardware) verwenden kann.
Also du hast recht ich wueder das nur wrappen, die Funktionsaufrufe
passen super zu meiner Struktur.
Gruss Bene
Klasse.
Deine Treiber-Architektur und der Gedanke dahinter gefallen mir sehr
gut. Ich würde dann ersteinmal - bis auf das Platinchen,etc. - nichts
bestellen und auf mein STK500 warten. Kannst Dich ja dann mal melden,
wenn es einen Treiber-Update gibt :-)
Gruß
Jörg
Hallo Benedikt,
leider habe ich keinerlei Lebenszeichen mehr von Dir seit dem 17.9.
bekommen.
Vielleicht bist Du auch im Urlaub. Ich habe nur die Befürchtung, dass es
doch nicht so einfach ist die Treiber zu erstellen.
Wenn dem so ist, so gib mir kurz bescheid, dann würde ich jetzt anfangen
die SIAM32-Lib für meine Zwecke zu erweitern/anzupassen. Der Stand bei
mir ist, dass ich das SIAM32 Zeug geflashed habe und jetzt anfange über
USART mir gezielt ein paar Debug-Infos auszugeben. Mal schaun, ob ich so
eine Anbindung an ein USB Device (Maus o.ä.) hinkriege.
Wäre nett, wenn Du Dich mal melden könntest.
Gruß
Jörg
Hallo Jörg,
nein habs hier vor mir liegen. Hab gerade einiges um die Ohren. Muss
arbeiten und nächste Woche geht mein Studium weiter. Hast du deine
Platine schon fertig gelötet?
Gruss Bene
Hallo Benedikt,
dann haben wir ja beide eine zeitliche Nebenbedingung :-)
Nächste Woche sind meine Kinder und meine Frau wieder aus der Kur da,
dann wird es mit meiner Zeit wieder sehr eng...
Also. Meine Platine ist aufgebaut, habe allerdings noch einen Fehler
entdeckt, den ich morgen korrigieren werde. Diese Platine beinhaltet
nicht viel: ATmega32, Quad-Buffer (74HC126), 15MHz Quarz, passive
Bauteile, USB-Buchse, Stiftleisten, ... (für einen Nicht-Hardwerker
vielleicht schon viel)
Mittlerweile ist auch mein STK500 da, aber nun ist halt meine Platine
fertig. Das STK500 benutze ich aber dennoch, da dort eine USART-RS232
Umsetzung mit nem Maxim uC drauf ist. So bekomme ich meine Debug-Infos
auf meinen PC. Das funktioniert auch schon ansatzweise.
Habe aber noch kein USB-Device angeschlossen. Das kommt wahrscheinlich
morgen (besser heute, also Fr!). Erst noch o.g. Fehler korrigieren ,
RS232 noch etwas austesten, aber dann kommt eine USB-Maus dran und dann
mal schaun, ob ich die Kommunikation aufbauen kann...
D.h. ich beschäftige mich nun doch tiefer mit der SIAM32 Software. Mein
Projekt muss ich dann anpassen, wenn Deine Treiber fertig sind. Schade,
denn ich hatte die Hoffnung, dass es mit Treiber einfacher wäre. O.k.,
so lerne ich mehr über USB....
Aber die Interrupts (Studium, Beruf) haben halt höhere Prio, ist ganz
klar. Bei mir ab nächste Woche auch wieder stärker :-)
Gruß
Jörg
PS: Danke für Dein Lebenszeichen :-)
Hallo Jörg,
super wenn du was herausbekommst, dann sag bescheid. Das ist ja auch die
Pionierarbeit die jemand mal leisten muss, das einmal komplett zum
laufen zu bringen. Wie gesagt das Interface ist wirklich passend
gemacht. Ich schreib mir mal einen dicken Zettel das ich morgen dran
denk. Das wäre schon eine sau praktische Sache.
Gruss Bene
so, das war ein langer Abend...
aber es sieht schon ganz gut aus
der Atmel kommuniziert irgendwie mit meiner USB-Maus bzw. dem USB-Stick.
Bei der Maus blinkt die LED (optische Maus) im Takt der Kommunikation
aber die Daten die ich mir anschaue (Descriptor, etc.) sind alle leer
(Nullen).
Bei dem Stick hingegen bekomme ich Daten, die habe ich versucht mit dem
zu vergleichen, was mir die Windows-Systemsteuerung liefert aber da sehe
ich noch keine Übereinstimmung. Ich bekomme folgende Debug-Daten
geliefert (s.u.). Jetzt bist Du gefragt Benedikt, meine Kenntnisse über
USB sind noch sehr spärlich, hatte meine Zeit mit dem Übrigen verbracht.
Auf was muss ich jetzt schaun? Mich wundert es, dass die rechten 7 Bytes
immer Null sind. Aber vielleicht hast Du ja eine Idee...?
So, jetzt ins Bett!
Gruß
Jörg
>> Ask for the first 8 bytes of the Device Descriptor
datapacket: 0x80 6 0 1 0 0 40 0
pushing a SETUP
pushing an IN
doing transactions...
0x00000000000001010000000000000000
0x000000000000fdfe0100000000000000
resetting...
idling...
>> set address to 1
datapacket: 0x0 5 1 0 0 0 0 0
pushing a SETUP
sending status.
sending status.
sending status.
doing transactions...
0x00000000000001000000000000000000
0x000000000000fdff0100000000000000
0x000000000000f97f0100000000000000
0x000000000000f53f0200000000000000
>> Ask for the first 18 bytes of the Device Descriptor
datapacket: 0x80 6 0 1 0 0 12 0
pushing a SETUP
pushing an IN
pushing an IN
pushing an IN
sending status.
doing transactions...
0x00000000000001010000000000000000
0x000000000000fdfe0100000000000000
0x000000000000f9fc0200000000000000
0x000000000000f5fa0000000000000000
0x000000000000e1f00600000000000000
>> Ask for the first 9 bytes of the Device Descriptor
datapacket: 0x80 6 0 2 0 0 9 0
pushing a SETUP
pushing an IN
pushing an IN
sending status.
doing transactions...
0x00000000000001020000000000000000
0x000000000000fdfc0100000000000000
0x000000000000f9fa0300000000000000
0x000000000000f5f00300000000000000
>> Ask for a Report Descriptor
datapacket: 0xa1 1 0 1 0 0 8 0
pushing a SETUP
pushing an IN
sending status.
doing transactions...
0x00000000000000010000000000000000
0x0000000000007efe0100000000000000
0x0000000000007cfd0200000000000000
>> set address to 1
datapacket: 0x0 9 1 0 0 0 0 0
pushing a SETUP
sending status.
sending status.
sending status.
doing transactions...
0x00000000000001000000000000000000
0x000000000000fdff0100000000000000
0x000000000000f97f0100000000000000
0x000000000000f53f0200000000000000
alles quatsch
habe meine Webcam auch mal dran gemacht...
das Ergebnis: die Debug-Ausgabe ist absolut identisch.
ich denke der Descriptor enthält Vendor-ID, etc so dass hier ein
Unterschied sein müsste.
hier stimmt also irgendwas noch nicht :-(
aber jetzt ins Bett !
Hallo,
habe Antwort von den SIAM32-Leuten bekommen.
Hier ein Auszug:
>> It's possible that the hardware connection is>> somehow flawed -- can you scope the D+ and D- lines?
Vielleicht ist mein Aufbau nicht gut genug?
Ein Freund baut das gleiche auch gerade auf - mit dem STK500.
Hattest Du inzwischen mal Zeit für das Projekt?
Gruß
Jörg
Hallo,
ne hab irgendwie viel zu wenig Zeit leider gerade. Aber es liegt hier am
Schreibtisch. Ich werd es die Woche wirklich mal versuchen, bin selber
schon ganz gespannt drauf.
Gruss Bene
Mir ist gerade beim Frühstück eingefallen, du darfst da nur LowSpeed
Geräte dranhängen an die Schaltung! Bei den anderen kann er nichts
erkennen würde ich jetzt mal sagen.
Gruss Bene
Hallo Jörg,
was muss man denn da alles machen? Kannst du das schnell mal
Stichpunktartig erzählen? Hab alles in den Startlöchern. Wenn du mir das
schnell sagen könntest kann ich mir die arbeit sparen das anzupassen.
Oder hast du das angepasst? ich krieg da ein paar Fehler.
Gruss Bene
Hallo Benedikt,
in dem SIAM32-Projekt gibt es (leider) mehrere main-Dateien.
Das ist etwas verwirrend. Und zwar zum Debuggen der einzelnen Treiber
Schichten. Ich habe das oberste Level (client) hier getestet, d.h.
"test_client_avr.c". In der Haupt-Routine "test_hc_sie_interaction()"
kann man die einzelnen Schritte (Anforderung des Descriptors, etc.) der
Kommunikation debuggen. Das Makro "debug" schiebt über die UART die
Debug-Kommentare heraus, die ich mir über das RS232-Spare des STK500 und
dann mit dem Windows-Tool "putty" anschaue. Bei putty kann man in den
Optionen das Linefeed einschalten.
Das Makefile des SIAM32 ist für alle main-Projekte und daher (für mich
zu unübersichtlich). Ich kenn mich mit make auch nicht so gut aus. Ich
habe Dir aber mal mit dem AVR-Studio ein Makefile exportiert
(Makefile_new). Für den Fall, dass Du auch mit dem AVR-Studio arbeitest,
habe ich auch mein Arbeits-Projekt gezippt.
Mein Freund hatte auch noch eine Idee. Vielleicht müssen in den D+/D-
noch Reihenwiderstände eingefügt werden, da lt. Spezifikation 3,3V auf
den USB-Datenleitungen sein sollten, nicht 5V. Vielleicht kriege ich
damit auch mehr mit meiner Maus hin, habe ich aber noch nicht
ausprobiert.
Gruß
Jörg
PS: Sorry, dass ich mich erst jetzt melde, aber ich war einige Tage
krank.
Ja das hab ich mir auch schon gedacht, dass das nicht sauber ist mit den
5V auf D+ und D-.
Wie gross müsste man die Widerstaende machen? Ich bin Informatiker :-)
Die haben ein 15 MHz Quarz. Das müssten wir auch machen. Sonst können
wir die Zeit nicht erreichen.
Hab gerade keinen 15 MHz Quarz da muss mir erst einen besorgen.
Vieleicht ist das auch von denen ein Fehler....
Hi,
bei meinem Freund reagiert die USB-Maus wie bei mir: die LED blinkt
hektisch (irgendwelche Daten kommen wohl an) aber es kommt nichts
zurück. Wie gross die Widerstände sein müssen, weiss ich auch nicht
genau. Vielleicht so um die 100Ohm jeweils als Serienwiederstand in D+
und D-. Man müsste sich das dann im Oszi anschaun, habe aber zur Zt.
keines zur Verfügung. Alternativ könnte man evtl. den TriHexBuffer mit
3,3V betreiben - könnte doch evtl. auch klappen, oder?
Bin gespannt auf Dein Resultat.
Jörg
Ja bei mir ist das gleiche die Maus blinkt unkoordiniert. Irgendwie bin
ich noch nicht so überzeugt von dem Zeug :-)
Ich würds auch nicht als blinken bezeichnen sondern eher zuckeln :-)
ja, aber ist doch schon Mal was :-)
vielleicht probieren wir das nocheinmal mit den Widerständen und mal die
Signale mit dem Oszi anschaun
die Antworten von den SIAM32-Junx sind auch eher knapp :-(
und wenn's nicht geht...
...ich kenn da noch eine schöne Diplomarbeit :-)
Ein frei verfügbares praktisches Beispiel für die Ansteuerung eines
SL811HST von einem ATmega32 gibt's eigentlich schon länger in Form von
meinem LPT->USB-Konverter:
http://www-user.tu-chemnitz.de/~heha/bastelecke/Rund%20um%20den%20PC/USB2LPT/lpt2usb.htm
Hier in Assembler. Kein LGPL, sondern PD.
Der SL811HST ist jedoch ziemlich lahm, teuer und umständlich
beschaffbar, sodass ich heutzutage das gleiche Projekt eher mit einem
passenden ARM7, dem LPC2388, lösen würde.
henni
Hallo Benedikt,
ich habe mir jetzt mal deine Diplomarbeit herunter geladen und ein bissl
gelesen. Da ist vor allem der Punkt 6.2.4 Hub Treiber für mich
interessant.
Vielleicht erst mal zu meinem Problem:
Ich mache gerade eine Diplomarbeit zum Thema EMV und USB. Dabei möchte
ich folgende Strecke aufbauen, die dann einen stetigen Datenstrom
übertragen soll (Bulk Transfer).
USB Host -> Hub -> Hub -> USB Mass Storage
Das schaut jetzt vielleicht ein bisschen umständlich aus, aber die Hubs
sind wichtig für den Testaufbau. Es geht also um den physical layer des
USB (Störabstrahlung usw.) und nicht um Protokolle und Software.
Ich habe mir für den USB Host und das USB Mass Storage zwei Eval Boards
der Firma Cyan Technologies besorgt mit dem eCOG1X14Z5 Microcontroller.
Diese Boards können sowohl als USB Host als auch als USB Device dienen.
Als Beispielprojekt ist ein USB Stack für Mass Storage Devices und ein
Mass Storage Host implementiert. D.h. man sollte die zwei Boards
zusammenschalten können, damit diese kommunizieren können (Einer als
Host das andere als Device). Hoffe ich jedenfalls.
Es gibt aber keinen USB Stack für USB Hubs.
Jetzt meine Frage:
In deiner Diplomarbeit hast du geschrieben, dass du schon ein Gerüst für
einen Hub Treiber implementiert hast. Hast du da eventuell mittlerweile
einen komplett funktionierenden Hub Treiber, den ich verwenden könnte,
um das System zum laufen zu bringen? Ich habe noch keine Ahnung von
Microcontroller Programmierung, deswegen wäre ich für ein bissl Support
sehr dankbar (Links, Dokus, Tuts).
Also schon mal vielen Dank für die Antwort!!
Grüße
Markus
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang