Последовательные интерфейсы: СОМ-порт
Последовательный интерфейс для передачи данных в одну сторону использует одну сигнальную линию, по которой информационные биты передаются друг за другом последовательно. Такой способ передачи определяет название интерфейса и порта, его реализующего (Serial Interface и Serial Port). Последовательная передача данных может осуществляться в синхронном и асинхронном режимах.
При асинхронной передачи каждому байту предшествует старт-бит, сигнализирующий приемнику о начале очередной посылки, за которой следуют биты данных или бит паритета (конроля четности). Завершает посылку стоп-бит. Старт-бит (имеющий значение лог. «0») следующего посланного байта может посылаться в любой момент после окончания стоп-бита. Старт-бит обеспечивает механизм синхронизации приемника по сигналу от передатчика. Внутренний генератор синхронизации приемника использует счетчик-делитель опорной частоты, обнуляемый в момент приема начала старт-бита. Этот счетчик генерирует внутренние стробы, по которым приемник фиксирует последующие принимаемые биты.
Формат асинхронной посылки позволяют выявить возможные ошибки передачи.
Для асинхронного режима принят ряд стандартных скоростей обмена: 50,75,110,150,300,600,1200,2400,4800, 19200,38400,57600,115200 бит/сек. Количество бит данных может составлять 5,6,7,8 бит. Количество стоп битов может быть 1,1.5,2 бита. Асинхронный в РС реализуется с помощью СОМ-порта с использованием протокола RS-232C.
Синхронный режим передачи предполагает постоянную активность канала связи. Посылка начинается с синхробайта, за которым плотно следует поток информационных бит. Если у передатчика нет данных для передачи, он заполняет паузу непрерывной посылкой байтов синхронизации. При передаче больших массивов данных накладные расходы на синхронизацию в данном режиме необходима будет ниже, чем в асинхронном. Однако в синхронном режиме необходима внешняя синхронизация приемника с передатчиком, поскольку даже малое отклонение частот приведет к быстро накапливающейся ошибке и искажению принимаемых данных. Внешняя синхронизация возможна либо с помощью отдельной линии передачи для передачи сигнала синхронизации, либо с использованием самосинхронизирующего кодирования данных, при котором на приемной стороне из принятого сигнала могут быть и импульсы синхронизации. В любом случае синхронный режим требует либо дорогих линий связи, либо дорогого оконеченного оборудования. Для РС существуют специальные платы — адаптеры SDLC, поддерживающие синхронный режим обмена. Они используются в основном для связи с большими машинами IBM и в настоящее время мало распространены. Из синхронных адаптеров в настоящее время чаще всего применяются адаптеры интерфейса V.35.
Последовательный интерфейс на физическом уровне может иметь различные реализации, различающиеся способом передачи электрических сигналов. Существует ряд родственных международных стандартов: RS-232C,RS-432A,RS-422A,RS485.
Несимметричные линии интерфейсов RS-232C,RS-432A имеют самую низкую защищенность от синфазной помехи. Лучшие параметры имеет двухточечный интерфейс
RS-422A и его магистральный (шинный) родственник RS-485, работающие на симметричных линиях связи. В них для каждого сигнала используются дифференциальные сигналы с отдельной (витий) парой приводов.
Наибольшее распространение в РС получил простейший из этих — стандарт RS-232C. В промышленной автоматике широко применяется RS — 422А, а также RS-485, встречающийся и в некоторых принтерах. Существуют относительно несложные преобразователи сигналов для согласования всех этих интерфейсов.
Интерфейс RS-232C
Интерфейс RS-232C предназначен для подключения аппаратуры,
передающей или принимающей данные (АПД-аппаратура передачи данных), к оконечной аппаратуре каналов данных (АКД). В роли АПД может выступать компьютер, принтер, плоттер и другие ПУ. Этой аппаратуре соответствует аббревиатура DTE-Data Terminal Equipment. В роли АКД обычно выступает модем — DCE (Data Communication Equipment). Конечной целью подключения является соединение двух устройств DTE, полная схема соединения приведена на рис.2. Интерфейс позволяет исключать канал удаленной связи вместе с парой устройств DTE, соединив устройства непосредственно с помощью нуль-модемного кабеля (рис.3).
Стандарт описывает управляющие сигналы интерфейса, пересылку данных, электрический интерфейс и типы разъемов. Стандарт описывает синхронный и асинхронный режимы обмена, но СОМ-порты поддерживают только асинхронный режим. Функционально RS-232C эквивалентен стандарту МККТТ V.24/V.28 и стыку С2, но они имеют различные названия одних и тех же используемых сигналов.
/>
Рис.1-Стандарт последовательного интерфейса.
/>
Рис.2-Полная схема соединения по RS-232C.
/>
Рис.3-Соединение по RS-232C нуль-модемным кабелем.
Электрический интерфейс
Стандарт RS-232C использует несимметричные передатчики и приемники — сигнал передается относительно общего провода — схемной земли cимметричные дифференциальные сигналы используются в других интерфейсах — например,RS-422). Интерфейс НЕ ОБЕСПЕЧИВАЕТ ГАЛЬВАНИЧЕСКОЙ РАЗВЯЗКИ устройств. Логической единице соответствует уровень напряжения на входе приемника в диапазоне — 12… — 3 В. Для линий управляющих сигналов это состояние называется ON («включено»), для линий последовательных данных называется MARK. Логическому нулю соответствует напряжение в диапазоне +3… +12 В. Для линий управляющих сигналов это состояние называется OFF («выключено»), для линий последовательных данных называется SPACE. Между уровнями — 3… +3 В имеется зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения соответствующего порога. Уровни сигналов на выходах передатчиков должны быть в диапазонах — 12… — 5 В и +5… +12 В для представления единицы и нуля соответственно. Разность потенциалов между схемными землями (SG) соединяемых устройств должна быть менее 2 В, при более высокой разности потенциалов возможно неверное восприятие сигналов.
Интерфейс предполагает наличие ЗАЩИТНОГО ЗАЗЕМЛЕНИЯ для соединяемых устройств, если они оба питаются от сети переменного тока и имеют сетевые фильтры.
Подключение и отключение интерфейсных кабелей устройств с автономным питанием (не питающихся от интерфейса, таких как, например, мышь) должно производиться при отключении питания. В противном случае разность не выровненных потенциалов устройств в момент коммутации (присоединения или отсоединения разъема) может оказаться приложенной к выходным или входным (что опаснее) цепям интерфейса и вывести из строя микросхемы.
Для интерфейса RS-232C специально выпускаются буферные микросхемы приемников (с гистерезисом) и передатчиков двуполярного сигнала. При несоблюдении правил заземления и коммутации включенных устройств они обычно являются первыми (хорошо, если единственными) жертвами «пиротехнических»эффектов. Иногда их устанавливают в «кроватках», что сильно облегчает замену. Часто буферные схемы входят прямо в состав интерфейсных БИС. Это удешевляет изделие, экономит место на плате, но в случае аварии обычно оборачивается крупными финансовыми потерями. Вывести из строя интерфейсные микросхемы замыканием сигнальных цепей маловероятно, поскольку ток короткого замыкания передатчиков обычно ограничен на уровне 20 мА.
Стандарт RS-232C регламентирует типы применяемых разъемов, что обеспечивает высокий уровень совместимости аппаратуры различных производителей.
На аппаратуре DTE (в том числе, и на СОМ-портах PC) принято устанавливать вилки, (male — «папа») DB25-P или более компактный вариант — -DB9-P.
Девятиштырьковые разъемы не имеют контактов для дополнительных сигналов, необходимых для синхронного режима (в большинстве 25тырьковых разъемов эти контакты не используются).
На аппаратуре DCE (модемах) устанавливают розетки (female — «мама») DB25-S или DB-9S.
Это правило предполагает, что разъемы DCE могут подключаться к разъемам DTE непосредственно (если позволяет геометрия конструктива) или через переходные «прямые» кабели с розеткой и вилкой, у которых контакты cоединены «один в один». Переходные кабели могут являться и переходниками с 9 на 25-штырьковые разъемы.
Если аппаратура DTE соединяется без модемов, то разъемы устройств (вилки) соединяются между собой нуль-модемным кабелем (Zero-modem или Z-modem), имеющим на обоих концах розетки, контакты которых соединяются перекрестно.
Если на каком-либо устройстве DTE (принтер, плоттер, дигитайзер) установлена розетка — это почти стопроцентный признак того, что к другому устройству (компьютеру) оно должно подключаться прямым кабелем, аналогичным кабелю подключения модема. Розетка устанавливается обычно на тех устройствах, у которых удаленное подключение через модем не предусмотрено (или бессмысленно, как, например, у дигитайзера).
В табл.1 приведено назначение контактов разъемов СОМ-портов (и любой другой аппаратуры DTE). Назначение контактов разъема DB25S определено стандартом EIA/TIA-232-Е, разъем DB9S определен стандартом EIA/ TIA-574.
У модемов (DCE) название цепей и назначение контактов, естественно, совпадает, но роли сигналов (вход-выход) меняются на противоположные.
Таблица 1 — Разъемы и сигналы интерфейса RS-232C
/>
1* — шлейф 8-битных мультикарт.
2* — шлейф 16-битных мультикарт и портов на системных платах.
3* — вариант шлейфа портов на системных платах.
4* — широкий шлейф к 25-контактному разъему.
Подмножество сигналов RS-232C, относящихся к асинхронному режиму, рассмотрим с точки зрения СОМ-порта PC, являющегося по терминологии RS-232C терминалом данных (DTE). Следует помнить, что активному состоянию сигнала («включено») и логической единице передаваемых данных соответствует отрицательный потенциал (ниже — 3 В) сигнала интерфейса, а состоянию «выключено» и логическому нулю — положительный (выше +3 В). Назначение сигналов интерфейса приведено в табл.2.
Таблица 2-Назначение сигналов интерфейса
/>
Ресурсы СОМ-портов
Начиная с первых моделей в PC имелся последовательный интерфейс — СОМ-порт (Communications Port — коммуникационный порт). Этот порт обеспечивает асинхронный обмен по стандарту RS-232C. Компьютер может иметь до четырех последовательных портов СОМ 1-COM4 (для машин класса AT типично наличие двух портов). СОМ-порты имеют внешние разъемы-вилки (Male «папа») DB25P или DB9P, выведенные на заднюю панель компьютера (назначение выводов приведено в табл.1)
СОМ-порты реализуются на микросхемах UART, совместимых с семейством 18250. Они занимают в пространстве ввода/вывода по 8 смежных 8-битных регистров и могут располагаться по стандартным базовым адресам 3F8h (COM1), 2F8h (COM2), 3E8h (COM3), 2E8h (COM4). Для портов COM3 и COM4 возможны альтернативные адреса 3EOh, 338h и 2EOh, 238h соответственно. Для PS/2 стандартными для портов СОМЗ-СОМ8 являются адреса 3220h, 3228h,4220h, 4228h, 5220h и 5228h соответственно.
Порты могут вырабатывать аппаратные прерывания IRQ4 (обычно используются для COM1 и COM3) и IRQ3 (для COM2 и COM4). Кроме того, возможно использование линий прерываний IRQ11 (вместо IRQ4) и IRQ10 (вместо IRQ3). Возможность разделяемого использования одной линии запроса несколькими портами (или ее разделения с другими устройствами) зависит от реализации аппаратного подключения и программного обеспечения. При использовании портов, установленных на шину ISA, разделяемые прерывания обычно не работают.
Конфигурирование СОМ-портов
Управление последовательным портом разделяется на два этапа — предварительное конфигурирование (Setup) аппаратных средств порта и текущее (оперативное) переключение режимов работы прикладным или системным ПО. Способ и возможности конфигурирования СОМ-портов зависят от его исполнения и местоположения. Порт, расположенный на плате расширения (обычно на мультикарте), устанавливаемой в слот ISA или ISA+VLB, обычно конфигурируется джамперами на самой плате. Порт, расположенный на системной плате, обычно конфигурируется через BIOS Setup.
Конфигурированию подлежат следующие параметры:
* Базовый адрес, который может иметь значение 3F8h, 2F8h, 3E8h (3EOh,338h), 2E8h (2EOh, 238h). При инициализации BIOS проверяет наличие портов по адресам именно в этом порядке и, соответственно, присваивает обнаруженным портам логические имена СОМ1, COM2, COM3 и COM4.
* Используемая линия запроса прерывания: для СОМ1 и COM3 обычно используется IRQ4 или IRQ11, для COM2 и COM4 — IRQ3 или IRQ10. В принципе номер прерывания можно назначать в произвольных сочетаниях с базовым адресом (номером порта), но некоторые программы и драйверы (например, драйверы последовательной мыши) настроены только на стандартные сочетания. Каждому порту, нуждающемуся в аппаратном прерывании, обычно назначают отдельную линию, не совпадающую с линиями запроса прерываний других портов или устройств. Разделяемое использование линий прерывания адаптеров шин ISA проблематично. Прерывания необходимы для портов, к которым подключаются устройства ввода (мышь, дигитайзер), UPS и модемы. При подключении принтера или плоттера прерываниями пользуются только многозадачные ОС (и то не всегда), и этот дефицитный ресурс PC можно сэкономить. Также прерываниями обычно не пользуются и при связи двух компьютеров нуль-модемным кабелем.
*Использование канала DMA (для UART 16450 или 16550, расположенных на системной плате) — разрешение использования и номер канала DMA. Режим DMA при работе с СОМ-портами используют редко, поэтому в большинстве случаев каналы DMA порту не назначают.--PAGE_BREAK--
Режим работы порта по умолчанию (2400 бит/с, 7 бит данных, 1 стоп-бит и контроль четности), заданный при инициализации порта во время BIOS POST, может изменяться в любой момент при настройке коммуникационных программ или командой DOS MODE COMx: с указанием параметров.
Использование СОМ-портов
Вопреки названию, СОМ-порты чаще всего используют для подключения манипуляторов (мышь, трекбол). В этом случае порт используется в режиме последовательного ввода, обеспечивая питание устройства от интерфейса. Мышь может подключаться к любому исправному порту, для согласования разъемов порта и мыши возможно применение переходника DB9S-DB25P или, наоборот,DB25S-DB9P. Для работы с мышью обязательно требуется использование линии прерывания, причем для порта СОМ1 — IRQ4, а для COM2 — IRQ3.
Следующим по популярности идет подключение внешних модемов для связи с удаленными компьютерами или выхода в глобальные сети. Модемы должны подключаться полным (9-проводным) кабелем DTE-DCE. Этот же кабель может использоваться и для согласования разъемов (по количеству контактов), возможно и применение переходников 9-25, предназначенных для мышей. Для работы коммуникационного ПО обычно требуется использование прерываний, но здесь, как правило, больше свободы выбора сочетаний номера (адреса) порта и номера линии прерывания. Если предполагается работа на скоростях 9600 бит/с и выше, то СОМ-порт должен быть реализован на микросхеме UART 16550A или совместимой с ней. Возможности работы с использованием FIFO-буферов и обмена по каналам DMA зависят от коммуникационного ПО.
Для связи двух компьютеров, удаленных друг от друга на небольшое расстояние, используют и непосредственное соединение их СОМ-портов нуль-модемным кабелем. Использование программ типа Norton Commander или Interink MS-DOS позволяет обмениваться файлами со скоростью передачи до 115,2 Кбит/с без использования аппаратных прерываний. Это же соединение может использоваться и сетевым пакетом Lantastic, предоставляющим более развитый сервис.
Подключение принтеров и плоттеров к СОМ-порту требует применения кабеля, соответствующего выбранному протоколу управления потоком: программному XON/XOFF или аппаратному RTS/CTS. Аппаратный протокол предпочтительнее, поскольку он не требует программной поддержки со стороны PC. Прерывания при выводе средствами DOS (командами COPY или PRINT) не используются.
СОМ-порт иногда используется и для подключения электронных ключей (Security Devices), предназначенных для защиты от нелицензированного использования программных продуктов. Эти устройства могут быть как «прозрачными», позволяя воспользоваться тем же портом и для подключения периферии, так и полностью занимающими порт.
СОМ-порт при наличии соответствующей программной поддержки позволяет превратить PC в терминал, эмулируя систему команд распространенных специализированных терминалов (VT-52, VT-100 и других). В принципе простейший терминал получается, если замкнуть друг на друга функции BIOS обслуживания СОМ-порта (Int 14h), функцию телетайпного вывода видеосервиса (Int 10h) и клавиатурный ввод (Int 16h). Однако такой терминал будет работать лишь на малых скоростях обмена (если, конечно, его делать не на Pentium), поскольку функции BIOS хоть и универсальны, но работают не самым быстрым образом.
Этим списком, конечно же, возможности использования СОМ-порта не исчерпываются. Интерфейс RS-232C широко распространен в различных периферийных устройствах и терминалах. Все они, при наличии должной программной поддержки, могут подключаться к PC. Кроме использования по прямому назначению, СОМ-порт может использоваться и как двунаправленный интерфейс, у которого имеется 3 программно-управляемых выходных линии и 4 программно-читаемых входных линии с двуполярными сигналами. Возможность их использования ограничивается только фантазией разработчика. Существует, например, схема однобитного широтно-импульсного преобразователя, позволяющего записывать звуковой сигнал на диск PC, используя входную линию СОМ-порта. Воспроизведение этой записи через обычный динамик обеспечивает разборчивость речи. Конечно, в настоящее время, когда звуковая карта стала почти обязательным устройством PC, это уже не впечатляет, но в свое время такое решение было довольно интересным
Программирование COM-портов
Порт 3F8h.
Этот порт соответствует регистру передаваемых данных. Для передачи в порт 3F8h необходимо записать байт передаваемых данных.
После приема данных от внешнего устройства они могут быть прочитаны из этого порта. В зависимости от состояния бита управляющего слова, выводимого в управляющий регистр с адресом 3F8h, назначение порта 3F8h изменяться. Если этот бит равен 0, порт используется для записи передаваемых данных. Если же этот бит равен 1, порт используется для вывода значения младшего байта делителя частоты тактового генератора. Изменяя содержимое делите — ля, можно изменять скорость передачи данных.
Старший байт делителя записывается в порт 3F9h. Зависимость скорости передачи данных от значения делителя частоты приведены в таблице 1:
Таблица 1.
Делитель
Скорость передачи в бодах.
Делитель
Скорость передчи в бодах.
1040
110
24
4800
768
150
12
9600
384
300
6
19200
192
600
3
38400
96
1200
2
57600
48
2400
1
115200
Порт 3F9h.
Порт используется как регистр управления прерываниями от асинхронного адаптера или (после вывода в порт 3F9h байта с установленным в 1 старшим битом) для вывода значения старшего байта делителя частоты тактового генератора. В режиме регистра управления прерываниями порт имеет следующий формат.
Таблица 2.
Бит
Значение
1 — разрешение прерывания при готовности принимаемых данных.
1
1 — разрешение прерывания после передачи байта (когда выходной буфер передачи пуст)
2
1 — разрешение прерывания по обнаружении состояния «BREAK» или ошибки.
3
1 — разрешение прерывания по изменению на разъёме RS-232-C.
4-7
Не используются, должны быть равны 0.
Порт 3FAh.
Регистр идентификации прерывания. По его содержимому программа может определить причину прерывания. Формат регистра приведён в таблице 3.
Таблица 3.
Бит
Значение
1 — нет прерываний, ожидающих обслуживания.
1-2
00 — прерывание по линии состояния приёмника, возникает при переполнении приёмника, ошибка чётности или формата данных, или при состоянии «BREAK». Сбрасывается после чтения состояния линии и порта 3FDh.
01 — данные приняты и доступны для чтения. Сбрасывается после после чтения данных из порта 3F8h.
11 — Состояние модема. Устанавливается при изменении состояния входных линий CTS, RI, DCD, DSR.
3-7
Должны быть равны 0.
Порт 3FBh.
Управляющий регистр, доступен по записи и чтению. Его формат показан в таблице 4.
Таблица 4.
Бит
Значение
0-1
Длинна слова в байтах.00 — 5 бит.
01 — 6 бит.
10 — 7 бит.
11 — 8 бит.
2
Количество стоповых битов: 0 — 1 бит, 1 — 2 бита.
3-4
Чётность:
10 — контроль на чётность неиспользуется; продолжение
--PAGE_BREAK--
01 — контроль на нечётность.
11 — контроль на чётность.
5
Фиксация чётности. При установки этого бита бит чётности всегда принимает значение 0 (если биты 3-4 равны 11) или 1 (если биты 3-4 равны 01)
6
Установка перерыва. Вызывает вывод строки нулей в качестве сигнала «BREAK» для подключения устройства.
7
1 — порты 3F8h и 3F9h используется для загрузки делителя частоты тактового генератора; 0 — порты используются как обычно.
Порт 3FCh.
Регистр управления модемом.
Управляет состоянием выходных линий DTR, RTS, линий, специфических для модемов OUT1 и OUT2, для запуска диагностики при входе асинхронного адаптера, замкнутым на его выход. Формат порта приведён в таблице 5.
Таблица 5.
Бит
Значение
Линия DTR
1
Линия RTS.
2
Линия OUT1 (запасная)
3
Линия OUT2 (запасная)
4
Запуск диагностики при входе асинхронного адаптера, замкнутом на его выход.
5-7
Должно быть равно 0
Порт 3FDh.
Регистр состоянии линии. Значение зарядов регистра приведены в таблице 6.
Таблица 6.
Бит
Значение
Данные получены и готовы для чтения, сбрасывается при чтении данных.
1
Ошибка переполнения. Был принят новый байт данных, а предыдущий ещё не был считан программой. Предыдущий байт потерян.
2
Ошибка чётности, сбрасывается после чтения состояния линии.
3
Ошибка синхронизации.
4
Обнаружен запрос на прерывание передачи «BREAK» — длинная строка нулей.
5
Регистр хранения передатчика пуст, в него можно записать новый байт для передачи.
6
Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи.
7
Тайм-аут (устройство не связано с компьютером)
Порт 3FEh.
Регистр состояния модема. Значения битов указаны в таблице 7.
Таблица 7.
Бит
Значение
Линия CTS изменила состояние.
1
Линия DSR изменила состояние.
2
Линия IR изменила состояние.
3
Линия DCD изменила состояние.
4
Состояние линии CTS
5
Состояние линии DSR
6
Состояние линии IR.
7
Состояние линии DCD.
Приём и передача данных.
Перед записью байта данных в регистр передатчика нужно убедиться, что регистр хранения передатчика свободен, то есть убедиться в том, что передача предыдущего символа завершена. Признаком свободы регистра передатчика является установленный в 1 бит 5 регистра состояния линии с адресом 3FDh.
Аналогично передачи данных перед вводом символа из порта приёмника 3F8h следует убедиться, что бит 0 порта 3FDh установлен в 1, то есть что символ принят из линии и находиться в буферном регистре приёмника.