Forum: Mikrocontroller und Digitale Elektronik USB-Speedtest


von hansgeorg (Gast)


Lesenswert?

Hallo,

ich entwickle gerade ein kleines Testgerät für PC's.
Das Testgeräte basiert auf einem Mikrocontroller. Welcher das ist, ist 
noch offen (sollte aber in Richtung STM32xxxxx gehen).

Das Testgerät ist per USB angeschlossen und meldet sich primär als 
Virtual-COM-Port um seine Funktionalitäten über ein 
Command-Line-Interface zur Verfügung zu stellen.

Neben einigen anderen Tests soll unter anderem auch die 
USB-Geschwindigkeit gemessen werden. Und zwar genau an dem Port, an dem 
das Gerät sowieso schon für die Kommunikation angeschlossen ist.

Mein Problem ist nun die Umsetzung des Speedtest. Es stehen mir 
Hardwaremäßig und Softwaremäßig (sowohl auf Seiten des Microcontrollers 
als auch auf Seiten des Test-PC's) alle Türen offen.
Im Internet hab ich dazu leider nichts gefunden...

Habt ihr irgendwelche Ideen für die Umsetzung?
Meine erste Idee war es einen kleinen USB-Hub zu verbauen und dahinter 
einen einfachen USB-Stick auf den ich eine Datei kopieren könnte (über 
die benötigte Zeit kann dann auf die Geschwindigkeit geschlossen 
werden).
Das Ganze ist aber eher eine Bastlerlösung und ich hätte lieber eine 
Lösung die z.B. keinen Zusätzlichen USB-Stick benötigt (bzw. einen 
"USB-Stick" den ich als IC verbauen kann).

Noch zum Thema Messbereich und Genauigkeit:
Mir ist klar, dass ein Mikrocontroller oder auch ein USB-Stick nicht 
gerade die schnellsten Geräte sind und deshalb nicht unbedingt für einen 
reinen USB-Speedtest geeignet sind.
Für meine Anwendung reicht es aber, wenn ich beim Testen an die Grenzen 
des USB-Geräts herankommt, solange diese irgendwo zwischen USB-Fast und 
USB-HighSpeed liegen.

Würde mich freuen wenn ihr mir ein paar Ideen liefern könntet (muss 
nicht zwingend eine Komplettlösung sein, ich bin über jede Idee froh)

Danke im Voraus.

von Peter II (Gast)


Lesenswert?

die Frage ist was du damit machen willst?

du musst den Speedtest für deine Daten machen, es macht keinen Sinn den 
Test für ein Massenspeicher zu machen, wenn später alles über einen 
ComPort läuft.

Wie planst du mit dem Gerät Daten auszutauschen?

von hansgeorg (Gast)


Lesenswert?

Hallo,

dachte mir schon, dass meine Erklärung noch Fragen offen lässt (war echt 
schwer mein Vorhaben in Worte auszudrücken und ich hab mich auch ein 
bisschen verrennt). Ich Versuch mal das in einem Satz auszudrücken.

Peter II schrieb:
> die Frage ist was du damit machen willst?

Das Gerät soll validieren könnte, dass an dem USB-Port des zu testenden 
PC's (an dem mein Mikrocontroller-Testgerät angeschlossen ist) ein 
USB-Port mit USB2.0-HighSpeed verfügbar ist.
Über VCOM werde ich das kaum Testen können (das ist ja allerhöchstens 
USB Fastspeed). Wie die übertragenen Daten aussehen ist mir eigentlich 
egal.

von Peter II (Gast)


Lesenswert?

hansgeorg schrieb:
> Das Gerät soll validieren könnte, dass an dem USB-Port des zu testenden
> PC's (an dem mein Mikrocontroller-Testgerät angeschlossen ist) ein
> USB-Port mit USB2.0-HighSpeed verfügbar ist.

dann frag doch per Software die Eigenschaften der Verbindung ab. Dein 
UBS wird doch wohl wissen welche USB Geschwindigkeit es aufgebaut hat. 
Der PC kennt es auch.

von hansgeorg (Gast)


Lesenswert?

Peter II schrieb:
> Dann frag doch per Software die Eigenschaften der Verbindung ab.

Erstmal danke für deine schnellen Rückmeldungen!

Das ist für meine Zwecke leider nicht ausreichend.

Wir hatten schon mal ein Gerät das Probleme hatte, die wir damit nicht 
erkannt hätten. Dort konnten sich die USB-Geräte ganz normal als 
HighSpeed-Device melden. Sobald aber größere Datenmengen über den Bus 
geschickt wurden, brach das Ganze zusammen.
Grund dafür war wahrscheinlich ein Designfehler (bei einer Signalmessung 
hat man eine überlagerte Schwingung erkennen können. Diese traten aber 
nur bei längeren Übertragungen mit USB-HighSpeed-Geräten auf).

Hatte gerade eine neue Idee:
Ein FTDI-Chip (FT2232HL). Das ist ein USB->2xUART IC, der über 
USB-High-Speed läuft. Einen UART-Channel könnte ich ja dann für meinen 
µC als Kommunikationskanal nutzen, beim anderen mache ich einen Loopback 
(ich verbinde also direkt UART_RX und UART_TX).
Über den Loopback kann ich dann zumindest einen Faktor für die 
Geschwindigkeit herausfinden (ist zwar nicht die reine 
USB-Geschwindigkeit, aber immerhin ein Anhaltspunkt).

von Peter D. (peda)


Lesenswert?

Die Geschwindigkeit einer VCOM sollte der eingestellten Baudrate 
entsprechen und liegt damit weit unter USB2.0 (480Mbit/s).
Bei meinem Adapter kann ich maximal 921600 Baud einstellen (0,74MBit/s).

von hansgeorg (Gast)


Lesenswert?

Der FTDI Chip kann bis zu 12MBaud.
Ich dachte dass das schon reichen könnte, wenn ich ihn in beide 
Richtungen belaste (etwas overhead ist ja noch sicher dabei und beim 
Loopback wird die USB-Schnittstella ja quasi doppelt belastet...)

Leider bin ich in meinem Test (10MB an Daten, gesendet über TeraTerm) 
nur auf etwa 40kB/s gekommen (Könnte aber auch sein, dass TeraTerm 
bremst)

von Peter D. (peda)


Lesenswert?

hansgeorg schrieb:
> Der FTDI Chip kann bis zu 12MBaud.

Die Preisfrage ist aber, kann das auch die Treiber-dll und Teraterm?
Hast Du mal mit dem Oszi nachgemessen, ob da wirklich 6MHz rumzappeln 
(0xAA senden).

von Jim M. (turboj)


Lesenswert?

hansgeorg schrieb:
> Neben einigen anderen Tests soll unter anderem auch die
> USB-Geschwindigkeit gemessen werden. Und zwar genau an dem Port, an dem
> das Gerät sowieso schon für die Kommunikation angeschlossen ist.

Über die VCOM Schnittstelle misst Du nur wie gut die VCOM Implementation 
im Host ist - ältere Windoof Versionen haben da ihre Probleme lange 
bevor man Full Speed ausreizt.

Auch die Anwendung spielt eine entscheidende Rolle:

hansgeorg schrieb:
> Leider bin ich in meinem Test (10MB an Daten, gesendet über TeraTerm)
> nur auf etwa 40kB/s gekommen (Könnte aber auch sein, dass TeraTerm
> bremst)

Welche Richtung? Die XMODEM/YMODEM/ZMODEM Protokolle brauchen auch 
zeitnahe Rückmeldung vom Device. Du misst hier vermutlich nur die Latenz 
der Software.

Peter D. schrieb:
> Die Geschwindigkeit einer VCOM sollte der eingestellten Baudrate
> entsprechen

Schwachsinn. Das gilt nur für physiche UART Ports. Virtuelle VCOM 
Ports können senden was USB hergibt - wenn das OS und die Anwendung das 
auch vertragen, also z.B. mit großen Blöcken arbeiten.

Beispiel: Windows 10, USB VCOM @921600 Baud. Ich hatte aber mehr als 
250kByte/sec netto bei Übertragung gemessen, und da ist noch 
signifikanter Overhead im µC Programm drin - der kann nicht schneller.

: Bearbeitet durch User
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.