OHCI Fehler, System hängt sich auf
-
Auf echter Hardware läuft bisher EHCI und xHCI bestens
Das ist eine grandiose Übertreibung... xHCI kann ich ja nicht beurteilen, aber EHCI lief/läuft eher furchtbar.
Ich kann aber vorerst auch nur dazu raten, einfach mal andere Emulatoren oder echte Hardware auszutesten. Im Allgemeinen kann man aber davon ausgehen, dass das, was VBox da bereitstellt, schon irgendwie funktionsfähig ist. Als Ausnahme ist mir nur die PCNet-Netzwerkarte bekannt, aber wahrscheinlich liegt der Fehler wahrscheinlich doch bei PrettyOS. Davon gibts aber ja quasi keine echte Hardware, die als Referenz herhalten kann.
-
Ich werde mal etwas testen ab Montag und berichten...
Danke und Gruß
Nicky
-
Ich werde mal etwas testen ab Montag und berichten...
Danke und Gruß
Nicky
-
EHCI lief/läuft eher furchtbar
Diese Bemerkung bezieht sich auf die Geschwindigkeit. Daten werden korrekt übertragen.
-
Hallo zusammen,
mein EHCI Controller wird nun richtig erkannt, ein HCReset funktioniert ebenso wie der
PortReset tadellos.Auch alle Bits in den Statusregistern werden richtig gesetzt.
Leider bekomme ich es nicht hin ein Setup Packet an das Device zu senden
und eine Antwort zu erhalten.Ich möchte hier mal mein Vorgehen beschreiben und hoffe auf Hinweise,
falls ich etwas falsch angehe.Im AsyncListAdress Register trage ich 0x300.000h ein. (32-Bit Adresse der Async-Liste mit Bit 0-4 auf NULL.
Mein Frame List Size = 1024 (Command Register) und ich trage ab Adresse 0x300.000h
1024 Frame List Link Pointer ein. Type = QH und T-Bit = gesetzt.An Adresse 0x800.000h lege ich meinen QH und drei TD's ab, die alle bis auf 96 Byte aufgefüllt werden (32 Byte Ausrichtung).
Diese Adresse trage ich nun als ersten Frame List Pointer ein:
mov esi, 300000h mov eax, 800002h mov [esi], eax
Bit 1 ist gesetzt für QH und das T-Bit ist gelöscht.
Nun setze ich das Async Schedule Enable Bit im Command Register und
starte den HC, was er nach dem Anzeigen des Statusregisters auch tut.Ich bin mir sicher das mein Fehler aber in den ganzen Biteinstellungen
des QH und der drei TD's liegt.Mein QH sieht in den ersten 5 DWORD so aus:
QH 1h 86000h 40000000h 0h 800060h
Meine drei TD's so (4 DWORD):
TD0 8000C0h 1h 80E80h 900000h TD1 800120h 1h 8080D80h 901000h TD2 1h 1h 80080C80h 0h
Meine Frage ist daher, könntet ihr mir eure Werte mal zeigen?
Programmtechnisch sollte das ja kein Problem sein.
Die Beispiele in meinem Buch sind leider nicht gerade fehlerfrei.Gruß, Nicky
-
Hallo,
Im AsyncListAdress Register trage ich 0x300.000h ein. (32-Bit Adresse der Async-Liste mit Bit 0-4 auf NULL.
hier müssen die 0x800.000h rein (der Beginn der QH).
Der Frame List Pointer ist nur für den interruptgetriebenen Datenverkehr.Mein Standard-Device-Descriptor wird nun endlich empfangen
Nicky
-
Glückwunsch! usb und e/o/u/xhci ist leider ein wildes Gefummel. Da helfen übersichtliche Struturen und Funktionen. Mit Hex-Zahlen ist das schon wild. Der Mensch braucht das "sprechend".
-
Hallo zusammen,
stehe nun vor dem nächsten Problem.
Es werden immer nur 8 Byte von den üblichen 18 empfangen.Habe meine Einstellungen von QH und den TD mehrfach kontrolliert.
Auch der Versuch 18 TD's anzulegen und mit jedem 1 Byte zu holen scheitert ab
dem 9. Byte. Acht gehen immer aber warum nicht der Rest?Habe auch schon eine Adresse vergeben aber auch hier das selbe
Ergebnis. Es werden immer nur 8 Byte empfangen.Hat jemand einen Tipp wo ich suchen sollte oder welche Einstellungen ich
ändern muss?Gruß, Nicky
-
Es könnte mehrere Stellen geben, an denen die Länge anzugeben ist. Schau mal, ob Du wirklich überall die gewünschte Länge angibst. Außerdem kann es bei manchen Deskriptoren auch sein, dass sie kürzer oder länger sind, je nach Gerät. Wenn kürzer, dann kommt halt weniger als verlangt, wenn länger, wird abgeschnitten.
-
Hallo,
ich habe im QH MPS =64, im Setuppacket (OUT) MPS = 8,
und im IN Packet wieder MPS = 64.Dank EHCI sollten somit alle 18 Byte auf einmal empfangen werden.
Diese Größe gibt mir das erste Byte auch zurück: 0x12h.Die Woche kommt mein Test-Pc von Ebay. Werde es dort mal versuchen.
Meine Version von PrettyOS läuft leider auch nur auf VPC (ohne USB) und
hängt sich bei VBox komplett auf wenns um USB geht.Danke erstmal
Nicky
-
Ich mal wieder....
ich habe ein paar Fragen bezüglich zum deaktivieren des Legacy Supports des BIOS.
Mein EECP aus dem HCCParams Register beträgt bei PC1 = 068h und PC2 = 0A0h
Da beide Werte > = 40h sind, werden die wohl gültig sein.In meinem Buch steht das dies der Offset ist im PCI Conf-Space, zum auslesen
ob Legacy aktiviert ist vom BIOS oder nicht.Auch steht geschrieben das der Offset auf eine Liste zeigt, bei der der zweite
DWORD Eintrag das Flag beinhaltet.Kann ich davon ausgehen das wenn der PC von USB Floppy booted, er dann automatisch
den Legacy Suppport aktiviert hat?VPC hat einen EECP Wert von 0 (keine Liste), PC1 liest 0x90004h aus und PC2 liest 0x10004h aus, was ja schonmal nicht schlecht ist, da Bit 16 bei beiden gesetzt ist.
Ein setzen des Bit 23, zurückschreiben ins Conf Space des PCI BIOS und (5s warten) ändert nur nichts an den Werten bei beiden Rechnern.
Auf was muss ich achten wenn ich den Support nicht deaktivieren kann? IRQ's aus?
Für Infos bin ich wie immer dankbar
Nicky
-
Das schaust Du Dir am besten in der entsprechenden Funktion in PrettyOS an. Da haben wir lange gekämpft, bis das vollständig bei aller Hardware geklappt hat.
-
Hallo und Guten Abend,
habe mal im "Archiv" gelesen
http://www.c-plusplus.net/forum/253016-60
Mein Request Packet hat in Byte 7 "08h" und ihr "12h".
Das sollte es sein Byte 7+8 enthalten in der Datenphase
die Anzahl der zu übertragenden Bytes!Nicky