Kann ich die USB 2.0- und 3.x-Kanäle gleichzeitig in einem USB 3.x-Anschluss verwenden?

Ich entwerfe ein FPGA-Entwicklungsboard für mich. Ich möchte eine mäßig schnelle Verbindung (400–500 MB/s) zum Host-PC und erwäge mehrere Optionen, darunter einen FTDI FT-60x- Brücken-IC. Das Problem ist, dass dieser Chip im Gegensatz zum guten alten FT-2232H keinen Seitenkanal hat, der es mir ermöglichen würde, das FPGA zu konfigurieren .

Dieser Artikel behauptet, dass "USB 2.0 auf demselben Anschluss verfügbar ist und als Seitenband verwendet werden kann", und schlägt vor, beide Chips zusammen zu verwenden, mit einem Hub an den USB2-Leitungen, damit beide verfügbar sind, aber die USB3-Paare direkt weiterleiten zum FT-60x. Sie tun dies anscheinend bei einigen der von ihnen verkauften Boards.

Hier also meine Fragen:

  • Garantiert die USB-Spezifikation, dass USB2 noch verfügbar ist, während die USB3-Spur desselben Anschlusses verwendet wird?
  • Kann ich wirklich den Hub auf der USB3-Spur überspringen, wenn ich einen auf der USB2-Spur verwende?
  • Es ist mir egal, ob die Funktionalität an einem USB2-Only-Port eingeschränkt ist. Kann ich die Hubs einfach ganz überspringen und ein Gerät an jede Spur anschließen?

Antworten (2)

Schimpfen, kommentieren, etwas anderes empfehlen

meh. FTDIs "unser FT-60x kann keine offensichtlichen Dinge tun, also kaufen Sie zwei unserer Produkte" sitzt nicht allzu gut bei mir. Ehrlich gesagt gibt es Geräte, die genau das tun, was Sie wollen:

  • Laden Sie zuerst eine USB-Controller-Firmware über USB,
  • Laden Sie dann einen Bitstream über USB3 auf das FPGA herunter.
  • kommunizieren dann mit dem jetzt funktionsfähigen FPGA mit USB3-Geschwindigkeit.

Das Gerät, an das ich denke, ist die Serie Ettus USRP B200 /B210/B200mini…. Sie verwenden eine Zypresse FX3 .

Sie können finden

  • die Schaltpläne dieser Geräte hier ;
  • die FX3 USB-Controller-Firmware hier ;
  • die hostseitige Userland-Software (dies funktioniert alles über libUSB, also keine benutzerdefinierten Kernel-Modus-Treiber) hier , und
  • den Quellcode des FPGA-Bildes hier .

Beantwortung Ihrer Frage

Laut https://electronics.stackexchange.com/a/266990/64158 (und der Autor der verlinkten Antwort kennt sich wirklich mit USB3 aus) können Sie einen USB3-Link ohne USB2-Leitungen verwenden.

Ihr Host-Controller und Ihr Betriebssystem müssen jedoch bereit sein, die beiden Busse getrennt zu betrachten, wenn Sie keinen USB3-Hub verwenden möchten. Meiner Erfahrung nach ist dies unwahrscheinlich, wenn Ihr Host ein PC oder ähnliches ist

Wenn Sie jedoch die volle Kontrolle über Ihren USB-Stack haben (weil Sie beispielsweise ein OHCI / xHCI in einem FPGA am anderen Ende der Verbindung haben, das als Host fungiert), könnte dies funktionieren.

Danke! Ich wusste von der FX3 und ich denke auch darüber nach, vielleicht hätte ich das in meiner Frage erwähnen sollen. Ein kleines Ärgernis ist, dass es noch eine weitere Spannungsschiene benötigt (das FPGA, auf das ich abziele, Lattice ECP5, benötigt 1,1 V für den Kern, während FX3 1,2 V benötigt), aber ich denke, dies wird durch das Entfernen vieler Unterstützungsschaltkreise und Kondensieren ausgeglichen drei Chips in einem. Was den zweiten Teil Ihrer Antwort betrifft, wusste ich bereits, dass die USB 2.0-Leitungen für den 3.0-Betrieb nicht benötigt werden. Meine Frage lautete genauer: "Kann ich beide für verschiedene Dinge verwenden?". Der Host ist in der Tat ein PC.
Ja, also wenn der Host ein PC ist und Sie nicht wirklich viel mit den Interna seines USB-Controllers herumspielen können – nein, darauf können Sie sich nicht verlassen . Es könnte sein, aber ich würde einfach nicht darauf wetten. Ist eine zusätzliche 1,2V-Leitung wirklich problematisch? Ich meine, es sind buchstäblich nur ein oder zwei SOT-etwas LDOs + zwei Kappen mehr. Dies wäre ein Design, bei dem Sie versuchen würden, die LDOs sowieso nahe an den einzelnen Stromverbrauchern zu platzieren.
Ja, alles in allem ist es viel sinnvoller, das FX3 zu verwenden als jede Kombination von FTDI-Geräten. Es ist viel flexibler in der Steuerung des USB-Protokolls, man bekommt eine harte CPU "umsonst" und es unterstützt auch USB OTG. Das Nächstbeste ist die Verwendung eines eigenständigen PHY- oder Hochgeschwindigkeits-Serdes-Moduls mit einem geeigneten USB-Kern auf dem FPGA, aber das ist viel komplizierter. Markieren Sie Ihre Antwort als akzeptiert.
@Streetwalrus danke für die netten Worte. Übrigens könnten Sie auch einen dauerhaften Speicher auf dem Gerät in Betracht ziehen, von dem aus Sie das FPGA konfigurieren, damit Sie den zusätzlichen FTDI-Chip nicht benötigen. Sie könnten dann einfach einige Befehle an das FPGA senden, um diesen Speicher zu überschreiben und zurückzusetzen.
Ja, das ist auch nicht ungewöhnlich, und ich möchte SPI-Flash für die Bitstream-Speicherung und die Verwendung von Anwendungen einbeziehen. Das Problem ist, dass es ziemlich einfach ist, ein solches Setup zu "bricken". Ich kann immer einen separaten JTAG-Header behalten, um das Problem zu beheben, aber das ist mühsam. Mein aktuelles Entwicklungs-Setup ist ein ziemlich einfacher Spartan 6-Breakout, ein FT2232H-Breakout und ein Plattformkabelklon – insgesamt 3 USB-Kabel. Ich wollte das Durcheinander reduzieren und vermeiden, das Board selbst beim Testen berühren zu müssen.
… und das verständlicherweise :)

Garantiert die USB-Spezifikation, dass USB2 noch verfügbar ist, während die USB3-Spur desselben Anschlusses verwendet wird?

Ich weiß nicht, ob "Garantie" auf dem Bild ist, aber USB2 und USB3 sind zwei separate Controller auf jedem Host, dem ich begegnet bin.

Kann ich wirklich den Hub auf der USB3-Spur überspringen, wenn ich einen auf der USB2-Spur verwende?

Ja. Tatsächlich sind „USB3“-Hubs intern zwei Hubs – ein USB3 und ein USB2. Es gibt chinesische „USB 3.0“-Hubs mit 4 Ports, die einen blauen Stecker mit USB3- und USB2-Signalen (klassisches USB 3.0-Kabel) haben, die USB2-Signale zu einem USB2-Hub ziehen, der zu allen vier Ports geht, und die USB3-Signale zu nur einem ziehen der Häfen.

Es ist mir egal, ob die Funktionalität an einem USB2-Only-Port eingeschränkt ist. Kann ich die Hubs einfach ganz überspringen und ein Gerät an jede Spur anschließen?

Ja.