Как выглядит com порт. COM-порт. Сопряжение устройств с ПК. Программирование

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

Порт и память

То есть, программа прочитает данное из памяти в процессор, что-то с ним сделает, может быть получит из этой информации какие-то новые данные, которые запишет в другое место. Или само данное просто перепишет на другое место. Во всяком случае в памяти информация, которая однажды была записана может быть либо прочитана, либо стёрта. Ячейка получается как сундучок, стоящий у стенки. А вся память состоит из ячейки каждая ячейка имеет свой адрес. Точно как сундучки, стоящие в ряд у стенки в подвале скупого рыцаря.

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

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

Просто и красиво. Эти порты так и назвали сразу — порты ввода-вывода. Через одни из них данные отправляются куда-то, через другие — откуда-то принимаются.

Ну а дальше начинается движение по кругу. Вот есть одно устройство, и есть другое. И вот есть цепочка символов, каждый из которых состоит из отдельных двоичных битов, и эту цепочку нужно передать. Как передавать? Можно по линии из 8 проводочков сразу передавать по целому символу — один проводок = один бит, потом код другого, потом третьего, и так, пока не передашь всю цепочку.

А можно было разворачивать каждый бит не в пространстве (по проводочкам), а во времени: сначала передать один бит символа, потом второй и так восемь раз. Ясно, что во втором случае нужны какие-то дополнительные средства, чтобы символы так разворачивать во времени.

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

И скорость передачи будет другая:

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

  1. Сразу по восемь бит (то есть побайтно) передавать быстрее, но проводочков надо в восемь раз больше
  2. По одному биту передавать — нужно всего один информационный проводок, зато будет в 8 раз медленнее.

Вот и назвали в первом случае передачу параллельной, а во втором случае — последовательной.

Интерфейс портов

А вся система такой передачи — в одном случае так, в другом — этак, называется интерфейс . Один интерфейс параллельный, другой — последовательный. Почти одно и то же, порты, один параллельный, другой последовательный.

Чем понятие порт отличается от понятия «интерфейс»? В современной технике слова не только появляются, они растут и получают «образование». И как и у людей, могут становиться узкими специалистами, а могут стать «дилетантами». Вот такое типичное слово-дилетант — «интерфейс». Потому что оно — «каждой дыре затычка». Интерфейсы бывают:

А смысл слова — что-то между чем-то. Интер — между, фэйс — лицо. Красиво получилось, поэтому и везде употребляется. Например, пользовательский интерфейс системы Windows — это экранное лицо системы, предназначенное для общения с человеком.

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

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

В нашей теме интерфейс обозначает вещи немного более простые.

Это аппаратные + программные средства передачи + правила передачи. Аппаратные — понятно. А вот программные средства на компьютерах и в современных средствах связи присутствуют всегда и везде. Даже бывает так: сначала на какой-то аппаратной базе создаётся нечто функциональное, которое выполняется не сразу, а с применением специально написанных программ . А программы все настраиваются.

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

Поэтому интерфейс такой часто и называют — программно-аппаратным .

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

Например, чтобы 1 битовый приходил в виде +12 или +15 вольт перепада напряжения от нуля. И чтобы была в виде прямоугольничка, или острого всплеска - пик которого обязательно был не меньше, ну, + 5 вольт, а верхнее ограничение вводить, допустим, не очень обязательно. Это потому, что при передаче импульсов на какие-то расстояния электрические сигналы имеют свойство ослабевать и «размазываться».

Если с одного конца отправят строго 12 вольт, то до другого может дойти 3 вольта, а это системой приёма может расцениться просто как шум в линии, и переданная информация будет потеряна.

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

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

Порт слово простое и тоже не совсем однозначное. Но смысл сходный: то, что что-то грузит на что-то и куда-то отправляет. Или наоборот, то, что что-то принимает и что-то из него выгружает. Смысл почти тот же, что и программно-аппаратный интерфейс, но как-то лаконичнее. И строже, как на флоте («Вам скажут — не спорьте… а мы и не спорим…»). Только наши сигналы плывут не по морю, а по кабелю.

Распиновка разъёмов COM-порта

Распиновка никакой связи не имеет с распинанием, хотя, как проводки, вольно бегущие в одной оболочке кабеля, разбирают на стороны и жёстко припаивают к своим штырькам, сходно с распинанием. Штырёк, по-английски «pin», булавка, поэтому и распиновка, слово уже это компьютерно-связистский «проанглийский» жаргонизм. Означает — распайка проводов по штырькам на разъёме.

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

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

COM-порты компьютера, это связь компьютерного комплекса «дальнего действия». В отличие от параллельных портов и кабелей, ведших на «тяжёлые» устройства — принтеры, сканеры, Com-порты присоединяли к компьютеру «лёгкие» юниты — мышка, модем. Первые межкомьютерные интерфейсы (через «нуль-модем»). В дальнейшем, когда распространились локальные сети , а мыши стали подключаться по такому же разъёму, как и клавиатура — port ps/2 (пэ-эс-пополам) — com port как-то был подзабыт.

Возрождение пришло с появлением последовательного интерфейса USB. Вот и получилось движение по кругу. Теперь на USB можно встретить, кроме флешек, и мыши USB-шные, и USB-шные «клавы». Принтеры, сканеры модемы — вся периферия теперь на USB, забыла уже о толстых и солидных параллельных LTP — кабелях, которые необходимо было в обязательном порядке прикручивать с каждой стороны на 2 болта. А проводочков-то в этих USB — два сигнальных (собственно, канал один, один прямой сигнал, другой тот же — инверсный) и два — питание и корпус.

Прежних последовательных портов COM было несколько. Самый маленький — и самый востребованный 9-контактный порт (D9), к которому подключали большую чать устройств: мыши, модемы, нуль-модемные кабели. Контакты располагались в два ряда, 5 и 4 в ряд, получалась трапеция. Поэтому и название D9. На «маме» нумерация шла слева направо и сверху вниз:

1 2 3 4 5

Распайка COM-порта, port RS232, 9 контактов.

Обозначение Тип Описание
1 DCD Вход Высокий уровень от модема, когда он принимает несущую модема-партнёра
2 RxD Вход Входящие импульсы данных
3 TxD Выход Исходящие импульсы данных
4 DTR Выход Высокий уровень (+12В) показывает готовность компьютера к приёму данных. Подключённая мышь использовала этот контакт как источник питания
5 GND Общий Земля
6 DSR Вход Готовность к передаче данных устройством
7 RTS Выход Ответная готовность устройства — партнёра
8 CTS Вход Готовность к приёму данных от партнёра
9 RI Вход Сигнал информирования компьютера о входящем звонке, поступившим на модем из линии связи

Описание интерфейса 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".

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

Описание

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

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

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

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

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

Применение

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

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


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

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

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

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

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

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

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

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

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

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

Interrupt Enable Register (IER)

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

Interrupt Identification Register (IIR)

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

Line Control Register (LCR)

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

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

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

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

Modem Control Register (MCR)

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

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

Line Status Register (LSR)

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

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

Modem Status Register (MSR)

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

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

THR - промежуточный регистр данных передатчика (только для записи) Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS . Бит 0 передается (и принимается) первым. При длине посылки менее 8 бит старшие биты игнорируются.
RBR - буферный регистр принимаемых данных (только для чтения) Данные, принятые входным сдвигающим регистром помещаются в регистр RBR , откуда они могут быть считаны процессором. Если к моменту окончания приема очередного символа предыдущий не был считан из регистра, фиксируется ошибка переполнения. При длине посылки менее 8 бит старшие биты в регистре имеют нулевое значение.
DLL - регистр младшего байта делителя частоты .
DLM - регистр старшего байта делителя частоты . Делитель определяется по формуле D=115200/V, где V - скорость передачи, бит/с. Входная частота синхронизации 1 8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.
IЕR - регистр разрешения прерываний . Единичное значение бита разрешает прерывание от соответствующего источника.
Назначение бит регистра IER :
* биты =0 - не используются;
* бит 3 - Mod_IЕ - по изменению состояния модема (любой из линий CTS, DSR, RI, DCD );
* бит 2 - RxL_IЕ - по обрыву/ошибке линии;
* бит 1 - TxD_IE - по завершении передачи;
* бит 0 - RxD_IЕ - по приему символа (в режиме 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 причину прерывания идентифицируют биты .
* О11 - ошибка/обрыв линии. Сброс выполняется чтением регистра состояния линии.
* 010 - принят символ. Сброс выполняется чтением регистра данных приемника
* 110 - индикатор тайм-аута (за 4-кратный интервал времени символа не передано и не принято ни одного символа, хотя в буфере имеется, по крайней мере, один). Сброс выполняется чтением регистра данных приемника.
* 001 - регистр THR пуст. Сброс выполняется записью данных.
* 000 - изменение состояния модема (CIS, 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 - EVENPAR (Even Parity Select) - выбор типа контроля: 0 - нечетность, 1 - четность.
* Бит 3 - PAREN (Parity Enable) - разрешение контрольного бита:
1 - контрольный бит (паритет или постоянный) разрешен;
0 - контрольный бит запрещен.
* Бит 2 - STOPB (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) - разрешение режима диагностики:
0 - нормальный режим;
1 - режим диагностики (см. ниже).
* Бит 3 - IE (Interrupt Enable) - разрешение прерываний с помощью внешнего выхода OUT2 MSR.7 :
0 - прерывания запрещены;
1 - прерывания разрешены.
* Бит 2 - OUT1C (OUT1 Bit Control) - управление выходным сигналом 1 (не используется); в режиме диагностики поступает на вход MSR.6 .
* Бит 1 - RTSC (Request To Send Control) - управление выходом RTS ; в режиме диагностики поступает на вход MSR.4 :
0 - активен (-V);
1 - пассивен (+V).
* Бит 0 - DTRC (Data Terminal Ready Control) - управление выходом DTR ; в режиме диагностики поступает на вход MSR.5 :
0 - активен (-V);
1 - пассивен (+V).
LSR - регистр состояния линии (точнее, состояния приемопередатчика). Ниже описано назначение бит регистра LSR.
* Бит 7 - FIFOE (FIFO Error Status) - ошибка принятых данных в режиме FIFO (буфер содержит хотя бы один символ, принятый с ошибкой формата, паритета или обрывом). В не FIFO-режиме всегда 0.
* Бит 6 - TEMPT (Transmitter Empty Status) - регистр передатчика пуст (нет данных для передачи ни в сдвиговом регистре, ни в буферных регистрах THR или FIFO).
* Бит 5 - THRE (Transmitter Holding Register Empty) - регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO-буфере передачи. Может являться источником прерывания.
* Бит 4 - BD (Break Detected) - индикатор обрыва линии (вход приемника находится в состоянии 0 не менее, чем время посылки символа).
* Бит 3 - FE (Framing Error) - ошибка кадра (неверный стоп-бит).
* Бит 2 - РЕ (Parity Error) - ошибка контрольного бита (паритета или фиксированного).
* Бит 1 - ОЕ (Overrun Error) - переполнение (потеря символа). Если прием очередного символа начинается до того, как предыдущий выгружен из сдвигающего регистра в буферный регистр или в регистр FIFO, прежний символ в сдвигающем регистре теряется.
* Бит 0 - DR (Receiver Data Ready) - принятые данные готовы (в DHR или FIFO-буфере). Сброс - чтением приемника.
Индикаторы ошибок - биты - сбрасываются после чтения регистра LSR . В режиме FIFO признаки ошибок хранятся в FIFO-буфере вместе с каждым символом. В регистре они устанавливаются (и вызывают прерывание) в тот момент, когда символ, принятый с ошибкой, находится на вершине FIFO (первый в очереди на считывание). В случае обрыва линии в FIFO заносится только один «обрывной» символ, и UART ждет восстановления и последующего старт-бита. MSR - регистр состояния модема. Ниже описано назначение бит регистра MSR :
* Бит 7 - DCD (Data Carrier Detect) - состояние линии DCD :
0 - активна (-V);
1 - пассивна (+V).
* Бит 6 - RI (Ring Indicator) - состояние линии RI :
0 - активна (-V);
1 - пассивна (+V).
* Бит 5 - DSR (Data Set Ready) - состояние линии DSR :
0 - активна (-V);
1 - пассивна (+V).
* Бит 4 - CTS (Clear To Send) - состояние линии CTS :
0 - активна (-V);
1 - пассивна (+V).
* Бит 3 - DDCD (Delta Data Carrier Detect) - изменение состояния DCD .
* Бит 2 - TERI (Trailing Edge Of Ring Indicator) - спад огибающей RI (окончание звонка).
* Бит 1 - DDSR (Delta Data Set Ready) - изменение состояния DSR .
* Бит 0 - DCTS (Delta Clear To Send) - изменение состояния CTS .
Признаки изменения (биты ) сбрасываются по чтению регистра.
SRC - рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 отсутствует).
В диагностическом режиме (при LМЕ=1 ) внутри UART организуется внутренняя «заглушка»:
* выход передатчика переводится в состояние логической единицы;
* вход приемника отключается; * входы DSR, CTS, RI и DCD отключаются от входных линий и внутренне управляются битами DTRC, RTSC, OUT1C, IE ;
* выходы управления модемом переводятся в пассивное состояние (логический ноль).
Переданные данные в последовательном виде немедленно принимаются, что позволяет проверять внутренний канал данных порта (включая сдвигающие регистры) и отработку прерываний, а также определять скорость работы UART.

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

Прерывания и адреса

Передача данных от центрального процессора к любому периферийному устройству и наоборот контролируется заданием запроса на прерывание (IRQ) и адреса ввода-вывода (I/O address). Для внешнего периферийного устройства запрос на прерывание и адрес ввода-вывода приписываются тому порту, через который оно подсоединяется.

Сами слова "запрос на прерывание" сообщают, что прерывается работа ЦП и ему предписывается заняться данными, поступающими с какого-либо устройства. Всего существует 16 прерываний - от 0 до 15. Все последовательные и параллельные порты, как правило, требуют своего собственного запроса прерывания, за исключением того, что порты СОМ1 и COM3, а также COM2 и COM4 зачастую имеют общий запрос прерывания.

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

При проблемах с портом проверьте, какие запросы на прерывание и адрес ввода-вывода ему приписаны.

Панель управления - Система - Устройства - Порты СОМ и LPT

Если вы увидите перед какой-либо строчкой желтый кружок с восклицательным знаком внутри, то, возможно, найдете причину "помехи". Выделив строчку, нажмите "Свойства - Ресурсы". В поле "Список конфликтующих устройств" найдите, что вызывает конфликт. Если окажется, что это какая-нибудь старая плата, не поддерживающая Plug & Play, то она будет указана в списке как "Неизвестное устройство".

Чтобы разрешить проблему, измените для одного из устройств-нарушителей запрос на прерывание или адрес ввода-вывода. Если порт находится на системной плате, то используйте для этого программу начальной установки системы System Setup (BIOS).

Для вхождения в System Setup во время запуска ПК нажмите клавишу "Delete", "F1" или иную - узнайте в документации на систему. Во многих программах начальной установки можно назначать запрос на прерывание и адрес ввода-вывода (установить ресурсы) для каждого конкретного порта, отменив старые.

Найдите неиспользуемый запрос на прерывание или адрес ввода-вывода.

Панель управления - Система - Устройства - Компьютер

Вы увидите полный список применяемых ресурсов. Если неиспользуемых запросов на прерывание нет, то попробуйте отключить с помощью System Setup неиспользуемый порт.

После этого...

Система - Устройства - Конфликтующее устройство - Ресурсы

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

Установка параметров паралельных портов

Параллельные порты обозначаются аббревиатурой LPT. Компьютер автоматически приписывает каждому обнаруженному параллельному порту адреса от LPT1 до LPT3.

Если вы устанавливаете второй параллельный порт, убедитесь, что он не использует уже имеющийся запрос на прерывание. В некоторых компьютерах LPT1 и LPT2 по умолчанию применяют IRQ7. С помощью Диспетчера устройств установите IRQ5 для LPT2. Если это невозможно, то используйте программу Setup CMOS вашей системы.

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

LPT-порт Запрос на прерывания Адрес ввода-вывода
LPT1 IRQ7 ЗВС
LPT2 IRQ7 378
LPT3 IRQ5 278

Установка параметров последовательных портов

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

Будьте внимательны при установке в ПК устройства, требующего СОМ-порта. Порты СОМ1 и COM2 имеют стандартные адреса ввода-вывода и запросы на прерывание, которые нигде не должны изменяться (обычно могут быть изменены только в программе Setup CMOS вашего ПК). Если для нового устройства требуется назначить порт СОМ1 или COM2, то при загрузке ПК войдите в программу Setup и либо отключите последовательный порт, приписанный к СОМ1 или COM2, либо, если нужно освободить соответствующие установки для добавляемого устройства, измените идентифицирующие его запрос на прерывание и адрес ввода-вывода.

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

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

СОМ-порт Запрос на прерывание Адрес ввода-вывода
СОМ1 IRQ4 3F8
COM2 IRQ3 2F8
COM3 IRQ4 ЗЕ8
COM4 IRQ3* 2Е8
СОМ5 IRQ4* ЗЕО
СОМ6 IRQ3* 2ЕО
СОМ7 IRQ4* 338
СОМ8 IRQ3* 238

* Могут быть установлены с помощью Диспетчера устройств Windows 9x (Свойства: Система)

Оптимизация последовательных портов

Компьютер имеет один либо два встроенных последовательных порта в виде 9-штырькового разъема, обычно расположенных на задней панели компьютера. С помощью такого порта за единицу времени можно передать лишь 1 бит данных, в то время как посредством параллельного - 8 бит. Скорость работы последовательного порта зависит от универсального асинхронного приемо-передатчика (UART), преобразующего проходящий через шину ПК параллельный поток данных в однобитовый.

Как правило, современные ПК поставляются с UART модели 16550. В этом случае максимальная пропускная способность составляет 115 кбит/с, что обеспечивает достаточную полосу пропускания для большинства последовательных устройств. Более старые UART моделей 16450 и 8250 с этой задачей уже не справляются. Но иногда производительности UART 16550 может оказаться недостаточно, ведь некоторые аналоговые модемы обрабатывают сжатые данные со скоростью 230 кбит/с, а адаптеры ISDN - до 1 Мбит/с. Так что, если вам требуется большая скорость передачи данных, покупайте плату расширения с UART модели 16750, способной работать со скоростью 921 кбит/с.

Работа с параллельными портами

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

В основном все ПК поставляются с одним параллельным портом в виде 25-штырькового разъема на задней панели. Чтобы добавить второй порт, необходимо купить контроллер ввода-вывода и установить его в разъем расширения на системной плате. Параллельный порт бывает четырех типов - однонаправленный, двунаправленный, с улучшенными возможностями (ЕРР-порт) и с расширенными возможностями (ЕСР-порт). Для каждого из них характерны различные скорость и возможности. Порты большинства новых ПК поддерживают все четыре режима, и чтобы узнать, какой из них обеспечивает параллельный порт, посмотрите в программе Setup (CMOS Setup utility) вашего ПК раздел периферийных устройств (Integrated peripherals).

Однонаправленный порт иногда называется также SPP-портом. Эта базовая конфигурация пропускает данные со скоростью 40-50 Кбайт/с лишь в одном направлении - к принтеру или другому внешнему устройству.

Двунаправленный порт. Обеспечивает двусторонний обмен данными со скоростью передачи от 100 до 300 Кбайт/с между ПК и внешним устройством. При этом информация о состоянии последнего поступает в компьютер.

Порт с улучшенными возможностями (ЕРР). Разработан для внешних дисководов и сетевых адаптеров, требующих высокой производительности. Обеспечивает скорость передачи данных от 400 Кбайт/с до 1 Мбайт/с и более.

При установке в программе System Setup опции ЕРР предлагаются версии 1.7 и 1.9. Практически для всех периферийных устройств, купленных в последние годы, нужно выбирать 1.9.

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

Если в программе. System Setup задать опцию ЕСР, то появится строчка для выбора DMA-канала (канал непосредственного доступа к памяти, direct memory access). Необходимо задать его так же, как и при запросе на прерывание. Чтобы предотвратить возникновение конфликтов DMA-каналов, просмотрите свободные из них в окне "Свойства: Компьютер" , как описано выше. Если конфликта не избежать, то вернитесь к двунаправленному режиму порта.

Лучший порт для урагана данных.

В новых системах и периферийных устройствах параллельные и последовательные порты стали заменять универсальной последовательной шиной (Universal Serial Bus , USB). С ее помощью можно достичь скорости передачи данных до 12 Мбит/с, а также подключать при наличии всего одного порта клавиатуры, мониторы, мыши и многие другие (до 127) устройства, которые, как и с решающим сходные задачи SCSI-интерфейсом, могут быть соединены "цепочкой" . При этом используется всего один запрос прерывания. USB-шину можно устанавливать и на более старые компьютеры, купив соответствующую плату расширения.