Warum werden USB-Anschlüsse manchmal als serielle Anschlüsse und als COM bezeichnet?

12

Was mein Verständnis von Computeranschlüssen betrifft,

  1. Eine serielle Schnittstelle ist ein 9-poliger Stecker, wie der gezeigte Hier und es wird auch als COM-Port bezeichnet.
  2. USB-Anschlüsse unterscheiden sich von seriellen Anschlüssen.

Warum sehe ich dann häufig USB-Anschlüsse, die als "serielle Anschlüsse" bezeichnet werden, und in der Arduino IDE werden USB-Anschlüsse durch das COM-Präfix identifiziert? Warum wird manchmal auch ein virtueller COM-Port benötigt, wenn keine seriellen Ports beteiligt sind? (Beispiel: Prologix GPIB-USB-Adapter.)

Diese Verwendung des gleichen Namens zur Beschreibung zweier verschiedener Dinge, die ich denke, kann etwas verwirrend sein.

Screenshot from the Arduino IDE, menu command Tools → Serial Port → COM14 shown

mickkk
quelle
2
USB ist serielle Kommunikation.
3
Vielleicht weil du eine hast USB-Gerät, das als serielle Schnittstelle funktioniert ? Etwas, das einen dieser USB-zu-Seriell-Chips von FTDI (FT232) oder Prolific (PL2303) oder vielleicht eine MCU mit einer Software-Implementierung desselben hat? Wenn sie im gleichen Namensraum wie die auf dem Motherboard (oder in PCI (e) -Karten) befestigten seriellen Ports angezeigt werden, wird die Schnittstelle für die Software einfacher: Es muss nicht wissen, wie der Port physisch implementiert ist, nur dass es Quacksalber wie eine serielle Schnittstelle.
ilkkachu
4
Es mag hilfreich sein zu erkennen, dass sich in den frühen Tagen des IBM-PCs und vieler seiner Vorgänger ein "serieller Port" normalerweise nicht auf der Hauptplatine befand, sondern vielmehr eine Schnittstelle auf einer Erweiterungsbuskarte. Heute gilt dieses Konzept relativ immer noch, da es immer noch einen seriellen Schnittstellenkonverter gibt - nur der "Erweiterungsbus", der ihn wieder mit dem Computer verbindet, ist jetzt USB, anstelle der alten ISA-Anschlusserweiterung des Prozessorlokals.
Chris Stratton
14
Universal Was Bus?
hobbs
4
@Hobbs, das ist richtig Universal Serial Bus. Ein Bus. Sehr verschieden von einer seriellen Schnittstelle, nicht wahr? Auch ohne den dummen fetten Text.

Antworten:

26

Dies sind keine USB-Anschlüsse, die als serielle Anschlüsse bezeichnet werden. In Ihrem Beispiel verfügt das Arduino über ein USB-zu-Seriell-Gerät (entweder in Form eines zweiten Mikrocontrollers oder eines FTDI-Chips). Dabei wird USB zur Kommunikation mit dem Computer verwendet und bildet einen echten seriellen Port nach außen - ähnlich wie USB-Wi-Fi-Dongles oder USB-LAN-Adapter, USB-SATA-Adapter usw.

Der Schlüssel ist, dass der serielle Port in vielen Fällen nicht direkt für den Benutzer verfügbar ist, da er im Gerät "fest verdrahtet" ist (in diesem Fall direkt an den zu programmierenden Mikrocontroller angeschlossen).

In der strengen Theorie ist jeder Port, der serielle Kommunikation verwendet (fast jeder moderne Bus - einschließlich USB, der für "Universal Serial Bus" steht, wenn mein Speicher mir dient) ein "serieller Port". In den meisten Fällen bezieht sich der Begriff "serieller Anschluss" jedoch auf einen Anschluss, der RS-232 entspricht.

Joren Vaes
quelle
10
Wenn sich jemand auf eine "serielle Schnittstelle" bezieht, bedeutet dies fast sicher, dass RS-232 über einen DE-9M-Anschluss angeschlossen ist. Wenn Menschen USB meinen, neigen sie dazu, USB zu sagen. Gleiches gilt für andere serielle Protokolle wie RS-485 oder GPIB oder die verschiedenen Ethernet-Varianten.
5
@Felthry: "seriell" bedeutet sehr oft asynchrone serielle Signalisierung (das "A" in "UART"), die auch von RS-232 verwendet wird, jedoch mit Standard-Logikspannungspegeln, nicht mit RS-232. Sie können auch die Handshake-Pins enthalten, die zum 9-Pin (oder 25-Pin, der für RS-232 ursprünglich war) führen.
Ben Voigt
2
Wahr. Ich nehme an, dass dies eine weitere Missbrauchsschicht der Terminologie ist, wobei "RS-232" eine Niederspannungsvariante des Protokolls bedeutet. Ich habe auch überlegt, den DB-25M-Stecker zu erwähnen, aber das ist hier nicht wirklich relevant.
7
@Felthry, es tut mir leid, aber "wenn sich jemand auf eine" serielle Schnittstelle "bezieht, meinen sie fast sicher, dass RS-232 über einen DE-9M-Anschluss angeschlossen ist", ist eine veraltete PC-zentrierte Ansicht. Und seit mindestens einem Jahrzehnt wurden PCs nicht mit 9-poligen Anschlüssen auf der Rückseite ausgestattet. Die Massenbevölkerung ihrer Nutzer hat sie nie berührt. Produkte, Geräte und Leiterplatten verwenden überall serielle Schnittstellen, eine Vielzahl dedizierter Steckverbinder sowie LVTTL-Pegel oder RS-232C. Die Ingenieure auf dieser Site werden über serielle Schnittstellen weit mehr als über einen alten PC-Standard verfügen. Viel viel andere Welt als das, fürchte ich.
4
@TonyM Vielleicht habe ich einfach zu viel altes Schulmaterial dabei. Ich werde jedoch feststellen, dass Computer immer noch häufig mit DE9-Anschlüssen ausgestattet sind - nur nicht für den Verbrauchermarkt. Sie sind in Industrie und Forschung allgegenwärtig, da Sie sich wahrscheinlich mit Systemen aus den 90er Jahren oder früher verbinden müssen, als sie üblich waren. Die Leute aktualisieren ihre Industrieanlagen nicht so, als würden Sie ihr Handy aufrüsten! Wie gesagt, es ist ein Missbrauch der Terminologie. Vielleicht war "fast sicher" eine zu starke Formulierung, aber es ist eine sehr gebräuchliche Verwendung.
17

Dies ist verwirrend, da Windows COM: Ports von einem in MS-DOS definierten Namenssystem stammen (* 1980). Dies wurde ziemlich genau von CP / M (geb. 1974) mit einigen Ideen von Unix kopiert. Sie hatten nicht mit einem zusätzlichen Transportbus wie USB gerechnet.

Einige Dinge in Windows sind Überlebende aus der MS-DOS-Entwicklung von CP / M- & gt; MS-DOS, beispielsweise Laufwerksbuchstaben mit Namen, Dateinamenerweiterungen mit drei Buchstaben, EXE- und .COM-Dateien sowie die Befehlszeile der Befehlszeile.

Ein anderer ist der Gerätename: im Allgemeinen drei Buchstaben, die immer mit einem Doppelpunkt enden. COM: ist ein serieller "Kommunikationsport", LPT: Ein "Line Printer" (normalerweise hängt an einem Centronics-Port), NUL: Dumps, was an ihn gesendet wird, CON: ist die "Konsole" (Tastatur und Bildschirm). Einige, von denen Sie mehrere haben könnten, werden nummeriert, um zwischen ihnen zu unterscheiden. COM: Ports tun, LPT: Ports werden zu COM1: und LPT1: usw.

Ein COM: -Port ist ein 'Endpunkt': Das entfernte Ende der Kommunikationsverbindung aus Sicht eines Windows-PCs. Wie so viele Dinge in der Computertechnik wird die Brücke dort ignoriert und es ist die Komponente, an die Sie denken, nicht USB. Dies gilt auch für eine PC-Tastatur (verbunden als CPU-PCIe-USB-kbd) oder ein Netzlaufwerk (verbunden als CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA oder ähnliches).

USB nutzt auch die Idee von Endpunkten. Ein USB-Controller kann einen Host-PC an alle Arten von Hardware anschließen und als Ressourcen bereitstellen. Wenn Sie also die per USB angeschlossene Hardware sehen, sehen Sie diese Endpunkte. Ein virtueller COM-Port in einem USB-Gerät ist einfach ein serieller Port, der von diesem USB-Slave-Gerät als Endpunkt kommt. Windows gibt ihm eine Nummer (COM1 :, COM27: usw.). Dieser serielle Port kann von jedem Programm erkannt und verwendet werden, das die Standard-Windows-API für COM: -Ports verwendet.

Einige über USB angeschlossene Hardware kann es vorziehen, einen seriellen Anschluss zu verkörpern, da dies die Entwicklung der Windows-Software vereinfacht. Es muss kein Gerätetreiber geschrieben werden, der viel Arbeit spart. Das USB-Gerät teilt Windows mit, dass es sich um einen seriellen Anschluss handelt. Aus Sicht des PCs ist dies in Ordnung, wenn er sich wie eine serielle Schnittstelle verhält (Bytes werden in einem endlosen seriellen Stream gesendet und empfangen, der immer geöffnet ist). Es gibt also Vorteile für den Entwickler.

TonyM
quelle
4
Ich habe noch nie Gerätenamen gesehen, die mit einem Doppelpunkt enden. In der Befehlszeile sagen Sie auch z. type file.txt > lpt1 ohne einen Doppelpunkt Im standardmäßigen Windows-Dateimanager Explorer können Sie keine Datei mit dem Namen "z. B." erstellen. COM oder LPT1 (zumindest in Windows XP, möglicherweise auch später). Wo kann man eigentlich den Doppelpunkt nach dem Gerätenamen sehen?
Ruslan
2
@ Ruslan, Sie haben Recht, dass sie in Windows optional sind, was sie fallen gelassen hat. Sie akzeptiert im Gegensatz zu MS-DOS beide. Sie haben sie jedoch noch nie gesehen ... (a) suchen Sie einen Text auf MS-DOS-Geräten nach; (b) Geben Sie in CP "mode /?" Schauen Sie sich die Syntax des Befehls an, mit dem die Parameter für COMn: und LPTn: port festgelegt werden. Versuchen Sie sie, wenn Sie möchten. (c) Geben Sie in der Eingabeaufforderung 'copy con: nul:' ein und sehen Sie sich die Arbeit an (Strg-C am Ende).
1
@ Ruslan Colon ist da, weil es ein Gerät wie jedes andere ist. Es ist nicht der Doppelpunkt, der etwas Besonderes ist - copy con:filename.txt nul funktioniert gut, genau wie copy c:filename.txt nul. Zumindest in MS-DOS 6.22 kann der Doppelpunkt in den meisten Fällen weggelassen werden, da er keine Mehrdeutigkeit verursacht. Im Gegensatz zu Laufwerksnamen waren diese Geräte reservierte Namen, so dass Sie nicht auf die Probleme von copy file.txt c (Sollte ich die Datei in das aktuelle Verzeichnis auf dem Laufwerk c oder in mein aktuelles Verzeichnis in eine Datei namens "c" kopieren?).
Luaan
6

Hinzufügen zu Joren Vaes 'Antwort Beachten Sie, dass einige Software-Apps (wie die Arduino IDE) einen Windows-Treiber installieren, der "virtuelle COM" -Ports erstellt. Wenn diese Ports aktiviert sind, teilt das Betriebssystem den Programmen mit, dass ein COM-Port verfügbar ist, der wie ein standardmäßiger serieller Port [*] aussieht, zu dem Programme (wie Arduino IDE, aber auch andere) Bits senden und empfangen können zu einem beliebigen seriellen Port. Unter der Haube werden diese Bits jedoch an ein USB-Kabel gesendet. In der Arduino-Platine geschieht etwas analoges.

[*] Unter "serieller Standardanschluss" wird hier das RS-232-Protokoll verstanden, das üblicherweise über einen DB-9- oder DB-25-Anschluss übertragen wurde. In unserem Zusammenhang spielt es keine Rolle, dass USB auch "seriell" ist.

leonbloy
quelle
6

Ihr Verständnis des Unterschieds zwischen COM-Anschluss und USB-Anschluss ist korrekt.

Kurze Antwort auf Ihre Frage, warum einige USB-Ports vom Betriebssystem als "COM" -Ports zugeordnet werden, lautet: Es gibt USB-Geräte, die USB CDC (Communication Device Class) implementieren. Diese Geräte bieten eine Brücke von einer äußerst komplizierten USB-Schnittstelle zu einer Standardschnittstelle vom Typ UART / RS-232. Aus Gründen der Transparenz für Benutzer lädt das Betriebssystem USB-Treiber, die die Transportschicht als COM-Port, einen virtuellen COM-Port, nachahmen. Es folgen einige historische Details und eine Begründung für diesen Ansatz.

Der COM-Anschluss verwendet DB-9 / DB-15-Anschlüsse (auch bekannt als serielle RS-232- oder UART-Anschlüsse), und die Controller für diese Anschlüsse sind physisch der PC-Hardware zugeordnet und bestimmten Adressen im E / A-Bereich zugeordnet. Dieser COM-Controller ist in modernen PCs veraltet und erlischt.

Gleichzeitig verwenden viele MCU noch immer die serielle RS-232-Kommunikation als Hauptmittel für die Kommunikation mit der Peripherie. Der Grund ist, dass die Hardware (und Software) für diese Art von Verbindung sehr einfach und leicht zu implementieren ist. Darüber hinaus erfolgt die gesamte moderne Android-Entwicklungs- / Debugging-Kommunikation im COM-Port-Stil. Viele "Kommunikations" -Geräte (als Modems, einschließlich 4G LTE und höher) verwenden weiterhin die UART-Schnittstelle mit ASCII-Steuerprotokoll über mehrere "COM" -Ports.

Nun haben Entwickler ein Dilemma, wie mit solchen Mikrocontrollern zu kommunizieren ist, wenn der Host-Entwicklungs-PC keine COM-Anschlüsse hat. Die Lösung bestand in der Verwendung von USB-Anschlüssen und speziellen USB-Geräten, die das USB-Protokoll mit der COM-Port-RS-232-Schnittstelle verbinden. Es gibt dedizierte USB-Geräte als FTDI-Chips und viele andere (Cypress, Microchip usw.) stellen Geräte her, die diese Bridge-Funktion ausführen.

Nun wird die gesamte native Kommunikation mit diesen MCUs immer noch in Form des RS-232-Protokolls ausgedrückt, und für die meisten Anwendungsbeispiele wird die Verwendung einiger Terminalanwendungen (TeraTerm, HyperTerminal usw.) vorausgesetzt. Die USB-zu-UART-Bridges sind mit Treibern ausgestattet, die den Port als virtuellen COM-Port darstellen. Alle moderne Software verwendet die Virtualisierung von COM-Hardware, die einen reibungslosen Übergang zu "COM-los" PCs ermöglicht. Es wird allgemein üblich, entweder a hinzuzufügen dedizierte FTDI-Brücke zu UART-Ports auf einer MCU-Entwicklungsplattform (und verwenden Sie FTDI-Treiber auf einem Host-PC, um den USB-Anschluss wie einen COM-Anschluss aussehen zu lassen), oder integrieren Sie den richtigen Bridge-Code in die MCU selbst (wenn sie über eine native USB-Funktionalität verfügt).

Der direkte Ansatz ist die Verwendung eines externe USB-zu-UART-Karte und verdrahten Sie den UART mit der in Entwicklung befindlichen MCU. Wenn eine Platine bereits über den DB-9-Anschluss verfügt, ist dies der Fall USB-Dongles das kann direkt damit verbunden werden.

In allen Fällen erscheint die native UART-Steuerung der MCU auf der Host-Seite als virtueller COM-Port, wobei alle zwischengeschalteten Signal- / Protokolltransformationen übersprungen werden. Deshalb wird heutzutage häufig auf die Unterscheidung zwischen USB-zu-UART-Bridges und COM-Ports verzichtet.

Ale..chenski
quelle
2

Es ist sehr verwirrend, aber Sie müssen sich keine Sorgen machen. Denken Sie zunächst an einen UART, der selbst ein Oberbegriff ist, aber denken Sie an einen, der ein Protokoll mit einem Startbit, einem oder zwei Stoppbits, 7 oder 8 Datenbits und manchmal Parität erzeugt, die gerade oder ungerade ist. es kann von dort abweichen, was es noch schlimmer macht.

Der UART befindet sich auf TTL-Level, was auch immer das bedeutet. Früher waren es 5 V und jetzt 3,3 V, 1,8 V oder was auch immer; Vielleicht ist TTL der falsche Begriff. DANN hatten / hatten Sie RS-232, RS-422 usw. Dies sind VOLTAGE- und PIN-Standards, keine Protokollstandards. Es ist falsch, die Begriffe zu mischen und RS-232 zu sagen, wenn Sie eine Art UART meinen.

An dem Tag, als sich Ihr UART auf Ihren Motherboards befand, wollten Sie eine Verbindung zur Außenwelt herstellen, deren Spannungspegel zu der Zeit Sinn machte, und eine Art Standard-Pinbelegung / -Kabel. So wurde häufig ein beliebter 25- und 9-Pin-Standard für verschiedene Peripheriegeräte gefunden, und in der Wintel-PC-Welt wurde dies als COMmunication-Port oder manchmal als serieller Port bezeichnet.

Sicher, ein Port, der serielle Daten überträgt, kann und wird serieller Port, SPI, I²C, MDIO, UART, HDLC, SDLC usw. und möglicherweise sogar USB und SCSI genannt. Sie könnten verrückt werden. Normalerweise bedeutet eine serielle Schnittstelle einige Pins, die Sie bei einem UART erhalten können.

Die Unix / Linux-Welt sagt tty anstatt com / serial / uart, aber es ist dasselbe.

Jetzt gibt es die IMPLEMENTIERUNG. Sie können einen UART-Chip mit einer Schnittstelle kaufen (yep, Sie können einen SPI-UART verwenden, der an beiden Enden seriell ist, oder I²C-UART oder einen dedizierten Bus oder USB usw.). Schon damals hatte der UART auf einer Seite einen Bus, über den die CPU letztendlich kommunizierte. Heute haben wir FTDI und andere Anbieter, die nette USB-UART-Lösungen anbieten. Einige Schnittstellenebenen zwischen der Software und dem UART sind nicht unterschiedlich. Die andere Seite des UART verfügt über eine Schnittstelle, sei es TTL / Chip-Ebene oder RS-232C oder RS-422 usw.

Frühe Arduinos verwendeten Sie häufig ein FTDI-USB-zu-UART-Board, das auch dem Arduino Strom lieferte. Einige haben diese USB-Stromversorgung und serielle / UART auf der Arduino-Platine selbst, und dann wird sie auf der gesamten Platine mit der UART auf dem AVR-Chip verbunden einige Schnittstellen auf der anderen Seite, in diesem Fall die Pins am Rand des AVR, auf Span-Spannungspegeln (TTL).

Warum sollte sich die Softwareterminologie oder sogar Softwareanwendungen auf Anwendungsebene ändern, da sich die UART-Funktionalität seit Jahrzehnten nicht geändert hat? Schreiben Sie eine Linux / Unix-TTY-Anwendung vor 10-15 Jahren gegen einen UART-Chip auf Ihrem Motherboard, und es besteht eine gute Chance, dass sie auch heute noch mit einem USB auf TTL-Level oder USB auf RS-232C-Level oder RS-422 oder einem anderen Pin funktioniert / Ebenendefinition. Das gleiche gilt für Windows, und ich habe Code, der so alt ist, dass er immer noch auf beiden funktioniert. In der Windows-Welt wird der Begriff COM verwendet.

Ich habe die Arduino-Sandbox seit einiger Zeit nicht mehr verwendet, und wenn ja, wäre dies unter Linux gewesen, aber es würde mich nicht wundern, wenn das Programm, das Java ist, wenn ich mich recht erinnere, generisch ist und den Systemnamen verwendet ttyS2 unter Linux und COM2 unter Windows.

Wenn Sie Ihre Frage erneut lesen, kann dies noch viel weiter gehen und die bereits vorhandene Menge an Software nutzen, die diese API-Aufrufe verwendet. Es gibt keinen Grund, warum Sie seit Jahrzehnten keinen virtuellen Port in Software erstellen können, der diese bidirektionalen Daten so gut wie alles nach unten bringt. UART zu Ethernet ist sehr verbreitet, und in Serverräumen, in denen Server immer noch sehr viel COM / TTY / RS-232-Ports verwenden, können Sie einen Terminalserver mit mehreren Schnittstellen haben, an die Sie eine Reihe von Servern anschließen können. dann Ethernet auf der anderen Seite. Wenn Sie sich nicht für Telnet entscheiden, können Sie einen virtuellen COM-Port-Treiber installieren.

Dann glaubt Ihre Anwendung auf Ihrem Computer, dass sie mit einem COM-Port kommuniziert. In der Tat springt der Bytestrom auf das Ethernet und schlägt dann auf den Terminalserver, dann auf ein UART-zu-RS-232C-Kabel (aber nicht unbedingt auf Pinbelegung) den Server und zurück auf die gleiche Weise.

Manchmal gibt es keinen Grund, tatsächlich zu einem echten UART zu gelangen. Virtualisieren Sie einen COM-Port aus irgendeinem Grund, damit Software, die für diese API-Aufrufe geschrieben wurde, weiterhin funktionieren kann. Sie könnten vielleicht über die alte Bankensoftware nachdenken, die wir immer noch verwenden, die ein stummes Terminal mit einer UART-Schnittstelle hat, das vielleicht früher einmal fest verdrahtet war oder in ein Modem ging, um schließlich einen Server zu verwenden. Sie können es so einrichten, dass die Software weiterhin funktioniert, und zwar durch verschiedene Emulationsgrößen, einschließlich eines virtuellen COM-Ports, der heute wahrscheinlich nur noch als serieller Stream (z. B. TCP / IP) vom Server zum Server geleitet wird.

old_timer
quelle