Frage

Ich entwickeln einen Gerätetreiber für ein USB-1.1-Gerät onr Windows 2000 und höher mit Windows Driver Model (WDM).

Mein Problem ist das ziemlich schlecht Tx Leistung, wenn 64Byte Bulk-Transfer verwendet wird. Abhängig vom verwendeten USB-Host-Controller die maximale Paketdurchsatz entweder 1000 Pakete (UHCI) oder 2000-Pakete (OHCI) pro Sekunde. Ich habe einen ähnlichen Treiber unter Linux Kernel 2.6 mit rund 5000 Paketen pro Sekunde entwickelt.

Der Linux-Treiber verwendet, um 10 asynchrone Übertragung großer Datenmengen auf, während der Windows-Treiber verwendet 1 synchrone Übertragung großer Datenmengen. So vergleicht dies macht deutlich, während die Leistung so schlecht, aber ich bereits versucht, mit asynchronem Bulk-Transfer als auch ohne Erfolg (kein Leistungsgewinn).

Hat jemand hat einige Tipps und Tricks, wie die Leistung auf Windows steigern?

War es hilfreich?

Lösung

Ich habe es jetzt geschafft, über 6.6k Nachrichten / s zu beschleunigen senden. Die Lösung war ziemlich einfach, ich habe gerade den gleichen Mechanismus wie in dem Linux-Treiber implementiert.

So, jetzt bin ich die Planung auf einmal 20 URBs oben, auf was soll ich sagen, es funktionierte.

Andere Tipps

Welche Durchsatz erhalten Sie? USB 1.1 ist begrenzt auf etwa 1,5 Mbit / s

Es könnte eine Einschränkung, die Sie mit leben müssen werden, die eine Sache, die Sie nie tun müssen, ist das System für Ressourcen zu verhungern. Ich habe so viele schlechte Treiberimplementierungen gesehen, wo der Fahrer Systemressourcen in völlige Versagen hogging seine eigene Leistung zu erhöhen.

Meine Vermutung ist, dass Sie die falschen API-Aufrufe verwenden, haben Sie an den USB-Proben in dem Win32 DDK geschaut?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top