Почему порты USB иногда называют последовательными портами и называются COM?

3631
mickkk

Насколько мое понимание компьютерных портов идет,

  1. Последовательный порт представляет собой 9-контактный разъем, такой как показан здесь, и он также называется COM-портом.
  2. USB-порты отличаются от стандартных последовательных портов.

Почему тогда я часто вижу порты USB, называемые «последовательными портами», и, например, в среде Arduino IDE порты USB идентифицируются префиксом COM? Кроме того, зачем иногда нужен виртуальный COM-порт, если не задействованы последовательные порты? (Пример: адаптер Prologix GPIB-USB.)

Это использование одного и того же имени для описания двух разных вещей, я думаю, может быть немного запутанным.

Снимок экрана из Arduino IDE, команда меню Инструменты → Последовательный порт → Показан COM14

12
USB - это последовательная связь. 6 лет назад 2
Возможно, потому что у вас есть [USB-устройство, которое работает как последовательный порт] (https://www.google.fi/search?q=usb+serial&tbm=isch)? Что-то, что имеет один из этих чипов FTDI (FT232) или Prolific (PL2303) USB-to-serial, или, возможно, микроконтроллер с программной реализацией того же самого? Отображение их в том же пространстве имен, что и последовательные порты, закрепленные на материнской плате (или на картах PCI (e)), делает интерфейс более простым для программного обеспечения: ему не нужно знать, как физически реализован порт, только то, что он крякает как последовательный порт. ilkkachu 6 лет назад 3
Это может помочь понять, что в первые годы существования IBM PC и многих его предшественников «последовательный порт» обычно не располагался на материнской плате, а представлял собой интерфейс на плате шины расширения. Сегодня эта концепция остается относительно верной в том смысле, что все еще существует отдельный конвертер последовательного интерфейса - теперь только «шина расширения», соединяющая его с компьютером, теперь является USB, а не старым подключенным ISA расширением локальной шины процессора. Chris Stratton 6 лет назад 4
Универсальный ** какой ** автобус? hobbs 6 лет назад 14
@hobbs, это верно, универсальный последовательный автобус. Автобус. Отличный от последовательного порта, не так ли? Даже без глупого жирного текста. 6 лет назад 4
Вы можете приобрести кабели USB / последовательный адаптер, которые имеют небольшой чип, который преобразует между USB и последовательным портом. Иногда устройства «USB» на самом деле являются устройствами с последовательным портом со встроенным чипом. user20574 6 лет назад 0
Они не должны быть DB9; первоначально [DB25] (https://en.wikipedia.org/wiki/D-subminiature#Communications_ports) использовался для RS-232. Peter Mortensen 6 лет назад 1

5 ответов на вопрос

26
Joren Vaes

Это не порты USB, называемые последовательными портами. В вашем примере Arduino имеет устройство USB-to-serial (либо в виде второго микроконтроллера, либо чипа FTDI). При этом USB будет использоваться для связи с компьютером и формирования фактического последовательного порта для внешнего мира - аналогично USB-адаптерам Wi-Fi или адаптерам USB LAN, адаптерам USB SATA и т. Д.

Ключевым моментом является то, что во многих случаях последовательный порт недоступен непосредственно для пользователя, так как он «жестко» подключен к устройству (в этом случае подключается непосредственно к микроконтроллеру, который вы программируете).

В строгой теории любой порт, использующий последовательную связь (почти любая современная шина, включая USB, которая обозначает «Универсальная последовательная шина», если мне не изменяет память), является «последовательным портом». Однако в большинстве случаев, когда люди ссылаются на «последовательный порт», они фактически ссылаются на порт, который соответствует RS-232.

Я понимаю. Я думаю, однако, что это все еще может быть немного запутанным. Более опытный инженер говорил со мной о том, как определенное устройство необходимо было подключить через «последовательный порт» к нашему основному устройству, я предположил, что он говорил о USB, но позже выяснил, что этот порт был 9-контактным старым последовательным портом. , mickkk 6 лет назад 0
Каждый раз, когда кто-то ссылается на «последовательный порт», он почти наверняка имеет в виду RS-232, подключенный через разъем DE-9M. Если люди имеют в виду USB, они, как правило, говорят USB. То же самое для других последовательных протоколов, таких как RS-485 или GPIB, или различных разновидностей Ethernet. 6 лет назад 10
Я могу определенно понять эту путаницу. Когда речь идет о спецификациях или о чем-то подобном, важно всегда указывать стандарт (RS232). Тем не менее, многие люди не понимают, что существуют другие * последовательные * протоколы. Это похоже на пользователей потребительских компьютеров (я занимаюсь ИТ в качестве студенческой работы) - люди начинают называть каждое интернет-соединение «Wi-Fi», хотя это может быть классический разъем RJ45, или любая форма сетевого хранилища, как «облачное хранилище», как облако. хранение, даже если оно может быть в той же комнате, что и они. Был причиной многих неэффективности из-за недопонимания. 6 лет назад 0
@Felthry: «последовательный» очень часто означает асинхронную последовательную сигнализацию («A» в «UART»), которую также использует RS-232, но на стандартных уровнях логического напряжения, а не RS-232. И может включать или не включать в себя контакты подтверждения связи, которые ведут к 9-контактному (или 25-контактному, который был оригиналом для RS-232). Ben Voigt 6 лет назад 5
Правда. Я предполагаю, что это еще один уровень злоупотребления терминологией, использующий «RS-232» для обозначения низковольтного варианта протокола. Я тоже подумал о том, чтобы упомянуть разъем DB-25M, но здесь он не очень актуален. 6 лет назад 2
@Felthry, извините, но «всякий раз, когда кто-то ссылается на« последовательный порт », они почти наверняка означают, что RS-232 подключен через разъем DE-9M» - это устаревшее представление, ориентированное на ПК. И ПК не были сделаны с 9-контактными разъемами на задней панели в течение по крайней мере десятилетия. Массовое население их пользователей никогда не трогало их, когда они были. Продукты, оборудование и печатные платы повсеместно используют последовательные порты через различные выделенные разъемы и на уровнях LVTTL или RS-232C. И инженеры на этом сайте будут испытывать последовательные порты гораздо больше, чем старый стандарт ПК. Боюсь, это гораздо более отвлекающий мир, чем этот. 6 лет назад 7
@TonyM Возможно, я только что был слишком много старого школьного оборудования. Однако отмечу, что компьютеры по-прежнему производятся с разъемами DE9 на них, но не для потребительского рынка. Они широко распространены в промышленности и исследованиях, потому что вам, вероятно, придется взаимодействовать с системами, которые были созданы в 90-х или ранее, когда они были распространены. Люди не модернизируют свое промышленное оборудование, как вы, в конце концов, модернизируете свой телефон! Как я уже сказал, это злоупотребление терминологией. Возможно, «почти наверняка» было слишком сильной формулировкой, но это очень распространенное использование. 6 лет назад 4
@Felthry, конечно, и я ценю ваши мысли здесь. Это очень субъективно по отношению к тому, где человек работает, по его звукам. За эти годы я перебрался с большим количеством клиентов, небольших фирм на крупные фабрики с сервисом test / r'n'd / и всякого рода, и они действительно далеко не повсеместны на ПК. Но имейте в виду, что каждый последовательный порт ПК, который мы замечаем, подключен к большому количеству оборудования и не относится к другим ПК :-) Кабели USB-LVTTL, специальные адаптеры для продуктов, USB-порт к ПК ... Не помню прошлый раз Я видел последовательный кабель от 9 до 9 проводов. Приятно обсуждать с вами :-) 6 лет назад 0
Точно правильный ответ, следовательно +1. Просто чтобы добавить к обсуждению, в моем классе микроконтроллеров мы использовали плату PICDEM с двумя микроконтроллерами PIC18, а для асинхронной последовательной связи у нас был настоящий последовательный порт, но также это можно было сделать через USB 2.0 (который контролировался другой микросхемой PIC). ) и переключались между ними с помощью перемещения определенных разъемов. Sergiy Kolodyazhnyy 6 лет назад 1
К сведению, у моей материнской платы (была новая горячка около 2013 года; я только что получил ее в прошлом году) все еще есть последовательные порты на ней в качестве заголовков, она просто не шла с кабелями для подключения к корпусу. Это не была рекламируемая функция. (По сути ** все ** SoC имеют UART на чипе, как это бывает.) The Nate 6 лет назад 1
17
TonyM

Это сбивает с толку, потому что Windows COM: порты происходят из системы имен, определенной еще в MS-DOS (р. 1980). Это было в значительной степени скопировано из CP / M (р. 1974) с некоторыми идеями, взятыми из Unix. Они не ожидали добавления промежуточной «транспортной» шины, такой как USB.

В Windows есть несколько вещей, переживших эволюцию CP / M-> MS-DOS, такие как дисковые накопители с буквенными именами, трехбуквенные расширения имен файлов, файлы .EXE и .COM и командный интерфейс командной строки.

Другое имя устройства: обычно три буквы, всегда заканчивающиеся двоеточием. COM: это последовательный «коммуникационный порт», LPT: «линейный принтер» (обычно свисающий с порта Centronics), NUL: выводит все, что ему отправлено, CON: «консоль» (клавиатура и экран). Некоторые из них могут быть пронумерованы, чтобы различать их. COM: порты, как и LPT: порты, становятся COM1: и LPT1: и так далее.

COM: порт - это «конечная точка»: дальний конец канала связи с точки зрения ПК с Windows. Как и многие другие вещи в вычислительной технике, мост там игнорируется, и вы думаете о компоненте дальнего конца, а не о USB. Это также верно для клавиатуры ПК (связанной как CPU-PCIe-USB-kbd) или сетевого диска (связанной как CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA или аналогичной).

USB также использует идею конечных точек. Контроллер USB может подключать хост-компьютер ко всем видам оборудования и предоставлять их ему в качестве ресурсов. Поэтому, когда вы видите оборудование, подключенное через USB, вы видите эти конечные точки. Виртуальный порт COM: на USB-устройстве - это просто последовательный порт, выходящий из этого ведомого USB-устройства в качестве конечной точки. Windows присвоит ему номер (COM1:, COM27: и т. Д.), И этот последовательный порт может быть распознан и использован любой программой, использующей стандартный Windows API для портов COM :.

Некоторые устройства, подключенные к USB, могут предпочесть выдавать себя за последовательный порт, потому что это облегчает разработку программного обеспечения для Windows. Не нужно писать драйвер устройства, что экономит много работы - USB-устройство сообщает Windows, что это последовательный порт. С точки зрения ПК, это нормально, если он ведет себя как последовательный порт (байты отправляются и принимаются в бесконечном последовательном потоке, который всегда открыт). Таким образом, есть преимущества для разработчика.

Я никогда не видел, чтобы имена устройств заканчивались двоеточием. В командной строке вы также говорите, например, `type file.txt> lpt1` без двоеточия. И в файловом менеджере Windows по умолчанию, Explorer, вы не можете создать файл с именем, например, COM или LPT1 (по крайней мере, в Windows XP, может быть, позже). Где можно увидеть двоеточие после имени устройства? Ruslan 6 лет назад 4
@ Руслан, вы правы, что они опциональны в Windows, которая их пропустила, она принимает оба варианта в отличие от MS-DOS. Но никогда не видя их ... (а) посмотреть текст на устройствах MS-DOS; (б) в CP введите «mode /?» и посмотрите синтаксис команды, используемой для установки параметров порта COMn: и LPTn: порт, попробуйте их, если хотите; (c) в командной строке введите «copy con: nul:» и посмотрите, как оно работает (Ctrl-C до конца). 6 лет назад 2
@ Руслан Колон там, потому что это устройство, как и любое другое. Это не двоеточие, что особенное - `copy con: filename.txt nul` работает просто отлично, точно так же, как` copy c: filename.txt nul`. По крайней мере, в MS-DOS 6.22 двоеточие можно опустить в большинстве случаев, поскольку оно не вносит никакой двусмысленности; в отличие от имен дисков, эти устройства были зарезервированными, поэтому вы не столкнетесь с проблемами `copy file.txt c` (скопировать файл в текущий каталог на диске c или в файл с именем c) "в моем текущем каталоге?). Luaan 6 лет назад 1
6
leonbloy

Чтобы добавить к ответу Джорена Вейса : учтите, что некоторые программные приложения (например, Arduino IDE) устанавливают драйвер Windows, который создает «виртуальные COM-порты». Когда эти порты активированы, операционные системы сообщают программам, что имеется доступный COM-порт, который выглядит как стандартный последовательный порт [*], на который программы (например, Arduino IDE, но также и любые другие) могут отправлять и получать биты, такие как на любой последовательный порт. Однако под капотом эти биты отправляются на USB-кабель. Внутри платы Arduino происходит нечто аналогичное.

[*] И под «стандартным последовательным портом» здесь подразумевается протокол RS-232, тип, который традиционно передавался через разъем DB-9 или DB-25. В нашем контексте совершенно неважно, что USB тоже «последовательный».

6
Ale..chenski

Ваше понимание разницы между COM-портом и USB-портом является правильным.

Коротко, ответьте на ваш вопрос, почему некоторые порты USB отображаются ОС как порты «COM»: есть устройства USB, которые реализуют USB CDC (класс коммуникационных устройств). Эти устройства обеспечивают мост от ужасно сложного интерфейса USB к стандартному интерфейсу типа UART / RS-232. Для прозрачности для пользователей операционная система загружает драйверы USB, которые имитируют транспортный уровень как COM-порт, виртуальный COM-порт. Ниже приводятся некоторые исторические детали и обоснование этого подхода.

В COM-порту используются разъемы DB-9 / DB-15 (последовательный порт RS-232 или UART), а контроллеры для этих портов физически сопоставлены с аппаратным обеспечением ПК по определенным адресам в пространстве ввода-вывода. Этот COM-контроллер устаревает в современных ПК и вымирает.

В то же время многие MCU по-прежнему используют последовательную связь RS-232 в качестве основного средства связи с периферийным миром. Причина в том, что аппаратное обеспечение (и программное обеспечение) для такого рода ссылок очень просто и легко реализуемо. Более того, все современные средства разработки и отладки для Android выполнены в стиле COM-порта. Кроме того, многие «коммуникационные» устройства (такие как модемы, в том числе 4G LTE и выше) все еще используют интерфейс в стиле UART с протоколом управления типа ASCII через несколько «COM» портов.

Теперь у разработчиков возникает дилемма, как общаться с такими микроконтроллерами, если на компьютере разработки хоста нет COM-портов? Решением было использование USB-портов и специальных USB-устройств, которые соединяют USB-протокол с COM-портом интерфейса RS-232. В качестве микросхем FTDI используются специальные USB-устройства, а многие другие (Cypress, Microchip и т. Д.) Создают устройства, которые выполняют эту функцию моста.

Теперь вся собственная связь с этими MCU по-прежнему выражается в терминах протокола RS-232, и в большинстве примеров приложений предполагается использование некоторого приложения терминала (TeraTerm, HyperTerminal и т. Д.) Для использования канала. Для удобства пользователей мосты USB-UART снабжены драйверами, которые представляют порт как виртуальный COM-порт. Все современное программное обеспечение использует виртуализацию оборудования COM, что обеспечивает плавный переход на ПК без COM. Обычной практикой является добавление выделенного моста FTDI к портам UART на платформе разработки MCU (и использование драйверов FTDI на хост-ПК, чтобы порт USB выглядел как COM-порт), или встраивание соответствующего кода моста в сам MCU (если он имеет встроенную функциональность USB).

Прямой подход заключается в использовании внешней платы USB-UART и подключении UART к разрабатываемому MCU. Или, если на плате уже есть разъем DB-9, есть USB-ключи, которые можно подключить к ней напрямую.

Во всех случаях встроенный элемент управления UART для MCU будет отображаться на стороне хоста как виртуальный COM-порт, пропуская все промежуточные преобразования сигнал / протокол. Вот почему люди в наши дни часто пропускают различие между мостами USB-UART и COM-портами.

2
old_timer

Это очень запутанно, но вам не нужно об этом беспокоиться. Прежде всего, подумайте о UART, который сам по себе является общим термином, но подумайте о том, который создает протокол со стартовым битом, одним или двумя стоповыми битами, 7 или 8 обычно битами данных, а иногда и четностью, которая является четной или нечетной; это может варьироваться оттуда, что делает его намного хуже.

UART находится на уровне TTL, что бы это ни значило. Раньше было 5 В, а теперь 3,3 В, 1,8 В или что-то еще; возможно, TTL - неправильный термин. ТОГДА вы имели / имеете RS-232, RS-422 и т. Д. Это стандарты VOLTAGE и PIN, а не протоколы. Неправильно смешивать термины и произносить RS-232, когда вы имеете в виду какой-то UART.

В свое время ваш UART был на ваших материнских платах, и вы хотели какой-то разъем для внешнего мира с уровнями напряжения, которые в то время имели смысл, и своего рода стандартную распиновку / кабель. Таким образом, популярный 25- и 9-контактный стандарт часто использовался для различных периферийных устройств, а в мире ПК Wintel его называли портом COM-связи или иногда последовательным портом.

Конечно, порт, который переносит последовательные данные, может и называется последовательным портом, SPI, I2C, MDIO, UART, HDLC, SDLC и т. Д., И, возможно, даже USB и SCSI; Вы можете сойти с ума от этого. Обычно последовательный порт означает несколько выводов, которые вы можете получить в UART.

Мир Unix / Linux говорит ttyвместо com/ serial/ uart, но это то же самое.

Сейчас идет РЕАЛИЗАЦИЯ. Вы можете купить какой-нибудь чип UART с некоторым интерфейсом (да, у вас может быть SPI UART, который является последовательным на обоих концах, или I2C UART, или какая-то выделенная шина или USB, и т. Д.). Даже в тот день у UART была одна шина с одной стороны, через которую в конечном итоге общался процессор. Сегодня у нас есть FTDI и другие поставщики, которые делают хорошие решения USB UART, не отличая некоторые уровни интерфейса между программным обеспечением и UART, и тогда другая сторона UART имеет некоторый интерфейс, будь то уровень TTL / чип или RS-232C или RS-422 и т. Д.

Ранние Arduinos Вы часто использовали плату FTDI USB-to-UART, которая также обеспечивала питание Arduino. У некоторых есть то питание USB и последовательный / UART на самой плате Arduino, которое затем подключается через плату к UART на микросхеме AVR (то же самое относится к некоторым процессорам с несколькими уровнями шин, чтобы программное обеспечение могло взаимодействовать с UART, который имеет некоторый интерфейс на другой стороне этого, в этом случае контакты на краю AVR, на уровнях напряжения микросхемы, TTL).

Поскольку функциональность UART не менялась десятилетиями, почему терминология программного обеспечения или даже программные приложения должны меняться на уровне приложений? Напишите приложение Linux / Unix TTY 10-15 лет назад против чипа UART на материнской плате, и есть большая вероятность, что оно все еще работает сегодня с уровнем USB-TTL или уровнем USB-RS-232C, RS-422 или любым другим контактом. / определение уровня. То же самое касается Windows, и у меня есть старый код, который все еще работает на обоих. В мире Windows используется термин COM.

Я не пользовался песочницей Arduino некоторое время, и если бы это было так в Linux, но я не удивлюсь, если эта программа на Java, если я правильно помню, является универсальной и использует системное имя, то есть ttyS2в Linux и COM2 на окнах.

Перечитав ваш вопрос, можно пойти гораздо дальше, воспользовавшись уже существующим количеством программного обеспечения, использующего эти вызовы API. Опять же, на протяжении десятилетий нет причин, по которым вы не можете создать виртуальный порт в программном обеспечении, которое переносит эти двунаправленные данные практически во все, что вы можете себе представить. UART to Ethernet является очень распространенным, и в серверных комнатах, где серверы все еще очень часто используют порты COM / TTY / RS-232, вы можете иметь терминальный сервер, который имеет несколько интерфейсов, которые вы можете подключить к ряду серверов, затем Ethernet с другой стороны, затем, если вы решите не подключаться к telnet, вы можете установить драйвер виртуального COM-порта.

Тогда ваше приложение на вашем компьютере думает, что оно взаимодействует с COM-портом, но на самом деле поток байтов переходит на Ethernet, а затем подключается к терминальному серверу, ТО, к кабелям уровня UART - RS-232C (но не обязательно распиновку) для сервер и обратно одинаково.

Иногда нет никакой причины фактически делать это в реальном UART, по любой причине виртуализировать COM-порт, чтобы программное обеспечение, которое было написано для этих вызовов API, все еще могло работать. Возможно, вы могли бы подумать о древнем банковском программном обеспечении, которое мы все еще используем, которое имеет тупой терминал с интерфейсом UART, который, возможно, когда-то был зашит или был подключен к модему, чтобы в конечном итоге стать сервером. Вы можете сделать так, чтобы программное обеспечение все еще работало, посредством различных эмуляций, включая виртуальный COM-порт, который сегодня, вероятно, просто переходит по Ethernet к серверу в виде последовательного потока (например, TCP / IP).