Контакт I/O Бит¹ SPP ECP EPP 1 O/I CR.0\ Strobe# HostClk Write# 2 O/I DR.0 Data 0 Data 0 Data 0 3 O/I DR.1 Data 1 Data 1 Data 1 4 O/I DR.2 Data 2 Data 2 Data 2 5 O/I DR.3 Data 3 Data 3 Data 3 6 O/I DR.4 Data 4 Data 4 Data 4 7 O/I DR.5 Data 5 Data 5 Data 5 8 O/I DR.6 Data 6 Data 6 Data 6 9 O/I DR.7 Data 7 Data 7 Data 7 10 I SR.6 Ack# PeriphClk INTR# 11 I SR.7\ Busy PeriphAck Wait# 12 I SR.5 PaperEnd AckReverse# —² 13 I SR.4 Select Xflag —² 14 O/I CR.1\ Auto LF# HostAck DataStb# 15 I SR.3 Error# PeriphRequest# —² 16 O/I CR.2 Init# ReverseRequest# Reset# 17 O/I CR.3\ Select In# 1284Active AddrStb#
¹ Символом «\» отмечены инвертированные сигналы (1 в регистре соответствует низкому уровню линии).
² Определяется пользователем.
1.7. Конфигурирование LPT-портов
Управление параллельным портом разделяется на два этапа — предварительное конфигурирование (Setup) аппаратных средств порта и текущее (оперативное) переключение режимов работы прикладным или системным ПО. Оперативное переключение возможно только в пределах режимов, разрешенных при конфигурировании. Этим обеспечивается возможность согласования аппаратуры с ПО и блокирования ложных переключений, вызванных некорректными действиями программы.
Конфигурирование LPT-порта зависит от его исполнения. Порт, расположенный на плате расширения (мультикарте), устанавливаемой в слот ISA или ISA+VLB, конфигурируется джамперами на самой плате. Порт на системной плате конфигурируется через BIOS Setup.
Ниже перечислены параметры, подлежащие конфигурированию.
♦Базовый адрес — 3BCh, 378h или 278h. При инициализации BIOS проверяет наличие портов по адресам именно в этом порядке и, соответственно, присваивает обнаруженным портам логические имена
LPT1
, LPT2
, LPT3
. Адрес 3BCh имеет адаптер порта, расположенный на плате MDA или HGC. Большинство портов по умолчанию конфигурируется на адрес 378h и может переключаться на 278h.♦ Используемая линия запроса прерывания: для
LPT
— IRQ7
, для LPT2
— IRQ5
. Традиционно прерывания от принтера не задействуются, и этот дефицитный ресурс можно сэкономить. Однако при использовании скоростных режимов ЕСР (или Fast Centronics) работа через прерывания может заметно повысить производительность и снизить загрузку процессора.♦ Использование канала DMA для режимов ЕСР и Fast Centronics — разрешение и номер канала DMA.
♦ Режимы работы порта:
• SPP — порт работает только в стандартном однонаправленном программно-управляемом режиме;
• PS/2, он же Bi-Directional — отличается от SPP возможностью реверса канала (установкой
CR.5
=1); • Fast Centronics — аппаратное формирование протокола Centronics с использованием FIFO-буфера и, возможно, DMA;
• EPP — в зависимости от использования регистров порт работает в режиме SPP или EPP;
• ЕСР — по умолчанию включается в режим SPP или PS/2, записью в ECR может переводиться в любой режим ЕСР, но перевод в EPP записью в ECR кода 100 не гарантируется;
• ЕСР+EPP — то же, что и ЕСР, но запись в ECR кода режима 100 переводит порт в EPP.
Выбор режима EPP, ЕСР или Fast Centronics сам по себе не приводит к повышению быстродействия обмена с подключенными ПУ, а только дает возможность драйверу и ПУ установить оптимальный режим в пределах их «разумения». Большинство современных драйверов и приложений пытаются использовать эффективные режимы, поэтому «подрезать им крылья» установкой простых режимов без веских на то оснований не стоит.
Принтеры и сканеры могут пожелать режима ЕСР. Windows (3.x, 9х и NT) имеет системные драйверы для этого режима. В среде DOS печать через ЕСР поддерживается только специальным загружаемым драйвером.
Сетевые адаптеры, внешние диски и CD-ROM, подключаемые к параллельному порту, могут использовать режим EPP. Для этого режима специальный драйвер пока еще не применяется; поддержка EPP включается в драйвер самого подключаемого устройства.
1.8. Неисправности и тестирование параллельных портов
Тестирование параллельных портов разумно начинать с проверки их наличия в системе. Список адресов установленных портов появляется в таблице, выводимой BIOS на экран перед загрузкой ОС. Список можно посмотреть и с помощью тестовых программ или прямо в
BIOS Data Area
с помощью отладчика.Если BIOS обнаруживает меньше портов, чем установлено физически, скорее всего, двум портам присвоен один и тот же адрес. При этом работоспособность ни одного из конфликтующих портов не гарантируется: они будут одновременно выводить сигналы, но при чтении регистра состояния конфликт на шине, скорее всего, приведет к искажению данных. Программное тестирование порта без диагностической заглушки (Loop Back) не покажет ошибок, поскольку при этом читаются данные выходных регистров, а они у всех конфликтующих (по отдельности исправных портов) совпадут. Именно такое тестирование производит BIOS при проверке на наличие портов. Разбираться с такой ситуацией следует, последовательно устанавливая порты и наблюдая за адресами, появляющимися в списке.
Если физически установлен только один порт, a BIOS его не обнаруживает, то либо порт отключен при конфигурировании, либо он вышел из строя (скорее всего из-за нарушений правил подключения). Если вам везет, неисправность устраняется «передергиванием» платы в слоте — там иногда возникают проблемы с контактами.
Наблюдаются и такие «чудеса» — при «теплой» перезагрузке DOS после Windows 95 порт не виден (и приложения не могут печатать из MS-DOS). Однако после повторной перезагрузки DOS порт оказывается на месте. С этим явлением легче смириться, чем бороться.
Тестирование портов с помощью диагностических программ позволяет проверить выходные регистры, а при использовании специальных заглушек — и входные линии. Поскольку количество выходных линий порта (12) и входных (5) различно, то полная проверка порта с помощью пассивной заглушки принципиально невозможна. Разные программы тестирования требуют применения разных заглушек (рис. 1.8).
Рис. 1.8. Схема заглушки для тестирования LPT-порта: а — для CheckIt, б — для Norton Diagnostics
Большинство неприятностей при работе с LPT-портами доставляют разъемы и кабели. Для проверки порта, кабеля и принтера можно воспользоваться специальными тестами из популярных диагностических программ (CheckIt, PCCheck и т.п.). Можно попытаться просто вывести на принтер какой-либо символьный файл.
♦ Если вывод файла с точки зрения DOS проходит (копирование файла на устройство с именем
LPTn
или PRN
совершается быстро и успешно), а принтер (исправный) не напечатал ни одного символа — скорее всего, это обрыв (не контакт в разъеме) цепи Strobe#
.♦ Если принтер находится в состоянии On Line, а появляется сообщение о его неготовности, причину следует искать в линии
Busy
.♦ Если принтер, подключенный к порту, в стандартном режиме (SPP) печатает нормально, а при переходе в режим ЕСР начинаются сбои, следует проверить кабель — соответствует ли он требованиям IEEE 1284 (см. выше). Дешевые кабели с неперевитыми проводами нормально работают на скоростях 50-100 Кбайт/с, но при скорости 1–2 Мбайт/с, обеспечиваемой ЕСР, имеют полное право не работать, особенно при длине более 2 м.
♦ Если при установке драйвера PnP-принтера появилось сообщение о необходимости применения «двунаправленного кабеля», проверьте наличие связи контакта 17 разъема DB-25 с контактом 36 разъема Centronics. Хотя эта связь изначально предусматривалась, в ряде кабелей она отсутствует.
♦ Если принтер искажает информацию при печати, возможен обрыв (или замыкание) линий данных. В этом случае удобно воспользоваться файлом, содержащим последовательность кодов всех печатных символов. Если файл печатается с повтором некоторых символов или их групп, по периодичности повтора можно легко вычислить оборванный провод данных интерфейса. Этот же файл удобно использовать для проверки аппаратной русификации принтера.
Аппаратные прерывания от LPT-порта используются не всегда. Даже DOS-программа фоновой печати
PRINT
работает с портом по опросу состояния, а ее обслуживающий процесс запускается по прерыванию от таймера. Поэтому неисправности, связанные с цепью прерывания от порта, проявляются не часто. Однако по-настоящему многозадачные ОС (например, NetWare) стараются работать с портом по прерываниям. Протестировать линию прерывания можно, только подключив к порту ПУ или заглушку. Если к порту с неисправным каналом прерывания подключить адаптер локальной сети, то он, возможно, будет работать, но с очень низкой скоростью: на любой запрос ответ будет приходить с задержко