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.