Welche USB-Klasse sollte ich implementieren?

Ich spiele mit STM32F4 Discovery Board und libopencm3 herum . Ich möchte von ADC-Kanälen erfasste Daten über USB senden und einige Diagramme auf dem Computer anzeigen. Nachdem ich einige Recherchen zu USB-Klassencodes durchgeführt habe, bin ich etwas verwirrt: Welchen soll ich für meine Anwendung wählen? Zuerst dachte ich, dass USB-CDC der richtige Weg ist, da es einfacher zu implementieren ist, aber ich denke nicht, dass es die optimale Lösung ist.

ADC? Probieren Sie USB-Audio aus. Erleichtert den Zugriff von vielen Anwendungen aus.
Soweit ich weiß, erfordert USB-Audio eine definierte Abtastrate. Wird es Probleme geben, wenn ich eine Abtastrate von mehr als 196 kHz wähle?
Ich würde sagen, HID, rein aus einem "es klingt richtig" POV.
A single isochronous transfer can carry 1024 bytes, and can carry at most 256 samples (at 24/32 bits). This means that a single isochronous endpoint can transfer 42 channels at 48 kHz, or 10 channels at 192 kHz (assuming that High Speed USB is used - Full Speed USB cannot carry more than a single stereo IN and OUT pair at 48 kHz).siehe edn.com/design/consumer/4376143/Fundamentals-of-USB-Audio

Antworten (1)

Die USB-CDC-Klasse ist einfach zu implementieren und zu verwenden, da sie auf der PC-Seite einen virtuellen COM-Port erstellt. Sie können die Schnittstelle einfach mit einem Programm wie RealTerm testen , das entweder ASCII- oder Binärdaten anzeigen kann. Sie müssen ein Programm schreiben, um die Daten zu erfassen, sie in ASCII zu konvertieren und in einer Datei zu speichern, um sie in ein Tabellenkalkulationsprogramm wie Excel einzugeben, um die Diagramme zu erstellen.

Das einzige Problem ist, dass die zugewiesene COM-Port-Nummer normalerweise nicht im Voraus vorhergesagt werden kann, sodass Sie über eine Art Konfigurationsdatei verfügen müssen, die angibt, welche verwendet werden soll (sobald das System einen COM-Port für das USB-Gerät ausgewählt hat, sollte dies der Fall sein danach dasselbe weiter verwenden).

Sie erwähnen nicht, welche Datenraten Sie unterstützen müssen oder wie lange ein Sample dauert. Bei 115 K Baud können Sie ein ADC-Sample (12 Bit, erweitert auf 16) in etwas weniger als 175 µS oder etwa 5000 kHz senden. Ich vermute, Sie brauchen etwas schneller als das. Da Ihnen 192 KB RAM zur Verfügung stehen, können Sie bis zu 90.000 oder so Samples puffern. Bei 44,1 kHz sind das etwas mehr als zwei Sekunden.

Wenn Sie zuerst sampeln und dann senden, finden Sie die HID-Klasse möglicherweise noch einfacher zu verwenden. Es kann sich als virtuelle Tastatur präsentieren, sodass auf der PC-Seite keine Software geschrieben werden muss. Sie können ein Programm wie Excel öffnen, und solange die Firmware im STM32F4 die Daten als ASCII-Zeichen sendet, gefolgt von einem Wagen/Zeilenvorschub für jede Probe, wird jede Zeile als zusätzliche Zeile in die Tabelle eingefügt, fertig zu grafisch darstellen.

Gut erklärt, danke. Ich denke, ich werde vorerst bei CDC bleiben und zu HID wechseln, nachdem ich mich mit dem USB-Stack vertraut gemacht habe.
Gibt es noch eine Möglichkeit, ein CDC-Gerät mit einem benutzerdefinierten vid/pid automatisch Treiber zu verwenden, die in einem typischen Windows-Computer vorhanden sind, wie es HID-Geräte vom ersten Tag an konnten? HID bietet möglicherweise nicht ganz so viel Leistung wie ein CDC, aber es spricht viel für "Plug and Play".
@supercat Ich bin mir sicher, dass alle HID-Geräte denselben Treiber verwenden können, weil es einen strengen Standard für das Protokoll für Tastatur und Maus gab, sodass jedes BIOS sie ohne spezielle Treiber verwenden konnte. Für CDC-Geräte war dies nicht erforderlich, und unterschiedliche Hardware erforderte unterschiedliche Treiber. Nach einer Weile wurden die Treiber der beliebtesten Marken (z. B. FTDI) in Windows integriert; aber die kleinen Kerle müssen eine Diskette zusammen mit ihrem Produkt versenden oder eine Webadresse für einen Download angeben.
Ab 2018 wird Windows 10 mit Out-of-the-Box-Unterstützung für USB-CDC-Geräte (als virtuelle COM-Ports) ausgeliefert.