Was ist der beste USB-Übertragungstyp (Bulk, Interrupt, Isochronous Transfers) für die Implementierung eines USB-Oszilloskops?

Ich möchte ein USB-Oszilloskop bauen. Ich habe über verschiedene USB-Übertragungsarten gelesen . Welcher Übertragungstyp eignet sich am besten, um die gesammelten ADC-Samples von einem USB-Oszilloskop auf einen PC zu übertragen?

Unten sind ein paar meiner Erkenntnisse. Bitte korrigieren Sie mich und es wäre auch gut, wenn jemand einen guten Übertragungstyp vorschlagen könnte.

  1. Isochrone Übertragung - Möglicher Datenverlust. Nicht gut für ein Oszilloskop, da jedes Datenelement wertvoll ist. Wie viele Daten könnten verloren gehen?
  2. Unterbrechungsmodus - Ich habe keine Ahnung, ob dies die USB-Verbindung überfluten würde
  3. Massenmodus - Scheint mir der beste zu sein, da kein Datenverlust auftritt
  4. Kontrollübertragung - nicht geeignet, da sie nicht für die Übertragung von Daten gedacht ist
Nach dem, was ich gelesen habe, verwenden die meisten Oszilloskope mit USB den Massenmodus, um Screenshots des Oszilloskops zu senden.
Wenn Sie sich für den isochronen Modus entscheiden, können Sie vermutlich etwas zusätzliche Bandbreite für die Fehlerkorrektur reservieren.
Oder für groben Overkill kitzelt PCIe DMA meine Fantasie.

Antworten (4)

Bei Massenübertragungen gehen keine Daten verloren, es gibt jedoch keine garantierte Mindestbandbreite. (Andererseits können sie höhere Geschwindigkeiten erreichen, da sie die gesamte Bandbreite nutzen können, die nicht wirklich von anderen Übertragungen verwendet wird.)

Was passiert, wenn die Datenübertragung Ihres Oszilloskops verzögert wird (entweder aufgrund von Fehlern oder aufgrund anderer Geräte) und sich neue Daten anhäufen? Halten Sie das Gerät an, bis die alten Daten übertragen sind, oder werfen Sie die alten Daten weg, um die aktuellen Daten übertragen zu können?

Isochrone Übertragungen sind für „Echtzeit“-Daten ausgelegt. Sie haben keine Wahl bezüglich der Fehlerbehandlung, aber Ihre Bandbreite wird auf dem Bus reserviert.

  • Wenn Sie die aufgezeichneten Daten in Echtzeit anzeigen möchten, sollten Sie isochrone Übertragungen verwenden.
  • Wenn Sie die aufgezeichneten Daten nach Abschluss der Messungen auf den PC übertragen möchten , sollten Sie Massenübertragungen verwenden.

Die Frage ist fast völlig unabhängig von Ihrer Verwendung als Oszilloskop und wird vollständig von den Arten der Kommunikation bestimmt, die Sie von USB verlangen. Zum Beispiel:

  • Ein Oszilloskop, das intern über einen großen Puffer (mehrere Megabyte) verfügt und darauf ausgelegt ist, zuerst einen kurzen Test durchzuführen und dann die Daten hochzuladen, würde eine vollständige Massenübertragung verwenden. Es ist keine garantierte Bandbreite erforderlich, daher ist das hohe Volumen mit Fehlerprüfung der Massenübertragung am besten.
  • Ein Oszilloskop, das dafür ausgelegt ist, kontinuierlich an den zu testenden Schaltkreis angeschlossen zu sein und in "Echtzeit" (sprich: deterministische Laufzeit) arbeiten muss, würde Isochronus wählen. Bulk bietet keine deterministischen Laufzeitgarantien, und Sie können Ihre Pipe nicht so einrichten, dass Bandbreite reserviert wird. Sie müssen Ihre eigenen Fehlerkorrekturen vornehmen, aber zumindest können sie deterministisch durchgeführt werden.
  • Ein Oszilloskop mit einem "Live"-Feed für die menschliche Betrachtung plus einer Hochgeschwindigkeitserfassung auf einem Trigger kann zwei Endpunkte einrichten, einen Isochronus, um mit dem Live-Feed Schritt zu halten, und eine Massenübertragung für die getriggerten Daten. Für den menschlichen Konsum ist der Verlust von ein oder zwei Frames keine große Sache, daher gibt es keinen Grund, sich über die fehlende Fehlerprüfung bei Isochronus Sorgen zu machen. Wenn es jedoch um die eigentlichen Daten geht, übertragen Sie sie in großen Mengen zur Fehlerkorrektur.
  • Man könnte diese Schaltung als Teil eines Live-Systems verwenden. Es kann nicht nur das Oszilloskop sein, sondern auch ein Schutz vor Signalen, die darauf hinweisen, dass die Schaltung die Betriebsbereiche verlässt und vom Computer heruntergefahren werden muss. In diesem Fall können Sie dem System einen Interrupt-Endpunkt hinzufügen, um eine garantierte Latenz (und eine gut definierte Fehlerbehandlung) zu erhalten, um sicherzustellen, dass das Problem behoben wird, bevor es die Schaltkreise unterbricht.

Sobald Sie wissen, welche Art von Daten Sie übertragen und unter welchen Quality of Service (QoS)-Bedingungen die Daten ankommen müssen, können Sie entscheiden, welcher USB-Übertragungsmechanismus verwendet werden soll. Sie werden wissen, dass Sie bereit sind, diese Entscheidungen zu treffen, wenn das Wort „Oszilloskop“ nicht mehr erforderlich ist, um die Daten und QoS zu beschreiben, die Sie benötigen. Dann wissen Sie, dass es in objektiven Worten genug ist, um diese Probleme anzusprechen.

Bei einem Oszilloskop ist die Bandbreite der Übertragung der Parameter, den Sie maximieren möchten. Die Massenübertragung wurde speziell für hohe Bandbreiten entwickelt, daher ist dies die richtige Wahl. Während isochrone und Interrupt-Übertragungen der Latenz Grenzen setzen, sind sie nur für Datenströme mit niedriger bis mittlerer Bandbreite gedacht.

Verwenden Sie einfach Massenüberweisungen. Ein Oszilloskop ist eigentlich kein Gerät mit hoher Datenrate. Wenn Sie nicht vorhaben, ein digitales Phosphor-Design zu erstellen, ist ein Oszilloskop wirklich nur ein Fenster in einen sehr kleinen Teil einer Wellenform. Angenommen, Sie möchten 1000 horizontale Pixel anzeigen und die Anzeige mit etwa 30 Hz aktualisieren. Wenn die Samples jeweils 8 Bit groß sind (dies ist typisch) und zwei Kanäle vorhanden sind, sehen Sie nur 60.000 Bytes/Sekunde. USB mit voller Geschwindigkeit kann etwa 1.000.000 Bytes/s verarbeiten, sodass Sie weniger als 6 % der Busdurchsatzkapazität verwenden. Das gibt genügend Zeit, um den Massenübertragungsmodus seine Arbeit tun zu lassen (Fehler korrigieren, anderen Busverkehr umgehen), und es ist unwahrscheinlich, dass Sie jemals auf eine reale Buskonfiguration stoßen, die Ihnen nicht genug Bandbreite zuweisen kann für so viele Daten.