Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Relbmessa am 29. January 2012, 17:10
-
Hallo
ich versuche gerade UHCI Programmierung Control-Transfer Setup(Control)
;SETUP TD
00025000 ;Link Pointer
18800000 ;Control/Status
00E0002D ;Len=8,DATA0 , Setup
00120118 ;Buffer Pointer
;DATA0 TD
00029000 ;Link Pointer
18800000 ;Control/Status
00E00069 ;Len=8,DATA0 , IN
00120140 ;Buffer Pointer
;DATA1 TD
0002D002 ;Link Pointer
18800000 ;Control/Status
00E80069 ;Len=0,DATA1 , IN
00120168 ;Buffer Pointer
;Buffer
mov dword [0x00120118] , 0x80 ;Setup Packet
mov dword [0x0012011C] , 0x08000000
Leider meldet sich der USB-Stick nicht
Mir geht es nur darum ob die Tds und das Setup-Packet richtig sind??
Vielleicht kann mir ja jemand einen Tipp geben.
Danke
Relbmessa
-
Prinzipiell kann es richtig sein, genau müsste ich natürlich wissen, was du tun willst.
Mögliche Fehlerquellen wären:
- Fehler in den TDs: Das Depth/Breadth-Select-Bit in den Linkpointern ist nicht gesetzt, das heißt, die TDs werden nicht direkt hintereinander abgearbeitet. Willst du das so? Außerdem ist das Active Bit im Control-and-Status-Feld nicht gesetzt, demzufolge wird der UHC die TDs gar nicht ausführen.
- USB-Fehler: Ich möchte mich nicht festlegen, aber es kann sein, dass man einen Frame warten muss, nachdem man ein SETUP-Paket gesendet hat, bevor man die Antwort liest. Da ich deine Vorgehensweise nicht kenne, könnte es sein, dass das noch beachtet werden möchte.
- Probleme beim Einrichten von UHC(I) und USB: Vielleicht hast du den Legacy Support nicht deaktiviert, vielleicht hast du den Stick noch gar nicht zurückgesetzt, … Da könnte auch noch einiges nicht ganz stimmen, unabhängig davon, ob die TDs korrekt sind oder nicht.
Hilfreich wäre es zunächst vor allem, mal nachzusehen, wie viel der UHC von deinen Befehlen überhaupt mitbekommt. Dazu kannst du dir sinnvollerweise einen IRQ senden lassen, sobald ein TD abgearbeitet wurde und ansonsten einfach mal in die Statusfelder schauen und nachsehen, ob da Fehlercodes oder sonst irgendwas drinstehen. Wenn die gar nicht verändert sind, weißt du zumindest schonmal, dass es vermutlich weder am USB selbst noch an deinen Paketen liegt, sondern eher daran, dass der UHC(I) noch nicht korrekt aufgesetzt wurde, o. ä..
Außerdem wäre es gut zu wissen, in welcher Umgebung du testest. Ich habe bisher noch keinen High-Speed-Stick gefunden, der auf einem echten Computer, nachdem er an einem High-Speed-Port steckte, auf Full-Speed-Anfragen geantwortet hat. Kann an meinem Unvermögen liegen, auf jeden Fall ist das eine knifflige Sache. Im Zweifelsfall auf echter Hardware also lieber mit Low-Speed-Sachen wie Maus o. ä. rumprobieren.
-
Hallo XanClic
danke für die schnelle Antwort. Ich werde deine Gedanken in meine Arbeit einfließen lassen.
Nur so viel:
die ersten drei TDs werden wohl bearbeitet, denn beim Auslesen erhalte ich ein Ergebnis.
Später dazu meher.Muß den Rest von dir erst mal bearbeiten
USB-Fehler kann ich nicht ausschließen, stehe ja noch ganz am Anfang:
Mir ist nur wichtig, das mein Ansatz nicht ganz falsch ist.
Die TDs stehe so in der Liste das die L-Pointer auf den nächsten TD zeigen
Ob der Aufbau so bleiben kann , weiß ich nicht?.
Den letzten Punkt würde ich ausschließen ->habe das UHCI lowlevel wiki einfließen lassen
Die Umgebung ist mein kleines OS im Protected Mode mit P4
Die Speicherbereiche lade ich mir zur Kontrolle auf den BWS.
Der Stick ist Full-Speed - EHCI kommt erst viel viel später.
Relbmessa
PS Activ Bit-23 ist gesetzt 18800000
-
Wäre es für die ganz grundlegenden Probleme nicht sinnvoll, erstmal in qemu zu testen? Der hat nämlich den großen Vorteil, dass man da auch in die "Hardware" Debugausgaben reinpatchen kann.
Oder ist USB im qemu so kaputt, dass man sich darauf überhaupt nicht verlassen sollte?
-
Hallo taljeth
danke der Nachfrage, ich arbeite lieber mit Hardware.
Relbmessa