Dtr назначение. Теперь кратко про кабель. Сигналы могут иметь другое значение

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

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


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

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

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

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

ВНИМАНИЕ

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

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

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

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

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

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


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

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


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

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

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

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

Обозначение цепи

Контакт разъема

№ провода кабеля выносного разъема PC

Направление

1 Ленточный кабель 8-битных мультикарт.
2 Ленточный кабель 16-битных мультикарт и портов на системных платах.
3 Вариант ленточного кабеля портов на системных платах.
4 Широкий ленточный кабель к 25-контактному разъему.

Подмножество сигналов RS-232C, относящихся к асинхронному режиму, рассмотрим с точки зрения COM-порта PC. Для удобства будем пользоваться мнемоникой названий, принятой в описаниях COM-портов и большинства устройств (она отличается от безликих обозначений RS-232 и V.24). Напомним, что активному состоянию управляющих сигналов (“включено”) и нулевому значению бита передаваемых данных соответствует положительный потенциал (выше +3 В) сигнала интерфейса, а состоянию “выключено” и единичному биту - отрицательный (ниже –3 В). Назначение сигналов интерфейса приведено в табл. 2. Нормальную последовательность управляющих сигналов для случая подключения модема к COM-порту иллюстрирует рис. 6.

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

Назначение

Protected Ground - защитная земля, соединяется с корпусом устройства и экраном кабеля

Signal Ground - сигнальная (схемная) земля, относительно которой действуют уровни сигналов

Transmit Data - последовательные данные - выход передатчика

Receive Data - последовательные данные - вход приемника

Request To Send - выход запроса передачи данных: состояние “включено” уведомляет модем о наличии у терминала данных для передачи. В полудуплексном режиме используется для управления направлением - состояние “включено” служит сигналом модему на переключение в режим передачи

Clear To Send - вход разрешения терминалу передавать данные. Состояние “выключено” запрещает передачу данных. Сигнал используется для аппаратного управления потоками данных

Data Set Ready - вход сигнала готовности от аппаратуры передачи данных (модем в рабочем режиме подключен к каналу и закончил действия по согласованию с аппаратурой на противоположном конце канала)

Data Terminal Ready - выход сигнала готовности терминала к обмену данными. Состояние “включено” поддерживает коммутируемый канал в состоянии соединения

Data Carrier Detected - вход сигнала обнаружения несущей удаленного модема

Ring Indicator - вход индикатора вызова (звонка). В коммутируемом канале этим сигналом модем сигнализирует о принятии вызова


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

  1. Установкой DTR компьютер указывает на желание использовать модем.
  2. Установкой DSR модем сигнализирует о своей готовности и установлении соединения.
  3. Сигналом RTS компьютер запрашивает разрешение на передачу и заявляет о своей готовности принимать данные от модема.
  4. Сигналом CTS модем уведомляет о своей готовности к приему данных от компьютера и передаче их в линию.
  5. Снятием CTS модем сигнализирует о невозможности дальнейшего приема (например, буфер заполнен) - компьютер должен приостановить передачу данных.
  6. Сигналом CTS модем разрешает компьютеру продолжить передачу (в буфере появилось место).
  7. Снятие RTS может означать как заполнение буфера компьютера (модем должен приостановить передачу данных в компьютер), так и отсутствие данных для передачи в модем. Обычно в этом случае модем прекращает пересылку данных в компьютер.
  8. Модем подтверждает снятие RTS сбросом CTS.
  9. Компьютер повторно устанавливает RTS для возобновления передачи.
  10. Модем подтверждает готовность к этим действиям.
  11. Компьютер указывает на завершение обмена.
  12. Модем отвечает подтверждением.
  13. Компьютер снимает DTR, что обычно является сигналом на разрыв соединения (“повесить трубку”).
  14. Модем сбросом DSR сигнализирует о разрыве соединения.

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

У стандартного модемного интерфейса (rs232) кроме линий RxD и TxD есть еще куча разных, их называют “сигналами квитирования”. Я всегда путался в них — во всех этих RTS’ах, CTS’ах и прочих DSR’ах. В этой статье, я попробую систематизировать и кратко описать эти сигналы.

Итак, первое что стоит знать – интерфейс rs232 соединяет два типа устройств

    DTE (Data Terminal Equipment) – это обычно компьютер или заменяющее его устройство. Для простоты, дальше я DTE буду называть компьютер. На компьютер устанавливается разъем типа “папа”

    DCE (Data Circuit-terminating Equipment) – это обычно модем, или его заменяющее оборудование. Для простоты я буду называть DCE модемом. На DCE устанавливается разъем типа “мама”

Сигналы я буду описывать на примере 9-контактного разъема, так как он самый распространенный. Взглянем на него.

Как видно, контакты на разъемах перевернуты. Таким образом, прямой провод соединит контакты с одинаковыми номерами, тоесть, к примеру, контакту 2 на “папе” будет соответствовать контакт 2 на “маме”.

А вот и сводная табличка сигналов. Под названием вывода – номер его штырька в 9-контактном разъеме.

Передача данных компьютером, прием модемом TxD
3
RxD
2
Передача данных модемом, прием компьютером
Компьютер готов передавать данные, либо компьютер разрешает модему передавать данные RTS
7
CTS
8
Модем разрешает компьютеру передавать данные
DSR
6
Готовность модема к работе.
Готовность компьютера к работе. DTR
4
RI
9
Индикатор звонка
DCD
1
Индикатор наличия несущей. Устанавливается после соединения.
Земля SG
5
SG
5
Земля

Ну, и немного подробнее опишем каждый сигнал.

Я буду рассматривать сигналы обычных логических уровней – так, как они выглядят на выходах или входах микроконтроллера.

Сигналы в кабеле (после преобразователя уровня, к примеру max232) перевернуты и уровни сдвинуты. Так, логической 1 на выходе контроллера соответствуют уровни напряжения от –3 до –15 вольт, а логическому нулю – +3…+15 вольт.

TxD (Tramsmit Data)

Сразу скажу, что откуда в сокращении буква “x” – я не знаю.

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

После этого идет не обязательный бит четности (на картинке его нет). Бит четности дополняет количество единиц до четного (even) или нечетного (odd). К примеру, если в байте было 3 единицы и четность установлена как “even”, то бит четности будет равен 1, чтобы дополнить количество единиц до четырех – четного числа. Четность служит для проверки правильности передачи байта.

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

К примеру, передача 0xEE будет выглядеть на линии UART’а так:

Параметры последовательного порта обычно пишут так – “9600, 8N1”. 9600 – это скорость передачи бит/с, 8 – количество бит данных в посылке, N – бит четности не используется (может быть E или O, если используется), 1 – один стоп бит.

Заметьте, что количество передаваемых байт в секунду зависит не только от скорости передачи, но и от формата байта. К примеру, один байт в формате 8N1 занимает 10 бит (стартовый + 8 бит данных + стоповый), а в формате 8E1 уже 11бит – добавляется бит четности. Соответственно, байтовая скорость при битовой 9600бод станет 960байт/с в первом случае и 872.7байт/с во втором.

RxD (Receive Data)

Тоже самое, что и TxD, только хозяин этой линии – модем.

CTS (Clear To Send)

Рассмотрим такую ситуацию – компьютер отправляет модему большое количество данных на скорости 38400 бод, а модем подключен к другому модему на скорости 9600 бод.

Буфер внутри модема быстро заполняется, и, для того, чтобы он не переполнился, модем должен сообщить компьютеру “прекрати передачу!”. Для этого и служит линия CTS.

Активный уровень CTS – низкий. Тоесть, модем разрешает передачу данных, когда на ножке контроллера 0.

Пример из руководства по LPC17xx.

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

RTS (Request To Send)

Вот с этой ножкой неразбериха. Проблема в том, что на месте этой ножки по стандарту могут быть два сигнала – RTS (номер цепи по стандарту — 105) и RTR (номер 133).

RTS (Ready To Send) – компьютер сигнализирует модему о том, что он сейчас будет передавать данные. Модем должен приготовиться и активировать CTS, после чего компьютер начинает передавать данные.

RTR (Ready To Receive) – компьютер сообщает модему о том, что он готов принимать данные. Это – аналог CTS, только со стороны компьютера.

Сейчас основная часть оборудования использует RTS как RTR! И даже аппаратное квитирование у LPC17xx, LPC2xxx, AT91SAM7 реализует именно механизм RTR.

Активный уровень как и у CTS – низкий.

Рассмотрим механизм подробнее на примере из руководства по LPC17xx

Сначала — сигнал RTS – низкий, принимаются байты.

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

DTR (Data Terminal Ready)

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

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

DSR (Data Set Ready)

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

RI (Ring Indicator)

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

На практике, этот сигнал используется редко. Обычно программа просто ждет сообщения “RING” от модема.

Логический 0 на ножке контроллера значит, что идет вызов.

DCD (Data Carrier Detect)

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

Логический 0 означает, что связь между модемами активна.

Теперь кратко про кабель

Теперь про кабель. Стандарт определяет максимальную емкость кабеля как 2.5нФ. Это, примерно, 25метров.

Однако, на практике, это ограничение игнорируют, так как целостность сигнала определяется не только емкостью но и скоростью. Вот максимальные длинны, используемые на практике для низких скоростей.

Скорость (бод) Длинна экранированного кабеля, метры Длинна неэкранированного кабеля, метры
110 1500 300
300 1200 300
1200 900 150
2400 600 150
4800 150 75
9600 75 30

Стандарт

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

Вот мы и добрались до COM порта. Но с ним все не так просто как с LPT, и его полноценное использование потребует значительно больших усилий. Главной загвоздкой является и его главное преимущество - передача данных в последовательном виде. Если в LPT байт данных передается по 8-ми линиям по биту на каждую, и состояние каждой линии можно было легко посмотреть, то в COM порту байт данных передается бит за битом по одной линии (относительно земли, конечно) и посмотреть что там передается с помощью одних светодиодов не удастся. Для этого нужно специальное устройство - преобразователь потока последовательных данных в парраллельный, т.н. USART (Universal Synchronous/Asynchronous Receiver Transmitter). Например, он есть в составе материнской платы компьютера, снабженного COM портом, в любом более мение серьезном микроконтроллере.


Надеюсь, вы еще пали духом в освоении COM порта. Все не так уж и мрачно. Некоторые результаты можно получить и без USART. Сформулируем задачу, которую реализуем на начальном этапе работы с COM портом:


"Хочу что бы к компьютеру через COM порт подключался светодиод. Запускаю программу. Далаю какое-то действие в этой программе, светодиод загорается, делаю другое - светодиод тухнет."


Задача довольно специфичная (с учетом того, что USART не используется) и является чистой "самопальщиной", но вполне реализуема и работоспособна. Давайте приступим к ее реализации.


1. COM порт

Опять берем системный блок вашего ПК и смотрим в тыловую часть. Примечаем там 9-ти штырьковй разъем - это и есть COM порт. Реально их может быть неколько (до 4-х). На моем ПК установлено два COM порта (см. фото).


2. Удлинитель COM порта


3. Аппаратная часть

С аппаратной частью нам тоже придется "повозиться", в том смысле что она будет сложнее чем с первым устройством для LPT порта. Дело в том что протокол RS-232 по которому идет обмен данными в COM порту, имеет несколько отличное соотношение логическое состояние - напряжение. Если обычно это логический 0 0 В, логическая 1 +5 В, то в RS-232 это соотношение следующее: логический 0 +12 В, логическая 1 -12 В.

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

Теперь давайте посмотрим, а какие сигналы из COM порта мы можем посмотреть на светодиодах? В действительности, в COM порту есть аж 6 независимых линий, представляющих интерес для разработчика устройств сопряжения. Две из них пока для нас недоступны - линии по передаче последовательных данных. А вот оставшиеся 4 предназначены для управления и индикации процесса передачи данных и мы сможем "передалать" их под свои нужды. Две из них предназначены для управления со стороны внешнего устройства и мы их пока трогать не будем, а вот последние две оставшиеся линии мы сейчас и поиспользуем. Они называются:

  • RTS - Запрос на передачу. Линия взаимодействия, которая показывает, что компьютер готов к приему данных.
  • DTR - Компьютер готов. Линия взаимодействия, которая показывает, что компьютер включен и готов к связи.

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

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

А вот ее практичекая реализация. Я думаю вы меня простите, что я сделал ее в таком стремном макетном варианте, ибо делать плату для такой "высоко продуктивной" схемы не хочется.


4. Программная часть

Тут все попроще. Давайте создадим Windows приложение в Microsoft Visual C++ 6.0 на основе MFC для управления двумя линиями взаимодействия COM порта. Для этого создаем новый проект MFC и указываем ему имя, например, TestCOM . Далее выбираем вариант построения на основе диалога.

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

Class CTestCOMDlg: public CDialog { // Construction public: CTestCOMDlg(CWnd* pParent = NULL); // standard constructor HANDLE hFile;

Чтобы наша программа могла упрявлять линиями COM порта, его надо сначала открыть. Напишем код, ответственный за открытие порта при загрузке программы.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Ошибка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); }

С помощью стандарной функции Win API CreateFile() открываем COM-порт COM2 . Далее проверяем успешность открытия с выводом информационного сообщения. Вот тут надо сделать важное замечание: COM2 - это в моем компьютере, а на Вашем компьютере Вы могли подключить его к другому COM порту. Соответственно, его имя нужно изменить на то, кокай порт Вы используете. Посмотреть, какие номера портов присутствуют на Вашем компьютере, можно так: Пуск -> Настройка -> Панель управления -> Система -> Оборудование -> Диспетчер устройств -> Порты (COM и LPT) .

В итоге, функция CTestCOMDlg::OnInitDialog() , расположенная в файле TestCOMDlg.cpp , класса нашего диалога должна принять вид:

BOOL CTestCOMDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application"s main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Оштбка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); } return TRUE; // return TRUE unless you set the focus to a control }

Теперь добавим обработчики кнопок управления линиями. Я дал им соответствующие имена: функция, которая устанавливает еденицу на линии DTR - OnDTR1(), 0 - OnDTR0(). Для линии RTS соответственно аналогичным образом. Напомню, что обработчик создается при двойном щелчке на кнопке. В итоге, эти четыре функции должны принять вид:

Void CTestCOMDlg::OnDTR1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 6); } void CTestCOMDlg::OnDTR0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 5); } void CTestCOMDlg::OnRTS1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 4); } void CTestCOMDlg::OnRTS0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 3); }

Поясню немного как они работают. Как видно, внитри себя они содержат вызов одной и той же Win API функции EscapeCommFunction() с двумя параметрами. Первый из них - это хэндл (HANDLE) на открытый порт, второй - специальный код действия, соответствующий необходимому состоянию линии.

Все, комилируем, запускаем. Если все хорошо, должны увидеть сообщение об успешном открытии порта. Далее, нажатием соответствующих кнопок мигаем светодиодами, подключенными к COM порту.

© Иванов Дмитрий
Декабрь 2006

Сигналы и контакты интерфейса RS232
Разъем 9-ти
пиновый #
Разъем 25
пиновый #
Обозначение Полное наименование Направление Что значит
Передача данных (Transmit Data) Передача данных от компьютера
Прием данных (Receive Data) Прием данных компьютером
Запрос на передачу (Request to Send)
Готовность передачи (Clear to Send) Аппаратный контроль передачи данных типа RTS/CTS
Готовность источника данных (Data Set Ready) Я готов для обмена данными
Готовность приемника данных (Data Terminal Ready) Я готов для обмена данными
Наличие несущей (Carrier Detect) Один модем соединен с другим
Сигнал вызова (Ring Indicator) Звонок (вызов) на телефонной линии
Земля

Замечание: DCD иногда маркируется как CD

Сигналы могут иметь другое значение

Только 3 контакта из 9 имеют строго определенное значение: передача, прием и земля. Это аппаратные линии и вы не можете повлиять изменить из предназначение. Но все другие сигнальные линии управляются программно и могут быть (или подразумевается что могут) в большинстве своем другого назначения. Однако они могут прнимать только два состояния: высокое (установленное) (+12 вольт) и низкое (сброшенное) (-12 вольт). Установленное состояние это "включено" и сброшенное состояние это "выключено". Для примера, Advanced Serial Port Monitor (или точнее пользователь программы) может управлять сигналом DTR, в аппаратная часть в свою очередь подает на него напряжение 12 вольт с той или иной полярностью. Модем (или другое устройство) которое принимает сигнал DTR может интерпретировать его по-разному. В одном случае модем (в зависимости от модели и прошивки) может может занять телефонную линию если сигнал DTR сброшен. В другом случае модем проигнорировать сигнал DTR в сброшенном состоянии.

Это применимо ко всем 6-ти сигнальным линиям. Аппаратная часть только посылает и принимает эти сигналы, но действие зависит (если оно вообще есть) от программы (например, Advanced Serial Port Monitor) и конфигурации того оборудоввания, которое вы подключаете к последовательному порту.

Кабельные соединения между последовательными портами

Работа по последовательному интерфейсу имеет свои преимущества. Одна из причин это то, что все сигналы однонаправленные. Если контакт 2 отправляет данные (и не позволяет принимать другие сигналы) то очевидно, что нельзя подсоединить к контакту 2 контакт того же типа. Если вы все же сделаете это, то вы не смоежет не отсылать, ни принимать сигналы по этой линии. Есть два разных способа соединения устройств. Один из них подразумевает соединение двух устройств разного типа, когда контакт №2 одного отсылает данные на контакт №2 второго (который принимает этот сигнал). Это путь, когда вы соединяете компьютер (DTE) и модем (DCE). Также существует второй путь в котором устройства могут быть одного типа: соедините контакт отправки данных №2 с контактом №3, принимающим данные устройства того же типа. Это путь, когда можно соединять два компьютера (DTE-в-DTE). Тип кабеля, использумый в этом случае называется null-modem cable (нуль-модемный кабель) поскольку он соединяет два компьютера без использования модемов. Нуль-модемный также иногда называют перевернутым кабелем, т.к. провода между контактами 2 иd 3 идут наоборот. Пример выше приведен для контактов 25-ти контактного разъема, но также соответственно можно использовать и 9-ти контактный разъем.

Контроль передачи данных типа RTS/CTS и DTR/DSR

Это так называемый "аппаратный" контроль передачи данных. Контроль передачи данных был раскрыт более подробно на другой странице в разедлее "Контроль передачи данных" , однако контакты и сигналы не были описаны. Advanced Serial Port Monitor поддерживает RTS/CTS и DTR/DSR типы аппаратного контроля передачи данных. Только RTS/CTS тип контроля предачи данных будет рассмотрен здесь, поскольку DTR/DSR тип контроля передачи данных функционирует по тому же принципу. Для того, чтобы активировать RTS/CTS контроль передачи данных необходимо только выбрать эту опцию в настройках Advanced Serial Port Monitor .

Итак, если DTE устройство (такое как компьютер) хочет прекратить передачу данных, оно сбрасывает состояние сигнала RTS. Сброшенный сигнал"Запрос на передачу (Request to Send)" (-12 вольт) означает "не посылать запросы ко мне" (прекратить передачу). Когда компьютер готов для принятия очередного блока данных он устанавливает сигнал RTS (+12 вольт) и поток данных возобновляется. Сигналы контроля передачи данных всегда посылаются в противоположном направлении от потока данных контроль которых они осуществляют. DCE устройства (модемы) работают по тому же принципу, только посылают сигнал на контакте CTS. Поэтому тип контроля передачи даных RTS/CTS использует 2 линии (провода).

Serial port (серийный порт, последовательный порт или COM-порт -, communications port) — это последовательный интерфейс с двойной направленностью.

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

Несмотря на то, что в некоторых других интерфейсах как, например, в Ethernet , FireWire и USB , применяется последовательный обмен данными, название «последовательный порт» закрепилось за портом, обладающим стандартом RS-232C .

Данный порт, в сравнении с другими "последовательными" технологиями, обладает отличительной особенностью: в нем отсутствует какое-либо временное требование между 2 байтами. Временные требования существуют только между битами одного байта. Величина, обратная временной паузе между битами одного байта, носит название «baud rate» (скорость передачи). Кроме того, в данной технологии нет такого понятия, как "пакет". Другие технологии "последовательной" передачи данных (X.25, USB или Ethernet), используют "пакеты", также в них существуют и жесткие временные требования между битами одного пакета.

В части протоколов связи с индустриальным оборудованием имеются жесткие временные требования между байтами последовательного порта. Реализация в многозадачных операционных системах со слабой поддержкой реального времени этих протоколов очень сложна. К этим системам относятся и Windows. Вот почему для работы с этими протоколами зачастую применяют MS-DOS или более устаревшее программное обеспечение.

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

Благодаря COM-порту появляется возможность подключить друг к другу два ПК, применяя так называемый «нуль-модемный кабель». Данный метод использовался со времен MS-DOS в целях перекачки файлов с одного компьютера на другой. В UNIX-системах он использовался для терминального доступа к другой машине, а в операционных системах Windows - для отладчика уровня ядра.

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

Однако имеются специальные стандарты эмуляции последовательного порта над USB и над Bluetooth . Кстати, любопытно, но именно Bluetooth-технология проектировалась разработчиками в качестве беспроводной версии последовательного порта. Программная эмуляция порта широко используется и по сей день. Так, практически все мобильные телефоны сегодня эмулируют внутри себя COM-порт и модем, с целью реализации тетеринга (доступа компьютера к сети Интернет через GPRS/EGDE/3G). А вот непосредственно для физического подключения к компьютеру применяется USB, Bluetooth или Wi-Fi технологии.

Кроме того, программная эмуляция последовательного порта возможна для гостевых пользователей виртуальных машин VMWare и Microsoft Hyper-V. Основной целью данной процедуры является подключение отладчика уровня ядра Windows к гостевому клиенту.

Достоинства COM-порта

Главное преимущество данной технологии состоит в простоте подключения.

Недостатки COM-порта

Главными недостатками данного порта являются его низкая скорость, большие размеры разъемов, а также высокие требования к времени отклика операционной системы. Также, в данном стандарте наблюдается высокое количество прерываний (одно прерывание на каждые 8 байт).

Разъемы

Самыми распространенными разъемами стандарта являются 9-ти и 25-ти контактные (DB-9 и DB-25, соответственно), которые были стандартизированы в 1969 году. Это D-образные разъемы. Помимо них использовались и другие, но из этого же семейства: DB-31 и круглые восьмиконтактные DIN-8.

Максимальная скорость передачи (в обычном исполнении) достигает 115 200 бод.

Аппаратура

Разъем обладает следующими контактами:

  • DTR (Data Terminal Ready) - выход на ПК, вход - на модеме. Отвечает за готовность компьютера к работе с модемом. Сброс вызывает почти полную перезагрузку модема. В случае с мышью, данный провод используется для осуществления питания.
  • DSR (Data Set Ready) - вход на ПК, выход - на модеме. Отвечает за готовность модема. Если линия в нуле, то в некоторых операционных системах невозможно открыть порт в качестве файла.
  • RxD (Receive Data) - вход на ПК, выход - на модеме. Обозначает поток входящих в ПК данных.
  • TxD (Transmit Data) - выход на ПК, вход - на модеме. Обозначает поток исходящих от ПК данных.
  • CTS (Clear to Send) - вход на ПК, выход - на модеме. Компьютер должен приостановить процесс передачи данных, пока данный провод не будет выставлен в единицу. Применяется в аппаратном протоколе управления потоком в целях недопущения переполнения на модеме.
  • RTS (Request to Send) - выход на ПК, вход - на модеме. Модем должен приостановить процесс передачи данных, до тех пор, пока провод не будет выставлен в единицу. Применяется в аппаратном протоколе управления потоком в целях недопущения переполнения в оборудовании/драйвере.
  • DCD (Carrier Detect) - вход на ПК, выход - на модеме. После установления связи с модемом с той стороны возводится в единицу, сбрасывается в ноль, в случае разрыва связи. Аппаратура ПК может производить прерывание, в случае наступления подобного события.
  • RI (Ring Indicator) - вход на ПК, выход - на модеме. После детерминации вызывного сигнала телефонного звонка, возводится модемом в единицу. Аппаратная часть ПК может производить прерывание, в случае наступления подобного события.
  • SG (Signal Ground) - общий сигнальный провод порта. Важно: земля - не общая . Обычно провод имеет изоляцию от корпуса ПК или модема.

В нуль-модемном кабеле применяются две перекрещенные пары: TXD/RXD и RTS/CTS.

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