Pourquoi les ports USB sont-ils parfois appelés ports série et appelés COM?


13

En ce qui concerne ma compréhension des ports informatiques,

  1. Un port série est une prise à 9 broches comme celle illustrée ici et il est également appelé port COM.
  2. Les ports USB sont une norme différente des ports série.

Pourquoi alors je vois souvent des ports USB appelés "ports série" et, par exemple dans l'IDE Arduino, les ports USB sont identifiés par le préfixe COM? Aussi pourquoi un port COM virtuel est-il parfois nécessaire s'il n'y a aucun port série impliqué? (Exemple: adaptateur Prologix GPIB-USB.)

Cette utilisation du même nom pour décrire deux choses différentes, je pense, peut être un peu déroutante.

Capture d'écran de l'IDE Arduino, commande de menu Outils → Port série → COM14 illustré


2
USB est une communication série.

3
Peut-être parce que vous avez un périphérique USB qui fonctionne comme un port série ? Quelque chose qui a une de ces puces USB vers série FTDI (FT232) ou Prolific (PL2303), ou peut-être un MCU avec une implémentation logicielle de la même chose? Les avoir affichés dans le même espace de noms que les ports série fixés sur la carte mère (ou dans les cartes PCI (e)) rend l'interface plus simple avec le logiciel: il n'a pas besoin de savoir comment le port est physiquement implémenté, juste qu'il charlatans comme un port série.
ilkkachu

4
Il pourrait être utile de se rendre compte qu'au début du PC IBM et de beaucoup de ses prédécesseurs, un "port série" n'était généralement pas situé sur la carte mère, mais était plutôt une interface sur une carte de bus d'extension. Aujourd'hui, ce concept reste relativement vrai dans la mesure où il existe toujours un convertisseur d'interface série distinct - seul le "bus d'extension" le reliant à l'ordinateur est désormais USB, au lieu de l'ancienne extension connectée ISA du bus local du processeur.
Chris Stratton

14
Quel bus universel ?
hobbs

4
@hobbs, c'est vrai Universal Serial Bus. Un autobus. Très distinct d'un port série, n'est-ce pas? Même sans le texte en gras idiot.

Réponses:


27

Ce ne sont pas des ports USB appelés ports série. Dans votre exemple, l'Arduino dispose d'un périphérique USB vers série (sous la forme d'un deuxième microcontrôleur ou d'une puce FTDI). Cela utilisera l'USB pour communiquer avec l'ordinateur et former un véritable port série vers le monde extérieur - similaire aux dongles Wi-Fi USB ou aux adaptateurs LAN USB, aux adaptateurs SATA USB, etc.

La clé est que dans de nombreux cas, le port série n'est pas directement accessible à l'utilisateur, car il est "câblé" dans l'appareil (dans ce cas, connecté directement au microcontrôleur que vous programmez).

Dans la théorie stricte, tout port utilisant des communications série (presque tous les bus modernes - y compris USB, qui signifie "Universal Serial Bus", si ma mémoire me sert) est un "port série". Cependant, dans la plupart des cas, lorsque les gens se réfèrent au "port série", ils se réfèrent en fait à un port conforme à RS-232.


10
Chaque fois que quelqu'un fait référence à un "port série", cela signifie presque certainement une connexion RS-232 via un connecteur DE-9M. Si les gens veulent dire USB, ils ont tendance à dire USB. Idem pour les autres protocoles série tels que RS-485 ou GPIB ou les différentes versions d'Ethernet.

5
@ Felthry: "série" signifie très souvent une signalisation série asynchrone (le "A" dans "UART") que RS-232 utilise également, mais à des niveaux de tension logiques standard, pas RS-232. Et peut ou non inclure les broches de prise de contact qui mènent à la 9 broches (ou 25 broches, qui était l'original pour RS-232).
Ben Voigt

2
Vrai. Je suppose que c'est une autre couche d'abus de terminologie, en utilisant «RS-232» pour désigner une variante basse tension du protocole. J'ai aussi pensé à mentionner le connecteur DB-25M, mais ce n'est pas vraiment pertinent ici.

7
@ Felthry, désolé mais "chaque fois que quelqu'un fait référence à un" port série ", cela signifie presque certainement que RS-232 est connecté via un connecteur DE-9M" est une vue obsolète centrée sur PC. Et les PC n'ont pas été fabriqués avec des connecteurs à 9 broches à l'arrière depuis au moins une décennie. La population de masse de leurs utilisateurs ne les a jamais touchés lorsqu'ils l'étaient. Les produits, équipements et PCB partout utilisent des ports série, via une variété de connecteurs dédiés et au niveau LVTTL ou RS-232C. Et les ingénieurs de ce site découvriront les ports série bien plus de façons qu'un ancien standard PC. Un monde beaucoup plus diversifié que cela, je le crains.

4
@TonyM Peut-être que je viens de côtoyer trop d'équipements old-school. Je noterai cependant que les ordinateurs sont encore généralement fabriqués avec des connecteurs DE9 - mais pas pour le marché grand public. Ils sont omniprésents dans l'industrie et la recherche, car vous devrez probablement vous interfacer avec des systèmes fabriqués dans les années 90 ou plus tôt, quand ils étaient courants. Les gens n'améliorent pas leur équipement industriel comme vous mettriez à jour votre téléphone, après tout! Comme je l'ai dit, c'est un abus de terminologie. Peut-être "presque certainement" était une formulation trop forte, mais c'est un usage très courant.

18

C'est déroutant car Windows COM: les ports proviennent d'un système de nommage défini en arrière dans MS-DOS (b. 1980). Cela a été à peu près copié de CP / M (b. 1974) avec quelques idées tirées d'Unix. Ils ne prévoyaient pas l'ajout d'un bus de «transport» intermédiaire comme l'USB.

Un certain nombre de choses dans Windows sont des survivants de l'évolution CP / M-> MS-DOS, tels que les disques durs nommés par lettres, les extensions de nom de fichier à 3 lettres, les fichiers .EXE et .COM et l'interface de commande d'invite de commandes.

Un autre est le nom des appareils: généralement trois lettres, se terminant toujours par deux points. COM: est un `` port de communication '' série, LPT: une `` imprimante de ligne '' (généralement suspendu à un port Centronics), NUL: vide tout ce qui lui est envoyé, CON: est la `` console '' (clavier et écran). Certains que vous pourriez avoir plusieurs seront numérotés pour les différencier. COM: les ports font, tout comme les ports LPT:, devenant COM1: et LPT1: et ainsi de suite.

Un port COM: est un «point d'extrémité»: l'extrémité éloignée de la liaison de communication du point de vue d'un PC Windows. Comme beaucoup de choses dans l'informatique, le pont est ignoré et c'est le composant le plus éloigné auquel vous pensez, pas l'USB. Cela est également vrai pour un clavier PC (lié en tant que CPU-PCIe-USB-kbd) ou un lecteur réseau (lié en tant que CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA ou similaire).

L'USB utilise également l'idée de points de terminaison. Un contrôleur USB peut connecter un PC hôte à toutes sortes de matériels et les lui fournir en tant que ressources. Ainsi, lorsque vous voyez le matériel connecté par USB, vous voyez ces points de terminaison. Un port COM: virtuel dans un périphérique USB est simplement un port série sortant de ce périphérique esclave USB en tant que point de terminaison. Windows lui donnera un numéro (COM1 :, COM27: etc.) et ce port série peut être reconnu et utilisé par n'importe quel programme utilisant l'API Windows standard pour les ports COM :.

Certains matériels connectés par USB peuvent préférer emprunter l'identité d'un port série car cela facilite le développement du logiciel Windows. Aucun pilote de périphérique n'a besoin d'être écrit, ce qui économise beaucoup de travail - le périphérique USB indique à Windows qu'il s'agit d'un port série. Du point de vue du PC, c'est bien s'il se comporte comme un port série (les octets sont envoyés et reçus dans un flux série sans fin qui est toujours ouvert). Il y a donc des avantages pour le développeur.


4
Je n'ai jamais vu de noms de périphériques se terminer par deux points. En ligne de commande, vous dites également par exemple type file.txt > lpt1sans deux-points. Et dans le gestionnaire de fichiers Windows par défaut, Explorer, vous ne pouvez pas créer un fichier nommé par exemple COM ou LPT1 (au moins dans Windows XP, peut-être plus tard aussi). Où peut-on réellement voir les deux points après le nom de l'appareil?
Ruslan

2
@Ruslan, vous avez raison, ils sont facultatifs dans Windows qui les a supprimés, il accepte les deux contrairement à MS-DOS. Mais ne les ayant jamais vus ... (a) rechercher un texte sur des périphériques MS-DOS; (b) dans CP, tapez «mode /?» et regardez la syntaxe de la commande utilisée pour définir les paramètres de port COMn: et LPTn:, essayez-les si vous le souhaitez; (c) dans l'invite de commande, tapez 'copy con: nul:' et regardez-le fonctionner (Ctrl-C pour terminer).

1
@Ruslan Colon est là parce que c'est un appareil comme les autres. Ce n'est pas le colon qui est spécial - copy con:filename.txt nulfonctionne très bien, exactement comme copy c:filename.txt nul. Au moins jusqu'à MS-DOS 6.22, les deux points peuvent être omis dans la plupart des cas, car ils n'introduisent aucune ambiguïté; contrairement aux noms de lecteur, ces périphériques ont été des noms réservés, donc vous ne rencontrez pas les problèmes de copy file.txt c(dois-je copier le fichier dans le répertoire actuel sur le lecteur c, ou dans un fichier nommé "c" dans mon répertoire actuel?) .
Luaan

7

Pour ajouter à la réponse de Joren Vaes : sachez que certaines applications logicielles (comme Arduino IDE) installent un pilote Windows qui crée des ports "COM virtuels". Lorsque ces ports sont activés, les systèmes d'exploitation indiquent aux programmes qu'un port COM est disponible, qui ressemble à un port série standard [*], auquel les programmes (comme Arduino IDE, mais aussi tout autre) peuvent envoyer et recevoir des bits comme vers n'importe quel port série. Sous le capot, cependant, ces bits sont envoyés à un câble USB. À l'intérieur de la carte Arduino, quelque chose d'analogue se produit.

[*] Et, par "port série standard", nous entendons ici le protocole RS-232, le type qui était traditionnellement transmis via le connecteur DB-9 ou DB-25. Dans notre contexte, peu importe que l'USB soit également "série".


7

Votre compréhension de la différence entre le port COM et le port USB est correcte.

Pour répondre brièvement à votre question, pourquoi certains ports USB sont mappés par le système d'exploitation en tant que ports "COM", il y a: il existe des périphériques USB qui implémentent USB CDC (Communication Device Class). Ces appareils fournissent un pont entre une interface USB extrêmement compliquée et une interface de type UART / RS-232 standard. Pour plus de transparence pour les utilisateurs, le système d'exploitation charge les pilotes USB qui imitent la couche de transport en tant que port COM, un port COM virtuel. Quelques détails historiques et justification de cette approche suivent.

Le port COM utilise des connecteurs DB-9 / DB-15 (aka série RS-232 ou UART) et les contrôleurs de ces ports sont physiquement mappés dans le matériel du PC, à des adresses spécifiques dans l'espace d'E / S. Ce contrôleur COM devient obsolète dans les PC modernes et s'éteint.

Dans le même temps, de nombreux MCU utilisent toujours la communication série RS-232 comme moyen principal de communiquer avec le monde périphérique. La raison en est que le matériel (et les logiciels) pour ce type de lien est très simple et facile à mettre en œuvre. De plus, toutes les communications de développement / débogage Android modernes se font dans le style du port COM. En outre, de nombreux appareils de "communication" (comme les modems, y compris 4G LTE et plus), utilisent toujours l'interface de type UART avec un protocole de contrôle de type ASCII sur plusieurs ports "COM".

Les développeurs ont maintenant un dilemme, comment communiquer avec de tels micro-contrôleurs si le PC de développement hôte n'a pas de ports COM? La solution était d'utiliser des ports USB et des périphériques USB spéciaux qui pontent le protocole USB avec une interface COM-port RS-232. Il existe des périphériques USB dédiés comme puces FTDI, et de nombreux autres (Cypress, Microchip, etc.) fabriquent des périphériques qui remplissent cette fonction de pont.

Désormais, toutes les communications natives avec ces MCU sont toujours exprimées en termes de protocole RS-232, et la plupart des exemples d'application supposent l'utilisation d'une application Terminal (TeraTerm, HyperTerminal, etc.) pour utiliser le lien. Pour la commodité de l'utilisateur, les ponts USB-UART sont fournis avec des pilotes qui représentent le port comme un port COM virtuel. Tous les logiciels modernes utilisent la virtualisation du matériel COM, qui permet une transition en douceur vers des PC «sans COM». Il devient une pratique courante soit d'ajouter un pont FTDI dédié aux ports UART sur une plate-forme de développement MCU (et d'utiliser des pilotes FTDI sur le PC hôte pour que le port USB ressemble à un port COM), soit d'incorporer le code de pont approprié dans le MCU lui-même (si il a une fonctionnalité USB native).

L'approche la plus simple consiste à utiliser une carte USB vers UART externe et à connecter l'UART au MCU en cours de développement. Ou, si une carte a déjà le connecteur DB-9, il existe des dongles USB qui peuvent y être connectés directement.

Dans tous les cas, le contrôle UART natif du MCU apparaîtra sur le côté hôte comme un port COM virtuel, ignorant toutes les transformations de signal / protocole intermédiaires. C'est pourquoi, de nos jours, les gens ignorent souvent la distinction entre les ponts USB-UART et les ports COM.


3

C'est très déroutant, mais vous n'avez pas à vous en préoccuper. Tout d'abord, pensez à un UART qui lui-même est un terme générique, mais pensez à celui qui produit un protocole avec un bit de départ, un ou deux bits d'arrêt, 7 ou 8 généralement des bits de données, et parfois une parité qui est paire ou impaire; cela peut varier à partir de là, ce qui le rend encore pire.

L'UART est au niveau TTL, quoi que cela signifie. Auparavant, c'était 5 V et maintenant 3,3 V, 1,8 V ou autre chose; peut-être que TTL est le mauvais terme. ALORS vous aviez / avez RS-232, RS-422, etc. Ce sont des normes de TENSION ET DE PIN, pas des normes de protocole. Il est incorrect de mélanger les termes et de dire RS-232 lorsque vous entendez une sorte d'UART.

À l'époque où votre UART était sur vos cartes mères et vous vouliez une sorte de connecteur vers le monde extérieur avec des niveaux de tension qui avaient du sens à l'époque et une sorte de brochage / câble standard. Ainsi, un standard populaire à 25 et 9 broches a souvent été trouvé pour divers périphériques, et dans le monde des PC Wintel, cela s'appelait un port COMmunication ou parfois un port série.

Bien sûr, un port qui transporte des données série peut et est appelé un port série, SPI, I²C, MDIO, UART, HDLC, SDLC, etc., et peut-être même USB et SCSI; vous pourriez devenir fou avec ça. Habituellement, un port série signifie quelques broches que vous pouvez obtenir sur un UART.

Le monde Unix / Linux dit ttyau lieu de com/ serial/ uart, mais c'est la même chose.

Maintenant, il y a la MISE EN ŒUVRE. Vous pouvez acheter une puce UART avec une interface (oui, vous pouvez avoir un UART SPI, qui est série aux deux extrémités, ou I²C UART ou un bus dédié ou USB, etc.). Même à l'époque, l'UART avait un bus d'un côté grâce auquel le CPU communiquait. Aujourd'hui, nous avons FTDI et d'autres fournisseurs qui font de belles solutions USB UART, cela ne rend pas différentes couches d'interface entre le logiciel et l'UART et puis l'autre côté de l'UART a une certaine interface, que ce soit au niveau TTL / puce ou RS-232C ou RS-422, etc.

Au début des Arduinos, vous utilisiez souvent une carte FTDI USB-UART qui alimentait également l'Arduino. Certains ont cette alimentation USB et série / UART sur la carte Arduino elle-même, puis celle-ci est connectée à la carte UART sur la puce AVR (même accord avec un processeur avec quelques couches de bus pour permettre au logiciel de communiquer avec un UART qui a une interface de l'autre côté, dans ce cas, les broches sur le bord de l'AVR, aux niveaux de tension de la puce, TTL).

Étant donné que la fonctionnalité UART n'a pas changé depuis des décennies, pourquoi la terminologie logicielle ou même les applications logicielles devraient-elles changer au niveau de l'application? Écrivez une application Linux / Unix TTY il y a 10-15 ans contre une puce UART sur votre carte mère, et il y a de fortes chances qu'elle fonctionne encore aujourd'hui avec un niveau USB vers TTL ou USB vers RS-232C ou RS-422 ou autre broche / définition de niveau. Il en va de même pour Windows, et j'ai un code aussi ancien qui fonctionne toujours sur les deux. Dans le monde Windows, le terme COM est utilisé.

Je n'ai pas utilisé le bac à sable Arduino depuis un certain temps et si c'était le cas sur Linux, mais je ne serais pas surpris si ce programme qui est Java, si je me souviens bien, est générique et utilise le nom du système ainsi ttyS2sur Linux et COM2 sur les fenêtres.

En relisant votre question, cela peut aller beaucoup plus loin, en tirant parti de la quantité de logiciels déjà existante qui utilise ces appels d'API. Encore une fois pendant des décennies, il n'y a aucune raison pour laquelle vous ne pouvez pas créer un port virtuel dans un logiciel qui transporte ces données bidirectionnelles à peu près tout ce à quoi vous pouvez penser. L'UART vers Ethernet est très courant, et dans les salles de serveurs où les serveurs utilisent encore beaucoup les ports COM / TTY / RS-232, vous pouvez avoir un serveur terminal qui a un certain nombre d'interfaces que vous pouvez connecter à un certain nombre de serveurs, puis Ethernet de l'autre côté, puis si vous choisissez de ne pas vous connecter à telnet, vous pouvez installer un pilote de port COM virtuel.

Ensuite, votre application sur votre ordinateur pense qu'elle parle à un port COM, mais en fait ce flux d'octets saute sur Ethernet puis frappe le serveur de terminal, ALORS, à un niveau UART vers RS-232C (mais pas nécessairement brochage) des câbles à le serveur et revenir de la même manière.

Parfois, il n'y a aucune raison de se rendre dans un véritable UART, pour une raison quelconque, virtualisez un port COM afin que le logiciel qui a été écrit pour ces appels API puisse toujours fonctionner. Vous pourriez peut-être penser à l'ancien logiciel bancaire que nous utilisons encore, qui possède un terminal stupide vers une interface UART qui, peut-être à l'époque, était câblé ou est entré dans un modem pour éventuellement devenir un serveur. Vous pouvez faire en sorte que le logiciel fonctionne toujours, grâce à différentes quantités d'émulation, y compris un port COM virtuel qui, aujourd'hui, descend probablement Ethernet vers le serveur en tant que flux série (TCP / IP par exemple).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.