2009-06-19 12 views
0

Ich entwickle CDC-Treiber für USB-Gerät und stolpere über ein Problem. Der Treiber, den ich auf der Windows-Seite verwende, verwendet Clear Endpunkt Feature als eine Art von Mechanismus oder um Daten richtig zu bekommen. Das verursacht mir eine Menge Trouble, weil ich es nicht funktioniere. Ich denke, Daten-Toggle stimmen nicht überein, und ich vermisse einige wichtige Datentransfer, auch nicht mit diesem Endpointing verbundenen Interrupt wegen der schlechten Daten deaktivieren. Ich setze den Datenumschalter bei der eingestellten Schnittstelle auf 0 zurück und lösche die Funktion, wie im USB-Standard angegeben. Gibt es mehr Situation, wenn ich das tun sollte? Oder gibt es einen einfachen Weg zur Fehlerbehandlung bei ungültigen Datenumschaltungen.USB Clear Endpoint Feature

Danke für anwsering. Ich habe einen USB-Analyzer, aber ich tue mir nichts Gutes. Von dem, was ich geschafft habe zu sammeln und ich denke, passiert. Ich setze das Datatoggle-Bit in hardvare nach der Clear-Funktion (wie es sein sollte) für den entsprechenden Endpunkt. Senden Sie einige Daten, es wird am PC empfangen. Ich kenne diesen USB-Analyzer und habe meinen Vcom-Treiber mit Port-Monitor verfolgt. Dann warte ich auf einige Daten, wie alles konfiguriert ist (Gerät aufgezählt usw.), die erste Frage wird beantwortet, aber die nächste ist nicht, nach klarer Endpunkt-Funktion stellt die PC-Seite die Frage erneut. Dies sollte den UBS-Interrupt für den entsprechenden Endpunkt auslösen, aber es passiert nicht, nach einiger Zeit gibt es ein eindeutiges Endpunktmerkmal und das gleiche Paket, und es wird geantwortet, dieses Mal gibt es Schweigen auf dem Kommunikationsprotokoll. Ich habe den angeforderten Transfer im Vergleich zu fehlenden Interrupts gezählt und das Verhältnis ist genau 2: 1, also denke ich, dass die Datenumschaltung zur Hälfte der Zeit falsch eingestellt ist. Aber wie kann das passieren, wenn ich das Daten-Toggle-Bit jedesmal setze, wenn ich ein klares Endpunkt-Feature bekomme.

Ich hoffe, ich habe das Problem deutlich gemacht, für die harvare Seite denke ich, das einzige wichtige Ding ist das Bit, das ich setze. Es heißt "Schreiben Sie eine 1 in dieses Bit, um den Endpunktdatenschalter auf 0 zurückzusetzen". Ok ich denke (hoffentlich) ich löste die Clear-Endpunkt-Funktion, andere Fehler wurden durch andere Dinge verursacht, und kumulative Problem war schwer zu fangen.


Ok fixierte ich vor einiger Zeit Thema, jetzt habe ich noch nicht einmal remeber, was die Ursache war, aber als ususally ist - es ist etwas anderes. Jeder, der an Dank geht, dankt.

Antwort

1

Beachten Sie, dass Windows bei einigen Versionen von usbser.sys die Pipe nach einer Übertragung eines exakten Vielfachen von 64 Bytes nicht korrekt löscht. Ich bin nicht genau aus Ihrer Frage klar, ob dies das Verhalten ist, das Sie sehen, aber ein USB-Analysator sollte Ihnen helfen, festzustellen, ob dies der Fall ist. Wenn Sie XP SP2 verwenden, führen Sie ein Upgrade auf SP3 durch.

+0

Courious, aber mein Fall war einfacher, der Fehler war klar Endpunkt-Funktion und mangelnde Handhabung, zweitens hatte ich Probleme mit der Aufgabenbehandlung in meinem USB-Stack, so seltsames Verhalten wurde gesehen. – CrazyChris

1

Ich schlage vor, usb snoopy10 (Software USB-Analyzer) zu verwenden, um zu verstehen, was Sie falsch machen. Wenn Sie ein Budget haben, haben Sie besser Hardware-USB-Analyzer wie uns Lecroy oder Ellisys. Oder erhalten Sie einen kommerziellen CDC-Treiber gibt es viele verfügbare google für CDC-Treiber. Ihre Problembeschreibung ist sehr allgemein gehalten und kann direkt angesprochen werden.