Forum: FPGA, VHDL & Co. USB-FX2 Data Transfer: PC <---> FPGA : WIN XP super aber WIN 8 schlecht


von FPGA Fragender (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Board entwickelt, welches schon mehrere Jahre im Einsatz 
unter WIN XP perfekt läuft.

Der Cypress EZ-USB Chip hängt als Slave Fifo am FPGA und die Daten 
werden per Bulk Transfer an den PC übertragen und weiterverarbeitet.
( ca. 40 Mbyte (Win XP) , 15-20 MByte (WIN 8.1, 64Bit)

Bei der Migration nach WIN 8.1 bricht die Transfer Rate dauerhaft 
konstant ein.

Mein Anwenderprogramm in c# habe ich in die neueste Visual Studio 2013 
Version übernommen und ohne Probleme zum laufen gebracht.

Ein Testprogramm, welches nur den USB Transfer beinhaltet wurde 
erstellt.

Der Code zum read/write auf das Board ist also unverändert, samt allen 
Konfigurations Einstellungen ( Endpoints, Blockgröße usw. )

Cypress bietet zur Zeit einen universellen cybusb.sys Treiber win 8 an, 
der 32/64 Bit kann.

Im Visual Studio habe ich schon die verschiedenen Varianten soll heißen 
Compilieren für 32 Bit Ziel bzw. 64 Bit Ziel Platform ausprobiert mit 
keinem unterschiedlichen Ergebnis.

Der PC schaftt an der gleichen USB Buchse unter WIN 8 über eine externe 
Festplatte locker 32 MByte read oder write.
Also muss es ein Treiber Problem sein oder eine Konfig Einstellung in 
WIN 8

Leider kenn ich mich in WIN 8 noch schlecht aus um überhaupt einen 
Ansatz zu finden woran das Problem liegen könnte.

Ich bin für jeden Hinweis dankbar.

von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

nach vielen Stunden konnte ich das Problem nun doch selbst lösen.

Problem: Die aktuellen Treiber von Cypress für WIN 8 sind einfach nur
         Schrott. Kann man nicht anders sagen. :-(((

Lösung: Auf der Cypress Internet Präsens suche man nach

            Cypress Suite USB 3.4.7

Darin enthalten sind im Verzeichnis

   \Cypress Suite USB 3.4.7\Driver\bin\wlh

          die win7  64Bit Treiber versteckt.

Dann nur den cyusb.sys Treiber ( ohne Coinstaller ) einer dll Datei 
installieren.

Da man als entwickler i.d.R. eine eigene VID, PID hat muss diese in der 
INF. Datei angepasst werden.

Der angepasste Treiber ist dann natürlich NICHT Signiert. Deshalb muss 
man unter den erweiterten Start Opionen unter WIN 8 einmalig einsteigen 
mit der Option ( weiß nicht genau wie das geheisen hat ) "nicht auf 
signierten Treiber bestehen" oder so ähnlich.


Dann den Treiber wie üblich intallieren.

Und danach aus dem Verzeichnis \Cypress Suite USB 3.4.7\CyUSB.NET\bin

die entsprechennde CyUSB.dll Datei als Referenz in das Projekt 
einbinden.

Jetzt geht das Board wieder ab wie der geölte, mega-Donner-Blitz.

              45 MByte/sec  stabil ( echt Hammer !!! )

Fazit: die eigentlich von Cypress angebotenen win 7 / 8 Treiber, welche 
digital signiert sind haben einen großen Nachteil
    - total lahm
    - die VID / PID ist fest mit der Signierung verbunden

Will man eine eigene VID/PID haben bricht die Signierung und man muss 
sowieso als unsigniert installieren.

von Christian R. (supachris)


Lesenswert?

Ich hab einen Tipp für dich: Lass es sein mit dem Cypress Treiber. Wir 
hatten 2008 auch mit dem angefangen, sind aber dann 2009 auf WinUSB 
umgestiegen. Der cyusb.sys hat so viele Bugs, die sich in jeder Version 
ändern, das macht einfach keinen Spaß. Wir hatten massive Probleme mit 
asynchronen BULK Transfers, da machte der nur Mist. Mit der WinUSB hast 
du immer einen stabilen Treiber, der von MS weiterentwickelt wird und 
auf allen Windows seit XP SP2 schon drauf ist. Signierung ist auch kein 
Thema, ist ja schon integriert. Wir hatten mit WinUSB noch keinen 
einzigen Fehler oder Aussetzer, Geschwindigkeit ist auch super, mit 2.0 
HighSpeed ca. 42MB/s dauerhaft BULK IN. Und der geht auch völlig 
transparent mit dem FX3, ich hatte da schon knapp 350MB/s BULK IN 
geschafft an einem Intel xHCI. Das Gefrickel mit dem CyUSB tun wir uns 
nicht mehr an, die Umstellung ist kinderleicht.

http://msdn.microsoft.com/en-us/library/ff540196.aspx

Seit Windows 8 kann der jetzt auch ISO-Streaming, falls das wichtig 
wäre.

von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

ich hab den Rat von Christian R nun ausprobiert und den WinUSB Treiber 
auf meinem XP Rechner installiert.

Dazu die Anwender Software auf die winusb.dll umgeschrieben mit 
folgendem Ergebnis:

- das Erkennen und Entfernen des eigenen USB Device funktioniert sehr 
zuverlässig soll heißen WESENTLICH besser als mit dem orginal Cypress 
Treiber.

- allerdings hab ich jetzt wieder ein Performance Problem

Bulk In Transfer im WinUSB Raw_IO Mode ca. 30 MByte / sec.

Auf dem gleichen PC sonst gleiche Konstellation ist mit dem Cypress 
Treiber locker mehr als 40 MByte / sec zu erreichen.

Der FX2 ist hierbei über ein 16 Bit Daten Interface am FPGA im Slave 
Fifo Mode.

Nach vielem rumprobieren und lesen bin ich im Augenblick ratlos wie ich 
den Durchsatz unter WinUSB noch verbessern kann.

Mein Testprogramm fordert immer ein ganzzahliges Vielfaches von 512 Byte 
Blockgrößen zum lesen. z.B. 2000 * 512 Byte ( ca 1 MByte) Read_Endpoint 
usw.

Wäre sehr dankbar, wenn jemand noch eine Tipp für mich hätte.

von Christian R. (supachris)


Lesenswert?

Hm, seltsam. Wir haben zumindest unter Windows 7 keine derartigen 
Probleme. IN BULK ist knapp über 40MB/s. Sowohl asynchron als auch 
synchron. Vielleicht hat da die neue WinUSB unter Windows 8 einen 
Treffer? Ich kanns leider nicht testen, aus gutem Grund verwenden wir 
hier kein Windows 8/8.1

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.