Последовательный порт

Последовательный порт (англ. serial port) — это аппаратный интерфейс, предназначенный для последовательной передачи данных по одному биту за раз, как на вход, так и на выход[1]. Это отличается от параллельных портов, которые передают несколько бит одновременно. На протяжении большей части истории персональных компьютеров данные передавались через последовательные порты к таким устройствам, как модемы, терминалы, различные периферийные устройства, а также напрямую между компьютерами.

Хотя такие интерфейсы, как Ethernet, FireWire и USB, также осуществляют передачу данных в виде последовательного потока, термин «последовательный порт» обычно применяется к аппаратным средствам, совместимым со стандартами RS-232 или родственными, такими как RS-485 и RS-422.

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

Серверные компьютеры могут использовать последовательный порт как консоль управления для диагностики, а сетевое оборудование (например, маршрутизаторы и коммутаторы) — как консольный порт для настройки, диагностики и аварийного доступа. Для подключения таких и других устройств к современному ПК могут использоваться переходники USB-to-serial, добавляющие последовательный порт.

undefined
undefined

Аппаратная часть

Современные устройства используют специализированную интегральную схему — UART (универсальный асинхронный приёмопередатчик), реализующую последовательный порт. Такая микросхема переводит символы в асинхронный последовательный формат и обратно, реализуя синхронизацию и структурирование данных, заданные протоколом. В IBM PC, при наличии последовательных портов, их функцию реализует один или несколько UART.

Дешёвые системы (например, многие ранние домашние компьютеры) могли выполнять передачу данных напрямую центральным процессором через выводы на плате с помощью техники «bit banging». Часто такие порты отличались своими схемами и уровнями напряжения, не совместимыми с RS-232.

До появления интегральных UART, последовательные порты применялись на мейнфреймах и миникомпьютерах, где реализовывались с помощью отдельных микросхем — регистра сдвига, логических элементов, счётчиков и прочей логики. В дальнейшем последовательные порты интегрировались в Super I/O и затем в чипсеты ПК.

DTE и DCE

Сигналы последовательного порта являются однонаправленными: при соединении двух устройств выход одного должен подключаться к входу другого. Устройства делятся на: оконечное оборудование данных (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].

Распайка (pinout)

Назначения контактов некоторых стандартов RS-232[11]
Сигнал Контакт разъёма
Название 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].

Типичные применения последовательных портов

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

Некоторые приложения используют управляющие линии последовательного порта для мониторинга внешних устройств — даже без передачи данных. Например, некоторые ИБП сигнализируют так об отключении питания, разряде аккумулятора и прочем. Для тренировки азбуки Морзе применяются специальные клавиши, подключённые к управляющему входу порта, — это позволяет ПО точно фиксировать сигналы.

Последовательные мыши могут получать питание от сигнальных или управляющих линий[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 rate)

Данные передаются двоично, поэтому скорость передачи (бит/с) равна скорости символов (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).

Чётность (parity)

Чётность — способ контроля ошибок. При передаче с чётностью добавляется дополнительный бит так, чтобы общее число единиц было всегда чётным или нечётным.

  • Нет (N) — бит чётности не используется.
  • Odd (O) — бит устанавливается для нечётного числа единиц.
  • Even (E) — бит устанавливается для чётного числа единиц.
  • Mark (M) — бит всегда равен 1.
  • Space (S) — бит всегда равен 0.

Mark и space используются редко; они не дают контроля ошибок. Нечётная чётность полезнее чётной, так как обеспечивает наличие перехода сигнала. Обычно по умолчанию устанавливается «нет чётности», а контроль целостности поручается протоколу более высокого уровня.

При ошибке чётности на телетайпах печатался специальный символ.

Стоп-биты

Стоп-биты завершают символ, помогая принимающей стороне определить границу и восстановить синхронизацию. Обычно используют 1 стоп-бит, а при медленных электромеханических устройствах — 1,5 или 2.

Условные обозначения (D/P/S и скорость)

Запись в формате D/P/S определяет структуру кадра (например, 8-N-1: 8 бит данных, без бита проверки, 1 стоп-бит[21]). Указание часто сопровождается скоростью (например, «9600-8-N-1»).

undefined

Управление потоком (flow control)

Управление потоком предотвращает потерю данных при несовпадении скорости передачи/приёма. Различают аппаратное и программное управление.

Аппаратное управление реализуется отдельными линиями (обычно 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.

Категории