Аппаратные интерфейсы ПК. Энциклопедия

Гук Михаил Юрьевич

Глава 2

Последовательный интерфейс — СОМ-порт

 

 

Универсальный внешний последовательный интерфейс — СОМ-порт (Communications Port — коммуникационный порт) присутствует в PC начиная с первых моделей. Этот порт обеспечивает асинхронный обмен по стандарту RS-232C. СОМ-порты реализуются на микросхемах универсальных асинхронных приемопередатчиков (UART), совместимых с семейством i8250/16450/16550. Они занимают в пространстве ввода-вывода по 8 смежных 8-битных регистров и могут располагаться по стандартным базовым адресам 3F8h (COM1), 2F8h (COM2), 3E8h (COM3), 2E8h (COM4). Порты могут вырабатывать аппаратные прерывания IRQ4 (обычно используются для COM1 и COM3) и IRQ3 (для COM2 и COM4). С внешней стороны порты имеют линии последовательных данных передачи и приема, а также набор сигналов управления и состояния, соответствующий стандарту RS-232C. СОМ-порты имеют внешние разъемы-вилки (male — «папа») DB25P или DB9P, выведенные на заднюю панель компьютера (см. п. 2.1). Характерной особенностью интерфейса является применение «не ТТЛ» сигналов — все внешние сигналы порта двуполярные. Гальваническая развязка отсутствует — схемная земля подключаемого устройства соединяется со схемной землей компьютера. Скорость передачи данных может достигать 115 200 бит/с.

Компьютер может иметь до четырех последовательных портов COM1-COM4 (для машин класса AT типично наличие двух портов) с поддержкой на уровне BIOS. Сервис BIOS Int 14h обеспечивает инициализацию порта, ввод и вывод символа (не используя прерываний) и опрос состояния. Через Int 14h скорость передачи программируется в диапазоне 110-9600 бит/с (меньше, чем реальные возможности порта). Для повышения производительности широко используется взаимодействие программ с портом на уровне регистров, для чего требуется совместимость аппаратных средств СОМ-порта с программной моделью i8250/16450/16550.

Название порта указывает на его основное назначение — подключение коммуникационного оборудования (например, модема) для связи с другими компьютерами, сетями и периферийными устройствами. К порту могут непосредственно подключаться и периферийные устройств с последовательным интерфейсом: принтеры, плоттеры, терминалы и другие. СОМ-порт широко используется для подключения мыши, а также организации непосредственной связи двух компьютеров. К СОМ-порту подключают и электронные ключи.

Практически все современные системные платы (еще начиная с PCI-плат для процессоров 486) имеют встроенные адаптеры двух СОМ-портов. Один из портов может использоваться и для беспроводной инфракрасной связи с периферийными устройствами (IrDA). Существуют карты ISA с парой СОМ-портов, где они чаще всего соседствуют с LPT-портом, а также с контроллерами дисковых интерфейсов (FDC+IDE). Если возникает потребность в большом количестве последовательных интерфейсов, то в ПК можно установить специальные адаптеры-мультиплексоры. Это весьма дорогие карты, они выпускаются обычно на 4, 8, 12 и даже 16 портов. Такое большое число разъемов на заднюю стенку ПК вывести проблематично, и у мультиплексоров обычно имеется внешний блок с разъемами (и электроникой), соединяемый с адаптером кабелем с многоконтактными разъемами. BIOS мультиплексоры не поддерживает.

«Классический» СОМ-порт позволял осуществлять обмен данными только программно-управляемым способом, при этом для пересылки каждого байта процессору приходится выполнять несколько инструкций. Современные порты имеют FIFO-буферы данных и позволяют выполнять обмен по каналу DMA, существенно разгружая центральный процессор, что особенно важно на больших скоростях обмена.

 

2.1. Интерфейс RS-232C

Интерфейс RS-232C предназначен для подключения аппаратуры, передающей или принимающей данные (ООД — оконечное оборудование данных, или АПД — аппаратура передачи данных; DTE — Data Terminal Equipment), к оконечной аппаратуре каналов данных (АКД; DCE — Data Communication Equipment). В роли АПД может выступать компьютер, принтер, плоттер и другое периферийное оборудование. В роли АКД обычно выступает модем. Конечной целью подключения является соединение двух устройств АПД. Полная схема соединения приведена на рис. 2.1; интерфейс позволяет исключить канал удаленной связи вместе с парой устройств АКД, соединив устройства непосредственно с помощью нуль-модемного кабеля (рис. 2.2).

Рис. 2.1. Полная схема соединения по RS-232C

Рис. 2.2. Соединение по RS-232C нуль-модемным кабелем

Стандарт описывает управляющие сигналы интерфейса, пересылку данных, электрический интерфейс и типы разъемов. В стандарте предусмотрены асинхронный и синхронный режимы обмена, но СОМ-порты поддерживают только асинхронный режим. Функционально RS-232C эквивалентен стандарту МККТТ V.24/V.28 и стыку С2, но они имеют различные названия сигналов.

Стандарт RS-232C описывает несимметричные передатчики и приемники — сигнал передается относительно общего провода — схемной земли (симметричные дифференциальные сигналы используются в других интерфейсах — например, RS-422). Интерфейс не обеспечивает гальванической развязки устройств. Логической единице соответствует напряжение на входе приемника в диапазоне от -12 до -3 В. Для линий управляющих сигналов это состояние называется ON («включено»), для линий последовательных данных — MARK. Логическому нулю соответствует диапазон от +3 до +12 В. Для линий управляющих сигналов состояние называется OFF («выключено»), а для линий последовательных данных — SPACE. Диапазон от -3 до +3 В — зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения порога (рис. 2.3). Уровни сигналов на выходах передатчиков должны быть в диапазонах от -12 до -5 В и от +5 до +12 В для представления единицы и нуля соответственно. Разность потенциалов между схемными землями (SG) соединяемых устройств должна быть менее 2 В, при более высокой разности потенциалов возможно неверное восприятие сигналов.

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

ВНИМАНИЕ

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

Стандарт RS-232C регламентирует типы применяемых разъемов.

На аппаратуре АПД (в том числе на СОМ-портах) принято устанавливать вилки DB-25P или более компактный вариант — DB-9P. Девятиштырьковые разъемы не имеют контактов для дополнительных сигналов, необходимых для синхронного режима (в большинстве 25-штырьковых разъемах эти контакты не используются).

На аппаратуре АКД (модемах) устанавливают розетки DB-25S или DB-9S.

Рис. 2.3. Прием сигналов RS-232C

Это правило предполагает, что разъемы АКД могут подключаться к разъемам АПД непосредственно или через переходные «прямые» кабели с розеткой и вилкой, у которых контакты соединены «один в один». Переходные кабели могут являться и переходниками с 9 на 25-штырьковые разъемы (рис. 2.4).

Рис. 2.4. Кабели подключения модемов

Если аппаратура АПД соединяется без модемов, то разъемы устройств (вилки) соединяются между собой нуль-модемным кабелем (Zero-modem, или Z-modem), имеющим на обоих концах розетки, контакты которых соединяются перекрестно по одной из схем, приведенных на рис. 2.5.

Рис. 2.5. Нуль-модемный кабель: а — минимальный, б — полный

Если на каком-либо устройстве АПД установлена розетка — это почти 100 % того, что к другому устройству оно должно подключаться прямым кабелем, аналогичным кабелю подключения модема. Розетка устанавливается обычно на тех устройствах, у которых удаленное подключение через модем не предусмотрено.

В табл. 2.1 приведено назначение контактов разъемов СОМ-портов (и любой другой аппаратуры передачи данных АПД). Контакты разъема DB-25S определены стандартом EIA/TIA-232-E, разъем DB-9S описан стандартом EIA/TIA-574. У модемов (АКД) название цепей и контактов такое же, но роли сигналов (вход-выход) меняются на противоположные.

Таблица 2.1. Разъемы и сигналы интерфейса RS-232C

Обозначение цепи Контакт разъема № провода кабеля выносного разъёма PC Направление
СОМ-порт RS-232 V.24 Стык 2 DB-25Р DB-9Р 1 1 2 2 3 3 4 4 I/O
PG AA 101 1 5 (10) (10) (10) 1 -
SG AB 102 7 5 5 9 1 13 -
TD BA 103 2 3 3 5 3 3 O
RD BB 104 3 2 2 3 4 5 I
RTS CA 105 4 7 7 4 8 7 O
CTS CB 106 5 8 8 6 7 9 I
DSR CC 107 6 6 6 2 9 11 I
DTR CD 108/2 20 4 4 7 2 14 O
DCD CF 109 8 1 1 1 5 15 I
RI СЕ 125 22 9 9 8 6 18 I

1 Ленточный кабель 8-битных мультикарт.

2 Ленточный кабель 16-битных мультикарт и портов на системных платах.

3 Вариант ленточного кабеля портов на системных платах.

4 Широкий ленточный кабель к 25-контактному разъему.

Подмножество сигналов RS-232C, относящихся к асинхронному режиму, рассмотрим с точки зрения СОМ-порта PC. Для удобства будем пользоваться мнемоникой названий, принятой в описаниях СОМ-портов и большинства устройств (она отличается от безликих обозначений RS-232 и V.24). Напомним, что активному состоянию сигнала («включено») и логической единице передаваемых данных соответствует отрицательный потенциал (ниже -3 В) сигнала интерфейса, а состоянию «выключено» и логическому нулю — положительный (выше +3 В). Назначение сигналов интерфейса приведено в табл. 2.2. Нормальную последовательность управляющих сигналов для случая подключения модема к СОМ-порту иллюстрирует рис. 2.6.

Таблица 2.2. Назначение сигналов интерфейса RS-232C

Сигнал Назначение
PG Protected Ground — защитная земля, соединяется с корпусом устройства и экраном кабеля
SG Signal Ground — сигнальная (схемная) земля, относительно которой действуют уровни сигналов
TD Transmit Data — последовательные данные — выход передатчика
RD Receive Data — последовательные данные — вход приемника
RTS Request To Send — выход запроса передачи данных: состояние «включено» уведомляет модем о наличии у терминала данных для передачи. В полудуплексном режиме используется для управления направлением — состояние «включено» служит сигналом модему на переключение в режим передачи
CIS Clear To Send — вход разрешения терминалу передавать данные. Состояние «выключено» запрещает передачу данных. Сигнал используется для аппаратного управления потоками данных
DSR Data Set Ready — вход сигнала готовности от аппаратуры передачи данных (модем в рабочем режиме подключен к каналу и закончил действия по согласованию с аппаратурой на противоположном конце канала)
DTR Data Terminal Ready — выход сигнала готовности терминала к обмену данными. Состояние «включено» поддерживает коммутируемый канал в состоянии соединения
DCD Data Carrier Detected — вход сигнала обнаружения несущей удаленного модема
RI Ring Indicator — вход индикатора вызова (звонка). В коммутируемом канале этим сигналом модем сигнализирует о принятии вызова

Рис. 2.6. Последовательность управляющий сигналов интерфейса

1. Установкой DTR компьютер указывает на желание использовать модем.

2. Установкой DSR модем сигнализирует о своей готовности и установлении соединения.

3. Сигналом RTS компьютер запрашивает разрешение на передачу и заявляет о своей готовности принимать данные от модема.

4. Сигналом CTS модем уведомляет о своей готовности к приему данных от компьютера и передаче их в линию.

5. Снятием CTS модем сигнализирует о невозможности дальнейшего приема (например, буфер заполнен) — компьютер должен приостановить передачу данных.

6. Сигналом CTS модем разрешает компьютеру продолжить передачу (в буфере появилось место).

7. Снятие RTS может означать как заполнение буфера компьютера (модем должен приостановить передачу данных в компьютер), так и отсутствие данных для передачи в модем. Обычно в этом случае модем прекращает пересылку данных в компьютер.

8. Модем подтверждает снятие RTS сбросом CTS.

9. Компьютер повторно устанавливает RTS для возобновления передачи.

10. Модем подтверждает готовность к этим действиям.

11. Компьютер указывает на завершение обмена.

12. Модем отвечает подтверждением.

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

14. Модем сбросом DSR сигнализирует о разрыве соединения.

Из рассмотрения этой последовательности становятся понятными соединения DTR-DSR и RTS-CTS в нуль-модемных кабелях.

 

2.2. Родственные интерфейсы и преобразователи уровней

В последовательном интерфейсе далеко не всегда используют двуполярные сигналы RS-232C — это неудобно, хотя бы из-за необходимости использования двуполярного питания приемопередатчиков. Сами микросхемы вышеописанных приемопередатчиков UART работают с сигналами логики ТТЛ или КМОП; такие же сигналы используются, например, и в сервисных портах винчестеров и других устройств. Многие устройства (в том числе карманные ПК и мобильные телефоны) имеют внешний последовательный интерфейс с уровнями низковольтной логики. Конечно, сигналы обычной логики не имеют столь высокой помехоустойчивости, как RS-232C, но не всегда это и требуется.

Для взаимного преобразования уровней интерфейса RS-232C и логики специально выпускаются буферные микросхемы приемников (с гистерезисом) и передатчиков двуполярного сигнала. При несоблюдении правил заземления и коммутации они обычно становятся первыми жертвами «пиротехнических» эффектов. Раньше их нередко устанавливали в «кроватки», что облегчало их замену. Цоколевка популярных микросхем формирователей сигналов RS-232C приведена на рис. 2.7. Часто буферные схемы входят прямо в состав интерфейсных БИС. Это удешевляет изделие, экономит место на плате, но в случае аварии оборачивается крупными финансовыми потерями. Вывести из строя интерфейсные микросхемы замыканием сигнальных цепей маловероятно: ток короткого замыкания передатчиков обычно не превышает 20 мА.

Рис. 2.7. Формирователи сигналов RS-232C: а — приемник 1489 (А — вход RS-232, С — управление гистерезисом (ТТЛ), Y — выход ТТЛ); б — передатчик 1488 (А, В — входы ТТЛ, Y — выход RS-232, VDD = +12 В, VEE = -12 В); в — таблица состояния выходов передатчика (*1 В — логическая единица)

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

Когда требуется большая помехоустойчивость (дальность и скорость передачи), применяют иные электрические варианты последовательных интерфейсов: RS-422A (V.11, X.27), RS-423A (V.10, X.26), RS-485. На рис. 2.8 приведены схемы соединения приемников и передатчиков, а также показаны ограничения на длину линии (L) и максимальную скорость передачи данных (V). Несимметричные линии интерфейсов RS-232C и RS-423A имеют самую низкую защищенность от синфазной помехи, хотя дифференциальный вход приемника RS-423A позволяет в какой-то мере исправить ситуацию. Лучшие параметры имеют интерфейсы RS-422A и RS-485, работающие на симметричных линиях связи. В них для передачи каждого сигнала используются дифференциальные приемопередатчики с отдельной (витой) парой проводов для каждой сигнальной цепи.

Рис. 2.8. Стандарты последовательных интерфейсов

Интерфейсы EIA-RS-422 (ITU-T V.11, X.27) и EIA-RS-485 (ISO 8482) используют симметричную передачу сигнала и допускают как двухточечную, так и шинную топологию соединений. В них информативной является разность потенциалов между проводниками А и В. Если на входе приемника UA-UB>0,2 В (А положительнее В) — состояние «выключено» (space), UA-UB<-0,2 В (А отрицательнее В) — состояние «включено» (mark). Диапазон |UA-UB|≤0,2 В является зоной нечувствительности (гистерезис), защищающей от воздействия помех. На выходах передатчика сигналы UA и UB обычно переключаются между уровнями 0 и +5 В (КМОП) или +1 и +4 В (ТТЛ), дифференциальное выходное напряжение должно лежать в диапазоне 1,5–5 В. Выходное сопротивление передатчиков 100 Ом. Интерфейсы электрически совместимы между собой, хотя и имеют некоторые различия в ограничениях. Принципиальное отличие передатчиков RS-485 — возможность переключения в третье состояние. Передатчики RS-422/485 совместимы с приемниками RS-423. Основные параметры интерфейсов приведены в табл. 2.3, топологию соединений иллюстрирует рис. 2.9.

Таблица 2.3. Параметры интерфейсов RS-422 и RS-485

Параметр RS-422 RS-485
Порог срабатывания, |U A -U B |, В 0,2 0,2
Допустимое напряжение синфазной помехи, В¹ –6,8…+6,8 –6,8…+11,8
Допустимое напряжение на входах, В¹ –7…+7 –7…+12
Входное сопротивление приемника, кОм 4 12
Минимальное сопротивление нагрузки передатчика, Ом 100 60
Максимальное число узлов 1 передатчик +10 приемников 32 (передатчиков, приемников или их комбинаций)
Максимальная длина, м 1200 (100 кбит/с) 12 (10 Мбит/с) 1200 (100 кбит/с) 12 (10 Мбит/с)
Терминаторы, R=100 Ом На дальнем конце от передатчика На обоих концах
Ток короткого замыкания, мА <150 Ha шину GND <250 на шину с потенциалом -7…+12 В или между проводами А и В

¹ Напряжение измеряется относительно «схемной земли» узла.

Чтобы увеличить число узлов, можно повысить входное сопротивление приемников, но при этом снижается допустимая скорость или максимально возможная дальность передачи. Максимальная скорость передачи на коротких расстояниях (до 10 м) ограничивается быстродействием передатчиков (достижима частота 25 МГц). На средних расстояниях ограничение определяется емкостью кабеля (1200 бит/с — 25 нФ, 9600 бит/с — 30 нФ, 115 кбит/с — 250 пФ). Максимальная дальность (1200 м) ограничена сопротивлением петли постоянному току.

Рис. 2.9. Топология интерфейсов: а — RS-422, б — RS-485 четырехпроводный, в — RS-485 двухпроводный

Интерфейс RS-485 может быть в двух версиях: двухпроводной и четырехпроводной. Четырехпроводная версия (рис. 2.9, б) выделяет задающий узел (master), передатчик которого работает на приемники всех остальных. Передатчик задающего узла всегда активен — переход в третье состояние ему не нужен. Передатчики остальных ведомых (slave) узлов должны иметь тристабильные выходы, они объединяются на общей шине с приемником ведущего узла. В двухпроводной версии (рис. 2.9, в) все узлы равноправны.

В вырожденном случае — при двухточечном соединении — интерфейсы RS-485 и RS-422 эквивалентны, и третье состояние не используется.

Для определенности состояния покоя шины RS-485, когда нет активных передатчиков, на линию устанавливают активные терминаторы, «растягивающие» потенциалы проводов. В покое провод В должен иметь более положительный потенциал, чем А.

При многоточечном соединении необходимо организовать метод доступа к среде передачи. Чаще всего используют полинг (polling) — опрос готовности к передаче, выполняемый ведущим устройством, или передачу права доступа в соответствии с определенным (установленным) регламентом. Иногда используют и методы случайного доступа (аналогично Ethernet).

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

Рис. 2.10. Соединение «схемных земель» для интерфейсов RS-422 и RS-485

Интерфейс RS-422 часто используется для подключения периферийных устройств (например, принтеров). Интерфейс RS-485 популярен в качестве шин устройств промышленной автоматики.

Интерфейс «токовая петля» для представления сигнала использует не напряжение, а ток в двухпроводной линии, соединяющей приемник и передатчик.

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

Токовая петля обычно предполагает гальваническую развязку входных цепей приемника от схемы устройства. При этом источником тока в петле является передатчик (этот вариант называют активным передатчиком). Возможно и питание от приемника (активный приемник), при этом выходной ключ передатчика может быть также гальванически развязан с остальной схемой передатчика. Существуют упрощенные варианты без гальванической развязки, но это уже вырожденный случай интерфейса. Заметим, что интерфейс MIDI (см. п. 8.5.3) с «классической» токовой петлей несовместим.

Токовая петля с гальванической развязкой позволяет передавать сигналы на расстояния до нескольких километров, но при невысоких скоростях (выше 19 200 бит/с не используют, а на километровых расстояниях допустима скорость до 9600 бит/с и ниже). Допустимое расстояние определяется сопротивлением пары проводов и уровнем помех. Поскольку интерфейс требует пары проводов для каждого сигнала, обычно используют только два сигнала последовательного интерфейса (4-проводная линия). В случае двунаправленного обмена применяются только сигналы передаваемых и принимаемых данных, а для управления потоком используется программный метод XON/XOFF. Если двунаправленный обмен не требуется, применяют одну линию данных, а для управления потоком обратная линия задействуется для сигнала CTS (аппаратный протокол) или встречной линии данных (программный протокол). При надлежащем ПО одной токовой петлей можно обеспечить двунаправленную полудуплексную связь двух устройств. При этом каждый приемник «слышит» как сигналы передатчика на противоположной стороне канала, так и сигналы своего передатчика. Они расцениваются коммуникационными пакетами просто как эхо-сигнал. Для безошибочного приема передатчики должны работать поочередно.

Токовая петля позволяет использовать выделенные физические линии без модемов, но на малых скоростях. Иногда по токовой петле подключают терминалы с интерфейсом RS-232C, если не хватает штатной длины интерфейса или требуется гальваническая развязка. Преобразовать сигналы RS-232C в токовую петлю несложно — на рис. 2.11 приведена простейшая схема преобразователя применительно к подключению терминала. Для получения двуполярного сигнала, требуемого для входных сигналов СОМ-порта, применяется питание от интерфейса. Схема может быть усложнена для защиты оптронов от перегрузки и улучшения формы потенциальных сигналов. Допустимая скорость определяется и быстродействием применяемых оптронов (скорость 9600 бит/с достигается практически на любых оптронах).

Рис. 2.11. Преобразование интерфейса RS-232C в «токовую петлю»

 

2.3. Асинхронный режим передачи

Асинхронный режим передачи является байт-ориентированным (символьно-ориентированным): минимальная пересылаемая единица информации — один байт (один символ). Формат посылки байта иллюстрирует рис. 2.12. Передача каждого байта начинается со старт-бита, сигнализирующего приемнику о начале посылки, за которым следуют биты данных и, возможно, бит паритета (четности). Завершает посылку стоп-бит, гарантирующий паузу между посылками. Старт-бит следующего байта посылается в любой момент после стоп-бита, то есть между передачами возможны паузы произвольной длительности. Старт-бит, имеющий всегда строго определенное значение (логический 0), обеспечивает простой механизм синхронизации приемника по сигналу от передатчика. Подразумевается, что приемник и передатчик работают на одной скорости обмена. Внутренний генератор синхронизации приемника использует счетчик-делитель опорной частоты, обнуляемый в момент приема начала старт-бита. Этот счетчик генерирует внутренние стробы, по которым приемник фиксирует последующие принимаемые биты. В идеале стробы располагаются в середине битовых интервалов, что позволяет принимать данные и при незначительном рассогласовании скоростей приемника и передатчика. Очевидно, что при передаче 8 бит данных, одного контрольного и одного стоп-бита предельно допустимое рассогласование скоростей, при котором данные будут распознаны верно, не может превышать 5%. С учетом фазовых искажений и дискретности работы внутреннего счетчика синхронизации реально допустимо меньшее отклонение частот. Чем меньше коэффициент деления опорной частоты внутреннего генератора (чем выше частота передачи), тем больше погрешность привязки стробов к середине битового интервала, и требования к согласованности частот становятся более строгие. Чем выше частота передачи, тем больше влияние искажений фронтов на фазу принимаемого сигнала. Взаимодействие этих факторов приводит к повышению требований к согласованности частот приемника и передатчика с ростом частоты обмена.

Рис. 2.12. Формат асинхронной передачи RS-232C

Формат асинхронной посылки позволяет выявлять возможные ошибки передачи.

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

♦ Если во время, отведенное под стоп-бит, обнаружен уровень логического нуля, фиксируется ошибка стоп-бита.

♦ Если применяется контроль четности, то после посылки бит данных передается контрольный бит. Этот бит дополняет количество единичных бит данных до четного или нечетного в зависимости от принятого соглашения. Прием бай та с неверным значением контрольного бита приводит к фиксации ошибки.

♦ Контроль формата позволяет обнаруживать обрыв линии: как правило, при обрыве приемник «видит» логический нуль, который сначала трактуется как старт-бит и нулевые биты данных, но потом срабатывает контроль стоп-бита.

Для асинхронного режима принят ряд стандартных скоростей обмена: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 и 115200 бит/с. Иногда вместо единицы измерения «бит/с» используют «бод» (baud), но при рассмотрении двоичных передаваемых сигналов это некорректно. В бодах принято измерять частоту изменения состояния линии, а при недвоичном способе кодирования (широко применяемом в современных модемах) в канале связи скорости передачи бит (бит/с) и изменения сигнала (бод) могут отличаться в несколько раз.

Количество бит данных может составлять 5, 6, 7 или 8 (5- и 6-битные форматы распространены незначительно). Количество стоп-бит может быть 1, 1,5 или 2 («полтора бита» означает только длительность стопового интервала).

 

2.4. Управление потоком данных

Для управления потоком данных (Flow Control) могут использоваться два варианта протокола — аппаратный и программный. Иногда управление потоком путают с квитированием. Квитирование (handshaking) подразумевает посылку уведомления о получении элемента, в то время как управление потоком предполагает посылку уведомления о возможности или невозможности последующего приема данных. Зачастую управление потоком основано на механизме квитирования.

Аппаратный протокол управления потоком RTS/CTS (hardware flow control) использует сигнал CTS, который позволяет остановить передачу данных, если приемник не готов к их приему (рис. 2.13). Передатчик «выпускает» очередной байт только при включенной линии CTS. Байт, который уже начал передаваться, задержать сигналом CTS невозможно (это гарантирует целостность посылки). Аппаратный протокол обеспечивает самую быструю реакцию передатчика на состояние приемника. Микросхемы асинхронных приемопередатчиков имеют не менее двух регистров в приемной части — сдвигающий, для приема очередной посылки, и хранящий, из которого считывается принятый байт. Это позволяет реализовать обмен по аппаратному протоколу без потери данных.

Рис. 2.13. Аппаратное управление потоком

Аппаратный протокол удобно использовать при подключении принтеров и плоттеров, если они его поддерживают. При непосредственном (без модемов) соединении двух компьютеров аппаратный протокол требует перекрестного соединения линий RTS — CTS.

При непосредственном соединении у передающего терминала должно быть обеспечено состояние «включено» на линии CTS (соединением собственных линий RTS — CTS), в противном случае передатчик будет «молчать».

Применяемые в IBM PC приемопередатчики 8250/16450/16550 сигнал CTS аппаратно не отрабатывают, а только показывают его состояние в регистре MSR (см. п. 2.5). Реализация протокола RTS/CTS возлагается на драйвер BIOS Int 14h, и называть его «аппаратным» не совсем корректно. Если же программа, пользующаяся СОМ-портом, взаимодействует с UART на уровне регистров (а не через BIOS), то обработкой сигнала CTS для поддержки данного протокола она занимается сама. Ряд коммуникационных программ позволяет игнорировать сигнал CTS (если не используется модем), и для них не требуется соединение входа CTS с выходом даже своего сигнала RTS. Однако существуют и иные приемопередатчики (например, 8251), в которых сигнал CTS отрабатывается аппаратно. Для них, а также для «честных» программ, использование сигнала CTS на разъемах (а то и на кабелях) обязательно. Преимущество протокола RTS/CTS во времени реакции (по сравнению с программным методом XON/XOFF) остается лишь для буферированной (в режиме FIFO) передачи.

Программный протокол управления потоком XON/XOFF предполагает наличие двунаправленного канала передачи данных. Работает протокол следующим образом: если устройство, принимающее данные, обнаруживает причины, по которым оно не может их дальше принимать, оно по обратному последовательному каналу посылает байт-символ XOFF (13h). Противоположное устройство, приняв этот символ, приостанавливает передачу. Когда принимающее устройство снова становится готовым к приему данных, оно посылает символ XON (11h), приняв который противоположное устройство возобновляет передачу. Время реакции передатчика на изменение состояния приемника по сравнению с аппаратным протоколом увеличивается, по крайней мере, на время передачи символа (XON или XOFF) плюс время реакции программы передатчика на прием символа (рис. 2.14). Из этого следует, что данные без потерь могут приниматься только приемником, имеющим дополнительный буфер принимаемых данных и сигнализирующим о неготовности заблаговременно (имея в буфере свободное место).

Рис. 2.14. Программное управление потоком XON/XOFF

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

Кроме этих двух распространенных стандартных протоколов, поддерживаемых и ПУ, и ОС, существуют и другие.

 

2.5. Микросхемы асинхронных приемопередатчиков

В СОМ-портах преобразование параллельного кода в последовательный для передачи и обратное преобразование при приеме данных выполняют специализированные микросхемы UART (Universal Asynchronous Receiver-Transmitter — универсальный асинхронный приемопередатчик). Эти же микросхемы формируют и обрабатывают управляющие сигналы интерфейса. СОМ-порты IBM PC XT/AT базируются на микросхемах, совместимых на уровне регистров с UART i8250 — 8250/16450/16550А. Это семейство представляет собой усовершенствование начальной модели, направленное на повышение быстродействия, снижение потребляемой мощности и загрузки процессора при интенсивном обмене. Отметим, что:

♦ 8250 имеет ошибки (появление ложных прерываний), учтенные в XT BIOS;

♦ 8250А — ошибки исправлены, но в результате потеряна совместимость с BIOS; эта микросхема работает в некоторых моделях AT, но непригодна для скорости 9600 бит/с;

♦ 8250В — исправлены ошибки 8250 и 8250A, восстановлена ошибка в прерываниях — возвращена совместимость с XT BIOS; работает в AT под DOS (кроме скорости 9600 бит/с).

Микросхемы 8250x имеют невысокое быстродействие по обращениям со стороны системной шины. Они не допускают обращения к своим регистрам в смежных шинных циклах процессора — для корректной работы с ними требуется введение программных задержек между обращениями CPU. В компьютерах класса AT применяют микросхемы UART перечисленных ниже модификаций.

♦ 16450 — быстродействующая версия 8250 для AT. Ошибок 8250 и полной совместимости с XT BIOS не имеет.

♦ 16550 — развитие 16450. Может использовать канал DMA для обмена данными. Имеет FIFO-буфер, но некорректность его работы не позволяет им воспользоваться.

♦ 16550А — имеет работающие 16-байтные FIFO-буферы приема и передачи и возможность использования DMA. Именно этот тип UART должен применяться в AT при интенсивных обменах на скоростях 9600 бит/с и выше. Совместимость с этой микросхемой обеспечивает большинство микросхем контроллеров портов ввода-вывода, входящих в современные чипсеты.

Микросхемы UART 16550А с программной точки зрения представляют собой набор регистров, доступ к которым определяется адресом (смещением адреса регистра относительно базового адреса порта) и значением бита DLAB (бита 7 регистра LCR). В адресном пространстве микросхема занимает 8 смежных адресов. Список регистров UART 16550A и способы доступа к ним приведены в табл. 2.4. Микросхемы 8250 отличаются отсутствием регистра FCR и всех возможностей FIFO и DMA.

Таблица 2.4. Регистры UART 16550A

Доступ Регистр Чтение/запись R/W
Смещение DLAB Имя Название
0h 0 THR Transmit Holding Register WO
0h 0 RBR Receiver Buffer Register RO
0h 1 DLL Divisor Latch LSB R/W
1h 1 DIM Divisor Latch MSB R/W
1h 0 IER Interrupt Enable Register R/W
2h x IIR Interrupt Identification Register RO
2h x FOR FIFO Control Register WO
3h x LCR Line Control Register R/W
4h x MCR Modem Control Register R/W
5h x LSR Line Status Register R/W¹
6h x MSR Modem Status Register R/W¹
7h x SCR Scratch Pad Register R/W

¹ Некоторые биты допускают только чтение. Запись в регистр может привести к сбою протокола.

ТHR — промежуточный регистр данных передатчика (только для записи). Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS. Бит 0 передается (и принимается) первым. При длине посылки менее 8 бит старшие биты игнорируются.

RBR — буферный регистр принимаемых данных (только для чтения). Данные, принятые входным сдвигающим регистром, помещаются в регистр RBR, откуда они могут быть считаны процессором. Если к моменту окончания приема очередного символа предыдущий не был считан из регистра, фиксируется ошибка переполнения. При длине посылки менее 8 бит старшие биты в регистре имеют нулевое значение.

DLL — регистр младшего байта делителя частоты.

DLM — регистр старшего байта делителя частоты. Делитель определяется по формуле D=115200/V, где V — скорость передачи, бит/с. Входная частота синхронизации 1,8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.

IER — регистр разрешения прерываний. Единичное значение бита разрешает прерывание от соответствующего источника.

Назначение бит регистра IER:

♦ биты [7:4]=0 — не используются;

♦ бит 3 — Mod_IE — по изменению состояния модема (любой из линий CTS, DSR, RI, DCD);

♦ бит 2 — RxL_IЕ — по обрыву/ошибке линии;

♦ бит 1 — TxD_IE — по завершении передачи;

♦ бит 0 — RxD_IЕ — по приему символа (в режиме FIFO — прерывание по тайм-ауту).

IIR — регистр идентификации прерываний и признака режима FIFO (только для чтения). Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по четырехуровневой системе приоритетов. Порядок приоритетов (по убыванию): состояние линии, прием символа, освобождение регистра передатчика, состояние модема. При возникновении условий прерывания UART указывает на источник с высшим приоритетом до тех пор, пока он не будет сброшен соответствующей операцией. Только после этого будет выставлен запрос с указанием следующего источника. Ниже описано назначение бит регистра IIR.

♦ Биты [7:6] — признак режима FIFO:

 • 11 — режим FIFO 16550A;

 • 10 — режим FIFO 16550;

 • 00 — обычный.

♦ Биты [5:4] — не используются.

♦ Бит 3 — прерывание по тайм-ауту приема в режиме FIFO (в буфере есть символы для считывания).

♦ Биты [2:1] — причина прерывания с наивысшим приоритетом (в обычном, не FIFO-режиме):

 • 11 — ошибка/обрыв линии, сброс выполняется чтением регистра состояния линии;

 • 10 — принят символ, сброс выполняется чтением данных;

 • 01 — передан символ (регистр THR пуст), сброс выполняется записью данных;

 • 00 — изменение состояния модема; сброс выполняется чтением регистра состояния модема.

♦ Бит 0 — признак необслуженного запроса прерывания (1 — нет запроса, 0 — есть запрос).

В режиме FIFO причину прерывания идентифицируют биты [3:1].

♦ 011 — ошибка/обрыв линии. Сброс выполняется чтением регистра состояния линии.

♦ 010 — принят символ. Сброс выполняется чтением регистра данных приемника.

♦ 110 — индикатор тайм-аута (за 4-кратный интервал времени символа не передано и не принято ни одного символа, хотя в буфере имеется, по крайней мере, один). Сброс выполняется чтением регистра данных приемника.

♦ 001 — регистр THR пуст. Сброс выполняется записью данных.

♦ 000 — изменение состояния модема (CIS, DSR, RI или DCD). Сброс выполняется чтением регистра MSR.

FCR — регистр управления FIFO (только для записи). Ниже описано назначение бит регистра FCR:

♦ Биты [7:6] — ITL (Interrupt Trigger Level) — уровень заполнения FIFO-буфера, при котором вырабатывается прерывание:

 • 00 — 1 байт (по умолчанию);

 • 01 — 4 байта;

 • 10 — 8 байт;

 • 11–14 байт.

♦ Биты [5:4] зарезервированы.

♦ Бит 3 — разрешение операций DMA.

♦ Бит 2 — RESETTF (Reset Transmitter FIFO) — сброс счетчика FIFO-передатчика (записью единицы; сдвигающий регистр не сбрасывается).

♦ Бит 1 — RESETRF (Reset Receiver FIFO) — сброс счетчика FIFO-приемника (записью единицы; сдвигающий регистр не сбрасывается).

♦ Бит 0 — TRFIFOE (Transmit And Receive FIFO Enable) — разрешение (единицей) режима FIFO для передатчика и приемника. При смене режима FIFO-буферы автоматически очищаются.

LCR — регистр управления линией (настройки параметров канала). Ниже описано назначение бит регистра LCR.

♦ Бит 7 — DLAB (Divisor Latch Access Bit) — управление доступом к делителю частоты.

♦ Бит 6 — BRCON (Break Control) — формирование обрыва линии (посылка нулей) при BRCON=1.

♦ Бит 5 — STICPAR (Sticky Parity) — принудительное формирование бита паритета:

 • 0 — контрольный бит генерируется в соответствии с паритетом выводимого символа;

 • 1 — постоянное значение контрольного бита: при EVENPAR=1 — нулевое, при EVENPAR=0 — единичное.

♦ Бит 4 — EVENPAR (Even Parity Select) — выбор типа контроля: 0 — нечетность, 1 — четность.

♦ Бит 3 — PAREN (Parity Enable) — разрешение контрольного бита:

 • 1 — контрольный бит (паритет или постоянный) разрешен;

 • 0 — контрольный бит запрещен.

♦ Бит 2 — STOPВ (Stop Bits) — количество стоп-бит:

 • 0–1 стоп-бит;

 • 1–2 стоп-бита (для 5-битного кода стоп-бит будет иметь длину 1,5 бит).

♦ Биты [1:0] — SERIALDB (Serial Data Bits) — количество бит данных:

 • 00 — 5 бит;

 • 01 — 6 бит;

 • 10 — 7 бит;

 • 11 — 8 бит.

MCR — регистр управления модемом. Ниже описано назначение бит регистра MCR.

♦ Биты [7:5]=0 — зарезервированы.

♦ Бит 4 — LME (Loopback Mode Enable) — разрешение режима диагностики:

 • 0 — нормальный режим;

 • 1 — режим диагностики (см. ниже).

♦ Бит 3 — IE (Interrupt Enable) — разрешение прерываний с помощью внешнего выхода OUT2; в режиме диагностики поступает на вход MSR.7:

 • 0 — прерывания запрещены;

 • 1 — прерывания разрешены.

♦ Бит 2 — OUT1C (OUT1 Bit Control) — управление выходным сигналом 1 (не используется); в режиме диагностики поступает на вход MSR.6.

♦ Бит 1 — RTSC (Request To Send Control) — управление выходом RTS; в режиме диагностики поступает на вход MSR.4:

 • 0 — активен (-V);

 • 1 — пассивен (+V).

♦ Бит 0 — DTRC (Data Terminal Ready Control) — управление выходом DTR; в режиме диагностики поступает на вход MSR.5:

 • 0 — активен (-V);

 • 1 — пассивен (+V).

LSR — регистр состояния линии (точнее, состояния приемопередатчика). Ниже описано назначение бит регистра LSR.

♦ Бит 7 — FIFOE (FIFO Error Status) — ошибка принятых данных в режиме FIFO (буфер содержит хотя бы один символ, принятый с ошибкой формата, паритета или обрывом). В не FIFO-режиме всегда 0.

♦ Бит 6 — TEMPT (Transmitter Empty Status) — регистр передатчика пуст (нет данных для передачи ни в сдвиговом регистре, ни в буферных регистрах THR или FIFO).

♦ Бит 5 — THRE (Transmitter Holding Register Empty) — регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO-буфере передачи. Может являться источником прерывания.

♦ Бит 4 — BD (Break Detected) — индикатор обрыва линии (вход приемника находится в состоянии 0 не менее чем время посылки символа).

♦ Бит 3 — FE (Framing Error) — ошибка кадра (неверный стоп-бит).

♦ Бит 2 — РЕ (Parity Error) — ошибка контрольного бита (паритета или фиксированного).

♦ Бит 1 — ОЕ (Overrun Error) — переполнение (потеря символа). Если прием очередного символа начинается до того, как предыдущий выгружен из сдвигающего регистра в буферный регистр или в регистр FIFO, прежний символ в сдвигающем регистре теряется.

♦ Бит 0 — DR (Receiver Data Ready) — принятые данные готовы (в DHR или FIFO- буфере). Сброс — чтением приемника.

Индикаторы ошибок — биты [4:1] — сбрасываются после чтения регистра LSR. В режиме FIFO признаки ошибок хранятся в FIFO-буфере вместе с каждым символом. В регистре они устанавливаются (и вызывают прерывание) в тот момент, когда символ, принятый с ошибкой, находится на вершине FIFO (первый в очереди на считывание). В случае обрыва линии в FIFO заносится только один «обрывной» символ, и UART ждет восстановления и последующего старт-бита.

MSR — регистр состояния модема. Ниже описано назначение бит регистра MSR:

♦ Бит 7 — DCD (Data Carrier Detect) — состояние линии DCD:

 • 0 — активна (-V);

 • 1 — пассивна (+V).

♦ Бит 6 — RI (Ring Indicator) — состояние линии RI:

 • 0 — активна (-V);

 • 1 — пассивна (+V).

♦ Бит 5 — DSR (Data Set Ready) — состояние линии DSR:

 • 0 — активна (-V);

 • 1 — пассивна (+V).

♦ Бит 4 — CTS (Clear To Send) — состояние линии CTS:

 • 0 — активна (-V);

 • 1 — пассивна (+V).

♦ Бит 3 — DDCD (Delta Data Carrier Detect) — изменение состояния DCD.

♦ Бит 2 — ТЕRI (Trailing Edge Of Ring Indicator) — спад огибающей RI (окончание звонка).

♦ Бит 1 — DDSR (Delta Data Set Ready) — изменение состояния DSR.

♦ Бит 0 — DCTS (Delta Clear To Send) — изменение состояния CTS.

Признаки изменения (биты [3:0]) сбрасываются по чтению регистра.

SCR — рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 отсутствует).

В диагностическом режиме (при LME=1) внутри UART организуется внутренняя «заглушка»:

♦ выход передатчика переводится в состояние логической единицы;

♦ вход приемника отключается;

♦ выход сдвигающего регистра передатчика логически соединяется со входом приемника;

♦ входы DSR, CIS, RI и DCD отключаются от входных линий и внутренне управляются битами DTRC, RISC, OUT1C, IE;

♦ выходы управления модемом переводятся в пассивное состояние (логический ноль).

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

 

2.6. Системная поддержка СОМ-портов

СОМ-порты поддерживаются сервисом BIOS Int 14h, который обеспечивает следующие функции:

♦ инициализация (установка скорости обмена и формата посылок; запрет источников прерываний) — на сигналы DTR и RTS влияния не оказывает (после аппаратного сброса они пассивны);

♦ вывод символа — активируются сигналы DTR и RTS, и после освобождения регистра THR в него помещается выводимый символ;

♦ ввод символа — активируется только сигнал DTR (RTS переходит в пассивное состояние), и ожидается готовность принятых данных;

♦ опрос состояния модема и линии (чтение регистров MSR и LSR).

Аппаратные прерывания не используются, ожидание готовности ввода и вывода ограничивается по тайм-ауту. Готовность можно быстро проверить опросом состояния.

В процессе начального тестирования POST BIOS проверяет наличие последовательных портов (регистров UART 8250 или совместимых) по стандартным адресам и помещает базовые адреса обнаруженных портов в ячейки BIOS Data Area 0:0400, 0402, 0404, 0406. Эти ячейки хранят адреса портов с логическими именами СOМ1-COM4. Нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:047C, 047D, 047E, 047F заносятся константы, задающие тайм-ауты для портов.

Обнаруженные порты инициализируются на скорость обмена 2400 бит/с, 7 бит данных с контролем на четность (even), 1 стоп-бит. Управляющие сигналы интерфейса DTR и RTS переводятся в исходное состояние («выключено» — положительное напряжение).

 

2.7. Конфигурирование СОМ-портов

Компьютер может иметь до четырех последовательных портов COM1-COM4; для машин класса AT типично наличие двух портов. Управление последовательным портом разделяется на два этапа — предварительное конфигурирование (Setup) аппаратных средств порта и текущее (оперативное) переключение режимов работы прикладным или системным ПО. Конфигурирование СОМ-порта зависит от его исполнения. Порт на плате расширения конфигурируется джамперами на самой плате. Порт на системной плате конфигурируется через BIOS Setup.

Конфигурированию подлежат перечисленные ниже параметры:

♦ Базовый адрес, который для портов COM1-СОМ4 обычно имеет значение 3F8h, 2F8h, 3E8h и 2E8h. При инициализации BIOS проверяет наличие портов по адресам именно в этом порядке и присваивает обнаруженным портам логические имена COM1, COM2, COM3 и COM4. Для портов COM3 и COM4 возможны альтернативные адреса 3E0h, 338h и 2E0h, 238h соответственно. Для PS/2 стандартными для портов COM3-СОМ8 являются адреса 3220h, 3228h, 4220h, 4228h, 5220h и 5228h соответственно.

♦ Используемая линия запроса прерывания: для СОМ 1 и COM3 обычно используется IRQ4 или IRQ11, для COM2 и COM4 — IRQ3 или IRQ10. В принципе номер прерывания можно назначать в произвольных сочетаниях с базовым адресом (номером порта), но некоторые программы и драйверы (например, драйверы последовательной мыши) настроены на стандартные сочетания. Каждому порту, нуждающемуся в аппаратном прерывании, назначают отдельную линию, не совпадающую с линиями запроса прерываний других устройств. Прерывания необходимы для портов, к которым подключаются устройства ввода, UPS или модемы. При подключении принтера или плоттера прерываниями пользуются только многозадачные ОС (не всегда), и этот дефицитный ресурс PC можно сэкономить. Также прерывания обычно не задействуют при связи двух компьютеров нуль-модемным кабелем. Возможность разделяемого использования одной линии запроса несколькими портами (или ее разделения с другими устройствами) зависит от реализации аппаратного подключения и ПО. При использовании портов, установленных на шину ISA, разделяемые прерывания обычно не работают.

♦ Канал DMA (для микросхем UART 16450/16550, расположенных на системной плате) — разрешение использования и номер канала DMA. Режим DMA при работе с СОМ-портами используют редко.

 

2.8. Использование СОМ-портов

СОМ-порт широко применяется для подключения различных периферийных и коммуникационных устройств, связи с различным технологическим оборудованием, объектами управления и наблюдения, программаторами, внутрисхемными эмуляторами и прочими устройствами, используя протокол RS-232C.

СОМ-порты чаще всего применяют для подключения манипуляторов (мышь, трекбол). В этом случае порт используется в режиме последовательного ввода. Мышь с последовательным интерфейсом — Serial Mouse — может подключаться к любому исправному порту. Для согласования разъемов порта и мыши возможно применение переходника DB-9S-DB-25P или DB-25S-DB-9P. Для мыши требуется прерывание, для порта COM1 — IRQ4, для COM2 — IRQ3. То, что для использования мыши порт COM1 должен использовать прерывание IRQ4, является особенностью ее драйвера, но для пользователя важен сам факт ограничения. Каждое событие — перемещение мыши или нажатие-отпускание кнопки — кодируется двоичной посылкой по интерфейсу RS-232C. Применяется асинхронная передача; двуполярное питание обеспечивается от управляющих линий интерфейса.

Для подключения внешних модемов используется полный (9-проводный) кабель АПД — АКД, схема которого приведена на рис. 2.4. Этот же кабель используется для согласования разъемов (по количеству контактов); возможно применение переходников 9–25, предназначенных для мыши. Для работы коммуникационного ПО обычно требуются прерывания, но здесь есть свобода выбора номера (адреса) порта и линии прерывания. Если предполагается работа на скоростях 9600 бит/с и выше, то СОМ-порт должен быть реализован на микросхеме UART 16550А или совместимой. Возможности работы с использованием FIFO-буферов и обмена по каналам DMA зависят от коммуникационного ПО.

Для связи двух компьютеров, удаленных друг от друга на небольшое расстояние, используют и непосредственное соединение их СОМ-портов нуль-модемным кабелем (см. рис. 2.5). Программы типа Norton Commander или Interlnk MS-DOS позволяют обмениваться файлами со скоростью до 115,2 Кбит/с без применения аппаратных прерываний. Это же соединение может использоваться и сетевым пакетом Lantastic, предоставляющим более развитый сервис, и средствами ОС Windows.

СОМ-порт позволяет выполнять подключение электронных ключей (Security Devices), предназначенных для защиты от нелицензированного использования ПО. Эти устройства могут быть как «прозрачными» (обеспечивающими возможность подключения периферии через тот же порт), так и полностью занимающими порт.

СОМ-порт при наличии соответствующей программной поддержки позволяет превратить PC в терминал, эмулируя систему команд распространенных специализированных терминалов (VT-52, VT-100 и т.д.). Простейший терминал получается, если замкнуть друг на друга функции BIOS обслуживания СОМ-порта (Int 14h), телетайпного вывода (Int 10h) и клавиатурного ввода (Int 16h). Однако такой терминал будет работать лишь на малых скоростях обмена (если, конечно, его делать не на Pentium), поскольку функции BIOS хоть и универсальны, но не слишком быстры.

СОМ-порт может использоваться и как двунаправленный интерфейс, у которого имеется три программно-управляемых выходных линии (TD, DTR, RTS) и четыре программно-читаемых входных линии (CIS, DSR, DCD, RI) с двуполярными сигналами. Их можно использовать, например, для программной реализации синхронных последовательных интерфейсов (см. п. 11.5) и других целей. Во времена АТ-286 была известна схема однобитного широтно-импульсного преобразователя, позволяющего записывать звуковой сигнал на диск PC, используя входную линию СОМ-порта. Воспроизведение этой записи через обычный динамик PC позволяло передать речь.

 

2.9. СОМ-порт и PnP

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

Рис. 2.15. Запрос идентификатора устройства PnP

1. Порт инициализируется с состоянием линий DTR=ON, RTS=OFF, TXD=Mark — состояние покоя (Idle).

2. Некоторое время (0,2 с) ожидается появление сигнала DSR, которое указало бы на наличие устройства, подключенного к порту. В простейшем случае устройство имеет на разъеме перемычку DTR-DSR, обеспечивающую указанный ответ. Если устройство обнаружено, выполняются манипуляции управляющими сигналами DTR и RTS для получения информации от устройства. Если ответ не получен, ОС, поддерживающая динамическое реконфигурирование, периодически опрашивает состояние порта для обнаружения новых устройств.

3. Порт программируется на режим 1200 бит/с, 7 бит данных, без паритета, 1 стоп-бит, и на 0,2 с снимается сигнал DTR. После этого устанавливается DTR=1, а еще через 0,2 с устанавливается и RTS=1.

4. В течение 0,2 с ожидается приход первого символа от устройства. По приходу символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел, выполняется вторая попытка опроса (см. п. 5), несколько отличающаяся от первой.

5. На 0,2 с снимаются оба сигнала (DTR=0 и RTS=0), после чего они оба устанавливаются (DTR=1 и RTS=1).

6. В течение 0,2 с ожидается приход первого символа от устройства, по приходу символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел, то в зависимости от состояния сигнала DSR переходят к проверке отключения Verify Disconnect (при DSR=0) или в дежурное состояние Connect Idle (при DSR=1).

7. В дежурном состоянии Connect Idle устанавливается DTR=1, RTS=0, порт программируется на режим 300 бит/с, 7 бит данных, без паритета, 1 стоп-бит. Если в этом состоянии обнаружится DSR=0, ОС следует уведомить об отключении устройства.

Посимвольный прием идентификатора устройства имеет ограничения по тайм- ауту в 0,2 с на символ, а также общее ограничение в 2,2 с, позволяющее принять строку длиной до 256 символов. Строка идентификатора PnP должна иметь маркеры начала (28h или 08h) и конца (29h или 09h), между которыми располагается тело идентификатора в стандартизованном формате. Перед маркером начала может находиться до 16 символов, не относящихся к идентификатору PnP. Если за первые 0,2 с ожидания символа (шаг 4 или 6) маркер начала не пришел, или же сработал тайм-аут, а маркер конца не получен, или же какой-либо символ принят с ошибкой, происходит переход в состояние Connect Idle. Если получена корректная строка идентификатора, она передается ОС.

Для проверки отключения (Verify Disconnect) устанавливается DTR=1, RTS=0 и через 5 с проверяется состояние сигнала DSR. При DSR=1 происходит переход в состояние Connect Idle (см. п. 7), при DSR=0 происходит переход в состояние Disconnect Idle, в котором система может периодически опрашивать сигнал DSR для обнаружения подключения устройства.

Описанный механизм разрабатывался компанией Microsoft с учетом совместимости с устройствами, не относящимися к устройствам PnP, — он обеспечивает невозможность их вывода из строя и устойчивость системы к сообщениям, не являющимся PnP-идентификаторами. Например, обычная мышь Microsoft Mouse (не PnP) по включении питания от интерфейса ответит ASCII-символом «M» (трехкнопочная — строкой «M3»).

 

2.10. Неисправности и тестирование СОМ-портов

 

Неполадки с СОМ-портами случаются (выявляются) при установке новых портов или неудачном подключении внешних устройств.

 

2.10.1. Проверка конфигурирования

Тестирование последовательных портов (как и параллельных) начинают с проверки их опознавания системой. Список адресов установленных портов обычно появляется в таблице, выводимой BIOS перед загрузкой ОС. Список можно посмотреть с помощью тестовых программ или прямо в BIOS Data AREA с помощью отладчика.

Если BIOS обнаруживает меньше портов, чем установлено физически, значит, двум портам присвоен один адрес или установлен нестандартный адрес какого-либо порта. Проблемы могут возникать с адресами портов COM3 и COM4: не все версии BIOS будут искать порты по альтернативным адресам 3E0h, 338h, 2E0h и 238h; иногда не производится поиск по адресам 3E8h и 2E8h. Нумерация найденных портов, отображаемая в заставке, может вводить в заблуждение: если установлены два порта с адресами 3F8h и 3E8h, в заставке они могут называться COM1 и COM2, и по этим именам на них можно ссылаться. Однако те же порты в заставке могут называться COM1 и COM3 (поскольку 3E8h является штатным адресом для COM3), но попытка сослаться на порт COM3 будет неудачной, поскольку в данном случае адрес 3E8h будет находиться в ячейке 0:402h BIOS Data Area, соответствующей порту COM2, а в ячейке порта COM3 (0:404h) будет нуль — признак отсутствия такового порта. «Объяснить» системе, где какой порт, можно вручную с помощью любого отладчика, занеся правильные значения базовых адресов в ячейки BIOS Data Area (это придется делать каждый раз после перезагрузки ОС перед использованием «потерянного» порта). Существуют тестовые утилиты, позволяющие находить порты (например, Port Finder).

Если двум портам назначен один и тот же адрес; тестовая программа обнаружит ошибки порта только с помощью внешней заглушки (External LoopBack). Программное тестирование порта без заглушки не покажет ошибок, поскольку при этом включается диагностический режим (см. описание UART) и конфликтующие (по отдельности исправные) порты будут работать параллельно, обеспечивая совпадение считываемой информации. В «реальной жизни» нормальная работа конфликтующих портов невозможна. Разбираться с конфликтом адресов удобно, последовательно устанавливая порты и наблюдая за адресами, появляющимися в списке.

Если физически установлен только один порт и его не обнаруживает BIOS, причины те же, что с LPT-портом: либо он отключен при конфигурировании, либо вышел из строя. Неисправность может устраниться при вынимании/вставке платы адаптера в слот системной шины.

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

 

2.10.2. Функциональное тестирование

В первом приближении СОМ-порт можно проверить диагностической программой (CheckIt) без использования заглушек. Этот режим тестирования проверяет микросхему UART (внутренний диагностический режим) и вырабатывание прерываний, но не входные и выходные буферные микросхемы, которые являются более частыми источниками неприятностей. Если тест не проходит, причину следует искать или в конфликте адресов/прерываний, или в самой микросхеме UART.

Для более достоверного тестирования рекомендуется использовать внешнюю заглушку, подключаемую к разъему СОМ-порта (рис. 2.16). В отличие от LPT-порта у СОМ-порта количество входных сигналов превышает количество выходных, что позволяет выполнить полную проверку всех цепей. Заглушка соединяет выход приемника с входом передатчика. Обязательная для всех схем заглушек перемычка RTS-CTS позволяет работать передатчику — без нее символы не смогут передаваться. Выходной сигнал DTR обычно используют для проверки входных линий DSR, DCD и RI.

Рис. 2.16. Заглушка для проверки СОМ — портов (LoopBack для CheckIt и Norton Diagnostics)

Если тест с внешней заглушкой не проходит, причину следует искать во внешних буферах, их питании или в ленточных кабелях, служащих для подключения внешних разъемов. Здесь может помочь осциллограф или вольтметр. Последовательность проверки может быть следующей:

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

2. Проверить напряжение на выходах TD, RTS и DTR: после аппаратного сброса на выходе TD должен быть отрицательный потенциал около -12 В (по край ней мере, ниже -5 В), а на выходах RTS и DTR — такой же положительный. Если этих потенциалов нет, возможна ошибка подключения разъема к плате через ленточный кабель. Распространенные варианты:

 • ленточный кабель не подключен;

 • ленточный кабель подключен неправильно (разъём перевернут или встав лен со смещением);

 • раскладка ленточного кабеля не соответствует разъему платы.

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

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

3. Соединив контакты линий RTS и CTS (или установив заглушку), следует по пытаться вывести небольшой файл на СОМ-порт (например, командой COPY С:\AUTOEXEC.ВАТ COM1:). С исправным портом эта команда успешно выполнится за несколько секунд с сообщением об успешном копировании. При этом потенциалы на выходах RTS и DTR должны измениться на отрицательные, а на выходе TD должна появиться пачка двуполярных импульсов с амплитудой более 5 В. Если потенциалы RTS и DTR не изменились, ошибка в буферных формирователях. Если на выходе RTS (и входе CTS) появился отрицательный потенциал, а команда COPY завершается с ошибкой, скорее всего, вышел из строя приемник линии CTS (или опять-таки ошибка в ленточном кабеле). Если команда COPY успешно проходит, а изменения на выходе TD не обнаруживаются (их можно увидеть стрелочным вольтметром, но оценить амплитуду импульсов не удастся), виноват буферный передатчик сигнала TD.

Замена микросхем приемников и передатчиков существенно облегчается, если они установлены в «кроватки».

Перед заменой следует с помощью осциллографа или вольтметра удостовериться в неисправности конкретной микросхемы. Если буферные элементы включены в состав интерфейсной БИС (что теперь весьма распространено), то такой порт ремонту не подлежит (по крайней мере, в обычных условиях). Неисправный СОМ-порт, установленный на системной плате, можно попытаться отключить в BIOS SETUP, но порт мог сгореть и вместе со схемой своего отключения — тогда он останется «живым мертвецом» в карте портов ввода-вывода и прерываний. Иногда он полностью выводит из строя системную плату.

Источниками ошибок могут являться разъемы и кабели. В разъемах встречаются плохие контакты, а кабели, кроме возможных обрывов, могут иметь плохие частотные характеристики. Частотные свойства кабелей обычно сказываются при большой длине (десятки метров) на высоких скоростях обмена (56 или 115 Кбит/с). При необходимости использования длинных кабелей на высоких скоростях сигнальные провода данных должны быть перевиты с отдельными проводами «схемной земли».

В ряде отечественных PC-совместимых (почти) компьютеров для последовательного интерфейса применялась микросхема КР580ВВ51 — аналог 18251. Однако эта микросхема является универсальным синхронно-асинхронным приемопередатчиком (УСАПП или USART — Universal Asynchronous Receiver-Transmitter). Совместимости с PC на уровне регистров СОМ-порта такие компьютеры не имеют. Хорошо, если у соответствующих компьютеров имеется «честный» драйвер BIOS Int 14h, а не заглушка, возвращающая состояние модема «всегда готов» и ничего не делающая.

 

2.10.3. Питание от интерфейса, или причины неработоспособности мыши

При подключении к СОМ-порту устройств с небольшим энергопотреблением возникает соблазн получить питание от выходных линий интерфейса. Если линии управления DTR и RTS не используются по прямому назначению, их можно задействовать как питающие с напряжением около 12 В. Ток короткого замыкания на «схемную землю» ограничен буферной микросхемой передатчика на уровне 20 мА. При инициализации порта эти линии переходят в состояние «выключено», то есть вырабатывают положительное напряжение. Линия TD в покое находится в состоянии логической единицы, так что на выходе вырабатывается отрицательное напряжение. Потенциалами линий можно управлять через регистры СОМ-порта (выход TD вырабатывает положительное напряжение, если установить бит BRCON). Питание можно получать и с сигнальных линий через выпрямительные диоды с использованием накопительных конденсаторов. При этом, конечно, следует учитывать, сколько времени выходной сигнал находится в нужном состоянии (чтобы накопленной энергии хватало).

Двуполярным питанием от линий интерфейса (+V от DTR и RTS, -V от TD) пользуются все манипуляторы, подключаемые к СОМ-портам. Зная это, в случае неработоспособности мыши с данным портом следует проверить напряжения на соответствующих контактах разъема. Бывает, что с конкретным портом не работает только конкретная мышь (модель или экземпляр), хотя другие мыши с этим портом и эти же мыши с другими портами работают нормально. Здесь дело может быть в уровнях напряжений. Стандарт требует от порта выходного напряжения не менее 5 В (абсолютного значения), и если данный порт обеспечивает только этот минимум, некоторым мышам не хватит мощности для питания светодиодов (главных потребителей энергии).

Порт получает двуполярное питание через системную плату от блока питания компьютера. Отсутствие на выходе блока питания напряжения +12 В обычно обнаружится по неработоспособности дисков. Отсутствие напряжения -12 В «заметят» только устройства, подключенные к СОМ-портам. Блок питания теоретически контролирует наличие этих напряжений на своем выходе (сообщая о неполадках сигналом Power Good, вызывающим аппаратный сброс). Встречаются упрощенные схемы блоков питания, у которых контролируются не все напряжения. Кроме того, возможны плохие контакты в разъеме подключения питания к системной плате.