COM-порт. Сопряжение устройств с ПК. Программирование. Соединение через COM

Иногда приходится решать задачу связи электронного устройства с компьютером, будь то просто обмен данными или удалённое управление. Эта статья описывает, как это можно реализовать, используя последовательный порт. Главным его преимуществом является то, что стандартный программный интерфейс Windows (API) позволяет производить непосредственное управление выходными линиями, давая прямой контроль над ними, и имеет функцию ожидания некоторого события, связанного с COM-портом. Также стандарт RS-232, по которому выполнены COM-порты, допускает подключение и отключение кабелей во время работы устройств (hot plug).

Описание

COM-порт (последовательный порт) – двунаправленный интерфейс, передающий данные в последовательном виде (бит за битом) по протоколу RS-232. Это довольно-таки распространённый протокол, применяемый для связи одного устройства (например, компьютера) с другими посредством проводов длиной до 30м. Уровни логических сигналов здесь отличаются от стандартных: уровень логической единицы – от +5 до +15В, уровень логического нуля – от -5 до -15В, что требует дополнительных преобразований схемы, но обеспечивает хорошую помехоустойчивость.

Рассмотрим 9-пинововый разъём (DB-9M). Ниже представлена его распиновка:

№ вывода Наименование Характер сигнала Сигнал
1 DCD Входной Data carrier detect
2 RxD Выходной Transmit data
3 TxD Входной Receive data
4 DTR Выходной Data terminal ready
5 GND - Ground
6 DSR Входной Data set ready
7 RTS Выходной Request to send
8 CTS Входной Clear to send
9 RI Входной Ring indicator

Больше всего нас будут интересовать пины 2 (передача данных),3 (приём данных) и 5 (земля). Это минимальный набор для возможности двухстороннего общения приборов.

Подробно останавливаться на описании протокола не буду. Для этого есть ГОСТ’ы и т.п. Поэтому мы пойдём дальше и поговорим о том, как же управлять этим зверем.

Применение

Как уже говорилось, уровни ЛС RS-232 отличаются от стандартных уровней ТТЛ. Следовательно, нам необходимо как-то преобразовывать величины напряжений. Т.е. сделать 5В из +15В и 0В из -15В (и наоборот). Один из способов (и, наверное, самый простой) – использование специальной микросхемы MAX232. Она проста в понимании и одновременно может преобразовывать два логических сигнала.

Ниже приведена схема её включения:


Думаю, трудностей быть не должно. Это один из вариантов использования этой микросхемы: передача данных с микроконтроллера на ЭВМ и наоборот. Передаваемый сигнал поступает на ножки Tx IN с одной стороны и на Rx IN с другой. Входные сигналы снимаются с Tx OUT и Rx OUT соответственно.

Программирование

Для начала поговорим о программировании портов на низком уровне. Так будет более правильно. Я очень много нервов потратил, разбираясь с этим интерфейсом, пока не начал вникать в принцип его работы на более низком уровне, нежели простая передача символов. Если будет понятно это, значит и с языками высокого уровня проблем не будет.

Ниже представлены адреса COM-портов, с которыми нам придётся работать:

Название порта Адрес IRQ
COM 1 3F8h 4
COM 2 2F8h 3
COM 3 3E8h 4
COM 4 2E8h 3

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

Адрес DLAB Чтение/Запись Аббревиатура Название регистра
+ 0 =0 Write Transmitter Holding Buffer
=0 Read Receiver Buffer
=1 Read/Write Divisor Latch Low Byte
+ 1 =0 Read/Write IER Interrupt Enable Register
=1 Read/Write Divisor Latch High Byte
+ 2 - Read IIR Interrupt Identification Register
- Write FCR FIFO Control Register
+ 3 - Read/Write LCR Line Control Register
+ 4 - Read/Write MCR Modem Control Register
+ 5 - Read LSR Line Status Register
+ 6 - Read MSR Modem Status Register
+ 7 - Read/Write Scratch Register

Первая колонка – адрес регистра относительно базового. Например, для COM1: адрес регистра LCR будет 3F8h+3=3FB. Вторая колонка – DLAB (Divisor Latch Access Bit) бит, определяющий разное назначение для одного и того же регистра.. Т.е. он позволяет оперировать 12-ю регистрами, используя всего 8 адресов. Например, если DLAB=1, то, обращаясь по адресу 3F8h, мы будем устанавливать значение младшего байта делителя частоты тактового генератора. Если же DLAB=0, то, обращаясь по тому же адресу, в этот регистр будет записан передаваемый или принятый байт.

“Нулевой” регистр

Ему соответствуют регистры приёма/передачи данных и установки коэффициента делителя частоты генератора. Как уже было сказано выше, если DLAB=0, то регистр используется для записи принимаемых/передаваемых данных, если же он равен 1, то устанавливается значение младшего байта делителя частоты тактового генератора. От значения этой частоты зависит скорость передачи данных. Старший байт делителя записывается в следующую ячейку памяти (т.е. для порта COM1 это будет 3F9h). Ниже приведена зависимость скорости передачи данных от коэффициента делителя:

Interrupt Enable Register (IER)

Если DLAB=0, то он используется как регистр управления прерываниями от асинхронного адаптера, если DLAB=1, то в нём задаётся старший байт делителя частоты тактового генератора.

Interrupt Identification Register (IIR)

Прерывание – это событие, при котором останавливается выполнение основной программы и начинается выполнение процедуры прерываний. Этот регистр определяет тип произошедшего прерывания.

Line Control Register (LCR)

Это управляющий регистр.

Бит 7 1 Divisor Latch Access Bit – задание скорости обмена данными
0 Обычнй режим (управление прерываниями, приём/передача данных)
Бит 6 Имитировать обрыв линии (посылает последовательность из нескольких нулей)
Биты 3 – 5 Бит 5 Бит 4 Бит 3 Выбор чётности
X X 0 No Parity
0 0 1 Odd Parity
0 1 1 Even Parity
1 0 1 High Parity (Sticky)
1 1 1 Low Parity (Sticky)
Бит 2 Кол-во стоп-битов
0 1 стоп-бит
1 2 стоп-бита при 6,7 или 8 бит данных или 1.5 стоп-бита при 5 битах данных.
Биты 0 And 1 Бит 1 Бит 0 Число битов данных
0 0 5 бит
0 1 6 бит
1 0 7 бит
1 1 8 бит

Проверка чётности подразумевает под собой передачу ещё одного бита – бита чётности. Его значение устанавливается таким образом, чтобы в пакете битов общее количество единиц (или нулей) было четно или нечетно, в зависимости от установки регистров порта. Этот бит служит для обнаружения ошибок, которые могут возникнуть при передаче данных из-за помех на линии. Приемное устройство заново вычисляет четность данных и сравнивает результат с принятым битом четности. Если четность не совпала, то считается, что данные переданы с ошибкой.

Стоп-бит означает окончание передачи данных.

Modem Control Register (MCR)

Регистр управления модемом.

Бит Значение
0 Линия DTR
1 Линия RTS.
2 Линия OUT1 (запасная)
3 Линия OUT2 (запасная)
4 Запуск диагностики при входе асинхронного адаптера, замкнутом на его выход.
5-7 Равны 0

Line Status Register (LSR)

Регистр, определяющий состояние линии.

Бит Значение
0 Данные получены и готовы для чтения, автоматически сбрасывается при чтении данных.
1 Ошибка переполнения. Был принят новый байт данных, а предыдущий ещё не был считан программой. Предыдущий байт потерен.
2 Ошибка чётности, сбрасывается после чтения состояния линии.
3 Ошибка синхронизации.
4 Обнаружен запрос на прерывание передачи "BREAK" – длинная строка нулей.
5 Регистр хранения передатчика пуст, в него можно записать новый байт для передачи.
6 Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи.
7 Тайм-аут (устройство не связано с компьютером).

Modem Status Register (MSR)

Регистр состояния модема.

Ну вот и всё. Оперируя этими регистрами, можно напрямую общаться с COM-портом, управлять передачей и приёмом данных. Если вам не хочется возиться с памятью, можно воспользоваться уже готовыми компонентами для различных сред программирования: C++, VB, Delphi, Pascal и т.д. Они интуитивно понятны, поэтому, думаю, здесь не стоит заострять на них внимание.

В системе «Орион» интерфейс RS-232 используется для подключения пульта контроля и управления «С2000»/«С2000М» к СОМ-порту компьютера с установленным на нем АРМ «Орион»/«Орион Про».
В системах, допускающих работу под управлением АРМ «Орион»/«Орион Про» без резервирования пультом «С2000»/«С2000М» (например, в системах охранной сигнализации или контроля доступа), интерфейс RS-232 используется для подключения преобразователя интерфейса «С2000-ПИ» или «ПИ-ГР» к СОМ-порту компьютера. К преобразователю, в свою очередь, подключаются приборы системы «Орион» по интерфейсу RS-485. RS-232 имеет следующие ограничения: максимальная длина – 15 м и соединение только типа «точка-точка», т.е. непосредственно подключить несколько пультов к одному СОМ-порту нельзя.
В простейшем случае к компьютеру подключается только один пульт. Эта схема приведена на рис.

Недостатком такой схемы является отсутствие гальванической изоляции между приборами и компьютером. Схема подключения пульта к компьютеру с использованием повторителя интерфейсов «С2000-ПИ», обеспечивающего гальваническую изоляцию, приведена на рис.

ВНИМАНИЕ! Во избежание гальванической связи между компьютером и приборами пульт, повторитель и приборы нельзя подключать к одному источнику питания. Питание на пульт и «С2000-ПИ» должно подаваться от отдельного источника.
Пульту должен быть присвоен сетевой адрес, и установлен режим «КОМПЬЮТЕР» для работы по интерфейсу RS-232.

С помощью преобразователей интерфейсов RS-232/RS-485 с автоматическим переключением приема/передачи (например, «С2000-ПИ») можно подключить несколько пультов к одному СОМ-порту компьютера. Один преобразователь следует подключить к СОМ-порту компьютера, остальные - к пультам по интерфейсу RS-232, а затем объединить преобразователи по интерфейсу RS-485 (см. схему на рис. 73). Кроме того, преобразователи обеспечат гальваническую изоляцию компьютера от пультов и приборов.
Для работы по интерфейсу RS-232 каждому пульту нужно задать уникальный сетевой адрес и режим «КОМПЬЮТЕР».
При использовании АРМ «Орион» к одному СОМ-порту можно подключить до 127 устройств. Либо это будет один пульт «С2000»/ «С2000М» и до 126 приборов, схема как на рисунках выше. Либо это будет несколько пультов с подключёнными приборами, как на рис.

При этом общее количество и пультов, и приборов не должно превышать 127. В такой системе все приборы и пульты должны иметь уникальные сетевые адреса от 1 до 127, т.е. адреса приборов, подключенных к разным пультам, не должны пересекаться.
При использовании АРМ «Орион Про» к каждому COM-порту можно подключить либо до 127 приборов (приборы подключаются через преобразователи интерфейсов «ПИ-ГР», «С2000-ПИ» или «C2000 USB»), либо до 127 пультов «С2000» или «С2000М». К каждому пульту при этом можно подключить до 127 приборов. При организации системы по второму варианту компьютер опрашивает не приборы, а пульты. Пульты, в свою очередь, опрашивают подключённые к ним приборы. Каждому пульту должен быть задан сетевой адрес (от 1 до 127). Адресация приборов в системе имеет 3 уровня (номер COM-порта, адрес пульта, адрес прибора), поэтому адреса приборов, подключённых к разным пультам, могут пересекаться, как и адреса пультов, подключённых к разным COM-портам компьютера. Максимальное количество устройств, подключаемых к одному компьютеру с «Оперативной задачей Орион Про», на сегодняшний день составляет 1024.
Как уже было сказано, такая схема применяется в случае, если к COM-порту нужно подключить несколько устройств. На текущий момент АРМ «Орион» поддерживает только один СОМ-порт. АРМ «Орион Про» поддерживает до 20 физических СОМ-портов и до 127 виртуальных СОМ-портов. При использовании АРМ «Орион Про» каждый пульт можно подключать к своему COM-порту (используя схему с гальванической изоляцией или без).

В настоящее время не все компьютеры имеют СОМ-порт. Для решения задачи подключения приборов системы «Орион» к компьютеру с АРМ можно применить USB-COM преобразователи, например, «USB-RS485», а также PCI-плату расширения портов. Основные достоинства данных PCI-плат:

  • возможность использовать до 8 COM-портов;
  • поддержка интерфейса RS-232/RS-485.

Специалистами компании «Болид» была протестирована плата расширения COM-портов MOXA CP 118U. Она позволяет подключать приборы по интерфейсу RS-485 напрямую к ПК с АРМ «Орион Про» (без использования преобразователя интерфейса), а также подключать несколько пультов (каждый к своему СОМ-порту).

Подключение приборов к компьютеру через пульты «С2000»/«С2000М» позволяет б|ольшую часть функций управления приборами переложить с АРМ на пульты. Здесь важно учитывать, что каждый пульт может управлять только подключёнными к нему приборами, поэтому взаимодействие приборов, подключённых к разным пультам, возможно только через АРМ. При неисправности компьютера каждый пульт будет управлять подключёнными к нему приборами в соответствие с запрограммированной в нем базой данных. То есть система распадается на несколько независимых подсистем.

Полученные от приборов сообщения сохраняются в кольцевом энергонезависимом буфере пультов, объем которого составляет 8000 событий (для «С2000М» вер.3.0х). При восстановлении работы компьютера эти сообщения будут вычитаны АРМ.

Допустим, в системе используется несколько приборов «С2000-КДЛ», релейных блоков «С2000-СП1», клавиатур «С2000-К» и блоков индикации «С2000-БИ». Причём из-за ограниченного размера базы данных пульта требуется использовать несколько пультов «С2000»/«С2000М». Каждый пульт организует взаимодействие только подключённых к нему приборов. В частности, он позволит отображать на блоках индикации состояния своих разделов, управлять этими разделами с клавиатур и с самого пульта, автоматически управлять релейными выходами своих блоков «С2000-СП1» от своих разделов. Взаимодействие приборов, подключённых к разным пультам, возможно только через АРМ. При отключении компьютера с работающим на нем АРМ эта связь нарушается. Поэтому если требуется, например, организовать релейный выход, который должен отрабатывать состояние всех шлейфов сигнализации системы, и этот выход должен работать при отключении компьютера, лучше его организовать путём монтажного объединения выходов каждой подсистемы (параллельного или последовательного, в зависимости от требуемой тактики работы выхода).

При подключении к АРМ нескольких подсистем следует использовать пульты «С2000М», так как при использовании пультов «С2000» будут следующие ограничения:

  1. Невозможно организовать централизованный контроль доступа;
  2. Управлять взятием/снятием с охраны разделов с клавиатур «С2000-К» и блока «С2000-4», прибора «С2000-КДЛ» и т.п. можно только в рамках одной подсистемы на пульте «С2000». Это означает, что с какой-либо клавиатуры «С2000-К» можно управлять взятием/снятием с охраны разделов того пульта, к которому подключена клавиатура. Управление с этой клавиатуры приборами, подключёнными к другим пультам, невозможно. Из оперативной задачи АРМ можно управлять взятием/снятием с охраны разделов всех подсистем. При использовании пульта «С2000М» первое ограничение снимается. Что касается второго, то можно управлять взятием/снятием с охраны разделов одной подсистемы с помощью всех приборов другой подсистемы, за исключением клавиатур «С2000-К». Например, используя считыватели устройств «С2000-4», «С2000-2», «С2000-КДЛ». Также можно управлять взятием/снятием с охраны разделов одной подсистемы с пульта «С2000М» другой подсистемы. Клавиатуры «С2000-К» так же, как и в первом случае, работают только в рамках своей подсистемы.

Помимо схемы, представленной на предыдущем рисунке, подключить несколько пультов «С2000М» к компьютеру с АРМ можно при помощи ЛВС и преобразователей «С2000-Ethernet».

Основными достоинствами ЛВС являются:

  • повсеместное использование сетей Ethernet;
  • высокая помехозащищенность;

Также при использовании «С2000-Ethernet» возможно объединение приборов ИСО «Орион» через глобальную сеть Internet используя VPN туннель.

Для трансляции по указной схеме необходима устойчивая связь между VPN шлюзами (зависит от характеристик выделенных каналов Internet).

В «С2000-Ethernet» имеется поддержка прямой передачи данных по ЛВС, т.е. на стороне ПК с АРМ используется только сеть Ethernet, а ПО формирует один виртуальный COM-порт для группы удаленных «C2000-Ethernet» (см. рис.). При этом повышается быстродействие и упрощается монтаж системы, т.к. на стороне АРМ нет необходимости использовать COM-порт.

Обращаем Ваше внимание на то, что развёрнутые протоколы испытаний устройств передачи данных по различным каналам связи, о которых дальше будет идти речь, с необходимыми настройками можно найти на сайте сайт в разделе «Техническая поддержка»/ «Рекомендации по применению».

Ещё одним вариантом подключения пульта «С2000М» к компьютеру с АРМ является использование волоконно-оптической линии связи и преобразователей «RS-FX-MM» (для многомодовых ВОЛС), «RS-FX-SM40» (для одномодовых ВОЛС).

Основные достоинства ВОЛС:

  • высокая помехозащищенность;
  • искро-взрывобезопасность;
  • высокая скорость передачи данных.

Компания «Болид» поставляет сертифицированные в соответствии с преобразователи информационных интерфейсов ИСО «Орион» в ВОЛС, которые могут применяться в том числе в системах АПС и пожарной автоматики. Максимальная длина передачи данных для преобразователя «RS-FX-MM» составляет 2 км, для преобразователя «RS-FX-SM40» - 40 км.

Организовать связь сетевого контроллера (компьютера с установленным АРМ «Орион»/ «Орион Про» или пульта «С2000»/«С2000М») с удаленными приборами ИСО «Орион» можно также с помощью стандартного цифрового канала связи в потоке Е1.

Основными достоинствами цифровых каналов связи являются:

  • высокая помехоустойчивость;
  • высокая степень защиты передаваемой информации;
  • высокая скорость передачи данных;
  • слабая зависимость качества передачи от длины линии связи.

Специалистами компании «Болид» была проверена работа системы «Орион» с применением мультиплексоров «ГМ-2» фирмы «Зелакс» для передачи сообщений по цифровому каналу связи в потоке Е1.

Это более новый, хотя тоже уже отмирающий способ. Так же, как LPTпоследовательныеCOMпорты тоже уже применяются все реже и безусловно в скором времени они выдут из употребления. Работать сCOMпортом значительно сложнее, чем сLPT. СтандартныйCOMпорт имеет гораздо меньше выводов. И прямое управление возможно лишь некоторыми из них. Использовать их не имеет смысла. Лучше тогда уж воспользоваться более богатым в этом смысле портомLPT. Передача информации вCOMпорте происходит всего по двум линиям. Это линияRxD(прием данных), и линияTxD(передача данных). Для передачи данных используется специальный протокол, который называетсяRS232. Большинство современных микроконтроллеров имеют встроенный интерфейс, совместимый сRS232. Это облегчает подключение. Однако есть одна трудность. Полноценный протоколRS232 предусматривает свой собственный стандарт уровней выходных и входных сигналов. Сигнал на выходеTxDCOM-порта принимает два значения: логическая единица - плюс 12В, логический ноль - минус 12В. Такой размах принят для уменьшения влияния помех. Такой же сигнал нужно подавать и на входRxD. Последовательный канал микроконтроллера поддерживает другие значения уровней сигнала. Там сигнал используются стандартные логические уровни. Логический ноль - 0В. Логическая единица – примерно +5В. Поэтому для связиCOMпорта и микроконтроллера необходимо согласовать уровни сигналов. Для этого обычно применяется специальная микросхема фирмыMAXIM. Это микросхема называетсяMAX232A. Это очень удобная в использовании микросхема. Она требует лишь одного напряжения питания: +5В. Внутри микросхема содержит два преобразователя, которые используются для получения необходимых для работы напряжений +12В и -12В.

3. Подключение при помощи usb порта

Несомненно, это самый перспективный способ подключения. В то же время и самый сложный с точки зрения программной реализации. USBпорт был специально разработан, как универсальный последовательный порт для подключения всех видов внешних периферийных устройств. При помощи этого порта к компьютеру могут подключаться внешние накопители на жестких дисках и на Флэш-памяти, джойстики, мышки, звуковые системы,WEB-камеры,MP3 плееры и даже внешниеTV-тюнеры. Действующий в настоящее время стандартUSBверсии 2.0 поддерживает передачу данных со скоростью от 1.5 Мбит/сек до 480 Мбит/сек. Сложность реализации этого способа состоит в том, что протоколUSB– это серьезный многоуровневый протокол передачи информации. Самый низкий уровень этого протокола определяет правила касающиеся формирования импульсов: длительность, размах, способ кодирования данных, методы синхронизации, методы проверки ошибок. На низком уровне так же определяется, как биты складываются в байты. Следующий, более высокий уровень касается передачи самих данных. Ведь передаются не просто байты. Из этих байтов складываются команды протоколаUSB. ПротоколUSBвысокого уровня – это набор команд, позволяющих опрашивать подключенные к порту внешние устройства, запрашивать у этих устройств информацию об их типе, названии, изготовителе, поддерживаемых режимах работы. Если вы работали сUSB, то наверно заметили, что при подключении кUSBнакопителя на жестком диске компьютер тот час же обнаружит его и в списке дисков появится еще один диск. При отключении накопителя от порта он тут же исчезнет из списка. При подключении звукового устройства, в списке звуковых устройств появится новое устройство. Так же происходит и при подключении фотоаппарата, сканера, джойстика и т.п. Все эти типы устройств портUSBраспознает автоматически потому, что в списке стандартных командUSBпротокола есть команды, позволяющие все это идентифицировать. Поэтому, устройство, подключаемое к компьютеру поUSBпорту должно уметь поддерживать весь этот протокол. Оно должно правильно отвечать на все запросы компьютера.

Но это не единственная проблема. Более серьезная проблема – слишком высокая скорость работы USBинтерфейса. Это так же накладывает определенные ограничения и дополнительные требования. Для подключения микроконтроллера к компьютеру по каналуUSBсуществует три способа. Рассмотрим их по порядку.

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

Последовательный порт, как и параллельный, появился задолго до появления персональных компьютеров архитектуры IBM PC. В первых персоналках COM-порт использовался для подсоединения периферийных устройств. Однако сфера его применения несколько отличалась от сферы применения параллельного порта. Если параллельный порт использовался в основном для подключения принтеров, то COM-порт (кстати, приставка COM – это всего лишь сокращение от слова communication) обычно применялся для работы с телекоммуникационными устройствами, такими, как модемы. Тем не менее, к порту можно подключить, например, мышь, а также другие периферийные устройства.

COM-порт, основные сферы применения:

  1. Подключение терминалов
  2. ~ внешних модемов
  3. ~ принтеров и плоттеров
  4. ~ мыши
  5. Прямое соединение двух компьютеров

В настоящее время сфера применения СОМ-порта значительно сократилась благодаря внедрению более быстрого и компактного, и, кстати, тоже последовательного, интерфейса USB. Почти вышли из употребления внешние модемы, рассчитанные на подключение к порту, а также «COM-овские» мыши. Да и редко кто теперь соединяет два компьютера при помощи нуль-модемного кабеля.

Тем не менее, в ряде специализированных устройств последовательный порт до сих используется. Можно найти его и на многих материнских платах. Дело в том, что по сравнению с USB COM-порт имеет одно важное преимущество – согласно стандарту последовательной передачи данных RS-232, он может работать с устройствами на расстоянии в несколько десятков метров, в то время как радиус действия кабеля USB, как правило, ограничен 5 метрами.

Принцип работы последовательного порта и его отличие от параллельного

В отличие от параллельного (LPT) порта, последовательный порт передает данные побитно по одной-единственной линии, а не по нескольким одновременно. Последовательности битов группируются в серии данных, начинающиеся стартовым битом и кончающиеся стоповым битом, а также битами контроля четности, использующимися для контроля ошибок. Отсюда происходит и еще одно английское название, которое имеет последовательный порт – Serial Port.

Последовательный порт имеет две линии, по которым передаются собственно данные – это линии для передачи данных от терминала (ПК) к коммуникационному устройству и обратно. Кроме того, существует еще несколько управляющих линий. Обслуживает Serial port специальная микросхема UART, которая способна поддерживать относительно высокую скорость передачи данных, достигающую 115 000 бод (байт/с). Правда, стоит отметить, что реальная скорость обмена информацией зависит от обоих коммуникационных устройств. Кроме того, в функции контроллера UART входит преобразование параллельного кода в последовательный и обратно.

Порт использует электрические сигналы сравнительного высокого напряжения – до +15 B и -15 В. Уровень логического нуля последовательного порта составляет +12 В, а логической единицы – -12 В. Такой большой перепад напряжений позволяет гарантировать высокую степень помехоустойчивости передаваемых данных. С другой стороны, используемые в Serial port высокие напряжения требуют сложных схемотехнических решений. Это обстоятельство также поспособствовало снижению популярности порта.

Последовательный интерфейс RS-232

Работа Serial port на ПК базируется на стандарте передачи данных для последовательных устройств RS-232. Этот стандарт описывает процесс обмена данными между телекоммуникационным устройством, например, модемом и компьютерным терминалом. Стандарт RS-232 определяет электрические характеристики сигналов, их назначение, длительность, а также размеры коннекторов и схему выводов для них. При этом RS-232 описывает лишь физический уровень процесса передачи данных и не касается используемых при этом транспортных протоколов, которые могут меняться в зависимости от используемого коммуникационного оборудования и программного обеспечения.

Стандарт RS-232 был создан в 1969 г, а его последняя версия, TIA 232, вышла в 1997 г. В настоящее время RS-232 считается устаревшим, однако большинство операционных систем до сих пор его поддерживает.

В современных компьютерах разъем Serial port представляет собой 9-штырьковый разъем типа «вилка» DB-9, хотя стандарт RS-232 описывает также разъем с 25–ю контактами ­– DB-25, который часто применялся на старых компьютерах. Разъем DB-9 обычно расположен на системной плате ПК, хотя в старых компьютерах он мог находиться на специальной мультикарте, вставляемой в слот расширения.

9- штырьковое гнездо DB-9 на материнской плате

Разъем DB-9 на кабеле подключаемого к порту устройства

В отличие от параллельного порта, разъемы с обеих сторон двустороннего последовательного кабеля идентичны. Помимо линий для передачи самих данных, порт содержит несколько служебных линий, по которым между терминалом (компьютером) и телекоммуникационным устройством (модемом) может передаваться управляющая информация. Хотя теоретически для работы последовательного порта достаточно лишь трех каналов – прием данных, передача данных и земля, практика показала, что наличие служебных линий делает связь более эффективной, надежной и, как следствие, более быстрой.

Назначение линий разъема Serial port DB-9 согласно RS-232 и их соответствие контактам разъема DB-25:

Контакт DB-9 Английское название Русское название Контакт DB-25
1 Data Carrier Detect Несущая обнаружена 8
2 Transmit Data Передаваемые данные 2
3 Receive Data Принимаемые данные 3
4 Data Terminal Ready Готовность терминала 20
5 Ground Земля 7
6 Data Set Ready Готовность передающего устройства 6
7 Request To Send Запрос на отправку данных 4
8 Clear To Send Передача данных разрешена 5
9 Ring Indicator Индикатор звонка 22

Конфигурирование и прерывания

Поскольку в компьютере может быть несколько последовательных портов (до 4), то в системе для них выделяется два аппаратных прерывания - IRQ 3 (COM 2 и 4) и IRQ 4 (COM 1 и 3) и несколько прерываний BIOS. Многие коммуникационные программы, а также встроенные модемы используют для своей работы прерывания и адресное пространство портов COM. При этом обычно применяются не реальные порты, а так называемые виртуальные порты, которые эмулируются самой операционной системой.

Как и в случае многих других компонентов материнской платы, параметры работы портов COM, в частности, значения прерываний BIOS, соответствующих аппаратным прерываниям, можно настроить через интерфейс BIOS Setup. Для этого используются такие опции BIOS, как COM Port, Onboard Serial Port, Serial Port Address, и т.п.

Заключение

Последовательный порт ПК в настоящее время не является широко используемым средством для ввода-вывода информации. Тем не менее, поскольку существует большое количество оборудования, прежде всего, телекоммуникационного назначения, созданного для работы с последовательным портом, а также благодаря некоторым достоинствам протокола последовательной передачи данных RS-232, последовательный интерфейс пока еще не следует списывать со счетов, как абсолютно устаревший рудимент архитектуры персонального компьютера.

В последнее время последовательный способ передачи данных вытесняет параллельный.
За примерами далеко ходить не надо: появление шин USB и SATA говорит само за себя.
И действительно, параллельную шину трудно масштабировать (удлинить шлейф, увеличить частоту тактирования шины), неудивительно, что технологии поворачиваются к параллельным шинам задней частью.

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

На сегодня существует великое множество различных интерфейсов последовательной передачи данных.
Кроме уже упомянутых USB и SATA еще можно вспомнить как минимум два широко известных стандарта RS-232 и MIDI (он же и GamePort).
Объединяет их все то же - последовательная передача каждого бита информации, или Serial Interface.
Преимуществ у подобных интерфейсов великое множество, и самое главное из них - малое количество соединительных проводов, а следовательно, меньшая цена.

Передача данных

Последовательную передачу данных можно реализовать двумя способами: асинхронным и синхронным.

Синхронная передача данных предполагает синхронизацию работы приемника и передатчика посредством включения тактовой информации в передаваемый сигнал или путем использования специальной синхро-линии.
Приемник и передатчик должны быть соединены специальным синхронизационным кабелем, который обеспечивает работу устройств на одной частоте.

Асинхронная передача подразумевает использование специальных битов, маркирующих начало и конец данных – стартового (логический ноль) и стопового (логическая единица) бита.
Также возможно использование специального бита четности, который определяет четное или нечетное количество передаваемых единичных битов (в зависимости от принятого соглашения).
На принимающей стороне проводится анализ этого бита, и если бит четности не соответствует количеству единичных битов, то пакет данных пересылается снова.

Стоит отметить, что такая проверка позволяет обнаружить ошибку только в том случае, если был передан неправильно только один бит, в случае, если неправильно передались несколько битов, эта проверка уже становится некорректной.
Посылка следующего пакета данных может происходить в любой момент после посылки стопового бита, и, естественно, должна начинаться со стартового бита.
Ничего не понятно?

Ну, если бы все компьютерные технологии были просты, то любая домохозяйка давно бы уже лепила параллельно с пельменями новые протоколы …
Попробуем взглянуть на процесс по-другому.
Данные передаются пакетами, примерно как IP пакеты, вместе с данными идут и информационные биты, количество этих битов может варьироваться от 2 до 3 с половиной.
С половиной?!
Да, ты не ослышался, именно с половиной!

Стоповый бит, а вернее передаваемый сигнал соответствующий стоповому биту, может иметь длительность большую, чем сигнал соответствующий биту-единице, но меньшую чем для двух битов.
Так вот, пакет всегда начинается со стартового бита, который всегда имеет значение ноль, после чего идут биты данных, потом бит четности, а потом и стоповый бит, всегда равный единице.
Потом через некоторый произвольный промежуток времени поход битов на Москву продолжается.

Такой способ передачи подразумевает, что приемник и передатчик должны работать с одной скоростью (ну, или почти с одной), иначе пришедшие биты данных приемник будет либо не успевать обрабатывать, либо принимать старый бит за новый.
Для того чтобы этого избежать, каждый бит стробируется, то есть посылается синхронно со специальным сигналом - «стробом», формируемым внутри прибора.
Существует ряд определенных скоростей работы асинхронных устройств - 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19 200, 38 400, 57 600 и 115 200 бит в секунду.

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

Теперь пару слов о загадочном термине «пакет данных».
Под пакетом в данном случае понимается набор битов, передаваемых между стартовым и стоповым битами.
Их число может изменяться от пяти до восьми.
Можно задаться вопросом, почему именно пять-восемь бит?
Почему бы не передать сразу, скажем, килобайт данных внутри пакета?

Ответ очевиден: передавая маленькие пакеты данных, мы пусть и проигрываем, отправляя с ними три служебных бита (от 50 до 30 процентов данных), зато если при передаче пакет будет испорчен, мы легко узнаем это (помнишь про бит четности?) и быстро передадим его снова.
А вот в килобайте данных ошибку обнаружить будет уже трудно, и передавать его будет гораздо сложнее.

В качестве примера асинхронного последовательного устройства передачи данных можно привести COM-порт компьютера, любимый модем с дизайном от Труссарди и мышь, подключаемую к этому же порту, которую недалекие секретарши почему-то все время стараются засунуть в PS/2.
Работают все эти устройства по интерфейсу RS-232, вернее по асинхронной его части, поскольку в стандарте описана и синхронная передача данных.