Forum: FPGA, VHDL & Co. USB-Device von opencores


von Hohenloher C. (hohenloher)


Lesenswert?

Hallo miteinander!

Ich versuche mich an dem 'usbHostSlave-Core' von opencores.
Leider läuft die Inbetriebnahme der Hardware überhaupt nicht. Jetzt 
stellt sich die typische Frage:
Liegt es an der Hardware, der Software oder an dem FPGA-Design...

Hat zufällig jemand mal versucht den Core mit einem NIOS in Betrieb zu 
nehmen?

Gruß
Hohenloher

von Hohenloher C. (hohenloher)


Lesenswert?

so...


der Core läuft jetzt mit NIOS-II als Device-Logik.
Ich gebe mich einfach als HID bei Windows aus, so ist das Treiberproblem 
auch aus der Welt geschafft :-)

von Andreas (Gast)


Lesenswert?

Hallo Herr Hohenloher,

schoen dass Sie Ihr Problem umschifft haben ohne dass ein Forumsleser 
helfen konnte oder musste.
Ggfls. gibt es in Zukunft andere welche aufgrund der Suchfunktion in 
diesem Thread landen und nach einer Lösung suchen.
Können Sie Ihr Problem und deren Lösung kurz schildern?

Gruß

Andreas

von Hohenloher C. (hohenloher)


Lesenswert?

Hallo Andreas,

ich habe eine bessere Idee:

wenn sich jemand findet der auch an/mit diesem IP-Core arbeitet könnte 
man gemeinsam ein kleines Projekt aufziehen. Cool wäre es, wenn sich 
jemand mit Windows-Treibern auskennt!
Wir könnten einen Core mit kompletter Tool-Chain entwickeln.
Mal sehen ob sich mehr Interessenten dafür finden. Das Interesse an 
meinem Beitrag hielt sich ja bis jetzt doch sehr in Grenzen...

Gruß
Hohenloher

von Christian R. (supachris)


Lesenswert?

Naja, Windows Treiber müsste man nicht mal selber entwickeln. Dafür 
gibts ja die universellen Treiber wie LibUSB WIn32, WinUSB, easyUSB...

von xilinxer (Gast)


Lesenswert?

hallo!

ich erstelle gerade ein design mit einem spartan 3A und wäre auch an 
einer implementierung einer usb schnittstelle interessiert.
Besteht noch interesse an einer zusammenarbeit?

von Hohenloher C. (hohenloher)


Lesenswert?

hi,

Interesse besteht auf alle Fälle :-)

Also, ich denke mal das man muss hauptsächlich am Device-Treiber (am 
besten für Microblaze und NIOS-II über Defines konfigurierbar) und der 
Windows-Seite arbeiten. Der USB-Core ist deswegen sehr interessant, da 
man nicht mal unbedingt einen USB-PHY benötigt. USB1.1 reicht sowieso 
für 99% aller Anwendungen.
Ich habe leider keinerlei Erfahrungen mit einem solchen generischen 
Treiber für Windows. Wie geht man da vor?

Gruß
Hohenloher

von Michael F. (mifi)


Lesenswert?

Hallo zusammen,

könnte hier libusb-win32 was für Euch sein?
http://libusb-win32.sourceforge.net/

Ist ein generischer Treiber, und kann sich eigentlich mit jedem USB
Device verbinden, so wie ich das verstehe. Der Treiber wird z.B. im
OpenOCD Projekt benutzt um sich mit dem FT2232 Device oder einem
J-Link zu verbinden. Beim FT2232 übernimmt noch eine zusätzliche
Library die "Protokollumsetzung". Beim J-Link geht das dann direkt.
Hier hat der Hersteller das USB-Protokoll seines Devices veröffentlicht.

Da Ihr das USB-Device selber erstellt, kennt Ihr auch das Protokoll was 
später verwendet wird, somit sollte es eigentlich keine Probleme geben.

Ich würde auch gerne was mit Microblaze und USB mache. Habe hier aber 
überhaupt keine Erfahrungen. Hätte hier ein Spartan-3A DSP Evalboard zur 
Verfügung.

Viele Grüße,

Michael

von Christian R. (supachris)


Lesenswert?

Michael Fischer schrieb:
> Hallo zusammen,
>
> könnte hier libusb-win32 was für Euch sein?
> http://libusb-win32.sourceforge.net/

Ja, mit der LibUSB kan man (recht beschränkt, weil nur synchrone 
Operationen) auf alle USB Devices zugreifen.

> Ich würde auch gerne was mit Microblaze und USB mache. Habe hier aber
> überhaupt keine Erfahrungen. Hätte hier ein Spartan-3A DSP Evalboard zur
> Verfügung.

Da bau dir lieber einen Cypress FX2 dran, der kostet nur ein paar Euro 
und macht das komplette USB Protokoll intern. Den kannst du wie ein FIFO 
benutzen, wenn du den Slave FIFO Modus aktivierst. Sehr simpel.

von Hohenloher C. (hohenloher)


Lesenswert?

Um diesen andauernden 'ich-hab-ne-bessere-idee, 
weiß-aber-garnicht-was-ihr-eigentlich-machen-wollt' - Sprüchen 
vorzubeugen:

NEIN, das ist kein Thread in dem irgendein Protokoll-Umsetzer verwendet 
werden soll, DAS IST NÄMLICH SINN DER SACHE!!!

So, ich habe erste versuche mit dem easyUSB aus dem Forum hier gemacht, 
so was in die richtung ist für erste Tests auch 'ganz nett'.

Ich denke wir können den auch in den ersten Schritten verwenden um die 
Embedded-Seite, welche die komplexere sein dürfte erst mal zu erstellen.

von Christian R. (supachris)


Lesenswert?

Hohenloher Cr. schrieb:
> Um diesen andauernden 'ich-hab-ne-bessere-idee,
> weiß-aber-garnicht-was-ihr-eigentlich-machen-wollt' - Sprüchen
> vorzubeugen:
>
> NEIN, das ist kein Thread in dem irgendein Protokoll-Umsetzer verwendet
> werden soll, DAS IST NÄMLICH SINN DER SACHE!!!

Das mit dem FX2 galt ja auch nicht dir, sondern Michael Fischer, bei dem 
man schon an der Fragestellung erkennen kann, dass sein Kenntnisstand 
nicht ausreicht um ein USB Device als SoftCore zu entwickeln.

von Hohenloher C. (hohenloher)


Lesenswert?

@supachris:

prima, in anderen threads passiert es halt leider immer, dass das thema 
völlig abdriftet. Dies wollte ich hiermit nur verhindern.
Ich finde es halt immer schade wenn das Problem nicht gelöst, sondern 
immer gleich die Sinnhaftigkeit diskutiert wird.

Zum Thema:
Sicherlich hat schonmal jemand eine 'serielle Schnittstelle' über über 
USB getunnelt. Meine Frage: Welche Kommunikationsart wählt man da am 
besten (synchron, Uni-/Bidirektional) und wieviele Endpunkte würde man 
dafür verwenden?

von Christian R. (supachris)


Lesenswert?

Hohenloher Cr. schrieb:
> @supachris:
>
> prima, in anderen threads passiert es halt leider immer, dass das thema
> völlig abdriftet. Dies wollte ich hiermit nur verhindern.
> Ich finde es halt immer schade wenn das Problem nicht gelöst, sondern
> immer gleich die Sinnhaftigkeit diskutiert wird.

Naja, das stimmt schon leider. War auch nicht meine Absicht. Ich finde 
den Core auch nicht ganz verkehrt, aber er ist in Verilog, wofür wir 
keine ModelSim Lizenz haben, und erfordert das recht aufwendige WishBone 
Interface. Sonst hätt ich ihn mal getestet. Wenn man effektiv und 
zeitnah eine USB 2.0 Kommunikation mit einem FPGA machen soll, kommt man 
meiner Meinung mit dem FX2 am schnellsten voran.

> Zum Thema:
> Sicherlich hat schonmal jemand eine 'serielle Schnittstelle' über über
> USB getunnelt. Meine Frage: Welche Kommunikationsart wählt man da am
> besten (synchron, Uni-/Bidirektional) und wieviele Endpunkte würde man
> dafür verwenden?

Eine UART tunneln? Klar kann man machen, über BULK Endpoints hat man 
immer noch die Datensicherheit, wird ja bis zu 3 mal wiederholt. Bei ISO 
und Interrupt gehts zwar mit weniger Latenz aber eben keine 
Wiederholungen. FTDI arbeitet aber glaub trotzdem mit Interrupt für die 
USB-Serial-Adapter.

Ich würde zu einem FPGA aber lieber eine schnelle Parallel-Verbindung 
aufbauen, die gleich 16 Bit breite Daten ausspuckt. Mit der LibUSB oder 
EasyUSB anzusprechen ist kein Thema, geht sehr gut (mit dem FX2 mal 
probiert). Kommt halt immer drauf an, was man machen will....wie schnell 
willst du denn übertragen?

von Hohenloher C. (hohenloher)


Lesenswert?

Im Endeffekt suche ich eine Möglichkeit um Worte (32Bit) von a nach b zu 
übertragen. Wenn das nicht nur Byteweise, sondern Wortweise klappt wäre 
das perfekt. Sonst muss ich immer Byteweise fragmentieren (wie beim 
UART).

von Christian R. (supachris)


Lesenswert?

Naja, worte bestehen auch nur aus Bytes und über die USB Strippe gehen 
eh nur Bytes. Kannst dem Treiber natürlich einen Pointer auf dein 
Wort-Buffer geben. Die Angabe, wieviel der Treiber transferieren soll, 
erfolgt sowieso in Byte. Auf der Hardware-Seite wäre dann ein 
busmatching FIFO sinnvoll, 16 Bit rein, 32 Bit raus. Also, wenn man das 
mit dem FX2 macht. Da sind dann 40MB/s Datentrasferrate drin...bei dem 
OpenCores Ding ist glaub eh schon 32 Bit alles. Halt etwas aufwendiger 
als die Chip-Lösung.

von Hohenloher C. (hohenloher)


Lesenswert?

Die 'Treiberlösung' ist ja genau die Fragmentierung

von Christian R. (supachris)


Lesenswert?

Da wird ja aber nix fragmentiert. Das ist doch bei fast allen Treibern 
so. Man gibt den Pointer und die Anzahl in Bytes. Der kümmert sich dann 
schon und überträgt dann je nachdem, wie das Interface ausgelegt ist, 
entsprechend. Wo ist denn das Probelm?

von Michael F. (mifi)


Lesenswert?

Hallo Christian,

>Das mit dem FX2 galt ja auch nicht dir, sondern Michael Fischer, bei dem
>man schon an der Fragestellung erkennen kann, dass sein Kenntnisstand
>nicht ausreicht um ein USB Device als SoftCore zu entwickeln.
Das hast Du richtig erkannt, das gebe ich auch ohne Probleme zu.
Ich werde mir mal den FX2 genauer anschauen.

Meine Mail war eher als Anregung im Bezug auf libusb zu verstehen

Viele Grüße,

Michael

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.