Ich habe eine USB-Kommunikation zwischen einem Mikrocontroller, den ich habe, und einem VB.Net-Skript eingerichtet. Ich bin einigermaßen vertraut mit der Funktionsweise des USB-Protokolls.
Meine Frage ist: Muss ich Startframes, Token und Handshaking programmieren, oder wird das alles von der Gerätehardware erledigt? Ich sehe im vb-Wiki von Microsoft, dass die Methode serialport.Readline einen Puffer bis zum ersten neuen Zeilenzeichen liest, und für mich sieht das so aus, als würde es mehr tun, als das USB-Protokoll zulässt. Sie sollten nicht in der Lage sein, kontinuierlich Daten an den Port zu streamen, sie sollten diskret in Frames gesendet werden.
Danke im Voraus.
Wie jeder Protokollstapel enthält USB Komponenten, die verschiedene Schichten darstellen. High-Level-Treiber und -Bibliotheken bieten Funktionen höherer Schichten auf niedrigeren Schichten und abstrahieren diese niedrigeren Schichten effektiv und außer Sichtweite.
Im Fall von USB gibt es eine Reihe sogenannter Geräteklassen, die standardisierte Schnittstellen auf USB bieten, mit einem koordinierten Protokoll auf der Hostseite (implementiert durch einen Treiber oder einen Stapel von Treibern) und auf der Peripherieseite ( implementiert durch Firmware oder Treiber). Beispiele für diese Geräteklassen sind HID-Geräte wie Tastaturen/Mäuse, Massenspeichergeräte wie Flash-Laufwerke, Bildspeicherung mit PTP/MTP und so weiter. Diese abstrahieren das USB-Protokoll - zum Beispiel sieht der FAT-Dateisystemtreiber, der zum Mounten eines Flash-Laufwerks verwendet wird, ein Blockspeichergerät und muss sich dank der USB-Treiber weiter unten im Stapel keine Gedanken über USB-Framing, Paketierung usw. machen.
In Ihrem Fall ist die relevante Klasse USB CDC (Communications Device Class) . Die CDC-Treiber bieten Benutzerprogrammen auf Ihrem Computer einen seriellen Anschluss, der einen Datenstrom lesen und schreiben kann. In der Zwischenzeit erledigt der CDC-Treiber die Arbeit, einen Strom serieller Bytes und Steuersignale in USB-Pakete umzuwandeln, und er erhält Hilfe von den zugrunde liegenden USB-Treibern im Stack für noch niedrigere Aufgaben wie das Einrichten von Pipes zu Endpunkten.
Da die Spezifikation standardisiert ist, profitieren Sie davon, dass Ihre Anwendung auf USB CDC funktionieren sollte, unabhängig davon, von welchem Anbieter Ihr CDC-kompatibles Gerät stammt (solange sie der Spezifikation entsprechen), da die Treiber Ihres Systems wahrscheinlich entsprechend implementiert sind Spezifikation 1 .
In der Zwischenzeit kann Ihre Anwendung die serielle Schnittstelle verwenden, ohne sich Gedanken darüber machen zu müssen, welche physische Hardware ihr zugrunde liegt. Es könnte seriell über USB sein, es könnte ein neunpoliger serieller D-Sub-Anschluss sein, der mit einem UART auf dem IO-Controller Ihres Motherboards implementiert ist, es könnte ein virtueller serieller Anschluss unter Linux sein, oder es könnte vielleicht eine serielle Verbindung oben sein von TCP/IP.
1 oder mehr lose, um Spielraum für Geräte zu geben, die möglicherweise nicht genau der Spezifikation entsprechen.
AT
werden Befehle verwendet, weil das Bitmuster für AT
praktische Bitraten-unabhängige Eigenschaften hat , die es Geräten ermöglichen, sich automatisch darauf zu synchronisieren.Es steckt bereits im Namen der Funktion: serialport.Readline
. Diese Funktion arbeitet an seriellen Ports, nicht an Raw-USB-Endpunkten. Ihr Mikrocontroller "gibt vor", eine serielle Schnittstelle zu sein, die über USB an Ihren Computer angeschlossen ist. Ein serieller Port-Treiber auf Ihrem System kümmert sich um die Konvertierung der Daten aus Ihrem Programm in USB-Pakete (und umgekehrt).
Auf Ihrem Computer befindet sich mehr Software als nur Ihr eigenes Programm. Das Betriebssystem erledigt eine Menge Dinge für Sie.
Wenn Sie Ihren eigenen Treiber schreiben möchten, können Sie das natürlich tun, aber es ist gelinde gesagt ziemlich schwierig. Solange die serielle Kommunikation ausreicht, müssen Sie keine schreiben. Wenn Sie jedoch Ihre eigenen benutzerdefinierten USB-Endpunkte erstellen möchten, müssen Sie einen Treiber dafür schreiben.
Wenn Sie einen seriellen USB-Anschluss haben, dann ist es für Ihr Programm ein serieller Anschluss.
Und Sie müssen nicht wissen oder sich darum kümmern, ob es sich um einen seriellen Standardanschluss, einen seriellen USB-Anschluss, einen über LAN erweiterten virtuellen seriellen Anschluss oder etwas anderes handelt, solange Ihr Programm einen seriellen Anschluss erkennt.
Meine Frage ist: Muss ich Startframes, Token und Handshaking programmieren, oder wird das alles von der Gerätehardware erledigt?
Ok, lassen Sie mich versuchen, ein umfassendes Bild dessen zu zeichnen, wonach Sie fragen, und zwar auf eine von oben nach unten gerichtete Weise:
Mit einer seltenen Ausnahme des Low-Speed-Protokolls (wie Maus/Tastatur, wo es einigen Enthusiasten gelang, USB SIE und PHY auf bit-banging-Weise locker zu implementieren), implementieren alle Mikroprozessoren mit USB-Funktionalität alle wichtigen Protokollfunktionen in Hardware.
Also, um diese direkte Frage zu beantworten, nein, Sie programmieren nicht den Start von Frames und bestimmten Token oder warten auf Handshakes, es wird alles in Hardware unter der Kontrolle des USB-Treiberstapels erledigt.
pjc50
Ale..chenski
Jaywalk