Последовательный порт
Последовательный порт (англ. serial port) — это аппаратный интерфейс, предназначенный для последовательной передачи данных по одному биту за раз, как на вход, так и на выход[1]. Это отличается от параллельных портов, которые передают несколько бит одновременно. На протяжении большей части истории персональных компьютеров данные передавались через последовательные порты к таким устройствам, как модемы, терминалы, различные периферийные устройства, а также напрямую между компьютерами.
Хотя такие интерфейсы, как Ethernet, FireWire и USB, также осуществляют передачу данных в виде последовательного потока, термин «последовательный порт» обычно применяется к аппаратным средствам, совместимым со стандартами RS-232 или родственными, такими как RS-485 и RS-422.
В современных массовых персональных компьютерах последовательные порты практически полностью вытеснены более скоростными интерфейсами, преимущественно USB. Однако последовательные порты по-прежнему широко применяются в задачах, где требуются простые и малоскоростные интерфейсы, например, в промышленной автоматизации, научных приборах, системах продажи и некоторых промышленных/бытовых устройствах.
Серверные компьютеры могут использовать последовательный порт как консоль управления для диагностики, а сетевое оборудование (например, маршрутизаторы и коммутаторы) — как консольный порт для настройки, диагностики и аварийного доступа. Для подключения таких и других устройств к современному ПК могут использоваться переходники USB-to-serial, добавляющие последовательный порт.
Аппаратная часть
Современные устройства используют специализированную интегральную схему — UART (универсальный асинхронный приёмопередатчик), реализующую последовательный порт. Такая микросхема переводит символы в асинхронный последовательный формат и обратно, реализуя синхронизацию и структурирование данных, заданные протоколом. В IBM PC, при наличии последовательных портов, их функцию реализует один или несколько UART.
Дешёвые системы (например, многие ранние домашние компьютеры) могли выполнять передачу данных напрямую центральным процессором через выводы на плате с помощью техники «bit banging». Часто такие порты отличались своими схемами и уровнями напряжения, не совместимыми с RS-232.
До появления интегральных UART, последовательные порты применялись на мейнфреймах и миникомпьютерах, где реализовывались с помощью отдельных микросхем — регистра сдвига, логических элементов, счётчиков и прочей логики. В дальнейшем последовательные порты интегрировались в Super I/O и затем в чипсеты ПК.
Сигналы последовательного порта являются однонаправленными: при соединении двух устройств выход одного должен подключаться к входу другого. Устройства делятся на: оконечное оборудование данных (DTE) и оконечное оборудование цепи передачи данных (DCE). Вывод, являющийся выходом на устройстве DTE, будет входом на DCE, и наоборот, поэтому DTE и DCE можно соединять обычным («прямым») кабелем, где номера контактов совпадают на обоих концах.
Традиционно компьютеры и терминалы считаются DTE, а периферия (например, модемы) — DCE. Для соединения двух устройств одного типа (DTE-DTE или DCE-DCE) используют кабель с перекрёстными линиями передачи/приёма — нуль-модемный, crossover или roll-over кабель.
Последовательные разъёмы обычно имеют различие по полу, то есть соединяются только «мужской» с «женским». В разъёмах D-subminiature контакты у мужского — штырьки, у женского — гнёзда[2]. Разъёмы любого пола могут устанавливаться на панели или проводе.
Обычно на DTE устанавливают мужской разъём, на DCE — женский (кабель, соответственно, противоположного пола). Тем не менее, это не всегда так: например, большинство последовательных принтеров имеют женский разъём DB25, но всё ещё являются DTE[3]. В таких случаях проблему решают соответствующим кабелем или сменой пола с помощью переходника.
Оригинальный стандарт RS-232 предполагал только 25-контактный разъём D-subminiature, однако со временем стали использоваться и другие типы — из соображений экономии и размера, так как многие устройства не используют все 20 сигналов стандарта. Пример — DE-9 (9-контактный D-sub), ставший стандартом для ПК с опцией Serial/Parallel Adapter для IBM PC/AT[4]. Для RS-232 этот разъём стандартизирован в TIA-574.
В миниатюрной электронике (например, графические калькуляторы[5] и ручные радиостанции[6]) используют телефонные (jack) разъёмы на 2,5 или 3,5 мм и простую 3-проводную схему: передача, приём, земля.
8P8C (RJ-45) разъёмы также распространены. Стандарт EIA/TIA-561 определяет их распайку, а rollover-кабель (стандарт Yost) используется на Unix-компьютерах и сетевом оборудовании (Cisco Systems и др.)[7].
Многие Macintosh работали со стандартом RS-422, обычно с круглыми разъёмами mini-DIN, причём были стандартные пары портов для принтера и модема, а на некоторых PowerBook — объединённый разъём[8].
Иногда используются 10P10C (RJ-50) разъёмы[9].
Также распространён 10-контактный pin header (штырьковый разъём) на материнских платах и платах расширения — обычно через ленточный кабель преобразуется в стандартный DE-9 и крепится на свободном слоте[10].
| Сигнал | Контакт разъёма | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Название | V.24 цепь | Сокращение | Источник | DB-25 | DE-9 (TIA-574) |
MMJ | 8P8C («RJ45») | 10P10C («RJ50») | ||||||
| EIA/TIA-561 | Yost (DTE)[12] | Yost (DCE)[12] | Cyclades | Digi (ALTPIN) | National Instruments[9] | Cyclades | Digi | |||||||
| Передача данных (TxD) | 103 | TxD | DTE | 2 | 3 | 2 | 6 | 6 | 3 | 3 | 4 | 8 | 4 | 5 |
| Приём данных (RxD) | 104 | RxD | DCE | 3 | 2 | 5 | 5 | 3 | 6 | 6 | 5 | 9 | 7 | 6 |
| Data Terminal Ready (DTR) | 108/2 | DTR | DTE | 20 | 4 | 1 | 3 | 7 | 2 | 2 | 8 | 7 | 3 | 9 |
| Data Carrier Detect (DCD) | 109 | DCD | DCE | 8 | 1 | н/д | 2 | 2 | 7 | 7 | 1 | 10 | 8 | 10 |
| Data Set Ready (DSR) | 107 | DSR | DCE | 6 | 6 | 6 | 1 | н/д | 8 | н/д | 5 | 9 | 2 | |
| Ring Indicator (RI) | 125 | RI | DCE | 22 | 9 | н/д | н/д | н/д | н/д | н/д | 2 | 10 | 1 | |
| Request To Send (RTS) | 105 | RTS | DTE | 4 | 7 | н/д | 8 | 8 | 1 | 1 | 2 | 4 | 2 | 3 |
| Clear To Send (CTS) | 106 | CTS | DCE | 5 | 8 | н/д | 7 | 1 | 8 | 5 | 7 | 3 | 6 | 8 |
| Земля сигнальная (G) | 102 | G | н/д | 7 | 5 | 3, 4 | 4 | 4, 5 | 4, 5 | 4 | 6 | 6 | 5 | 7 |
| Земля защитная (PG) | 101 | PG | н/д | 1 | н/д | н/д | н/д | н/д | н/д | н/д | 3 | н/д | 1 | 4 |
Сигнальная земля — это общий провод для других цепей, может быть на двух контактах (стандарт Yost) — это один и тот же сигнал. В DB-25 второй контакт (PG) предназначен для подключения устройства к своему корпусу или земле. Объединение сигнальной и защитной земли часто встречается, но не рекомендуется.
В стандарте EIA/TIA 561 контакты DSR и RI объединены[13],[14] а в стандарте Yost объединены DSR и DCD.
Операционные системы обычно создают для последовательных портов символические имена: Unix-подобные операционные системы используют устройства /dev/tty* («tty» — от teletype), где * — идентификатор порта. В Linux, UART-порты называются /dev/ttyS*, USB-адаптеры как /dev/ttyUSB* и т. д.
В DOS и Microsoft Windows последовательные порты обозначаются как COM: COM1, COM2 и так далее[15].
Типичные применения последовательных портов
Ниже приведены типичные устройства, подключаемые к последовательному порту ПК. Некоторые из них (например, модемы и последовательные мыши) вышли из массового употребления, другие по-прежнему распространены. Последовательные порты часто встречаются во встраиваемых системах (например, микроконтроллерах) для связи с ПК или аналогичными устройствами.
- Коммутируемые модемы
- Конфигурирование и управление сетевым оборудованием: маршрутизаторы, коммутаторы, фаерволы, балансировщики нагрузки
- GPS-приёмники (обычно на NMEA 0183, 4 800 бит/с)
- Сканеры штрих-кода и другие POS-устройства
- LED и LCD текстовые дисплеи
- Спутниковые телефоны, низкоскоростные модемы и приёмопередающие устройства на спутниках
- Плоские дисплеи для управления функциями экрана с внешнего ПК или аудиовидеотехникой
- Измерительные и тестовые приборы (цифровые мультиметры, весовые системы)
- Обновление прошивки различных устройств
- ЧПУ-станки
- Управление и мониторинг ИБП
- Машина стенографии/стенотип
- Программаторы и отладчики, работающие на втором ПК
- Консоль/отладка на развивающей плате
- Промышленные полевые шины
- Принтеры
- Терминалы, телетайп
- Сетевые протоколы (например, AppleTalk на Mac через RS-422, 230,4 кбит/с)
- Последовательные мыши
Некоторые приложения используют управляющие линии последовательного порта для мониторинга внешних устройств — даже без передачи данных. Например, некоторые ИБП сигнализируют так об отключении питания, разряде аккумулятора и прочем. Для тренировки азбуки Морзе применяются специальные клавиши, подключённые к управляющему входу порта, — это позволяет ПО точно фиксировать сигналы.
Последовательные мыши могут получать питание от сигнальных или управляющих линий[16].
Настройки
| Скорость (бит/с) | Время на бит (мкс) | Предопределено в Windows[17][18] | Типовые применения |
|---|---|---|---|
| 75 | 13333,3 | Да | |
| 110 | 9090,9 | Да | Модем Bell 101 |
| 134,5 | 7434,9 | Да | Терминал IBM 2741 |
| 150 | 6666,6 | Да | |
| 300 | 3333,3 | Да | Модем Bell 103/V.21 |
| 600 | 1666,7 | Да | |
| 1 200 | 833,3 | Да | Bell 202, Bell 212A, V.22 |
| 1 800 | 555,6 | Да | |
| 2 400 | 416,7 | Да | V.22bis модем |
| 4 800 | 208,3 | Да | V.27ter модем |
| 7 200 | 138,9 | Да | |
| 9 600 | 104,2 | Да | V.32 |
| 14 400 | 69,4 | Да | V.32bis модем |
| 19 200 | 52,1 | Да | |
| 31 250 | 32,0 | Нет | MIDI |
| 38 400 | 26,0 | Да | |
| 56 000 | 17,9 | Да | V.90/V.92 |
| 57 600 | 17,4 | Да | V.32bis/V.42bis |
| 76 800 | 13,0 | Нет | |
| 115 200 | 8,68 | Да | V.34 с V.42bis; дешёвые модемы V.90/V.92/V.44 |
| 125 000 | 8,00 | Нет | CAN-шина |
| 128 000 | 7,81 | Да | ISDN терминальный адаптер |
| 230 400 | 4,34 | Нет | LocalTalk, Econet, скоростные модемы V.90/V.92 с V.42bis/V.44[19][20] |
| 250 000 | 4,0 | Нет | DMX512 (театральное управление) |
| 256 000 | 3,91 | Да |
Стандарты последовательной передачи предусматривают разнообразные скорости и настройки (битность, чётность, стоп-биты и т. д.).
Современные UART позволяют менять все параметры программно; старое оборудование могло требовать изменения перемычек или переключателей на плате.
Формат 9600/8-N-1 является фактическим стандартом для ПК.
Данные передаются двоично, поэтому скорость передачи (бит/с) равна скорости символов (baud). Часть пропускной способности уходит на служебные биты (стоп, чётность), поэтому эффективная скорость заметно ниже максимальной. Например, для формата 8-N-1 только 80 % бит составляют полезные данные: на 8 бит данных — 2 дополнительных (старт и стоп).
Существуют стандартные скорости: 75, 110, 300, 1 200, 2 400, 4 800, 9 600, 19 200, 38 400, 57 600, 115 200 бит/с и другие[18]. Многие значения основаны на 1,2 кбит/с и 0,9 кбит/с (19200, 38400, 57600, 115200). Для этих целей применяют кварцы, например, на 1,8432 МГц — в 16 раз быстрее максимального значения передачи.
Выбор скорости не гарантирует работоспособность соединения: поддержка зависит от аппаратного обеспечения; иногда возможна автосинхронизация (например, в MIDI).
Количество бит данных может быть 5 (код Бодо), 6 (редко), 7 (ASCII), 8 (большинство современных протоколов), 9 (редко). Современные приложения почти всегда используют 8 бит. Форматы 5 и 7 бит встречаются только со старым оборудованием (телетайпами).
Обычно данные отправляются в порядке от младшего бита к старшему (least significant bit first), но возможен и обратный (например, IBM 2741).
Чётность — способ контроля ошибок. При передаче с чётностью добавляется дополнительный бит так, чтобы общее число единиц было всегда чётным или нечётным.
- Нет (N) — бит чётности не используется.
- Odd (O) — бит устанавливается для нечётного числа единиц.
- Even (E) — бит устанавливается для чётного числа единиц.
- Mark (M) — бит всегда равен 1.
- Space (S) — бит всегда равен 0.
Mark и space используются редко; они не дают контроля ошибок. Нечётная чётность полезнее чётной, так как обеспечивает наличие перехода сигнала. Обычно по умолчанию устанавливается «нет чётности», а контроль целостности поручается протоколу более высокого уровня.
При ошибке чётности на телетайпах печатался специальный символ.
Стоп-биты завершают символ, помогая принимающей стороне определить границу и восстановить синхронизацию. Обычно используют 1 стоп-бит, а при медленных электромеханических устройствах — 1,5 или 2.
Запись в формате D/P/S определяет структуру кадра (например, 8-N-1: 8 бит данных, без бита проверки, 1 стоп-бит[21]). Указание часто сопровождается скоростью (например, «9600-8-N-1»).
Управление потоком предотвращает потерю данных при несовпадении скорости передачи/приёма. Различают аппаратное и программное управление.
Аппаратное управление реализуется отдельными линиями (обычно RTS/CTS или DTR/DSR). RTS/CTS сигнализируют, например, почти заполненный буфер. DTR/DSR по стандарту сигнализируют только о наличии и готовности оборудования, но не всегда используются именно так (встречаются и нестандартные применения).
Программное управление реализуется управляющими символами (например, XON/XOFF). При заполнении буфера получатель посылает XOFF — отправитель делает паузу, затем принимает XON и возобновляет передачу. Такая схема относится к in-band signaling, то есть управляющие команды идут по тому же каналу, что и данные.
Достоинство аппаратного управления — высокая скорость и простота; недостаток — требует больше линий и поддержки на обоих концах.
Достоинство программного метода — работает при отсутствии или несовместимости аппаратных цепей; его недостаток — сложность с обозначением управляющих символов и предотвращением конфликтов с пользовательскими данными, что требует протоколов экранирования (например, Kermit) или их ограничения (ANSI-управление терминалом).
При отсутствии управления потоком переполненный приёмник теряет данные. Решения — снижение скорости, увеличение буферов или повторные передачи (как в TCP).
Примечания
Литература
- Serial Port Complete: COM Ports, USB Virtual COM Ports, and Ports for Embedded Systems; 2-е издание; Джен Аксельсон; Lakeview Research; 380 стр.; 2007; ISBN 978-1-931-44806-2.
