Autor Thema: Frage zu UHCI Setup Control Transfer  (Gelesen 5132 mal)

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« 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

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #1 am: 29. January 2012, 18:02 »
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.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 29. January 2012, 19:14 »
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
« Letzte Änderung: 29. January 2012, 19:50 von Relbmessa »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 30. January 2012, 10:45 »
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?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 30. January 2012, 10:54 »
Hallo taljeth
danke der Nachfrage, ich arbeite lieber mit Hardware.

Relbmessa

 

Einloggen