Verständnis der Anforderungen für USB 2.0 High-Speed

Ich bin etwas verwirrt über die Anforderungen von USB 2.0 High-Speed.

USB 2.0. Die maximale Hochgeschwindigkeitsübertragungsrate beträgt 480 Mbit/s. Um diese Datenrate voll auszunutzen, sollte man also nach meinem Verständnis IC (uC oder FPGA) mit einer Frequenz von mindestens 480 MHz verwenden.

Aber zum Beispiel bieten die Mikrocontroller der STM32 F4-Serie USB 2.0-Hochgeschwindigkeitsunterstützung, obwohl die maximale Frequenz, auf der sie laufen, 180 MHz beträgt.
Auch Atmel SAM3U unterstützt trotz absoluter Maximalfrequenz von 192 MHz Highspeed-USB.
Wie ist das?

Bei Atmel ist mir aufgefallen, dass sie nur für USB einen zusätzlichen Takt von 480 MHz haben. Dies ist noch verwirrender, denn wenn der Mikrocontroller nur 192 MHz fähig ist - wie sollte er mit der internen USB-Peripherie kommunizieren, die mit 480 MHz läuft?

Für STM32 ist es auch seltsam, in ihrer CubeMX-Software scheinen sie USB mit einem Takt von 48 MHz zu betreiben. Durchsuchen des Datenblatts, einzige Erwähnung, die ich gefunden habe, war

Bit 15 PHYLPCS:
PHY Low-Power-Taktauswahl Dieses Bit wählt entweder den 480-MHz- oder den 48-MHz-PHY-Modus (Low-Power) aus. Im FS- und LS-Modus kann der PHY normalerweise mit einem 48-MHz-Takt betrieben werden, um Strom zu sparen.
0: 480 MHz interner PLL-Takt
1: 48 MHz externer Takt
Im 480-MHz-Modus arbeitet die UTMI-Schnittstelle entweder mit 60 oder 30 MHz, je nachdem, ob die 8- oder 16-Bit-Datenbreite ausgewählt ist. Im 48-MHz-Modus arbeitet die UTMI-Schnittstelle mit 48 MHz im FS- und LS-Modus.

Ich nehme an, es verwendet einen 48-MHz-Takt, um 480 MHz über PLL zu erzeugen. Aber noch einmal - wenn der Mikrocontroller selbst nur bis zu 180 MHz gehen kann - was ist der Sinn von 480 MHz USB?

FPGAs sind noch verwirrender (viele laufen unter 480 MHz), aber ich habe noch nicht viel über FPGA geforscht, also werde ich nichts fragen (aber wenn Sie einen Rat geben / über FPGA aufklären können - gerne, ich bin es interessiert).

Die Frage ist - wenn wir einen 180-MHz-Mikrocontroller verwenden und Daten mit einem 480-MHz-USB-Peripheriegerät übertragen möchten - wie passt er zur Frequenz? Was ist der Prozess?

Prozessoren verarbeiten mehr als ein einzelnes Bit gleichzeitig.
Mischen Sie nicht den Prozessortakt und den Transceivertakt.
OK, die Antwort von Ali Chen macht es klar.
Bitte beachten Sie auch, dass die Datenverarbeitung nicht immer von der CPU durchgeführt wird, es gibt DMA und andere Mitarbeiter. Ein Beispiel ist, dass ein USB3.0-Flashlaufwerk-Controller nur eine 8051CPU enthält und dennoch mit einer Geschwindigkeit von 5 Gbit/s umgehen kann.

Antworten (1)

Bitte beachten Sie, dass USB 480 MBit pro Sekunde hat, während uPs ihre Daten normalerweise 8 oder 32 Bit breit sind. Die Rate der Systemdatenübertragung sinkt also nur auf 60 MHz oder 15 MHz. USB-Controller verwenden Hardwarezugriff auf den uP-Speicher (auch bekannt als direkter Speicherzugriff oder „Bus-Mastering“), um Datenblöcke zwischen dem Systemspeicher und dem USB-PHY (Physical Layer Transceiver) zu übertragen. Die Übertragungen erfolgen im 8- oder 16-Bit-Parallelformat, und der PHY führt eine Parallel-zu-Seriell-Konvertierung durch. Das System verfügt normalerweise über viele "Elastizitäts"-Puffer (FIFOs), um kohärente USB-Pakete in voller Übereinstimmung mit den angegebenen Datenraten bereitzustellen.

Die Geschwindigkeit, mit der ein System die Lese-/Schreibspeicherpuffer vorbereiten kann, hängt vom Gesamtprozessordurchsatz ab, sodass leistungsschwache Prozessoren möglicherweise nicht den maximalen USB-Durchsatz erreichen.

Verstehe ich das richtig: Wir legen 32 Bit in ein USB-Register und USB PHY sendet sie dann einzeln? Aber dann müssen wir auch Zyklen abgleichen, also muss uC, wenn das 32. Bit gesendet wird, die nächsten 32 Bits in das Register schreiben. Wir müssen also mit einem Takt von 15 MHz in dieses Register schreiben, um die Stabilität aufrechtzuerhalten. Habe ich es bekommen?
Nein, es ist komplizierter. Das System bereitet eine verknüpfte Liste von Blöcken mit Daten vor, die es übertragen möchte, und startet die Operation auf dem USB-Controller. Der USB-Controller liest die Liste automatisch und übermittelt ganze Datenblöcke an PHY und führt alle erforderlichen USB-Protokolle aus (Bilden von Anforderungstoken und Antworten auf/mit ACks usw.).
Ich glaube, ich habe es jetzt besser verstanden, danke. Ich habe die Antwort akzeptiert, ich werde selbst weiter nachforschen. Wenn jemand etwas hinzufügen möchte - fühlen Sie sich frei, ich werde positiv abstimmen.
Meines Wissens hält sich jeder moderne uP mit USB-Host-Funktion an die Intel EHCI-Spezifikationen, intel.com/content/dam/www/public/us/en/documents/… . Geräteimplementierungen können abweichen.
Nur um ein paar Anmerkungen hinzuzufügen, 480 MBit / s sollten durch 10 geteilt werden (da die Daten einen 8b / 10b-Block auf der TX- und 10b / 8b-Block auf der RX-Seite durchlaufen), was die maximale Datenbandbreite auf 48 MByte / Sekunde ergibt etwa 11 Millionen Zugriffe pro Sekunde für einen 32-Bit-Prozessor.
@FarhadA, um genau zu sein, verwendet die physikalische Schicht von USB 2.0 keine 8b/10b-Codierung, sondern NRZI mit Bitfüllung. Dies bedeutet, dass das Muster im schlimmsten Fall aller "11111..."-Daten ein Bit über alle sechs "1" hinzufügt, sodass die Bitfolge um 7/6 = 17 % und im Durchschnitt viel weniger länger werden kann. Informationen zur tatsächlichen Datenbandbreite auf USB 2.0 finden Sie in diesem Beitrag: electronic.stackexchange.com/a/363560/117785