Программирование модемов© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 236 стр. 1.2. Аппаратная реализацияКомпьютер может быть оснащен одним или двумя портами последовательной передачи данных. Эти порты расположены либо на материнской плате, либо на отдельной плате, вставляемой в слоты расширения материнской платы. Бывают также платы, содержащие четыре или восемь портов последовательной передачи данных. Их часто используют для подключения нескольких компьютеров или терминалов к одному, центральному компьютеру. Эти платы имеют название "мультипорт". В основе последовательного порта передачи данных лежит микросхема Intel 8250 или ее современные аналоги - Intel 16450, 16550, 16550A. Эта микросхема является универсальным асинхронным приемопередатчиком (UART - Universal Asynchronous Receiver Transmitter). Микросхема содержит несколько внутренних регистров, доступных через команды ввода/вывода. Микросхема 8250 содержит регистры передатчика и приемника данных. При передаче байта он записывается в буферный регистр передатчика, откуда затем переписывается в сдвиговый регистр передатчика. Байт "выдвигается" из сдвигового регистра по битам. Аналогично имеются сдвиговый и буферный регистры приемника. Программа имеет доступ только к буферным регистрам, копирование информации в сдвиговые регистры и процесс сдвига выполняется микросхемой UART автоматически. Регистры, управляющие асинхронным последовательным портом, будут описаны в следующей главе. К внешним устройствам асинхронный последовательный порт подключается через специальный разъем. Существует два стандарта на разъемы интерфейса RS-232-C, это DB25 и DB9. Первый разъем имеет 25, а второй 9 выводов. Приведем разводку разъема последовательной передачи данных DB25:
Наряду с 25-контактным разъемом часто используется 9-контактный разъем:
Только два вывода этих разъемов используются для передачи и приема данных. Остальные передают различные вспомогательные и управляющие сигналы. На практике для подсоединения того или иного устройства может понадобиться различное количество сигналов. Интерфейс RS-232-C определяет обмен между устройствами двух типов: DTE (Data Terminal Equipment - терминальное устройство) и DCE (Data Communication Equipment - устройство связи). В большинстве случаев, но не всегда, компьютер является терминальным устройством. Модемы, принтеры, графопостроители всегда являются устройствами связи. Рассмотрим теперь сигналы интерфейса RS-232-C более подробно. Сигналы интерфейса RS-232-CЗдесь мы рассмотрим порядок взаимодействия компьютера и модема, а также двух компьютеров непосредственно соединенных друг с другом. Сначала посмотрим, как происходит соединение компьютера с модемом. Входы TD и RD используются устройствами DTE и DCE по-разному. Устройство DTE использует вход TD для передачи данных, а вход RD для приема данных. И наоборот, устройство DCE использует вход TD для приема, а вход RD для передачи данных. Поэтому для соединения терминального устройства и устройства связи выводы их разъемов необходимо соединить напрямую:
Остальные линии при соединении компьютера и модема также должны быть соединены следующим образом:
Подтверждение связиРассмотрим процесс подтверждения связи между компьютером и модемом. В начале сеанса связи компьютер должен удостовериться, что модем может произвести вызов (находится в рабочем состоянии). Затем, после вызова абонента, модем должен сообщить компьютеру, что он произвел соединение с удаленной системой. Подробнее это происходит следующим образом. Компьютер подает сигнал по линии DTR, чтобы показать модему, что он готов к проведению сеанса связи. В ответ модем подает сигнал по линии DSR. Когда модем произвел соединение с другим, удаленным модемом, он подает сигнал по линии DCD, чтобы сообщить об этом компьютеру. Если напряжение на линии DTR падает, это сообщает модему, что компьютер не может далее продолжать сеанс связи, например из-за того что выключено питание компьютера. В этом случае модем прервет связь. Если напряжение на линии DCD падает, это сообщает компьютеру, что модем потерял связь и не может больше продолжать соединение. В обоих случаях эти сигналы дают ответ на наличие связи между модемом и компьютером. Сейчас мы рассмотрели самый низкий уровень управлением связи - подтверждение связи. Существует более высокий уровень, который используется для управления скоростью обмена данными, но он также реализуется аппаратно. Практически управление скоростью обмена данными (управление потоком) необходимо, если производится передача больших объемов данных с высокой скоростью. Когда одна система пытается передать данные с большей скоростью, чем они могут быть обработаны принимающей сиситемой, результатом может стать потеря части передаваемых данных. Чтобы предотвратить передачу большего числа данных, чем то, которое может быть обработано, используют управление связью, называемое "управление потоком" (flow-controll handshake). Стандарт RS-232-C определяет возможность управления потоком только для полудуплексного соединения. Полудуплексным называется соединение, при котором в каждый момент времени данные могут передаваться только в одну сторону. Однако фактически этот механизм используется и для дуплексных соединений, когда данные передаются по линии связи одновременно в двух направлениях. Управление потокомВ полудуплексных соединениях устройство DTE подает сигнал RTS, когда оно желает передать данные. DCE отвечает сигналом по линии CTS, когда оно готово, и DTE начинает передачу данных. До тех пор, пока оба сигнала RTS и CTS не примут активное состояние, только DCE может передавать данные. При дуплексных соединениях сигналы RTS/CTS имеют противоположные значения по сравнению с теми, которые они имели для полудуплексных соединений. Когда DTE может принять данные, он подает сигнал по линии RTS. Если при этом DCE готово для принятия данных, оно возвращает сигнал CTS. Если напряжение на линиях RTS или CTS падает, то это сообщает передающей системе, что получающая система не готова для приема данных. Ниже мы приводим отрывок диалога между компьютером и модемом, происходящий при обмене данными.
Конечно, все это хорошо звучит. На практике все не так просто. Соединить компьютер и модем не составляет труда, так как интерфейс RS-232-C как раз для этого и предназначен. Но если вы захотите связать вместе два компьютера при помощи такого же кабеля, который вы использовали для связи модема и компьютера, то у вас возникнут проблемы. Для соединения двух терминальных устройств - двух компьютеров - как минимум необходимо перекрестное соединение линий TR и RD:
Однако в большинстве случаев этого недостаточно, так как для устройств DTE и DCE функции, выполняемые линиями DSR, DTR, DCD, CTS и RTS, асимметричны. Устройство DTE подает сигнал DTR и ожидает получения сигналов DSR и DCD. В свою очередь, устройство DCE подает сигналы DSR, DCD и ожидает получения сигнала DTR. Таким образом, если вы соедините вместе два устройства DTE кабелем, который вы использавали для соединения устройств DTE и DCE, то они не смогут договориться друг с другом. Не выполнится процесс подтверждения связи. Теперь перейдем к сигналам RTS и CTS, управления потоком данных. Иногда для соединения двух устройств DTE эти линии соединяют вместе на каждом конце кабеля. В результате получаем то, что другое устройство всегда готово для получения данных. Поэтому, если при большой скорости передачи принимающее устройство не успевает приинимать и обрабатывать данные, возможна потеря данных. Чтобы решить все эти проблемы для соединеия двух устройств типа DTE используется специальный кабель, в обиходе называемый нуль-модемом. Имея два разъема и кабель, вы легко можете спаять его самостоятельно, руководствуясь следующими схемами.
Для полноты картины рассмотрим еще один аспект, связанный с механическим соединением портов RS-232-C. Из-за наличия двух типов разъемов - DB25 и DB9 - часто бывают нужны переходники с одного типа разъемов на другой. Например, вы можете использовать такой переходник для соединения COM-порта компьютера и кабеля нуль-модема, если на компьютере установлен разъем DB25, а кабель оканчивается разъемами DB9. Схему такого переходника мы приводим на следующем рисунке:
Заметим, что многие устройства (такие, как терминалы и модемы) позволяют управлять состоянием отдельных линий RS-232-C посредством внутренних переключателей (DIP-switches). Эти переключатели могут менять свое значение на разных моделях модемов. Поэтому для их использования следует изучить документацию модема. Например, для hayes-совместимых модемов, если переключатель 1 находится в положении "выключен" (down), это означает, что модем не будет проверять наличие сигнала DTR. В результате модем может отвечать на приходящие звонки, даже если компьютер и не запрашивает у модема установление связи. Технические параметры интерфейса RS-232-C При передаче данных на большие расстояния без использования специальной аппаратуры из-за помех, наводимых электромагнитными полями, возможно возникновение ошибок. Вследствие этого накладываются ограничения на длину соединительного кабеля между устройствами DTR-DTR и DTR-DCE. Официальное ограничение по длине для соединительного кабеля по стандарту RS-232-C составляет 15,24 метра. Однако на практике это расстояние может быть значительно больше. Оно непосредственно зависит от скорости передачи данных. Согласно McNamara (Technical Aspects of Data Communications, Digital Press, 1982) определены следующие значения:
Уровни напряжения на линиях разъема составляют для логического нуля -15..-3 вольта, для логической единицы - +3..+15 вольт. Промежуток от -3 до +3 вольт соответствует неопределенному значению. Если вы подключаете внешние устройства к разъему интерфейса RS-232-C (а также при соединении двух компьютеров нуль-модемом), предварительно выключите его и компьютер, а также снимите статический заряд (подсоединив заземление). В противном случае можно вывести из строя асинхронный адаптер. Земля компьютера и земля внешнего устройства должны быть соединены вместе. |