Портовые истории

В затяжной многолетней борьбе параллельных и последовательных
интерфейсов так и остались недостаточно освещенными целые пласты информации.
Кто сейчас с уверенностью перечислит режимы работы параллельных портов или вспомнит
принципы работы двунаправленных протоколов? Nibble, Byte, EPP, ECP — все эти
термины звучат, как что-то из прошлой жизни, если звучат вообще.

Все они мертвы, эти старые пилоты.
У. Фолкнер


Принтерный порт вчера и позавчера

Предварительный просмотр
файлов в директории
Рис. 2. ISA-адаптер принтерного
порта: режимы работы Compatibility, Nibble, Byte
Рис. 3. Структурная схема
параллельного интерфейса
Рис. 4. Внешний накопитель
Iomega Zip LPT: ввиду того что в Windows 9x режимы Byte и EPP не обслуживаются,
работа с устройством идет через Miniport-драйвер
Рис. 5. PCI-адаптер принтерного
порта: режимы работы Compatibility, Nibble, Byte
Рис. 6. Универсальный программатор
Labtool-48. Одно из немногих устройств с поддержкой EPP
Рис. 7. Контроллер SMS FDC37C665GT
— "Gold Standard" для разработчиков драйверной поддержки протоколов
параллельного порта

Параллельный порт — неотъемлемая черта персонального компьютера,
присущая как самым первым реализациям IBM PC, так и современным решениям. Отсутствие
параллельного порта снижает функциональность системы, даже если подключение
соответствующих устройств на повестке дня не стоит.

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

Основными устройствами, подключаемыми к параллельному порту, были принтеры построчной
печати. Поэтому название Line Printer (LPT) надолго определило назначение интерфейса.

Другое название для параллельного порта, как это часто случается, дал один из
разработчиков разъема — корпорация Centronics Data Computer (CDC). Собственно,
сам разъем создан компанией Amphenol Interconnect Products, а CDC, изменив назначение
сигналов, предложила его широкому кругу пользователей. Сейчас названия Centronics
и LPT прочно укоренились в терминологии специалистов.

С момента появления первых персональных компьютеров в адресном пространстве
портов ввода/вывода были выделены адреса для обслуживания параллельных портов,
а каждому из них присваивались мнемонические имена. Как правило, все ограничения,
связанные с использованием портов, — следствие особенностей системных BIOS.
Но в том, что система должна поддерживать не менее трех портов, разработчики
BIOS были единодушны. Вместе с тем неправильно считать, что только тремя портами
ограничены возможности ПК. Хорошей иллюстрацией может послужить плата расширения
KW-508E от Kouwell Electronic,
где доступны порты с LPT1 по LPT6.

Один из аспектов, связанных с работой параллельных портов, — использование
прерываний. Обслуживание большинства печатающих устройств выполняется через
стандартные регистры принтерного порта — регистры данных, статуса и команд.
Это позволяет выполнять прием и передачу данных без использования прерываний
работы центрального процессора. Но уж слишком прочно укоренился стереотип, связывающий
воедино порт и IRQ. Обратившись к руководству по эксплуатации ПК, пользователь
наверняка встретит таблицу, где с LPT1 будет связан IRQ7, а для порта LPT2 назначается
IRQ5. Подчеркнем, что использование IRQ диктуется особенностями подключенных
периферийных устройств. Если по каким-либо причинам нежелательно постоянно анализировать
готовность принтера, работающего в фоновом режиме, может потребоваться обслуживание
порта с помощью прерываний.

Режимы передачи данных. История

Чтобы проследить эволюцию параллельного интерфейса, полезно обратиться к его
истории. В середине 60-х годов главным идеологом передачи данных к принтеру
была корпорация CDC. Как и предложенный CDC разъем, так и способ подсоединения
периферийных устройств надолго стал фактическим стандартом в этой области. Совместимость
со "стандартом" Centronics подразумевала параллельную передачу данных
по восьмибитовой схеме и только в одном направлении.

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

  • четыре линии управления для передачи управляющей информации
    от системы к принтеру;
  • восемь линий для передачи данных от системы к принтеру;
  • пять статусных линий для передачи информации от принтера
    к системе.

С выходом в 1981 г. первых персональных компьютеров IBM
PC смысл термина "совместимость с интерфейсом Centronics" значительно
расширился, и появилось понятие PC-совместимого параллельного интерфейса.

Подключение принтеров к PC хотя и выполнялось с соблюдением "стандарта"
Centronics, претерпело значительные изменения по инициативе производителей печатающей
техники.

Во-первых, подключение устройств к хост-системе начало выполняться с помощью
стандартного 25-контактного разъема. Во-вторых, количество линий управления
было дополнено двумя очень важными — Select In и Autofeed. И в-третьих, изменились
временные характеристики некоторых сигналов.

Режимы передачи данных. Стандарт

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

В режиме Compatibility осуществляется инициализация как системного контроллера
ввода/вывода, так и периферийных устройств — принтеров, сканеров, плоттеров
и т. п. Цель процедуры проста: определить возможности каждого из участников
обмена, чтобы выбрать приемлемый режим работы.

Известны следующие коммуникационные режимы:

  • Standard Printer Port (SPP);
  • Extended Capabilities Port (ECP);
  • Enhanced Parallel Port (EPP).

Внимательный читатель может заметить, что в списке нет уже
упомянутого режима Compatibility. Из этого не следует, что его нет в самом стандарте.
Просто реализация стандарта настолько аппаратно зависима, что выбор перечисленных
выше режимов определяется элементной базой и BIOS материнской платы. По этой
причине пользователь в BIOS Setup обнаружит только три режима либо их комбинацию.
Выбор одной установки будет регламентировать работу параллельного порта до того
момента, пока не будет назначен другой режим.

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

Режим Compatibility

Этот режим предназначен для передачи данных в одном направлении от системного
контроллера параллельного порта к периферийному устройству. Для управления принтером
задействуются также четыре дополнительные линии Strobe, Autofeed, Initialize,
Select In для передачи управляющих команд.

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

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

Режим Nibble

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

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

Режим Byte

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

К сожалению, в данном режиме на аппаратном уровне не предусмотрена защита от
неправильного выбора направления передачи. Забота о слаженной работе канала
связи ложится на программное обеспечение. По этой причине Byte не получил должного
распространения и ограниченно поддерживается операционными системами. Исторические
корни определили и второе название — PS/2 Bidirectional Parallel Port (BPP),
которое хотя и не упоминается в стандарте, однако не утратило актуальности до
сих пор. Во всяком случае драйверы сторонних производителей для устройств параллельного
ввода/вывода поддерживают режим Byte и оперируют этими понятиями.

Режим EPP

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

Другой особенностью режима стала возможность свести к минимуму функции управления,
необходимые при передаче данных. В отличие от протоколов Compatibility, Nibble
и Byte, когда драйверу необходимо было определить статус периферийного устройства,
в режиме EPP все значительно упростилось.

Благодаря аппаратному управлению потоком данных (Flow Control) функции драйвера
сводятся к определению готовности устройства и к обмену данными. Всю работу,
связанную с задержками, стробами и проверками, которую в низших протоколах выполняет
программное обеспечение, берет на себя аппаратная часть хост-контроллера.

Режим ECP

Этот способ передачи данных был разработан компаниями Hewlett-Packard и Microsoft.
Протокол получился мощный и эффективный, он сразу стал популярен и был включен
в IEEE 1284, превратившись тем самым в стандарт де-факто для высокоскоростной
передачи данных через периферийный параллельный интерфейс компьютера.

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

К сожалению, такое обилие возможностей и сложность аппаратной реализации зачастую
приводят к тому, что многие разработчики периферийных устройств отказываются
от поддержки ECP в пользу менее скоростных, но более простых протоколов из семейства
SPP. Отметим, что даже в современных реализациях микросхем Super I/O не всегда
поддерживается вся совокупность возможностей ECP-протокола.

Рассматривая высокоскоростные протоколы, нужно не забыть о такой составляющей
части передачи данных, как способ обмена данными чипсета с микросхемами ввода/вывода.
Если протокол простой и относительно низкоскоростной (как Compatibility, Nibble
или Byte), то обмен осуществляется по старинке, командами IN и OUT. В этом случае
требуется минимальная драйверная поддержка со стороны ОС, а скорость обмена
с параллельным интерфейсом зависит только от времени доступа к шине, с которой
"связана" микросхема ввода/вывода.

При подключении Super I/O к шине ISA максимальное время доступа к портам варьируется
от 2 до 2,5 мкс, использование LPC увеличивает это значение до 3,5 мкс, для
шины PCI — от 0,5 до 0,7 мкс. Учитывая то, что передача данных происходит не
за одну команду ввода/вывода, скорость передачи составляет 200—500 KBps для
ISA и LPC и от 600 KBps до 2 MBps для PCI. Для большинства периферийных устройств
этих скоростей хватает даже с избытком.

Что же касается высокопроизводительных периферийных устройств (принтеров для
малой полиграфии, полноформатных сканеров, устройств слежения и других машин
для "перемалывания" данных), то здесь без ECP не обойтись.

При передаче данных со скоростью 1 MBps и выше становится актуальным процент
загрузки центрального процессора. Для его уменьшения используют обычно три механизма:
дополнительные буферы FIFO, способ обмена данными с применением DMA-канала,
использование более производительной системной шины. Это усложняет драйверную
поддержку, но значительно увеличивает скорость обмена. В наиболее быстродействующих
реализациях пиковая скорость может достигать 25—30 MBps, что ставит этот способ
передачи данных на один уровень с его современными собратьями.