Forum: FPGA, VHDL & Co. Kann man einen USB direkt an einem FPGA betreiben.


von Dieter M. (marqu)


Lesenswert?

Ich möchte gerne eine USB-Buchse als Device am Altera FPGA Cyclon 
EP1C6Q240C8 anschließen. In der Zeitschrift ELEKTOR Teil8 ist ein 
Beispiel das ich gerne auf meinen T-Rex C1 nachvollziehen möchte. Laut 
Schaltplan in der Elektor wird D+ und D- nur mit den beiden FET's für 
low- bzw. full-speed über 1.5 Kohm beschaltet. D+ D- geht direkt am 
Eingang des FPGA LVDS51p bzw LVDS48p.
Geht das ohne "Treiber IC"?
Muß man auf kurze Verbindung achten oder ist das ganze unproblematisch?

Gruß Dieter

von Achtung (Gast)


Lesenswert?

Ich habe sowas noch nicht gemacht und denke auch, daß es von der 
Betriebsstablilität her nicht sinnig ist. Ich wäre aber daran 
interessiert ,zu erfahren, ob es nicht doch geht. (?)

Zwischenzeitlich könnte Dir eine Schaltung bereitstellen, wie Du vom 
Cyclone auf USB kommst.

von Andreas (Gast)


Lesenswert?

Hallo,

es geht.
Ich hab das USB-Beispiel für Elektor entwickelt - und es funktioniert 
ganz hervorragend.
Man ist zwar bei den elektrischen Parameter (Slewrate, Pegel, ...) nicht 
ganz USB-Spec-Konform aber bisher habe ich noch bei keinem PC Probleme 
desswegen. Allerdings gehen nur low- und full-speed auf diese Weise. Für 
high-speed braucht man einen Phy.

von Nullplan (Gast)


Lesenswert?

Hallo,
ich bin nicht sicher, ob dieser Thread
den gleichen Fall beschreibt, den Ich habe....

Ich möchte eine kleine Zeilenkamera bauen.
Die CCD Zeile soll über einen CPLD gesteuert
werden.

Diese Einheit soll einen kleinen Befehlssatz
verstehen können (z.B. belichtungszeit. start messung etc)
Die Einheit soll von einem PC über USB
betrieben werden, d.h. die Befehle werden über
USB zu der Zeilenkamera gesendet.

Frage:

Kann ich den USB (z.B. FTDI) allein über
den CPLD steuern oder muß ich einen
Mikrocontroller dafür nutzen?

von Mike (Gast)


Lesenswert?

Da in dem FTDI-Chip schon die ganze USB-Logik drin ist, sollte das kein 
Problem sein. Mit direkter Ansteuerung hat das aber nichts zu tun. Du 
musst dir nur noch einen Befehlssatz und eine dazu passende 
State-Maschine für das CPLD überlegen.

von Andi (Gast)


Lesenswert?

@Nullplan
Ein FTDI-Chip kannst du auch im sogenannten BitBang-Modus betreiben, 
damit bekommst du so was wie ein In-Output-Port mit Schreib- und 
Leseimpuls, den direkt mit einem CPLD verbinden kannst. So benötigst du 
keinen UART im CPLD.

Gruss Andi

von HB (Gast)


Lesenswert?

@ Andreas:

Ich habe mir das Beispiel von Elektor auch angesehen und habe dazu eine 
Frage:
Seh ich das richtig, das diese Lösung für einen Xilinx Spartan3 nicht 
denkbar ist, weil da die I/O's nicht 5V tolerant sind?

von Andreas (Gast)


Lesenswert?

Hallo,

die I/O's beim verwendeten Cyclone sind ebenfalls NICHT 5V tolerant.
Dies ist aber kein Problem da USB mit 3,3V Signalpegeln arbeitet.

MfG.
Andreas

von Hans (Gast)


Lesenswert?

Das USB-Modul kann mit 5V Pegeln und mit 3,3V Pegeln arbeiten. Dafür 
gibt es bei dem USB Modul (FDTI-UM245R) einen Jumper. Das Modul kann man 
sogar bei Farnell bestellen. Den Treiber für die PC-Seite gibt es auch 
auf der FTDI-Homepgae. Zudem sind da auch Bsp. wie Du den Treiber 
ansteuern kannst. Die Beispiele sind in unterschiedlich 
Programmiersprachen. Deshalb beide DAUMEN hoch für FTDI so muss das 
sein.

Den USB-Chip von FTDI kann man sehr einfach ansteuern. Du legst mit 
Deinem CPLP die Daten an Deinen 8 Bit Datenbus an. Anschließend änderst 
Du den Zustand der CLK_Leitung von '1' auf '0'. Durch diese abfallende 
Flanke erkennt das USB-Modul, das die Daten die anliegen übernommen 
werden sollen. Danach setzt Du das Signal wieder von '0' auf '1' zurück. 
Du solltest aber unbedingt darauf achten, dass Du keine Daten an das 
USB-Modul senden solltest, wenn die Busy-Leitung gesetzt ist. Falls Du 
es doch machen solltest, wird das Modul nicht mehr richtig funktionieren 
und Du must es Neustarten.

von hua (Gast)


Lesenswert?

Kann Jemand mir die Schaltung mal zeigen?


Ich weiss nicht, ob ich richtig verstande habe.

"==" ist Pull UP Wiederstand:

   --==--|---------|--==--
USB      |FPGA     |      USB
   ------|         |------
         |         |
         |---------|

einfach so?

von Johannes T. (johnsn)


Lesenswert?

Diese Frage kann ich nur Bestätigen. Mit einem Cyclone 1 (EP1C3T144C8) 
und sogar noch einer mieser Stiftleiste und Flachkabel zwischen 
USB-Stecker und FPGA funktioniert die Kommunikation prima.

Sogar Risetime und Falltime werden eingehalten.

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.