USB-Gerätelatenz

Das ist eine theoretische Frage. Ich würde gerne wissen, was die niedrigste Latenz ist, die erreicht werden kann, wenn ein Mikrocontroller mit einer USB-Schnittstelle verbunden wird. Stellen Sie sich einen USB-Host (Computer) vor, der ein Byte an ein USB-Gerät (Mikrocontroller) sendet und darauf wartet, dass es dasselbe Byte antwortet. Wie lange würde das mindestens dauern? Gibt es dazu Experimente? Jede Information würde mir helfen.

Bei Verwendung der seriellen Kommunikation (RS232) beträgt die minimal erreichbare Latenz 1 ms (durch Verwendung eines USB-zu-Seriell-Konverters). Ich suche nach einer schnelleren Möglichkeit, mit meinem Mikrocontroller zu kommunizieren (in Bezug auf die Latenz).

Antworten (3)

USB hat eine strenge Master/Slave-Architektur, bei der die gesamte Kommunikation vom Host-PC gesteuert wird.

Wenn der Host Daten an das Gerät senden möchte und vorausgesetzt, dass sich keine anderen Geräte auf dem Bus befinden, können die Daten immer sofort gesendet werden.

Wenn der Host Daten vom Gerät empfangen möchte, muss er danach fragen.
Wenn der Host-Controller gerade den Empfang eines vorherigen Pakets beendet hat, fragt er normalerweise sofort nach dem nächsten Paket. Wenn der Bus jedoch im Leerlauf war, würde das kontinuierliche Abfragen nach neuen Daten viel Energie verschwenden, sodass diese Abfrage einmal pro Millisekunde erfolgt (für Geräte mit voller Geschwindigkeit).


Um eine Latenz von weniger als 1 ms zu erreichen, müssten Sie ein Protokoll mit einer Peer-to-Peer-Architektur verwenden, bei der Geräte Daten senden können, ohne vom Host gefragt zu werden. Selbst einfaches RS-232 kann dies erreichen, aber Sie müssten den USB-Konverter durch eine PCI(e)-Karte ersetzen.

Bei USB hängt es wirklich vom verwendeten Endpunkt ab. USB hat 3 verschiedene Arten. Eine Interrupt-Übertragung hätte die geringste Latenz, ist aber nur für kleine Übertragungen geeignet. USB-zu-Seriell-Konverter verwenden normalerweise Massenübertragungen, die eine Übertragung, aber keine Latenz gewähren. Die besten Ergebnisse wären, wenn der USB-Stack direkt im Chip laufen würde.

Ich habe gerade die USB-Latenz unseres USB-Full-Speed-Geräts gemessen und bei direktem Anschluss an den PC etwa 1 ms erreicht, keine Überraschung hier.

Interessant wird es, wenn Sie einen USB 2.0 HS Hub zwischen PC und Gerät schalten: Die Latenz sinkt auf durchschnittlich ca. 0,33 ms! Mein derzeitiger Gedanke ist, dass das Gerät eher wie ein USB-Hochgeschwindigkeitsgerät für den PC aussieht (mit HUB-Übersetzung) und die Planung von Hochgeschwindigkeitsübertragungen anders ist. Das Hinzufügen eines USB 2.0-Hochgeschwindigkeits-Hubs (oder USB 3.0, falls verfügbar) könnte Ihnen also ein wenig helfen.

USB 2.0 HS Hub führt Transaktionsumsetzung für USB 1.1/2.0 LS/FS-Geräte durch. ABER (leider) findet nicht die gleiche Übersetzung von USB 3.0 SS nach USB 2.0 HS statt. USB 3 und USB 2 arbeiten im Wesentlichen unabhängig voneinander als zwei verschiedene Systeme, es findet keine Übersetzung statt. Ein USB 3 SS-Hub kann nur als USB 2 HS-Hub für USB 2.0-Geräte fungieren.