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
Wie das wird im Rahmen des Summer of Code geschrieben? oder steh ich gerade auf dem Schlauch? Gruss Bene
Für Rockbox ja. Der Stack von Objective Development nicht, ist was anderes, hat nichts damit zu tun, falls dich das verwirrte.
ah ok und wo ist der usb stack von Rockbox? Oder die haben doch so ein hübsches Bild da .... Gruss Bene
Christians Arbeitsfeld scheint hier zu sein: http://www.christian-gmeiner.info/soc/ Aber bitte setze dich doch mit ihm in Verbindung.
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
http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2007/blh36_cdl28_dct23/blh36_cdl28_dct23/index.html Hier ist das Projekt.
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
Hi, habe jetzt jede Menge Kram bestellt, um eine kleine Platine mit ATmega32 aufzubauen, die ich mit dem Dragon ansprechen werde. 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, hab heut mal die Schaltung fertig gelötet. Morgen abend wird getestet. Bin gespannt. 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, habe einen 15MHz Quarz eingelötet. Na ja, funktioniert ja auch nicht wirklich :-)
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
Das ist leider mein letzter Stand: http://svn.berlios.de/svnroot/repos/usbport/trunk/drivers/class/hub.c Gruss Bene
Alles klaro! Danke erstmal, ist besser als ganz bei 0 anzufangen! Grüsse
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.