Как выглядит com порт. Посылка тестовых данных в COM-порт. Функции BIOS для СОМ-портов

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

Общее описание

Интерфейс RS-232, совсем официально называемый "EIA/TIA-232-E", но более известный как интерфейс "COM-порта", ранее был одним из самых распространенных интерфейсов в компьютерной технике. Он до сих пор встречается в настольных компьютерах, несмотря на появление более скоростных и "интеллектуальных" интерфейсов, таких как USB и FireWare. К его достоинствам с точки зрения радиолюбителей можно отнести невысокую минимальную скорость и простоту реализации протокола в самодельном устройстве.

Физический интерфейс реализуется одним из двух типов разъемов: DB-9M или DB-25M, последний в выпускаемых в настоящее время компьютерах практически не встречается.

Назначение выводов 9-контактного разъема


9-контактная вилка типа DB-9M
Нумерация контактов со стороны штырьков
Направление сигналов указано относительно хоста (компьютера)
Контакт Сигнал Направление Описание
1 CD Вход Обнаружена несущая
2 RXD Вход Принимаемые данные
3 TXD Выход Передаваемые данные
4 DTR Выход Хост готов
5 GND - Общий провод
6 DSR Вход Устройство готово
7 RTS Выход Хост готов к передаче
8 CTS Вход Устройство готово к приему
9 RI Вход Обнаружен вызов

Назначение выводов 25-контактного разъема

Контакт Сигнал Направление Описание
1 SHIELD - Экран
2 TXD Выход Передаваемые данные
3 RXD Вход Принимаемые данные
4 RTS Выход Хост готов к передаче
5 CTS Вход Устройство готово к приему
6 DSR Вход Устройство готово
7 GND - Общий провод
8 CD Вход Обнаружена несущая
9 - - Резерв
10 - - Резерв
11 - - Не используется
12 SCD Вход Обнаружена несущая #2
13 SCTS Вход Устройство готово к приему #2
Контакт Сигнал Направление Описание
14 STXD Выход Передаваемые данные #2
15 TRC Вход Тактирование передатчика
16 SRXD Вход Принимаемые данные #2
17 RCC Вход Тактирование приемника
18 LLOOP Выход Локальная петля
19 SRTS Выход Хост готов к передаче #2
20 DTR Выход Хост готов
21 RLOOP Выход Внешняя петля
22 RI Вход Обнаружен вызов
23 DRD Вход Определена скорость данных
24 TRCO Выход Тактирование внешнего передатчика
25 TEST Вход Тестовый режим

Из таблиц видно, что 25-контактный интерфейс отличается наличием полноценного второго канала приема-передачи (сигналы, обозначенные "#2"), а также многочисленных дополнительных управляющих и контрольных сигналов. Однако, часто, несмотря на наличие в компьютере "широкого" разъема, дополнительные сигналы на нем просто не подключены.

Электрические характеристики

Логические уровни передатчика: "0" - от +5 до +15 Вольт, "1" - от -5 до -15 Вольт.

Логические уровни приемника: "0" - выше +3 Вольт, "1" - ниже -3 Вольт.

входное сопротивление приемника не менее 3 кОм.

Данные характеристики определены стандартом как минимальные, гарантирующие совместимость устройств, однако реальные характеристики обычно существенно лучше, что позволяет, с одной стороны, питать маломощные устройства от порта (например, так спроектированы многочисленные самодельные data-кабели для сотовых телефонов), а с другой - подавать на вход порта инвертированный TTL-уровень вместо двуполярного сигнала.

Описание основных сигналов интерфейса

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

RXD - Линия приема хостом данных от устройства. Подробно описана в разделе "Протокол обмена данными".

TXD - Линия передачи хостом данных к устройству. Подробно описана в разделе "Протокол обмена данными".

DTR - Хост устанавливает этот сигнал, когда готов к обмену данными. Фактически сигнал устанавливается при открытии порта коммуникационной программой и остается в этом состоянии все время, пока порт открыт.

DSR - Устройство устанавливает этот сигнал, когда включено и готово к обмену данными с хостом. Этот и предыдущий (DTR) сигналы должны быть установлены для обмена данными.

RTS - Хост устанавливает этот сигнал перед тем, как начать передачу данных устройству, а также сигнализирует о готовности к приему данных от устройства. Используется при аппаратном управлении обменом данными.

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

RI - Устройство (обычно модем) устанавливает этот сигнал при получении вызова от удаленной системы, например при приеме телефонного звонка, если модем настроен на прием звонков.

Протокол обмена данными

В протоколе RS-232 существуют два метода управления обменом данных: аппаратный и программный, а также два режима передачи: синхронный и асинхронный. Протокол позволяет использовать любой из методов управления совместно с любым режимом передачи. Также допускается работа без управления потоком, что подразумевает постоянную готовность хоста и устройства к приему данных, когда связь установлена (сигналы DTR и DSR установлены).

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

Программный метод управления заключается в передаче принимающей стороной специальных символов остановки (символ с кодом 0x13, называемый XOFF) и возобновления (символ с кодом 0x11, называемый XON) передачи. При получении данных символов передающая сторона должна соответственно остановить передачу или возобновить ее (при наличии данных, ожидающих передачи). Этот метод проще с точки зрения реализации аппаратуры, однако обеспечивает более медленную реакцию и соответственно требует заблаговременного извещения передатчика при уменьшении свободного места в приемном буфере до определенного предела.

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

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

Один из возможных алгоритмов работы приемника следующий:

  1. Ожидать уровня "0" сигнала приема (RXD в случае хоста, TXD в случае устройства).
  2. Отсчитать половину длительности бита и проверить, что уровень сигнала все еще "0"
  3. Отсчитать полную длительность бита и текущий уровень сигнала записать в младший бит данных (бит 0)
  4. Повторить предыдущий пункт для всех остальных битов данных
  5. Отсчитать полную длительность бита и текущий уровень сигнала использовать для проверки правильности приема с помощью контроля четности (см. далее)
  6. Отсчитать полную длительность бита и убедиться, что текущий уровень сигнала "1".

Последовательный интерфейс для передачи данных использует одну сигнальную линию, по которой информационные биты передаются друг за другом последовательно. Отсюда название интерфейса и порта. Английские термины - Serial Interface и Serial Port (иногда их неправильно переводят как "серийные"). Последовательная передача позволяет сократить количество сигнальных линий и увеличить дальность связи. Характерной особенностью является применение неТТЛ сигналов. В ряде последовательных интерфейсов применяется гальваническая развязка внешних (обычно входных) сигналов от схемной земли устройства, что позволяет соединять устройства, находящиеся под разными потенциалами. Ниже будут рассмотрены интерфейсы RS-232C, RS-422А, RS-423A, RS-485, токовая петля, MIDI, а также СОМ-порт.

2.1. Способы последовательной передачи

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


Рис. 2.1. Формат асинхронной передачи

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

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

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

Для асинхронного режима принят ряд стандартных скоростей обмена: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19 200, 38 400, 57 600 и 115 200 бит/с. Иногда вместо единицы измерения"бит/с" используют "бод" (baud), но при рассмотрении недвоичных передаваемых сигналов это некорректно. В бодах принято измерять частоту изменения состояния линии, а при недвоичном способе кодирования (широко применяемом в современных модемах) в канале связи скорости передачи бит (бит/с) и изменения сигнала (бод) могут отличаться в несколько раз (подробнее см. в приложении А).

Количество бит данных может составлять 5, 6, 7 или 8 (5- и 6-битные форматы распространены незначительно). Количество стоп-бит может быть 1, 1,5 или 2 ("полтора бита" означает только длительность стопового интервала). Асинхронный обмен в PC реализуется с помощью СОМ-порта с использованием протокола RS-232C.

Синхронный режим передачи предполагает постоянную активность канала связи. Посылка начинается с синхробайта, за которым сразу же следует поток информационных бит. Если у передатчика нет данных для передачи, он заполняет паузу непрерывной посылкой байтов синхронизации. Очевидно, что при передаче больших массивов данных накладные расходы на синхронизацию в данном режиме будут ниже, чем в асинхронном. Однако в синхронном режиме необходима внешняя синхронизация приемника с передатчиком, поскольку даже малое отклонение частот приведет к искажению принимаемых данных. Внешняя синхронизация возможна либо с помощью отдельной линии для передачи сигнала синхронизации, либо с использованием самосинхронизирующего кодирования данных, при котором на стороне приемника из принятого сигнала могут быть выделены импульсы синхронизации. В любом случае синхронный режим требует дорогих линий связи или оконечного оборудования. Для PC существуют специальные платы - адаптеры SDLC (дорогие), поддерживающие синхронный режим обмена. Они используются в основном для связи с большими машинами (mainframes) IBM и мало распространены. Из синхронных адаптеров в настоящее время применяются адаптеры интерфейса V.35.



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

На физическом уровне последовательный интерфейс имеет различные реализации, различающиеся способом передачи электрических сигналов. Существует ряд родственных международных стандартов: RS-232C, RS-423A, RS-422A и RS-485. На рис. 2.2 приведены схемы соединения приемников и передатчиков, а также показаны ограничения на длину линии (L) и максимальную скорость передачи данных (V).

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

В перечисленных стандартах сигнал представляется потенциалом. Существуют последовательные интерфейсы, где информативен ток, протекающий по общей цепи передатчик-приемник - "токовая петля" и MIDI. Для связи на короткие расстояния приняты стандарты беспроводной инфракрасной связи. Наибольшее распространение в PC получил простейший из перечисленных - стандарт RS-232C, реализуемый СОМ-портами. В промышленной автоматике широко применяется RS-485, а также RS-422A, встречающийся и в некоторых принтерах. Существуют преобразователи сигналов для согласования этих родственных интерфейсов.

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

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

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


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


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

2.2.1. Электрический интерфейс

Стандарт RS-232C использует несимметричные передатчики и приемники - сигнал передается относительно общего провода - схемной земли (симметричные дифференциальные сигналы используются в других интерфейсах - например, RS-422). Интерфейс НЕ ОБЕСПЕЧИВАЕТ ГАЛЬВАНИЧЕСКОЙ РАЗВЯЗКИ устройств. Логической единице соответствует напряжение на входе приемника в диапазоне -12...-3 В. Для линий управляющих сигналов это состояние называется ON( "включено"), для линий последовательных данных - MARK. Логическому нулю соответствует диапазон +3...+12 В. Для линий управляющих сигналов состояние называется OFF ("выключено"), а для линий последовательных данных - SPACE. Диапазон -3...+3 В - зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения порога (рис. 2.5). Уровни сигналов на выходах передатчиков должны быть в диапазонах -12...-5 В и +5...+12 В для представления единицы и нуля соответственно. Разность потенциалов между схемными землями (SG) соединяемых устройств должна быть менее 2 В, при более высокой разности потенциалов возможно неверное восприятие сигналов.

Интерфейс предполагает наличие ЗАЩИТНОГО ЗАЗЕМЛЕНИЯ для соединяемых устройств, если они оба питаются от сети переменного тока и имеют сетевые фильтры.

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



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

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



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

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

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

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

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



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

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



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

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

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

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

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

1*- шлейф 8-битных мультикарт.
2*- шлейф 16-битных мультикарт и портов на системных платах.
3* - вариант шлейфа портов на системных платах.
4*- широкий шлейф к 25-контактному разъему.

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

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

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

Аппаратный протокол управления потоком RTS/CTS (Hardware Flow Control) использует сигнал CTS, который позволяет остановить передачу данных, если приемник не готов к их приему (рис. 2.9). Передатчик "выпускает" очередной байт только при включенной линии CTS. Байт, который уже начал передаваться, задержать сигналом CTS невозможно (это гарантирует целостность посылки). Аппаратный протокол обеспечивает самую быструю реакцию передатчика на состояние приемника. Микросхемы асинхронных приемопередатчиков имеют не менее двух регистров в приемной части сдвигающий, для приема очередной посылки, и хранящий, из которого считывается принятый байт. Это позволяет реализовать обмен по аппаратному протоколу без потери данных.


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

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

Если аппаратный протокол не используется, у передающего терминала должно быть обеспечено состояние "включено" на линии CTS перемычкой RTS - CTS. В противном случае передатчик будет "молчать".


Рис. 2.10. Кабель подключения принтера с протоколом RTS-CTS

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


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

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

Кроме этих двух распространенных стандартных протоколов, поддерживаемых и ПУ, и ОС, существуют и другие. Некоторые плоттеры с последовательным интерфейсом используют программное управление, но посылают не стандартные символы XON/XOFF, а слова (ASCII-строки). Такой обмен на уровне системной поддержки протокола практически не поддерживается (эти плоттеры непосредственно "разговаривают" с прикладной программой). Конечно, можно написать драйвер СОМ-порта (перехватчик INT 14h), но необходимость обработки в нем текстовых сообщений от устройства вывода обычно не вызывает восторга у системного программиста. Кабель для подключения совпадает с приведенным на рис. 2.12.


Рис. 2.12. Кабель подключения принтера по протоколу XON/XOFF

2.3. Интерфейс "токовая петля"

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

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

Токовая петля с гальванической развязкой позволяет передавать сигналы на расстояния до нескольких километров. Расстояние определяется сопротивлением пары проводов и уровнем помех. Поскольку интерфейс требует пары проводов для каждого сигнала, обычно используют только два сигнала интерфейса. В случае двунаправленного обмена применяются только сигналы передаваемых и принимаемых данных, а для управления потоком используется программный метод XON/XOFF. Если двунаправленный обмен не требуется, используют одну линию данных, а для управления потоком обратная линия задействуется для сигнала CTS (аппаратный протокол) или встречной линии данных (программный протокол).

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

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


Рис. 2.13. Подключение принтера с интерфейсом "токовая петля" к СОМ-порту

2.4. Интерфейс MIDI

Цифровой интерфейс музыкальных инструментов MIDI (Musical Instrument Digital Interface) является двунаправленным последовательным асинхронным интерфейсом с частотой передачи 31,25 Кбит/с. Этот интерфейс, разработанный в 1983 году, стал фактическим стандартом для сопряжения компьютеров, синтезаторов, записывающих и воспроизводящих устройств, микшеров, устройств специальных эффектов и другой электромузыкальной техники.

В интерфейсе применяется токовая петля 10 мА (возможно 5 мА) с гальванической развязкой входной цепи. Это исключает связь "схемных земель" соединяемых устройств через интерфейсный кабель, устраняя помехи, крайне нежелательные для звуковой техники. Снижению интерференционных помех служит и выбор частоты передачи, которая совпадает с одним из значений частот квантования, принятых в цифровой звукозаписи.

Асинхронная посылка содержит старт-бит, 8 бит информации и 1 стоп-бит, контроль четности отсутствует. Старший бит посылки является признаком "команда/данные". Его нулевое значение указывает на наличие семи бит данных в младших разрядах. При единичном значении биты содержат код команды, а биты - номер канала. Команды могут быть как адресованными конкретному каналу, так и широковещательными безадресными. К последней группе относятся команды старта, стопа и отметки времени, обеспечивающие синхронизацию устройств (система синхронизации MIDI Sync и МТС - MIDI Time Code).

Интерфейс определяет три типа портов: MIDI-In, MIDI-Out и MIDI-Thru.

Входной порт MIDI-In представляет собой вход интерфейса "токовая петля 10 мА", гальванически развязанного от приемника оптроном с быстродействием не хуже 2 мкс. Устройство отслеживает информационный поток на этом входе и реагирует на адресованные ему команды и данные.

Выходной порт MIDI-Out представляет собой выход источника тока 10 мА, гальванически связанного со схемой устройства. Ограничительные предохраняют выходные цепи от повреждения при замыкании на землю или источник 5 В. На выход подается информационный поток от данного устройства. В потоке может содержаться и транслированный входной поток.

Транзитный порт MIDI-Thru (не обязателен) служит для ретрансляции входного сигнала.

В качестве разъемов применяются 5-контактные разъемы DIN, распространенные в бытовой звуковой аппаратуре. На всех устройствах устанавливаются розетки, на кабелях - вилки. Все соединительные кабели MIDI унифицированы (рис. 2.14). Контакт 2 - экран кабеля - соединяется с общим проводом только на стороне передатчика (на разъемах MIDI-Out и MIDI-Thru).




Рис. 2.14. Соединительные кабели MIDI

В маркировке входов и выходов, указанной около разъемов, бывают разночтения. Одни производители пишут "In" или "Out" в соответствии с функцией разъема данного устройства (и это, правильно), тогда любой кабель соединяет "In" и "Out". Другие считают, что подпись должна обозначать функцию подключаемого устройства. Тогда кабель будет соединять разъемы с обозначениями "In" - "In" и "Out" - "Out".

Интерфейс позволяет объединить группу до 16 устройств в локальную сеть. Топология должна подчиняться правилу: вход MIDI-In одного устройства должен подключаться к выходу MIDI-Out или MIDI-Thru другого. При планировании MIDI-сети необходимо руководствоваться информационными потоками и связью устройств. Управляющие устройства - клавиатуры, секвенсоры (в режиме воспроизведения), источники синхронизации - должны находиться перед управляемыми. Если устройства нуждаются в двунаправленном обмене, они соединяются в кольцо. Возможно применение специальных мультиплексоров, позволяющих логически коммутировать несколько входных потоков в один выходной. Вырожденным случаем кольца является двунаправленное соединение двух устройств. Несколько вариантов соединения приведено на рис. 2.15.

В PC MIDI-порт имеется на большинстве звуковых адаптеров, его сигналы выведены на неиспользуемые контакты (12 и 15) разъема игрового адаптера. Для подключения устройств MIDI требуется переходной адаптер, реализующий интерфейс "токовая петля". Переходной адаптер обычно встраивается в специальный кабель, схема которого приведена на рис. 2.16. Некоторые модели PC имеют встроенные адаптеры и стандартные 5-штырьковые разъемы MIDI.


Рис. 2.15. Варианты топологии сети MIDI: a - цепь, б - кольцо с мультиплексором

В PC для интерфейса MIDI применяются порты, совместимые с контроллером MPU-401 (Roland) в режиме UART. В пространстве ввода/вывода MPU-401 занимает два смежных адреса MPU (обычно 330h) и МРU+1:

  • Порт DATA (адрес MPU+0) - запись и считывание байт, передаваемых и принимаемых по интерфейсу MIDI.
  • Порт STATUS/COMMAND (адрес MPU+1) - чтение состояния / запись команд (запись - только для интеллектуального режима). В байте состояния определены следующие биты:
  1. Бит 7 - DSR (Data Set Ready) - готовность (DSR=0) принятых данных для чтения. Бит устанавливается в единицу, когда все принятые байты считаны из регистра данных.
  2. Бит 6 - DRR (Data Read Ready) - готовность (DRR=0) UART к записи в регистр данных или команд. Условие готовности к записи не возникнет, если приемник имеет непрочитанный байт данных.


Рис. 2.16. Вариант схемы кабеля-адаптера MIDI

На некоторых системных платах применяются БИС контроллеров интерфейсов, в которых UART, используемая для СОМ-порта, конфигурированием через BIOS SETUP может быть переведена в режим MIDI- порта.

2.5. СОМ-порт

Последовательный интерфейс СОМ-порт (Communication Port - коммуникационный порт) появился в первых моделях IBM PC. Он был реализован на микросхеме асинхронного приемопередатчика Intel 8250. Порт имел поддержку BIOS (INT 14h), однако широко применялось (и применяется) взаимодействие с портом на уровне регистров. Поэтому во всех PC-совместимых компьютерах для последовательного интерфейса применяют микросхемы приемопередатчиков, совместимые с I8250. В ряде отечественных PC- совместимых (почти) компьютеров для последовательного интерфейса применялась микросхема КР580ВВ51 - аналог I8251. Однако эта микросхема является универсальным синхронно-асинхронным приемопередатчиком (УАПП или UART - Universal Asynchronous Receiver-Transmitter). Совместимости с PC на уровне регистров СОМ-порта такие компьютеры не имеют. Хорошо, если у соответствующих компьютеров имеется "честный" драйвер BIOS INT 14h, а не заглушка, возвращающая состояние модема "всегда готов" и ничего не делающая. Совместимость на уровне регистров СОМ-порта считается необходимой. Многие разработчики коммуникационных пакетов предлагают работу и через BIOS INT 14h, однако на высоких скоростях это неэффективно. Говоря о СОМ - порте PC, по умолчанию будем подразумевать совместимость регистровой модели с I8250 и реализацию асинхронного интерфейса RS-232C.

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

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

Две разновидности Serial Mouse - MS-Mouse и PC-Mouse (Mouse Systems Mouse) - требуют соответствующих драйверов, многие мыши имеют переключатель MS/PC. Мышь с "чужим" драйвером либо не отзывается, либо "скачет" загадочным образом. Эти разновидности используют различные форматы посылок: при одинаковой скорости 1200 бит/с, одном стоп-бите и отсутствии контроля четности Microsoft Mouse использует 7 бит данных, a PC-Mouse - 8 бит. Мышь посылает пакет при каждом изменении состояния - перемещении, нажатии или отпускании кнопки. Пакет, передаваемый MS-Mouse, состоит из трех байт (табл. 2.4). PC-Mouse передает 5 байт (табл. 2.5). Здесь LB (Left Buttom), MB (Middle Buttom) и RB (Right Buttom) означают состояние левой, средней и правой кнопок, Х и Y - биты относительного перемещения мыши с момента предыдущей посылки по координатам Х и Y. Положительным значениям соответствует перемещение по координате Х вправо, а по координате Y вниз для MS-Mouse и вверх для PC-Mouse. Отсюда становятся понятными беспорядочные перемещения курсора на экране при несоответствии драйвера типу мыши.

Биты D6 D5 D4 D3 D2 D1 D0
1-й байт 1 LB RB Y7 Y6 Х7 Х6
2-й байт 0 Х5 Х4 Х3 Х2 Х1 X0
3-й байт 0 Y5 Y4 Y3 Y2 Y1 Y0
Биты D7 D5 D4 D3 D2 D1 D0
1-й байт 1 0 0 0 0 LB MB RB
2-й байт Х7 Х6 Х5 Х4 ХЗ Х2 Х1 ХО
3-й байт Y7 Y6 Y5 Y4 Y3 Y2 Y1 YO
4-й байт Совпадает со 2-м байтом
5-й байт Совпадает с 3-м байтом

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

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

Подключение принтеров и плоттеров к СОМ-порту требует применения кабеля, соответствующего выбранному протоколу управления потоком: программному XON/XOFF или аппаратному RTS/CTS. Схемы кабелей приведены на рис. 2.10 и 2.12. Аппаратный протокол предпочтительнее. Прерывания при выводе средствами DOS (командами COPY или PRINT) не используются.

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

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

Интерфейс RS-232C широко распространен в различных ПУ и терминалах. СОМ-порт может использоваться и как двунаправленный интерфейс, у которого имеется 3 программноуправляемые выходные линии и 4 программно-читаемые входные линии с двуполярными сигналами. Их использование определяется разработчиком. Существует, например, схема однобитного широтно-импульсного преобразователя, позволяющего записывать звуковой сигнал на диск PC, используя входную линию СОМ-порта. Воспроизведение этой записи через обычный динамик PC позволяет передать речь. В настоящее время, когда звуковая карта стала почти обязательным устройством PC, это не впечатляет, но когдато такое решение было интересным.

СОМ-порт используют для беспроводных коммуникаций с применением излучателей и приемников инфракрасного диапазона - IR (Infra Red) Connection. Этот интерфейс позволяет осуществлять связь между парой устройств, удаленных на расстояние, достигающее нескольких метров. Различают инфракрасные системы низкой (до 115,2 Кбит/с), средней (1,152 Мбит/с) и высокой (4 Мбит/с) скорости. Низкоскоростные системы служат для обмена короткими сообщениями, высокоскоростные - для обмена файлами между компьютерами, подключения к компьютерной сети, вывода на принтер, проекционный аппарат и т. п. Ожидаются более высокие скорости обмена, которые позволят передавать "живое видео". В 1993 году создана ассоциация разработчиков систем инфракрасной передачи данных IrDA (Infrared Data Association), призванная обеспечить совместимость оборудования от различных производителей. В настоящее время действует стандарт IrDA 1.1. Имеются собственные системы фирм Hewlett Packard - HP-SIR (Hewlett Packard Slow Infra Red) - и Sharp - ASK (Amplitude Shifted Keyed IR). Основные характеристики интерфейсов следующие:

  • IrDA SIR (Slow Infra Red), HP-SIR - 9,6-115,2 Кбит/с;
  • IrDA MIR (Middle Infra Red) - 1,2 Мбит/с;
  • IrDA FIR (Fast Infra Red) - 4 Мбит/с;
  • Sharp ASK - 9,6-57,6 Кбит/с.

На скоростях до 115 200 бит/с для инфракрасной связи ис пользуются UART, совместимые с 16450/ 16550. В современных системных платах на использование инфракрасной связи может конфигурироваться порт COM2. В этом случае на переднюю панель компьютера устанавливается внешний приемопередатчик - "инфракрасный глаз", который подключается к разъему IR-Connector системной платы.

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

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

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

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

  • 8250 имеет ошибки (появление ложных прерываний), учтенные в XT BIOS.
  • 8250А - ошибки исправлены, в результате чего потеряна совместимость с BIOS. Работает в некоторых моделях AT, но непригоден для скорости 9600 бит/с.
  • 8250В - исправлены ошибки 8250 и 8250А, восстановлена ошибка в прерываниях - возвращена совместимость с XT BIOS. Работает в AT под DOS (кроме скорости 9600 бит/с).

Микросхемы 8250х имеют невысокое быстродействие по обращениям со стороны системной шины. Они не допускают обращения к своим регистрам в смежных шинных циклах процессора - для корректной работы с ними требуется введение программных задержек между обращениями CPU.

В компьютерах класса AT применяют микросхемы UART следующих модификаций:

  • 16450 - быстродействующая версия 8250 для AT. Ошибок 8250 и полной совместимости с XT BIOS не имеет. Требуется для работы OS/2 с СОМ-портами.
  • 16550 - развитие 16450. Может использовать канал DMA для обмена данными. Имеет FIFO-буфер, но некорректность его работы не позволяет им воспользоваться.
  • 16550А - имеет работающие 16-байтные FIFO-буферы приема и передачи и возможность использования DMA. Именно этот тип UART должен применяться в AT при интенсивных обменах на скоростях 9600 бит/с и выше. Совместимость с этой микросхемой обеспечивает большинство микросхем контроллеров портов ввода/вывода, входящих в современные чипсеты.

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

Доступ Регистр Чтение/запись R/W
Смещение DLAB Имя Название
0h 0 THR Transmit Holding Register W
0h 0 RBR Receiver Buffer Register R
0h 1 DLL Divisor Latch LSB R/W
1h 1 DLM Divisor Latch MSB R/W
1h 0 IER Interrupt Enable Register R/W
2h X IIR Interrupt Identification Register R
2h X FCR FIFO Control Register W
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

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

THR - промежуточный регистр данных передатчика (только для записи). Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала 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, Rl, DCD).
  • Бит 2 - RxL IE - по обрыву/ошибке линии.
  • Бит 1 - TxD IE - по завершении передачи.
  • Бит 0 - RxD IE - по приему символа (в режиме FIFO - прерывание по тайм-ауту).

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

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

  • Биты - признак режима FIFO:
    • 11 -режим FIFO 16550A,
    • 10 - режим FIFO 16550,
    • 00 - обычный.
  • Биты - не используются.
  • Бит 3 - прерывание по тайм-ауту (не в режиме FIFO).
  • Биты - причина прерывания с наивысшим приоритетом (в обычном, не FIFO-режиме):
    • 11 - ошибка/обрыв линии, сброс выполняется чтением регистра состояния линии,
    • 10 - принят символ; сброс - чтением данных,
    • 01 - передан символ (регистр THR пуст); сброс - записью данных,
    • 00 - изменение состояния модема; сброс - чтением регистра состояния модема.
  • Бит 0 - признак необслуженного запроса прерывания:
    • 1 - нет запроса,
    • 0 -есть запрос.

В режиме FIFO причину прерываний идентифицируют биты IIR :

  • 011 - ошибка/обрыв линии; сброс - чтением регистра состояния линии.
  • 010 - принят символ; сброс - чтением регистра данных приемника.
  • 110 - индикатор тайм-аута (за 4-кратный интервал времени символа не передано и не принято ни одного символа, хотя в буфере имеется по крайней мере один). Сброс - чтением регистра данных приемника.
  • 001 - регистр THR пуст; сброс - записью данных.
  • 000 - изменение состояния модема (CTS, DSR, RI или DCD), сброс - чтением регистра MSR.

FCR - регистр управления FIFO (только для записи).

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

  • Биты - ITL (Interrupt Trigger Level) - уровень заполнения FIFO-буфера, при котором вырабатывается прерывание:
    • 00-1 байт (по умолчанию),
    • 01-4 байта,
    • 10 -8байт,
    • 11 -14 байт.
  • Биты зарезервированы.
  • Бит 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 - EVENPARf Even Parity Select) - выбор типа контроля: 0 - нечетность, 1 - четность.
  • Бит 3 - PAREN(Parity Enable) - разрешение контрольного бита:
    • 1 - контрольный бит (паритет или постоянный) разрешен,
    • 0 - запрещен.
  • Бит 2 - STOPS (Stop Bits) - количество стоп-бит:
    • 0-1 стоп-бит,
    • 1-2 стоп-бита (для 5-битного кода стоп-бит будет иметь длину 1,5 бита).
  • Биты - SERIALDB (Serial Data Bits) - количество бит данных:
    • 00 -5 бит,
    • 01 -6 бит,
    • 10 -7 бит,
    • 11 -8 бит.

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

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

  • Биты =0 - зарезервированы.
  • Бит 4 - LME(Loopback Mode Enable) - разрешение режима диагностики:
  • Бит 3 - 1Е(Interrupt Enable) - разрешение прерываний с помощью внешнего выхода OUT2; в режиме диагностики поступает на вход MSR.7:
    • 0 - прерывания запрещены,
    • 1 - разрешены.
  • Бит 2 - OUT1C (OUT1 Bit Control) - управление выходным сигналом 1 (не используется); в режиме диагностики поступает на вход MSR.6.
  • Бит 1 - RTSC (Request To Send Control) - управление выходом RTS; в режиме диагностики поступает на вход MSR.4:
    • 1 - активен (-V),
    • 0 - пассивен (+V).
  • Бит 0 - DTRCfData Terminal Ready Control) - управление выходом DTR; в режиме диагностики поступает на вход MSR.5:
    • 1 - активен (-V),
    • 0 - пассивен (+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-буфере). Сброс - чтением приемника.

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

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

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

  • Бит 7 - DCD (Data Carrier Detect) - состояние линии DCD.
  • Бит 6 - Rl(Ring Indicator) - состояние линии Rl.
  • Бит 5 - DSR(Data Set Ready) - состояние линии DSR.
  • Бит 4 - CTS(Clear To Send) - состояние линии CTS.
  • Бит 3 - DDCD(Delta Data Carrier Detect) - изменение состояния DCD.
  • Бит 2 - TERI(Trailing Edge OfRing Indicator) -спад огибающей Rl (окончание звонка).
  • Бит 1 - DDSR (Delta Data Set Ready) - изменение состояния DSR.
  • Бит 0 - DCTS (Delta Clear To Send) - изменение состояния CTS.

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

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

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

  • Выход передатчика переводится в состояние логической 1. Вход приемника отключается.
  • Выход сдвигающего регистра передатчика логически соединяется со входом приемника.
  • Входы DSR, CTS, RI и DCD отключаются от входных линий и внутренне управляются битами DTRC, RTSC, OUT1C, IE.
  • Выходы управления модемом переводятся в пассивное состояние (логический ноль).

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

2.5.3. Ресурсы и конфигурирование СОМ-портов

Компьютер может иметь до четырех последовательных портов СОМ 1-COM4 (для машин класса AT типично наличие двух портов). СОМ-порты имеют внешние разъемы-вилки DB25P или DB9P, выведенные на заднюю панель компьютера (назначение выводов приведено в табл. 2.1).

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

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

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

  • Базовый адрес, который может иметь значения 3F8h, 2F8h, 3E8h (ЗЕОЬ, 338h) или 2E8h (2EOh, 238h). При инициализации BIOS проверяет наличие портов по адресам именно в этом порядке и присваивает обнаруженным портам логические имена СОМ1, COM2, COM3 и COM4. Для PS/2 стандартными для портов СОМЗ-СОМ8 являются адреса 3220h, 3228h, 4220h, 4228h, 5220h и 5228h соответственно.
  • Используемая линия запроса прерывания: для СОМ1 и COM3 обычно используется IRQ4 или IRQ11, для COM2 и COM4 - IRQ3 или IRQ 10. В принципе номер прерывания можно назначать в произвольных сочетаниях с базовым адресом (номером порта), но некоторые программы и драйверы (например, драйверы последовательной мыши) настроены на стандартные сочетания. Каждому порту, нуждающемуся в аппаратном прерывании, назначают отдельную линию, не совпадающую с линиями запроса прерываний других устройств. Прерывания необходимы для портов, к которым подключаются устройства ввода, UPS или модемы. При подключении принтера или плоттера прерываниями пользуются только многозадачные ОС (не всегда), и этот дефицитный ресурс PC можно сэкономить. Также прерываниями обычно не пользуются при связи двух компьютеров нуль-модемным кабелем.
  • Канал DMA (для UART 16450/16550, расположенных на системной плате) - разрешение использования и номер канала DMA. Режим DMA при работе с СОМ-портами используют редко.

Режим работы порта по умолчанию (2400 бит/с, 7 бит данных, 1 стоп-бит и контроль четности), заданный при инициализации порта во время BIOS POST, может изменяться в любой момент при настройке коммуникационных программ или командой DOS MODECOMx: с указанием параметров.

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

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

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

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

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

"Объяснить" системе, где какой порт, можно вручную любым отладчиком, занеся правильные значения базовых адресов в ячейки BIOS Data Area (это придется делать каждый раз после перезагрузки ОС перед использованием "потерянного" порта). Существуют тестовые утилиты, позволяющие находить порты (например, Port Finder).

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

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

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

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

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

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

Рис. 2.17. Заглушка для проверки СОМ-портов (LoopBack)

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

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

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

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

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

  • Соединив контакты линий RTS и CTS (или установив заглушку), следует попытаться вывести небольшой файл на СОМ-порт (например, командой COPYC:\AUTOEXEC. BAT СОМ 7;). С исправным портом эта команда успешно выполнится за несколько секунд с сообщением об успешном копировании. При этом потенциалы на выходах RTS и DTR должны измениться на отрицательные, а на выходе TD должна появиться пачка двуполярных импульсов с амплитудой более 5 В. Если потенциалы RTS и DTR не изменились, ошибка в буферных формирователях. Если на выходе RTS (и входе CTS) появился отрицательный потенциал, а команда COPY завершается с ошибкой, скорее всего, вышел из строя приемник линии CTS (или опять-таки ошибка в шлейфе). Если команда COPY успешно проходит, а изменения на выходе TD не обнаруживаются (их можно увидеть стрелочным вольтметром, но оценить амплитуду импульсов не удастся), виноват буферный передатчик сигнала TD.
  • Замена микросхем приемников и передатчиков существенно облегчается, если они установлены на разъёмах. Перед заменой следует с помощью осциллографа или вольтметра удостовериться в неисправности конкретной микросхемы. Расположение выводов микросхем приведено на рис. 2.6.

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

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

    Питание от интерфейса, или Почему может не работать мышь

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

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

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

    2.5.5. Функции BIOS для СОМ-портов

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

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

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

    • 00h - инициализация (установка скорости обмена и формата посылок, заданных регистром AL ; запрет источников прерываний). На сигналы DTR и RTS влияния не оказывает (после аппаратного сброса они пассивны).
    • 0lh - вывод символа из регистра AL (без аппаратных прерываний). Активируются сигналы DTR и RTS, и после освобождения регистра THR в него помещается выводимый символ. Если за заданное время регистр не освобождается, фиксируется ошибка тайм-аута и функция завершается.
    • 02h - ввод символа (без аппаратных прерываний). Активируется только сигнал DTR (RTS переходит в пассивное состояние), и ожидается готовность принятых данных, принятый символ помещается в регистр AL. Если за заданное время данные не получены, функция завершается с ошибкой тайм-аута.
    • 03h - опрос состояния модема и линии (чтение регистров MSR и LSR). Эту гарантированно быструю функцию обычно вызывают перед функциями ввода/вывода во избежание риска ожидания тайм-аута.

    При вызове INT 14h номер функции задается в регистре АН, номер порта (0-3) - в регистре DX(0 - СОМ 1, 1 - COM2 ...). При возврате из функций 0,1 и 3 регистр АН содержит байт состояния линии (регистр LSR), AL - байт состояния модема (MSR). При возврате из функции 2 нулевое значение бита 7 регистра АН указывает на наличие принятого символа в регистре AL", ненулевое значение бита 7 - на ошибку приема, которую можно уточнить функцией 3.

    Формат байта состояния линии (регистр АН):

    • Бит 7 - ошибка тайм-аута (после вызова функции 2 - признак любой ошибки).
    • Бит 6 - регистр сдвига передатчика пуст (пауза передачи).
    • Бит 5 - промежуточный регистр передатчика пуст (готов принять символ для передачи).
    • Бит 4 - обнаружен обрыв линии.
    • Бит 3 - ошибка кадра (отсутствие стоп-бита).
    • Бит 2 - ошибка паритета принятого символа.
    • Бит 1 - переполнение (потеря символа).
    • Бит 0 - регистр данных содержит принятый символ.

    Формат байта состояния модема (регистр AL):

    • Бит 7 - состояние линии DCD.
    • Бит 6 - состояние линии RI.
    • Бит 5 - состояние линии DSR.
    • Бит 4 - состояние линии CTS.
    • Бит 3 - изменение состояния DCD.
    • Бит 2 - изменение огибающей RI.
    • Бит 1 - изменение состояния DSR.
    • Бит 0 - изменение состояния CTS.
    Формат регистра AL при инициализации:
    • Биты - скорость обмена:
      • 000-110; 010-300; 100-1200; 110-4800,
      • 001-150; 011-600; 101-2400; 111-9600 бит/с.
    • Биты - контроль паритета:
      • 01 - число единиц нечетное,
      • 11 -четное,
      • 00 и 10 - без контроля.
    • Бит 2 - количество стоп-бит:
      • 0-1 бит,
      • 1-2 бита (на скорости 110 бит/с - 1,5 стоп-бита).
    • Биты - длина посылки:
      • 00-5 бит,
      • 01-6 бит,
      • 10-7 бит,
      • 11-8 бит.

    2.5.6. СОМ-порт и РпР

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


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

    1. Порт инициализируется с состоянием линий DTR=OA/, 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 с ожидается приход первого символа от устройства. По приходе символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел (рис. 2.18), выполняется вторая попытка опроса (см. п. 5), несколько отличающаяся от первой.
    5. На 0,2 с снимаются оба сигнала (DTR=0 и RTS=0), после чего они оба устанавливаются (DTR=1 и RTS=1).
    6. В течение 0,2 с ожидается приход первого символа от устройства, по приходе символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел, то в зависимости от состояния сигнала DSR переходят к проверке отключения Verify Disconnect (при DSR^O) или в дежурное состояние Connect Idle (при DSR=1).
    7. В дежурном состоянии Connect Idle устанавливается DTR=1, RTS=0, порт программируется на режим 300 бит/с, 7 бит данных, без паритета, 1 стоп-бит. Если в этом состоянии обнаружится DSR=0, ОС следует уведомить об отключении устройства.

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

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

    Описанный механизм разрабатывался фирмой Microsoft с учетом совместимости с не-РпР-устройствами - невозможность их вывода из строя и устойчивость системы к сообщениям, не являющимся РпР- идентификаторами. Например, обычная Microsoft Mouse при включении питания от интерфейса ответит ASCII-символом "М" (трехкнопочная - строкой "МЗ").

    Последовательный порт на практике служит для подключения к компьютеру считывателей штрих-кодов, электронных весов, а также другого внешнего оборудования. Статья описывает работу с последовательным портом в 1С:Предприятие 7.7 и 8.0. Приведен пример исходного кода внешней компоненты (Delphi 6), которая заменяет типовую компоненту scanopos.dll, и умеет работать с двумя или более сканерами. Автор статьи: romix | Редакторы: Волшебник , Vovan58 , VoDo
    Последняя редакция №19 от 06.05.11 | История
    URL:

    Ключевые слова: последовательный порт, COM, RS232, четность, кабель, сканер, RS-232, асинхронный, USB, ОбработкаВнешнегоСобытия, внешняя компонента, Delphi, scanopos.dll, TThread, торговое оборудование, связь

    Интерфейс RS-232 был разработан в 1969 году рядом крупных промышленных корпораций и опубликован Ассоциацией электронной промышленности США (Electronic Industries Association - EIA). (http://ru.wikipedia.org/wiki/RS-232).

    HyperTerminal

    Программа HyperTerminal позволяет просматривать, что приходит на ком-порт.
    Пуск-Программы-Стандартные-Связь-HyperTerminal

    Программа Portmon для Windows

    Автор: Марк Руссинович (Mark Russinovich)
    Программа Portmon предназначена для отслеживания и отображения всей активности последовательных и параллельных портов в системе.
    http://www.microsoft.com/rus/technet/sysinternals/utilities/Portmon.mspx

    Приобретение правильного сканера

    Меня очень часто спрашивают: почему не работает сканер штрихкодов в 1С.

    Штрихкодовые сканеры различаются интерфейсом подключения. В частности, сканеры USB могут имитировать клавиатуру (это проявляется тем, что штрихкод считывается в блокноте), имитировать интерфейс RS-232 или работать по USB без имитации чего-либо. Все три варианта часто различаются шнуром, который реализует тот или иной интерфейс.

    Существуют и более старые (не USB) варианты сканеров, которые подключаются "в разрыв клавиатуры".
    Напишу еще раз: приобретения клавиатурных или имитирующих клавиатуру сканеров для работы в 1С следует избегать .

    Эмуляция COM-порта при наличии USB-соединения

    Имеется возможность представить порт USB "под именем" свободного COM-порта, например, при помощи драйвера (FTDI, сайт http://www.ftdichip.com), и работать с ним как с новым COM-портом.

    Стандартные установки последовательного порта

    При экспериментах я устанавливал следующие (стандартные) настройки порта: скорость 9600 бит/с, 1 стоповый бит, нет контроля четности, 8 бит/байт). Для своих опытов я использовал кабель для соединения портов COM1 и COM2. Вы можете спаять такой кабель по схеме http://subscribe.ru/archive/tech.electronics/200104/21033223.html), или приобрести его на рынке примерно за 70 рублей.

    Чувствительность к "горячему" подключению

    Следует отметить, что COM и LPT-порты чувствительны к "горячему" подключению - соединяя включенные устройства, вы можете спалить порты (или что-то еще). Поэтому перед подключением устройства я рекомендую отключать их от сети питания, и только потом их выполнять их электрическое соединение.
    USB этим недостатком не страдает, и дозволяет "горячее" подключение устройств.

    Посылка тестовых данных в COM-порт

    Имея тестовый кабель, вы уже можете экспериментировать с внешними компонентами для 1С:Предприятие.
    Посылку тестовых данных в порт я производил из пакетного (.BAT) файла MS-DOS. Содержимое моего файла test.bat:
    mode com2 baud=9600 parity=n data=8 stop=1 type c:\test.txt >com2
    В файле c:\test.txt введите несколько символов (например, 1234567890) и завершите - обязательно! - их символом перевода строки (нажатием Enter).

    Альтернативный вариант записи в com:
    Текст = Новый ЗаписьТекста("\\.\Com1 ",КодировкаТекста.UTF8); Текст.ЗаписатьСтроку("СтрокаДляПечати "); Текст.ЗаписатьСтроку("PF "); Текст.Закрыть();

    Программа, подключенная к другому концу кабеля, может быть тестовой программой TestComPort.exe (скачайте комплект, приведенный в конце статьи; в программе надо выбрать порт - в данном случае COM1, нажать Открыть, и уже можно посылать в нее символы при помощи BAT-файла, в большом окне вы увидите принятые текстовые строки), конфигурацией для 1С:Предприятие, приложенной в этом же архиве, или стандартной конфигурацией наподобие "1С:Торговля и Склад", где активизирована работа со сканером, подключенным в последовательный порт (внешняя компонента scanopos.dll).

    Получение внешнего события в 1С:Предприятие

    Внешнее событие, например, со сканера, с другого внешнего оборудования, или просто сгенерированное программно, приходит в 1С (как 7.7, так и 8.0) в предопределенную процедуру
    ОбработкаВнешнегоСобытия().

    Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) //Глобальный обработчик внешнего события Сообщить ("Внешнее событие: Источник= "+Источник+" Событие= "+Событие+" Данные= "+Данные); КонецПроцедуры

    Эта процедура может располагаться в глобальном модуле или модуле формы 1С:Предприятие 7.7 или 8.0. Процедура принимает три входящих параметра: Источник, Событие и Данные. Это три текстовые строки, которые могут принимать произвольные значения - в качестве Источника можно установить имя внешней компоненты, в качестве события - строку-идентификатор события, например, "BarCodeValue", а в качестве данных - данные от устройства, например, считанный штрихкод.

    Инициализация внешней компоненты

    Код процедуры ПриНачалеРаботыСистемы() в тестовой конфигурации выглядит следующим образом:
    /////////////////////////////////////////////////////////////////////// Процедура ПриНачалеРаботыСистемы() //Предопределенная процедура 1С ок=1 ; Если глЗагрузитьВнешнююКомпоненту("vk_rs232 ")=0 Тогда Сообщить ("Внешняя компонента не была загружена! ","! "); Иначе rs232=СоздатьОбъект ("AddIn.vk_rs232 "); КонецЕсли ; ИмяПорта=""+Константа .ComPort; Сообщить ("Константа.ComPort: "+ИмяПорта); Сообщить ("При считывании кода, который завершается символами #13#10, здесь должны появляться считанные строки. "); //Начинаем слушать порт rs232.ОткрытьПорт(ИмяПорта); КонецПроцедуры

    Первый запуск конфигурации необходимо производить под правами администратора или привилегированного пользователя Windows. Это необходимо для любых внешних компонент или OLE-объектов, чтобы компонента (DLL) могла "прописать" себя в системный реестр Windows.

    Пример работы с COM-портом

    Рассмотренные ниже примеры работы с последовательным (COM-) портом будут использовать средства Windows API (системные функции CreateFile и т.д.). Для компиляции примеров потребуется Delphi версии 6 (впрочем, вы легко сможете переделать примеры под любой язык программирования, который поддерживает вызовы Windows API).

    В конце статьи приведена ссылка, по которой вы можете скачать работающие примеры кода внешней компоненты (vk_rs232.dll) и упрощенного тестового примера (TestComPort.exe, который содержит 120 строк тестового кода). Рассмотренная в качестве примера внешняя компонента для 1С:Предприятие
    умеет читать текстовые строки из последовательного порта, и представлять их как событие считывания штрихкода "BarCodeValue". Поэтому компоненту можно без изменений использовать, например, в конфигурации "Торговля и Склад" в качестве замены для штатной компоненты для считывания штрихкодов. Также компонента умеет записывать "встречные" данные в последовательный порт, если это необходимо для работы с устройствами (для сканеров штрих-кодов это не нужно).

    Пример расчитан на передачу в устройство или из устройства текстовых строк, разделенных символами 13,10, что характерно, например, для сканеров штрихкодов. Я использую фиксированные настройки (скорость - 9600, один стоп-бит, без бита четности, 8 бит в одном байте), а также фиксированные настройки таймаута (чтение "отваливается" через относительно короткий промежуток времени, чтобы избежать зависания). Вы можете переделать эти умолчания под ваше оборудование и требования к программному обеспечению.

    Настройка сканера

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

    Общая идеология работы с RS-232 в системе Windows

    В MS-DOS (и ранних версиях Windows, включая 95 и 98), работа с последовательными портами часто производилась напрямую через порты ввода-вывода командами Ассемблера IN и OUT. Этот способ не поддерживают современные операционные системы, начиная с Windows NT. В них остается (надо сказать, довольно древняя) возможность работы с этими портами как с файлами.

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

    HCom:=CreateFile("COM2 ", ...); ok:=WriteFile(//uses Windows hCom, //Файл Buff, //Буфер откуда пишем nBytes, wr_cnt, //Число записанных байтов nil); ok:=ReadFile(//uses Windows hCom, //Файл Buff, //Буфер куда считываем 100 , //Число байтов для считывания rd_cnt, //Число считанных байтов nil); CloseHandle(hCom);

    Настройки параметров и таймаутов COM-порта производятся при помощи функций SetCommState и SetCommTimeOuts соответственно. Ссылка на работающий пример кода, который показывает эту идею более развернуто, приведена в конце статьи.

    Конечно, есть возможность работать с COM-портом и "более простыми средствами" - вплоть до открытия файла с именем "COM2", записи строк в этот файл и чтения встречных данных от устройства из этого же файла.

    Внешняя компонента, по сравнению с этим "простым" решением, добавляет возможность генерировать события считывания данных (например, штрихкодов со сканера) в асинхронном режиме, когда 1С не "замирает" до очередного считывания штрихкода, и не "крутится" в бесконечном цикле чтения, а получает внешние события, и реагирует на них в предопределенной процедуре ОбработкаВнешнегоСобытия(). Это удобно для пользователя, и не заставляет его нажимать на клавиатуре лишние клавиши перед считыванием штрихкода.

    MSDN

    В качестве официальной справки по различным функциям Windows используйте MSDN, который можно приобрести на DVD или на 3-х CD. В качестве "источника и составной части" он входит в комплект средств разработки от Microsoft, или приобретается отдельно. Кроме того, MSDN выложен в интернете, и как правило, находится в первых строках запросов в поисковике Google по контрастному запросу наподобие "SetCommState".

    Поддержка двух или более сканеров (08.03.2006)

    Компонента теперь использует потоки (объект TThread) вместо таймера. Компонента содержит тестовый пример для работы с двумя объектами (например, двумя сканерами).

    Настройка конца строки (12.07.2006)

    Компонента понимает свойство КонецСтроки (в англоязычном написании - EOL).
    По умолчанию - Симв(13)+Симв(10) в качестве последовательности, которая отделяет один штрихкод от другого.

    Глубина буфера событий

    Компонента позволяет выставить глубину буфера событий (свойство ГлубинаБуфераСобытий).
    Это значит, что если компьютер занят рассчетами, а в это время приходят новые события, то они будут накапливаться только в пределах этого буфера (последующие события будут потеряны).


    iEvent:= nil;
    pConnection.QueryInterface(IID_IAsyncEvent,iEvent);
    iEvent.SetEventBufferDepth(300); //глубина буфера событий

    Заключение

    Мы рассмотрели работу с последовательным портом RS-232 из 1С:Предприятие. Различие между версиями 1С:Предприятие 7.7 и 8.0 в данном случае несущественно - внешние компоненты совместимы и могут использоваться в обеих версиях системы. Вы можете посылать данные в порт или считывать их из порта, чтобы управлять внешним устройством или принимать данные от него по протоколу RS-232. При помощи тестового кабеля, который соединяет два COM-порта, вы можете имитировать работу с оборудованием, даже не имея самого устройства в наличии.

    Скачать тестовую конфигурацию и исходный код внешней компоненты

    Скачать тестовую конфигурацию и исходный код внешней компоненты вы можете по этой ссылке:
    http://x-romix.narod.ru/vk_rs232.rar
    (скачивать ЛЕВОЙ кнопкой мыши, 280К)

    http://x-romix.narod.ru/vk_rs232_hex.zip - версия компоненты для двоичного обмена (HEX-формат, шестнадцатеричные цифры от 00 до FF).

    Министерство образования и науки Российской Федерации

    Федеральное государственное бюджетное образовательное учреждение

    высшего профессионального образования

    «Комсомольский-на-Амуре государственный технический университет»

    Кафедра «Промышленная электроника»

    Тестирование СОМ-порта персонального компьютера

    Методические указания к лабораторной работе по курсу

    «Отладочные средства микропроцессорных систем» для студентов направления 210100 «Электроника и наноэлектроника»

    Комсомольск-на-Амуре 2013

    Тестирование СОМ-порта персонального компьютера:

    Методические указания к лабоpатоpной работе по курсу "Отладочные средства микропроцессорных систем" для студентов направления 210100 «Электроника и наноэлектроника» / Сост. С.М. Копытов. - Комсомольск-на-Амуpе: Комсомольский-на-Амуpе гос. техн. ун-т, 2013. - 20 с.

    Рассмотрены последовательный интерфейс RS-232C, сигналы и программная поддержка СОМ-порта персонального компьютера, приведены рекомендации по его тестированию.

    Предлагаемые методические указания предназначены для студентов направления 210100.

    Печатается по постановлению редакционно-издательского совета Комсомольского-на-Амуре государственного технического университета.

    Согласовано с отделом стандартизации.

    Рецензент В.А. Егоров

    Цель работы: изучить устройство последовательного интерфейса RS-232C, физику его работы, разъемы и выводы COM – портов, научиться проверять их работоспособность.

    1 основные сведения

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

    Большим подспорьем данный порт оказывается в практике разра­ботчиков, поскольку позволяет легко подключаться к разрабатываемым микропроцессорным устройствам. Подавляющее большинство выпуска­емых в настоящее время микропроцессоров и микроконтроллеров имеют встроенный последовательный универсальный асинхронный приемопередатчик UART (Universal Asynchronous Receiver And Transmitter), полностью совместимый по формату передаваемых данных с СОМ-портом.

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

    Компьютеры типа IBM PC могут иметь до четырех последовательных СОМ-портов. Для этого в служебной области данных BIOS (базовой системы ввода вывода) компьютера зарезерви­рованы служебные ячейки памяти 0000:0400, 0000:0402, 0000:0404 и 0000:0406, в которых хранятся адреса портов и СОМ1, COM2, COM3 и COM4 соответ­ственно. Если какой-либо из портов не подключен или заблокирован, в соот­ветствующей ячейке будет храниться ноль, что будет означать отсутствие такого порта в компьютере. Стандартными базовыми адресами портов СОМ1 - COM4 являются 3F8h, 2F8h, 3E8h и 2E8h. Допускается использование и некоторых других свободных адресов в области портов ввода-вывода компьютера.

    Ячейки памяти BIOS с адресами 0000:047С, 0000:047D, 0000:047E и 0000:047F содержат величину тайм-аута соответствующего порта, т.е. максимальное время ожидания отклика от порта в тиках. Один тик равен 18 мс. Карта адресов СОМ-портов приведена в табл. 1.

    Таблица 1 - Карта адресов СОМ-портов

    Адрес памяти (hex-формат)

    Содержимое

    Значение по умолчанию (hex-формат)

    Адрес СОМ1

    Тайм-аут СОМ1

    Тайм-аут COM2

    Тайм-аут COM3

    Тайм-аут COM4

    Любой из СОМ-портов может быть назначен на обработчик прерывания IRQ3 или IRQ4 с помощью программы SETUP компьютера.

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

    Вначале рассмо­трим сигналы, выводимые на разъем СОМ-порта.

    Компьютеры могут иметь девяти- или двадцатипятиконтактные разъ­емы для СОМ-портов. Назначение сигналов и соответствие их контактам этих разъемов стандартизовано. Описание сигналов СОМ-порта приведено в табл. 2.

    Таблица 2 - Описание сигналов разъемов DB-9M и DB-25M последовательного СОМ-порта

    Контакт

    Сигнал

    Направление

    Название

    Назначение

    Защитная земля

    Передаваемые данные

    Принимаемые данные

    Request to Send

    Запрос на передачу

    Готовность к приему

    Данные готовы

    Сигнальная земля

    Data Carrier Detect

    Обнаружена несущая данных

    Data Terminal Ready

    Готовность терминала

    Индикатор вызова

    В скобках приведен номер контакта для 25-контактного разъема, без скобок - для 9-контактного.

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

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

    Рисунок 1 - Формат слов СОМ-порта

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

    Данный формат слов поддерживается в компьютерах и устройствах, имеющих последовательные порты, с помощью микросхем UART типа 16550А. Эти микросхемы являются более развитыми моделями своих предшественников I8052 фирмы Intel, применявшихся в самых первых компьютерах типа IBM PC.

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

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

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

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

    Для асинхронного режима принят ряд стандартных скоростей обмена: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 и 115200 бит/с. Количество бит данных может составлять 5, 6, 7 или 8 (5- и 6-битные форматы распространены незначительно). Количество стоп-бит может быть 1, 1,5 или 2 ("полтора бита" означает только длительность стопового интервала).

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

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

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

    Рисунок 2 - Полная схема соединения по RS-232C

    Интерфейс позволяет исключить канал удаленной связи вместе с парой устройств АКД, соединив устройства ООД непосредственно с помощью нуль-модемного кабеля (рис. 3), в котором перекрещиваются соответствующие пары проводников, чтобы выходы соединялись с входами. Например, должны быть связаны выводы TxD и RxD.

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

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

    Стандарт RS-232C использует несимметричные передатчики и приемники - сигнал передается относительно общего провода - схемной земли. Интерфейс не обеспечивает гальванической развязки устройств. Логической единице соответствует напряжение на входе приемника в диапазоне -25...-3 В. Логическому нулю соответствует диапазон +3...+25 В. Диапазон -3...+3 В - зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения порога. Уровни сигналов на выходах передатчиков должны быть в диапазонах -15...-5 В и +5...+15 В для представления единицы и нуля соответственно.

    Для решения проблемы электрической совместимости при подключении к ПК микроконтроллерных устройств с ТТЛ-уровнями используют преобразователи уровней, например, микросхемы MAX232.

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

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

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

    Опасность пробоя возрастает особенно в зимний период, когда воздух становится сухим от мороза. Другой причиной может быть неграмотное соединение двух компьютеров через СОМ-порт, имеющих разный по­тенциал на корпусе относительно земли. В результате перечисленных не­благоприятных воздействий порт перестает нормально функционировать, но все же поддается «лечению». Обычно, как правило, выходит из строя буферная микросхема, обеспечивающая преобразование ТТЛ-уровней сигналов в сигналы стандарта RS-232, которые должны находиться в диа­пазоне от -3...-25 В до +3...+25 В.

    Для программной поддержки СОМ-портов в BIOS компьютера имеется специальное программное прерывание INT 14h. Ниже дается описание основных функций этого программного прерывания. Выбор номера функции этого прерывания задается в регистре процессора АН.

    Функция: 0 - инициализация порта

    Вход: АН=0

    АL=параметры инициализации порта (битовые разряды):

    1,0 - Длина слова: 09=5 бит, 01=6 бит, 10=7 бит, 11=8 бит

    2 - Длина стоп бита: 0=1 бит, 1=2 бита

    4,3 - Контроль четности: 00=нет, 01=нечетность,11=четность

    7...5 - Скорость (бод): 000=110, 001=150, 010=300, 011=600, 100=1200, 101=2400, 110=4800, 111=9600

    Выход: АL=состояние модема (битовые разряды):

    0- изменение сигнала CTS

    1- изменение сигнала DSR

    2- изменение сигнала RI

    3- изменение сигнала RxD

    4- готовность приемника

    5- данные к передаче готовы

    6- обнаружен вызов

    7- обнаружен сигнал приемной линии

    АН=состояние линий (битовые разряды):

    0- готовность данных

    1- ошибка скорости

    2- ошибка четности

    3- ошибка кадрирования

    4- обнаружен перерыв

    5- регистр буфера передатчика пуст

    6- регистр сдвига передатчика пуст

    7- тайм-аут

    Функция:1 - передать слово

    Вход: АН=1

    DХ=номер порта (0=СОМ1, 1=СОМ2, 2=СОМЗ, 3=СОМ4)

    АL=передаваемое слово

    Функция: 2 - принять слово

    Вход: АН=2

    АL=не используется

    Выход: АL=принятое слово

    АН=состояние линий (см. функцию 0)

    Функция: 3 - чтение состояния порта

    Вход: АН=3

    DХ=номер порта (0=СОМ1, 1=СОМ2, 2=СОМ3, 3=СОМ4)

    AL - не используется

    Выход: АН, АL=состояние линий и модема (см. функцию 0)

    Для примера, вызов функции 0 данного прерывания на языке Ассем­блер выглядит следующим образом:

    MOV AH, 0 ; функция 0

    MOV AL, 11111011В; 9600 бод, четность, 1 стоп бит, длина 8 бит

    MOV DX, 2 ; номер порта 2=COM3

    INT 14H ; вызов прерывания 14h

    Теперь СОМ-порт будет настроен для работы на скорости 9600 бод, с контролем по четности, одним стоповым битом и длиной слова 8 бит, а регистры АН и AL будут хранить коды состояния СОМ-порта.

    Ниже приведены примеры программ для работы с последовательным портом на языке Ассемблер. В первом примере производиться инициа­лизация СОМ-порта. Сначала в программе определяется базовый адрес порта, затем производится установка параметров СОМ-порта для рабо­ты на скорости 4800 бод, с одним стоп-битом, контролем на четность и восемью битами в слове. Затем маскируются прерывания.

    ; Инициализация СОМ-порта

    MOV АХ, 40 ; Запишем адрес порта СОМ1

    MOV ES, АХ; в регистр ES = 0040Н

    MOV DX, ES: ; Запишем в регистр DX базовый адрес СОМ1

    MOV COM1_ADR, DX ; Запомним адрес порта СОМ1 в переменной

    MOV AL, 80H ; Установим в 1 старший бит

    OUT DX, AL ; регистра управления

    DEC DX ; Установим скорость = 4800 бод

    DEC DX ; DX = адресу старшего байта делителя скорости

    MOV AL, 0 ; Установка старшего байта делителя

    DEC DX ; DX = адресу младшего байта делителя скорости

    MOV AL, 18H ; Установка младшего байта делителя

    ADD DX, 3 ; DX = адресу регистра управления

    MOV AL, 11011011В; 4800 бод, четность, 1 стоп бит, длина 8 бит

    DEC DX ; DX = адресу регистра разрешения прерываний

    MOV AL, 00Н; Прерывания запрещены

    Следующие два примера демонстрируют способ чтения и передачи слова через СОМ-порт с ожиданием готовности.

    ; Чтение слова с ожиданием:

    MOV DX, СОM1_ADR ; DX = базовому адресу СОМ1

    TEST AL, 01H ; Если бит 1 = 1 слово принято

    JZ WAIT ; Если нет - ждем

    SUB DX, 5 ; DX = адресу регистра приемника

    IN AL, DX ; Чтение принятого байта

    ; Передача слова из АН с ожиданием:

    MOV DX, COM1_ADR ; DX = базовому адресу СОМ1

    ADD DX, 5 ; DX = адресу регистра состояния

    IN AL, DX ; Чтение байта состояния

    TEST AL, 40H ; Бит 6=1 (готов к передаче байта)

    JZ WAIT ; Если нет - ждем

    SUB DX, 5 ; DX = адресу регистра передатчика

    OUT DX, AL ; Передача слова

    Для настройки подключения к СОМ-портам ПК нового и экспериментального оборудования удобно использовать готовые терминальные программы. Одна из таких программ - Terminal 1.9b является монитором COM порта персонального компьютера. С помощью программы можно легко отправлять и принимать данные через COM порт компьютера по протоколу RS232. Среди достоинств программы - гибкая настройка программы под различные режимы работы (различная скорость работы, конфигурация стоп-битов, конфигурация количества бит-данных и многое другое). Интерфейс программы Terminal 1.9b прост и понятен. Скриншот окна программы Terminal 1.9b приведен на рис. 4.


    Рисунок 4 - Окно программы Terminal 1.9b

    Для настроек скорости передачи, номера порта, параметров передачи и прочих потребностей нужно просто выделить требуемый параметр. Выставив галочку, можно выдать информацию в разных системах счисления, что порой бывает очень удобно. В один клик доступна таблица ASCII, а среди особых преимуществ - возможность выдать поток данных в виде графика с размахом от 0 до 255 точек. Также можно писать скрипты на паскалеподобном языке, делающие с входящими-исходящими данными всевозможные преобразования.

    Для настройки параметров СОМ-порта в операционной системе Win­dows необходимо выполнить следующую последовательность действий: Пуск-» Настройка-» Панель управления-» Система-» Оборудование-» Диспетчер устройств-» Порты-» Последовательный порт-» Параметры порта. При этом на экране мониторе появится изображение, подобное приведенному на рис.5. С помощью раскрывающихся меню устанавливаются все необходимые параметры работы СОМ-порта.


    Рисунок 5 - Окно параметров СОМ-порта

    Тестирование портов в составе компьютера можно выполнить с помощью тестовой программы Checkit или Norton Diagnostic . Заглушку для СОМ-порта при использовании этих тестовых программ можно из­готовить, воспользовавшись табл. 3.

    Таблица 3 - Назначение цепей заглушки, для тестирования СОМ-порта

    Вывод

    Сигнал

    Направление

    Вывод

    Сигнал

    Направление

    Заглушка изготавливается из разъема-розетки DB-9F путем распайки перемычек между контактами 3-2, 4-6-1-9 и 7-8.

    Для проверки работоспособности порта необходимо убедиться в исправности всех выходных и входных цепей сигналов, присутствующих на его разъеме, а также в способности микросхемы, обслуживающей порт, передавать и принимать данные. Предлагаемая в программа Testrs . exe и простой пробник позволяют выполнить эту процедуру.

    Кроме того, эта программа позволяет убедиться в исправности порта, когда драйвер порта некорректно себя ведет. Это достигается тем, что обращения к порту из предлагаемой программы производятся с использованием стандартных функций Windows, так называемых API.