Com-port (
communication port) — самый старый из последовательных портов ПК (
рис. 1). «Последовательный» означает то, что данные в таком интерфейсе передаются по одному проводнику. Последовательные интерфейсы можно разделить на две основные разновидности —
синхронные и
асинхронные. Передача информации на физическом уровне — это изменение электрических сигналов. И когда мы передаем последовательность единичных или нулевых битов, физически этот процесс представляется в виде электрического импульса (
рис. 2). Причем, в зависимости от скорости передачи, в импульсах одинаковой длительности может быть разное количество единичек. Так вот, для получения информации из таких импульсов используют синхронизацию. Выходит, что параллельно с информационным потоком генерируется последовательность импульсов, которые указывают, в какой момент времени необходимо снимать информацию. Эти импульсы и определяют скорость обмена, ведь если за единицу времени подать больше синхроимпульсов, значит, больше информационных данных выделится из потока.
Если эти синхроимпульсы передаются от одного устройства другому, то такая передача называется синхронной. Асинхронной же считается такая передача, когда с фиксированной скоростью пересылается только информация, а приемник и передатчик синхронизируют процесс обмена данными самостоятельно. Наш СОМ-порт является асинхронным. Хочется также заметить, что разница между импульсами, по которым синхронизируется передача, и импульсами, синхронизирующими прием, не должна превышать 5% от их частоты. Так что едва ли не основной проблемой для асинхронных интерфейсов является одновременность запуска синхронизирующих генераторов. Для СОМ-порта стандартными являются следующие скорости: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/с. Максимальная длина кабеля-соединителя — 15 метров. Есть специальные кабели, которые позволяют увеличить длину соединения до 150 метров. А если использовать устройства, называемые «репитерами», то расстояние можно еще дополнительно увеличить. Вы спросите, зачем модему кабель в 150 метров? Вполне закономерный вопрос, однако такие расстояния используются в тех случаях, когда к ПК необходимо подключить какое-то специализированное технологическое устройство. Как, например, счетчик электрической энергии находится где-то в распределительном щите, а компьютер — в бухгалтерии.
Компьютерный СОМ-порт работает по стандарту RS-232C, который определяет электрические уровни сигналов и протокол обмена. Порт содержит две линии для обмена информацией (прием и передача), и 9 линий для управления обменом. Если для управления обменом задействовать эти линии, то обмен будет называться «аппаратным» (протокол RTS/CTS). Однако обмен информацией можно организовать, используя только линии приема и передачи, тогда он будет называться «программным» (протокол XON/XOFF). В таком режиме посылается символ, сигнализирующий о начале передачи, называется он XON, окончание передачи сигнализируется символом XOFF.
Теперь разберемся, как из цепочки передаваемых бит выделяются байты. Начало байта сигнализирует старт-бит, который имеет всегда определенное значение — 0, окончание — стоп-бит.
Аппаратной основой СОМ-порта является микросхема UART (Universal Asynchronous Receiver/Transmitter — универсальный асинхронный приемопередатчик), которая с момента своего появления прошла длительный процесс эволюции (таблица 1).
Если вы загляните в окно настройки последовательного порта, то заметите, что список скоростей явно не ограничивается 115.2 Кбит/с. Это связано с тем, что кроме стандартных, можно использовать еще и так называемые высокоскоростные СОМ-порты — Enhanced Serial Ports (ESP) и Super High Speed Serial Ports. Это варианты, базирующиеся на микросхемах 16550AF, 16650, 16750. Они обеспечивают обмен на скорости до 921.6 Кбит/с. В принципе, все высокоскоростные модемы xDSL содержат в своем составе такую микросхему, которая обеспечивает связь на 230–460 Кбит/с.
Теперь от теоретической части перейду к практической, и опираясь на вышеизложенные теоритические предпосылки, я расскажу о настройках СОМ-порта. Открыв окно свойств порта и выбрав вкладку Настройка, увидим множество опций (рис. 3).
Ну, со скоростью, думаю, все понятно — в этом пункте выбираем скорость обмена между устройством и ПК. В принципе можно выбрать ту скорость, которая вам больше нравится, хотя я полагаю, если у вас модем на 56К, скорость работы порта устанавливать в 19200 бит/с вы не будете :-).
Биты данных — сколько бит передавать за один раз (между старт-битом и стоп-битом).
Четность — выбор способа контроля четности. Кто не знает, контроль четности — способ проверки принятого числа на ошибочность. При передаче к числу добавляется еще один бит, дополняющий количество единиц в числе до четного или нечетного (это уже как выбрано в режиме передачи). Этот бит становится младшим разрядом передаваемого числа и принимает значение 1, если у нас нечетное число единиц, и 0, если четное. При проверке на четность, в случае если мы приняли нечетное число единиц (при проверке на нечетность — наоборот), порт передает устройству информацию об ошибке и просит повторить передачу.
Стоповые биты — количество стоп-бит, необходимых для правильного распознавания конца байта.
Управление потоком — выбор режима управления потоком (аппаратного или программного). В режиме программного управления, при определении ошибки, требуется некоторое время, чтобы отправить сигнал XOFF и приостановить прием, но за это время может произойти передача нескольких байт, которые будут утеряны (в случает отсутствия буфера принимаемых данных).
И наконец, в пункте Дополнительно можно выбрать объем буферов FIFO либо отключить их вообще (что не рекомендуется).
Рассказав про эти настройки, дам вам один совет. Если у вас все нормально работает, не меняйте настройки, стоящие по умолчанию! Менять их необходимо тогда, когда этого требует устройство (о чем, наверняка, будет подробно сказано в инструкции к нему).
Теперь о «железном» конфигурировании СОМ-портов. Данные сведения могут очень пригодиться тем, кто купил внутренний WIN-модем. Как известно, при конфигурировании устройства необходимо указать ресурсы, которые ему необходимы (адрес ввода-вывода, номер прерывания, канал DMA). Система Plug&Play должна самостоятельно выделить эти ресурсы, когда вы установили устройство в систему. Но ничто не идеально, так что если вы установили одно устройство, а оно не работает, к тому же, перестало работать и другое, знайте — ошиблась технология Plug&Play. И вам необходимо указывать ресурсы самостоятельно.
Итак, для коммуникационных портов стандартны перечисленные ниже ресурсы. Диапазон ввода-вывода — 3F8-3FFh для COM1, 2F8-2FFh — для COM2, 3E8-3Efh — для COM3, 2E8-2Efh — для COM4. С прерываниями немного сложнее — для СОМ1 (3) используется IRQ4, для СОМ2 (4) — IRQ3. Теперь, приведя эти цифры, расскажу о подводных камнях, подстерегающих покупателей WIN-модемов. Последние работают через СОМ3 или СОМ4, и при установке часто могут нахомутать с ресурсами, ведь Plug&Play видит их как PCI карту, а не порт. Так что если что-то не работает, разберитесь с использованием ресурсов.
Многие, наверное, знают, что два ПК можно соединить не с помощью сетевой карты, а воспользовавшись нуль-модемным кабелем. Причем, за нуль-модемным кабелем не обязательно идти в магазин. Его на скорую руку можно сварганить, имея три куска провода и соединив линии: прием-передача и землю (в этом случае используется программный протокол управления потоком данных) (рис. 4а). Ну а для полноты картины приведу и распайку полного нуль-модемного кабеля (для аппаратного протокола управления потоком данных) (рис. 4б).
Народные умельцы, например, додумались, как с помощью лазерной указки и фотодатчика соорудить «оптический» нуль-модемный кабель. По принципу работы это упрощенный вариант из трех проводов, только с большим количеством начинки. Кто заинтересовался, пишите мне.
Если вы — ярый программист-железячник и захотели самостоятельно написать программу для работы с СОМ-портом, то для получения необходимой справочной информации о программировании этого чуда техники я советую зайти на http://www.codenet.ru/progr/other/comport.php. Там есть все, связанное с конфигурированием порта на уровне регистров.
Теперь немного расскажу вам о тестировании порта. Для его проверки используют специальные разъемы-заглушки, с которыми умеет работать диагностическое программное обеспечение. Принцип проверки состоит в том, что сигналы с выходных линий подаются на линии, предназначенные для приема. По большому счету, такой разъем можно изготовить самостоятельно. Приведу распайку для тестирования с помощью программы Norton Diagnostics:
для 9-контактного разъема:
2 — 3
7 — 8
1 — 4 — 6 — 9;
для 25-контактного разъема:
2 — 3
4 — 5
6 — 8 — 20 — 22.
Думаю, многим читателям будет интересно узнать и о USB и FireWire, самых перспективных на сегодняшний день интерфейсах, им я посвящу отдельные статьи.