Что это было?
АрхивПодобно красотке из уличной песенки, современная PC вся состоит из протезов. Чуть не с каждым ее узлом связана длинная история борьбы и компромиссов, но, главное, все остается более или менее программно совместимым с допотопными прототипами. На какой же костыль напоролся герой и автор рассказа, составившего тему этого номера?
Естественная история
Задача научного описания эволюционных форм параллельного порта PC и способов его применения отчасти решена разработчиками стандарта IEEE std. 1284-1994. В нем перечислено то, с чем современный порт должен быть совместим.
Centronics. Первобытного предка параллельного порта называли интерфейсом Centronics (лучше не путать с Centronix, хотя встречается и такое написание). Видимо, это связано с известной маркой принтеров и названием фирмы. Мне не известно происхождение и статус этого стандарта.
Интерфейс Centronics (в СССР он назывался ИРПР) широко применялся задолго до появления PC. Он представляет собою простейшую разновидность параллельного интерфейса. Параллельными такие виды соединений называют потому, что данные передаются в них по многим линиям одновременно.
Наверное, все знают, что любую информацию компьютер приводит к двоичной, то есть к совокупностям символов да/нет, или нулей и единиц. Двоичная информация передается по проводам двумя уровнями напряжения. В зависимости от договоренности, высокое напряжение может означать ноль, а низкое - единицу, или наоборот.
Однако, поскольку реальные провода и транзисторы формируют и передают электрические сигналы очень по-разному, нужны еще какие-то дополнительные управляющие линии. На рис. 1 показано, как по восьми параллельным проводам происходит передача одного символа (или байта, состоящего из восьми бит).
Рис. 1. Временная диаграмма передачи данных по интерфейсу Centronics.
К рисунку имеет смысл приглядеться хотя бы из любопытства, поскольку все параллельные интерфейсы похожи друг на друга, не исключая и системные шины, такие как ISA или PCI.
Сигнал "Busy" поступает от принтера и означает, что он занят. Когда уровень сигнала низкий, данные можно передавать. Передача их происходит параллельно по многим (обычно - восьми) линиям данных Data Line. "Выставив", как говорят электронщики, данные на шину, надо подождать некоторое время, чтобы все улеглось, и подать сигнал "nStrobe". Низкий уровень его означает, что данные можно принимать.
Сигнал занятости принтера "Busy" на диаграмме поднимается и вновь опускается. В реальной жизни он может "висеть" высоким довольно долго, дожидаясь, пока отработает механизм печати. Тем временем низкий уровень сигнала "nAck" подтвердит, что данные приняты и можно готовиться к новой передаче, как только принтер освободится.
Все фазы (проверка "Busy", выставление данных, выставление "nStrobe" и так далее) на IBM PC выполняются программно и требуют, грубо говоря, четыре цикла обращения к каналу. Поэтому скорость передачи данных по старой шине ISA, работающей на частоте чуть более 1 МГц, составит не более 250 знаков в секунду. Помимо сигналов "Busy" и "nAck", принтеру дается еще несколько "линий состояния", по которым он может, например, сообщить о том, что у него кончилась бумага. Этого явно недостаточно, и технические средства диагностики состояния принтеров, в особенности сетевых, до недавнего времени сильно отставали от потребностей пользователей и администраторов.
Параллельный порт PC. Под интерфейсом Centronics понимали внешние разъемы, кабели, характеристики электрических сигналов и порядок обмена ими. Когда говорят о параллельном порте PC, то имеют в виду также и точку зрения программиста, то есть что, как, по каким адресам и в каком порядке можно писать или читать. Когда чуть ниже мы доберемся до EPP, ECP и IEEE-1284, у нас будут все основания добавить к этому еще и протоколы обмена данными.
Первые PC были сделаны в стиле дешевых микропроцессорных устройств. Тогда было модно всячески экономить на аппаратуре и максимум функций перекладывать на программы. Аппаратура параллельного порта была выполнена на нескольких простейших микросхемах, с которыми программист мог делать практически что угодно (вопреки тому, что можно было бы ожидать, микросхема контроллера параллельного порта Intel 8255 не использовалась для этой цели).
Интерфейс Centronics предназначался для медленных недорогих принтеров. Однако параллельный порт PC почти сразу начали применять для передачи данных между компьютерами, в качестве регистра ввода-вывода для связи с объектом, для подключения внешних накопителей, и так далее.
Например, был изобретен способ соединять через параллельные порты два компьютера. При этом с каждой стороны четыре исходящих байта передаются по линиям данных, а четыре входящих принимаются по "линиям состояния". Эту технику часто называют bi-tronics. Алгоритм bi-tronics не имеет никакого отношения к стандартному методу передачи данных при печати, но ничто в компьютере, совместимом с IBM PC, не должно препятствовать таким трюкам.
Двунаправленный (bidirectional) способ работы порта часто (и не совсем правильно) увязывают со свойствами современных микросхем-приемопередатчиков. В них используются переключатели с тремя состояниями на выходе: высокий уровень сигнала, низкий уровень сигнала и "отключено". В состоянии "отключено" передатчик переходит на прием и не мешает передавать данные другому передатчику на той же физической линии. В двунаправленном варианте все восемь параллельных линий данных можно использовать то для приема, то для передачи, попеременно.
Должен заметить, что задача попеременного использования одной и той же шины многими приемопередатчиками успешно решалась задолго до появления приемопередатчиков с тремя состояниями на выходе. Скорее, новые микросхемы позволили сильно упростить схемотехнику и повысить качество. Интересно, что микросхемы приемопередатчиков, установленные в "прототипной" PC, имели выходы с тремя состояниями, однако разработчики не предусматривали возможность управления отключением передатчиков и ввода данных в компьютер с тех же линий.
Если аппаратура параллельного порта поддерживает двунаправленный режим, то отключение передатчиков выполняется через бит 5 в регистре управления (адрес + 2). Для проверки можно установить этот бит в единицу, а затем попробовать выводить в регистр данных какие-либо байты, состоящие не из одних только нулей или единиц, и вводить содержимое регистра обратно. Если на вход поступает не то, что было выведено, значит передатчики отключились. В противном случае остается сделать вывод, что бит 5 не задействован и ваш порт не может работать как двунаправленный.
Рисунок 2.
На рис. 2 показано, как кабель искажает цифровой сигнал. Возможно, вы помните из курса физики, что реальная пара проводов обладает некоторой индуктивностью и емкостью. Поэтому простое переключение сигнала на входе из 0 в 1 или наоборот будет порождать в кабеле переходной процесс (как говорят, "звон"), вид которого показан на том же рисунке.
Чем длиннее кабель, тем сильнее сказывается этот эффект и тем более мощные передатчики нужны для того, чтобы преодолевать реакцию линии и обеспечивать затухание переходного процесса в течение заданного времени. Поэтому длина кабеля параллельного интерфейса ограничена. Простейший интерфейс Centronics был рассчитан на 15 метров. Специалисты не особенно полагаются на "пробивные способности" обычных PC, поэтому вам едва ли удастся найти в продаже кабель длиннее 6 метров.
ECP, EPP, IEEE-1284. По мере совершенствования и удешевления устройств печати, параллельный порт PC окончательно перестал удовлетворять как по скорости, так и по гибкости. Появились два радикальных современных решения, называемых EPP (Enhanced Parallel Port) и ECP (Extended Capability Port). Они совершенно несовместимы между собой, но, конечно, совместимы со всеми предыдущими режимами. Обе системы позволяют передавать данные в любом направлении и при этом остаются значительно дешевле, чем, скажем, SCSI. Спецификация IEEE-1284 объединяет EPP и ECP, добавляя новые возможности.
Новые архитектуры параллельного порта сохраняют в основном внешний интерфейс Centronics, придают ему новые аппаратные "примочки" изнутри и определяют сложные протоколы взаимодействия. Современные PC построены вокруг шины PCI. Старая шина ISA, сохраняемая для совместимости, подключается к PCI как внешнее устройство. Аппаратура параллельного порта работает через нее, поэтому проблема экономии циклов ввода-вывода по-прежнему актуальна. За счет резкого упрощения алгоритмов управления передачей блоков данных скорость ныне достигает 2 Мбайт в секунду.
Архитектура EPP была разработана фирмами Xircom и Zenith. Сейчас ее поддерживают и развивают около ста фирм. Кроме стандартного цикла передачи данных, в рамках EPP можно передавать адресную и командно-диагностическую информацию. Таким образом, на базе одного параллельного порта можно создать магистраль передачи данных, к которой подключен ряд устройств.
ECP предложена совместно компаниями Hewlett-Packard и Microsoft. В этой архитектуре нет цикла адресации, зато предусмотрена возможность компрессии данных "на лету" методом RLE, а также прямой доступ к памяти (DMA).
Обычно отмечают, что разработчики EPP предназначали ее новые возможности не столько для принтеров, сколько для дисков, накопителей на магнитных лентах и другой переносной периферии. ECP, как и следовало ожидать от Hewlett-Packard, приспособлена под обслуживание современных принтеров и сканеров. Важно иметь в виду, что EPP и ECP появились ранее стандарта IEEE 1284 и их старые реализации могут быть несовместимы с ним.
|
Руководство по выживанию
Технические сведения, изложенные выше, как и практические соображения, которые вы найдете ниже, не составляют полной картины. Знать ее не нужно никому, кроме нескольких тысяч разработчиков. Однако технически грамотному пользователю, если он сталкивается с проблемами при использовании параллельного порта PC, полезно представлять себе хотя бы контуры карты местности и характер возможных неприятностей. А то и впрямь недолго пошатнуть основы своего материалистического мировоззрения.
Параллельный порт современной PC обычно может работать в нескольких режимах, соответствующих перечисленным выше спецификациям и стандартам. Тот или иной режим работы порта задается через программу установки параметров для BIOS. Бывает, что надо включать и выключать таким образом даже безобидный двунаправленный режим работы порта (иногда его называют режимом PS/2). Выбранный режим запоминается в энергонезависимой памяти, и аппаратура, управляющая портом, автоматически программируется соответствующим образом каждый раз, когда включается питание.
В любом режиме порт должен поддерживать "старый добрый" Centronics и другие ранние протоколы. Воспользоваться новыми возможностями и более высокой производительностью можно, только если на это рассчитаны программы и само периферийное устройство, подключенное к порту. Кроме того, может попасться устаревший дешевый кабель, в котором проложены не все провода. Наконец, нельзя исключить повреждение кабеля или разъемов. Потеря одного или нескольких контактов в этом интерфейсе может приводить к очень странным эффектам.
Программная поддержка новых режимов использования параллельного порта возможна на уровне прикладных программ и операционной системы. Для многих популярных систем программирования разработаны и поставляются соответствующие пакеты. Имеются драйверы, подгружаемые в OC. Из популярных операционных систем для PC непосредственно поддерживает стандарт IEEE-1284 только Windows 95. Она автоматически распознает возможности интерфейса и подключенного к нему периферийного устройства, но пользователь должен вручную определить параллельный порт как ECP с помощью программы Device Manager.
Существуют и другие разновидности усовершенствованного параллельного порта (например, Fast Centronics). Но и в самых простых реализациях интерфейса достаточно проблем. Скажем, MS-DOS при обслуживании вывода на печать успешно обходилась без прерываний. Подзагружаемая программа печати, с которой, кстати, началась недоброй памяти технология TSR, впустую расходовала ресурс процессора, но для однозадачной системы это не имело большого значения.
Прерывания от вывода на печать широкие массы пользователей начали использовать лишь с появлением Windows. До сих пор распространены комбинированные карты ввода-вывода (вроде 2S, 1P, 1G), на которых есть специальная перемычка, запрещающая или разрешающая прерывание от параллельного порта, которое обычно означает, что принтер готов принимать данные.
Важно иметь в виду, что появление прерывания, которого операционная система не ожидает, по традиции рассматривается разработчиками как симптом очень опасного отказа аппаратуры. В таких случаях многие ОС считают за благо вырубиться поскорее, иногда даже без внятного объяснения причин. Зато если не придет прерывание, которого операционная система ожидает, то устройство может якобы "зависнуть" до следующей перезагрузки. На самом деле, операционная система просто "забывает" о нем.
Стандартная линия прерывания для параллельного порта - 7-я. Поскольку печатать можно и без прерываний, эта линия может оказаться занятой по умолчанию каким-либо другим устройством. Тем более внимательно надо проверить распределение прерываний при подключении второго параллельного порта.
Все принтеры для PC, включая самые простые, давно обзавелись буферной памятью для временного хранения данных. Благодаря этому, уже в эпоху IBM PC/AT с процессором 286 печать без прерываний иной раз обходилась дешевле, чем с прерываниями. Вывод в буфер происходил практически непрерывно, хотя и в замедленном темпе.
Загрузившись данными, принтер пережевывает их некоторое время совершенно независимо от компьютера, иногда заполняя несколько листов бумаги. Начинающие пользователи, бывает, впадают в таких случаях в панику: я выключил компьютер, а принтер все печатает! В случае, который чуть не довел до умопомешательства героя рассказа "Жизнь на краю", принтер мог, например, принимать пресловутые две страницы в буфер и печатать их, а потом не выставлять прерывание, которого операционная система от него ожидала в соответствии с протоколом того или иного усовершенствованного режима.
|