1. Параллельные интерфейсы

Параллельные интерфейсы характеризуются тем, что в них
для передачи бит в слове используются отдельные сигналь-
ные линии, и биты передаются одновременно. Параллельные
интерфейсы используют логические уровни ТТЛ (транзистор-
но-транзисторной логики), что ограничивает длину кабеля из-
за невысокой помехозащищенности ТТЛ-интерфейса. Гальва-
ническая развязка отсутствует. Параллельные интерфейсы
используют для подключения принтеров. Передача данных
может быть как однонаправленной (Centronics), так и двунап-
равленной (Bitronics). Иногда параллельный интерфейс ис-
пользуют для связи между двумя компьютерами - получает-
ся сеть, "сделанная на коленке" (LapLink). Ниже будут
рассмотрены протоколы интерфейсов Centronics, стандарт
IEEE 1284, а также реализующие их порты PC.

1.1. Интерфейс Centronics и LPT-порт

Для подключения принтера по интерфейсу Centronics в PC
был введен порт параллельного интерфейса - так возникло
название LPT-порт (Line PrinTer - построчный принтер).
Хотя сейчас через этот порт подключаются не только по-
строчные принтеры, название "LPT" осталось.

1.1.1. Интерфейс Centronics

Понятие Centronics относится как к набору сигналов и про-
токолу взаимодействия, так и к 36-контактному разъему на
принтерах. Назначение сигналов приведено в табл. 1.1, а вре-
менные диаграммы обмена с принтером - на рис. 1.1.

Интерфейс Centronics поддерживается принтерами с парал-
лельным интерфейсом. Его отечественным аналогом явля-
ется интерфейс ИРПР-М.

Традиционный порт SPP (Standard Parallel Port) является
однонаправленным портом, через который программно реа-
лизуется протокол обмена Centronics. Порт вырабатывает


аппаратное прерывание по импульсу на входе Ack#. Сигна-
лы порта выводятся на разъем DB-25S (розетка), установ-
ленный непосредственно на плате адаптера (или системной
плате) или соединяемый с ней плоским шлейфом. Название
и назначение сигналов разъема порта (табл. 1.2) соответству-
ют интерфейсу Centronics.

Сигнал

I/O*

Контакт

Назначение

Strobe"

I

1

Строб данных. Данные фиксируют-
ся по низкому уровню сигнала

Data [0:7]

I

2-9

Линии данных. Data 0
(контакт 2) - младший бит

Ack#

0

10

Acknowledge - импульс подтверж-
дения приема байта (запрос на
прием следующего). Может исполь-
зоваться для формирования
запроса прерывания

Busy

0

11

Занято. Прием данных возможен
только при низком уровне сигнала

PaperEnd

о

12

Высокий уровень сигнализирует
о конце бумаги

Select

о

13

Сигнализирует о включении прин-
тера (обьгано в принтере соединя-
ется резистором с цепью +5 В)

AutoLF#

I

14

Автоматический перевод строки.
При низком уровне принтер,
получив символ CR (Carriage Re-
turn - возврат каретки), автомати-
чески выполняет и функцию Lf
(Line Feed - перевод строки)

Error"

о

32

Ошибка: конец бумаги, состояние
OFF-Line или внутренняя ошибка
принтера

lnit#

I

31

Инициализация (сброс в режим
параметров умолчания, возврат
к началу строки)

Select ln#

36

Выбор принтера (низким уровнем).
При высоком уровне принтер не
воспринимает остальные сигналы
интерфейса

GND

-

19-30, 33

Общий провод интерфейса



11.jpg

Рис. 1.1. Передача данных по протоколу Centronics

Контакт
DB-25S

Номер
провода
в кабеле

Назначение

I/O*

Reg. Bit**

Сигнал

1

1

0/1

CR.O\

Strobe"

2

3

0(1)

DR.0

DataO

3

5

0(1)

DR.1

Data 1

4

7

0(1)

DR.2

Data 2

5

9

0(1)

DR.3

Data3

6

11

0(1)

DR.4

Data 4

7

13

0(1)

DR.5

Data 5

8

15

0(1)

DR.6

Data 6

9

17

0(1)

DR.7

Data 7

10

19

1***

SR.6

Ack#

11

21

1

SR.A

Busy

12

23

1

SR.5

PaperEnd

13

25

1

SR.4

Select

14

2

0/1

CR.1\

Auto LF#

15

4

1

SR.3

Error*

16

6

0/1

CR.2

lnit#

17

8

0/1

CR.3\

Select ln#

18-25

10, 12,14,
16, 18.20,
22, 24, 26

-

^

~"


* I/O задает направление передачи (вход/выход) сигнала порта.
0/1 обозначает выходные линии, состояние которых считыва-
ется при чтении из портов вывода; (I) - выходные линии, со-
стояние которых может быть считано только при особых условиях
(см. ниже).

** Символом "\" отмечены инвертированные сигналы (1 в регистре
соответствует низкому уровню линии).

*** Вход Ack# соединен резистором (10 кОм) с питанием +5 В.


1.1.2. Традиционный LPT-порт

Адаптер параллельного интерфейса представляет собой на-
бор регистров, расположенных в пространстве ввода/вы-
вода. Регистры порта адресуются относительно базового
адреса порта, стандартными значениями которого явля-
ются 3BCh, 378h и 278h. Порт может использовать линию
запроса аппаратного прерывания, обычно IRQ7 или IRQ5.
Порт имеет внешнюю 8-битную шину данных, 5-битную
шину сигналов состояния и 4-битную шину управляющих
сигналов,

BIOS поддерживает до четырех (иногда до трех) LPT-пор-
тов (LPT1-LPT4) своим сервисом - прерыванием INT 17h,
обеспечивающим через них связь с принтером по интерфей-
су Centronics. Этим сервисом BIOS осуществляет вывод сим-
вола (по опросу готовности, не используя аппаратных пре-
рываний), инициализацию интерфейса и принтера, а также
опрос состояния принтера.

Стандартный порт имеет три 8-битных регистра, располо-
женных по соседним адресам в пространстве ввода/вывода,
начиная с базового адреса порта (BASE).

Data Register (DR) - регистр данных, адрес=ВЛ5Е. Данные,
записанные в этот порт, выводятся на выходные линии ин-
терфейса. Данные, считанные из этого регистра, в зависимо-
сти от схемотехники адаптера соответствуют либо ранее за-
писанным данным, либо сигналам на тех же линиях, что не
всегда одно и то же. Если в порт записать байт с единицами
во всех разрядах, а на выходные линии интерфейса через
микросхемы с выходом типа "открытый коллектор" подать
какой-либо код (или соединить ключами какие-то линии со
схемной землей), то этот код может быть считан из того же
регистра данных. Таким образом на многих старых моделях
адаптеров можно реализовать порт ввода дискретных сигна-
лов, однако выходным цепям передатчика информации при-
дется "бороться" с выходным током логической единицы
выходных буферов адаптера. Схемотехника ТТЛ такие ре-
шения не запрещает, но если внешнее устройство выполне-
но на микросхемах КМОП, их мощности может не хватить
для "победы" в этом шинном конфликте. Однако современ-


ные адаптеры часто имеют в выходной цепи согласующий
резистор с сопротивлением до 50 Ом. Выходной ток коротко-
го замыкания выхода на землю обычно не превышает 30 мА.
Простой расчет показывает, что в случае короткого замыка-
ния контакта разъема на землю при выводе "единицы" на
этом резисторе падает напряжение 1,5 В, что входной схе-
мой приемника будет воспринято как "единица". Так что
такой способ ввода не будет работать на всех компьютерах.

На некоторых адаптерах портов выходной буфер отключа-
ется перемычкой на плате. Тогда порт превращается в обык-
новенный порт ввода.

Status Register (SR) - регистр состояния; представляет со-
бой 5-битный порт ввода сигналов состояния принтера (биты
SR.4-SR.7), адрес==8ЛЗЕ+7. Бит SR. 7 инвертируется - низ-
кому уровню сигнала соответствует единичное значение бита
в регистре, и наоборот.

Назначение бит регистра состояния (в скобках даны номера
контактов разъема):

^ SR. 7 - Busy - инверсные отображения состояния линии
Busy (11): при низком уровне на линии устанавливается
единичное значения бита - разрешение на вывод очеред-
ного байта.

^ SR.6 - Ack (Acknowledge) - отображения состояния ли-
нии Ack# (10).

^ SR.5 - РЕ (Paper End) - отображения состояния линии
Paper End (12). Единичное значение соответствует высо-
кому уровню линии - сигналу о конце бумаги в принтере.

ш SR.4 - Select - отображения состояния линии Select (13).
Единичное значение соответствует высокому уровню ли-
нии - сигналу о включении принтера.

s8 SR.3 - Error - отображения состояния линии Error (15).
Нулевое значение соответствует низкому уровню линии -
сигналу о любой ошибке принтера.

®? SR.2 - PIRQ - флаг прерывания по сигналу Ackft (толь-
ко для порта PS/2). Бит обнуляется, если сигнал Ack#
вызвал аппаратное прерывание. Единичное значение ус-


танавливается по аппаратному сбросу и после чтения ре-
гистра состояния.

^ SR[1:OJ - зарезервированы.

Control Register (CR) - регистр управления, wpec^BASE+2.
Как и регистр данных, этот 4-битный порт вывода допуска-
ет запись и чтение (биты 0-3), но его выходной буфер обычно
имеет тип "открытый коллектор". Это позволяет корректно
использовать линии данного регистра как входные при про-
граммировании их в высокий уровень. Биты О, 1, 3 инвер-
тируются.

Назначение бит регистра управления:

SB CR[7:6] - зарезервированы.

т CR.5 - Direction - бит управления направлением переда-
чи (только для портов PS/2). Запись единицы переводит
порт данных в режим ввода. При чтении состояние бита
не определено.

^ CR.4 - AcklntEn (Ack Interrupt Enable) - единичное зна-
чение разрешает прерывание по спаду сигнала на линии
Ack# - сигнал запроса следующего байта.

is CR.3 - Select In - единичное значение бита соответству-
ет низкому уровню на выходе Select ln# (17) - сигналу,
разрешающему работу принтера по интерфейсу Centronics.

^ CR.2 - Init - нулевое значение бита соответствует низко-
му уровню на выходе 1п'Л# (16) - сигналу аппаратного
сброса принтера.

т CR. 1 - Auto LF - единичное значение бита соответствует
низкому уровню на выходе Auto LF# (14) - сигналу на
автоматический перевод строки (LF - Line Feed) по при-
ему байта возврата каретки (CR). Иногда сигнал и бит
называют AutoFD или AutoFDXT.

^ CR.O - Strobe - единичное значение бита соответствует
низкому уровню на выходе Strobeft (1) - сигналу стро-
бирования выходных данных.

Запрос аппаратного прерывания (обьлно IRQ7 или IRQ5) вы-
рабатывается по отрицательному перепаду сигнала на выво-
де 10 разъема интерфейса (Ack#) при установке CR.4=i. Во


избежание ложных прерываний контакт 10 соединен резис-
тором с шиной +5 В. Прерывание вырабатывается, когда
принтер подтверждает прием предыдущего байта. Как уже
было сказано, BIOS это прерывание не использует и не об-
служивает.

Процедура вывода байта по интерфейсу Centronics включает
следующие шаги (в скобках приведено требуемое количе-
ство шинных операций процессора):

^ Вывод байта в регистр данных (1 цикл IOWR#).

^ Ввод из регистра состояния и проверка готовности уст-
ройства (бит SR. 7 - сигнал Busy). Этот шаг зацикливает-
ся до получения готовности или до срабатывания про-
граммного тайм-аута (минимум 1 цикл IORD#).

ш По получении готовности выводом в регистр управления
устанавливается строб данных, а следующим выводом строб
снимается (2 цикла IOWR#). Обычно, чтобы переключить
только один бит (строб), регистр управления предвари-
тельно считывается, что добавляет еще один цикл IORD#.

Видно, что для вывода одного байта требуется 4-5 операций
ввода/вывода с регистрами порта (в лучшем случае, когда
готовность обнаружена по первому чтению регистра состоя-
ния). Отсюда вытекает главный недостаток вывода через
стандартный порт - невысокая скорость обмена при значи-
тельной загрузке процессора. Порт удается разогнать до ско-
ростей 100-150 Кбайт/с при полной загрузке процессора, что
недостаточно для печати на лазерном принтере. Другой не-
достаток - функциональный - сложность использования в
качестве порта ввода.

Стандартный порт асимметричен - при наличии 12 линий
(и бит), нормально работающих на вывод, на ввод работают
только 5 линий состояния. Если необходима симметричная
двунаправленная связь, на всех стандартных портах рабо-
тоспособен ^ежгш полубайтного обмена - Nibble Mode. В этом
режиме, называемом также Hewlett Packard Bitronics, одно-
временно передаются 4 бита данных, пятая линия исполь-
зуется для квитирования. Таким образом, каждый байт пе-
редается за два цикла, а каждый цикл требует по крайней
мере 5 операций ввода/вывода.


1.1.3. Расширения параллельного порта

Недостатки стандартного порта частично устраняли новые
типы портов, появившиеся в компьютерах PS/2.

Двунаправленный порт 1 (Type 1 parallel port} -интерфейс,
введенный в PS/2. Такой порт кроме стандартного режима
может работать в режиме ввода или двунаправленном ре-
жиме. Протокол обмена формируется программно, а для
указания направления передачи в регистр управления пор-
та введен специальный бит CR.5:0 - буфер данных работа-
ет на вывод, 1 - на ввод. Не путайте этот порт, называемый
также enhanced bi-directional, с ЕРР. Данный тип порта при-
жился и в обычных компьютерах.

Порт с прямым доступом к памяти (Type 3 DMA parallelport)
применялся в PS/2 моделей 57, 90, 95. Был введен для по-
вышения пропускной способности и разгрузки процессора
при выводе на принтер. Программе, работающей с портом,
требовалось только задать в памяти блок данных, подлежа-
щих выводу, а затем вывод по протоколу Centronics произ-
водился без участия процессора.

Позже появились другие адаптеры LPT-портов, реализую-
щие протокол обмена Centronics аппаратно - Fast Centronics.
Некоторые из них использовали FIFO-буфер данных -
Parallel Port FIFO Mode. He будучи стандартизованными, та-
кие порты разных производителей требовали использования
собственных специальных драйверов. Программы, исполь-
зующие прямое управление регистрами стандартных портов,
не умели более эффективно их использовать. Такие порты
часто входили в состав мультикарт VLB. Существуют их ва-
рианты с шиной ISA, в том числе встроенные.

1.2. Стандарт IEEE 1284

Стандарт на параллельный интерфейс IEEE 1284, принятый
в 1994 году, определяет порты SPP, ЕРР и ЕСР. Стандарт
определяет 5 режимов обмена данными, метод согласования
режима, физический и электрический интерфейсы. Соглас-
но IEEE 1284, возможны следующие режимы обмена дан-
ными через параллельный порт:


^ Режим совместимости (Compatibility Mode) - однонаправ-
ленный (вывод) по протоколу Centronics. Этот режим со-
ответствует стандартному порту SPP.

^ Полубайтный режим (Nibble Mode) - ввод байта в два
цикла (по 4 бита), используя для приема линии состоя-
ния. Этот режим обмена может использоваться на лю-
бых адаптерах.

^ Байтный режим (Byte Mode) - ввод байта целиком, ис-
пользуя для приема линии данных. Этот режим работает
только на портах, допускающих чтение выходных дан-
ных (Bi-Directional или PS/2 Type 1).

т Режим ЕРР (Enhanced Parallel Port) (EPP Mode) - дву-
направленный обмен данными. Управляющие сигналы
интерфейса генерируются аппаратно во время цикла об-
ращения к порту. Эффективен при работе с устройства-
ми внешней памяти и адаптерами локальных сетей.

^ Режим ЕСР (Extended Capability Port) (ECP Mode) - дву-
направленный обмен данными с возможностью аппарат-
ного сжатия данных по методу RLE (Run Length Encoding)
и использования FIFO-буферов и DMA. Управляющие
сигналы интерфейса генерируются аппаратно. Эффекти-
вен для принтеров и сканеров.

В компьютерах с LPT-портом на системной плате режим -
SPP, ЕРР, ЕСР или их комбинация - задается в BIOS Setup.
Режим совместимости полностью соответствует стандартно-
му порту SPP. Остальные режимы подробно рассмотрены
ниже.

1.2.1. Физический и электрический интерфейсы

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


требуют четких спецификаций. IEEE 1284 определяет два
уровня интерфейсной совместимости. Первый уровень
(Level I) определен для устройств медленных, но исполь-
зующих смену направления передачи данных. Второй уро-
вень
(Level II) определен для устройств, работающих в
расширенных режимах, с высокими скоростями и длин-
ными кабелями. К передатчикам предъявляются следую-
щие требования:

^ Уровни сигналов без нагрузки не должны выходить за
пределы -0,5... +5,5 В.

^ Уровни сигналов при токе нагрузки 14 мА должны быть
не ниже +2,4 В для высокого уровня (Уон) и не выше
+0,4 В для низкого уровня (VoiJ на постоянном токе.

ii Выходной импеданс Ro, измеренный на разъеме, должен
составлять 50±5 Ом на уровне VoH~VoL. Для обеспечения
заданного импеданса используют последовательные резис-
торы в выходных цепях передатчика. Согласование им-
педанса передатчика и кабеля снижает уровень импульс-
ных помех.

^ Скорость нарастания (спада) импульса должна находить-
ся в пределах 0,05-0,4 В/нс.

Требования к приемникам:

^ Допустимые пиковые значения сигналов -2,0...+7,0 В.

^ Пороги срабатывания должны быть не выше 2,0 В (V^)
для высокого уровня и не ниже 0,8 В (Vi^) для низкого.

а Приемник должен иметь гистерезис в пределах 0,2...1,2 В
(гистерезисом обладают специальные микросхемы - триг-
геры Шмитта).

^ Входной ток микросхемы (втекающий и вытекающий) не
должен превышать 20 мкА, входные линии соединяются
с шиной питания +5 В резистором 1,2 кОм.

^ Входная емкость не должна превышать 50 пФ.

Когда появилась спецификация ЕСР, фирма Microsoft ре-
комендовала применение динамических терминаторов на
каждую линию интерфейса. Однако в настоящее время сле-
дуют спецификации IEEE 1284, в которой динамические


терминаторы не применяются. Рекомендованные схемы
входных, выходных и двунаправленных цепей приведены
на рис. 1.2.

Стандарт IEEE 1284 определяет три типа используемых
разъемов. Типы A (DB-25) и В (Centronics-36) используются
в традиционных кабелях подключения принтера, тип С -
новый малогабаритный 36-контактный разъем.

12.jpg

13.jpg

Рис. 1.2. Оконечные цепи линий интерфейса IEEE 1284:

а - однонаправленных, б - двунаправленных

Традиционные интерфейсные кабели имеют от 18 до 25 про-
водов, в зависимости от числа проводников цепи GND. Эти
проводники могут быть как перевитыми, так и нет. К экра-
нированию кабеля жестких требований не предъявлялось.
Такие кабели вряд ли будут надежно работать на скорости
передачи 2 Мбайт/с и при длине более 2 м. Стандарт
IEEE 1284 регламентирует свойства кабелей.


^ Все сигнальные линии должны быть перевитыми с от-
дельными обратными (общими) проводами.

^ Каждая пара должна иметь импеданс 62±б Ом в частот-
ном диапазоне 4-16 МГц.

^ Уровень перекрестных помех между парами не должен
превышать 10%.

^ Кабель должен иметь экран (фольгу), покрывающий не
менее 85% внешней поверхности. На концах кабеля эк-
ран должен быть окольцован и соединен с контактом
разъема.

Кабели, удовлетворяющие этим требованиям, маркируются
надписью "lEEEStd 1284-1994 Compliant^. Они могут иметь
длину до 10 метров, обозначения типов приведены в табл. 1.3.

Тип

Расшифровка

Разъем 1

Разъем 2

АМАМ

Type A Male - Type A Male

А(вилка)

А(вилка)

AMAF

Туре A Male - Type A Female

А(вилка)

А (розетка)

АВ

Type A Male - Туре В Plug
(стандартный кабель
к принтеру)

А(вилка)

В

АС

Type A Male - Type С Plug
(новый кабель к принтеру)

А(вилка)

С

ВС

Type В Plug - Type С Plug

В

С

СС

Туре С Plug - Type С Plug

С

С


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

IEEE 1284 определяет пять режимов обмена, один из кото-
рых полностью соответствует стандартному выводу по про-
токолу Centronics. Стандарт определяет способ, по которому
ПО может определить режим, доступный и хосту (PC), и
ПУ (или присоединенному второму компьютеру). Режимы
нестандартных портов, реализующих протокол обмена
Centronics аппаратно (Fast Centronics, Parallel Port FIFO Mode),


могут и не являться режимами IEEE 1284, несмотря на на-
личие в них черт ЕРР и ЕСР.

При описании режимов обмена фигурируют следующие по-
нятия:

^ Хост - компьютер, обладающий параллельным портом.

^ ПУ - периферийное устройство, подключаемое к этому
порту.

^ Ptr - в обозначениях сигналов обозначает передающее ПУ.
is Прямой канал - канал вывода данных от хоста в ПУ.
^ Обратный канал - канал ввода данных в хост из ПУ.
Полубайтный режим ввода - Nibble Mode

Предназначен для двунаправленного обмена. Может рабо-
тать на всех стандартных портах. Порты имеют 5 линий вво-
да
состояния, используя которые ПУ может посылать в хост
байт тетрадами (nibble - полубайт, 4 бита) за два приема.
Сигнал Ack#, вызывающий прерывание, которое может ис-
пользоваться в данном режиме, соответствует биту 6 регис-
тра состояния, что усложняет программные манипуляции с
битами при сборке байта. Сигналы порта приведены в
табл. 1.4, временные диаграммы - на рис. 1.3.

14.jpg

Рис. 1.3. Прием данных в полубайтном режиме

Прием байта данных в полубайтном режиме состоит из сле-
дующих фаз:

1. Хост сигнализирует о готовности приема данных уста-
новкой низкого уровня на линии HostBusy.

2. ПУ в ответ помещает тетраду на входные линии состоя-
ния.


3. ПУ сигнализирует о готовности тетрады установкой низ-
кого уровня на линии PtrClk.

4. Хост устанавливает высокий уровень на линии HostBusy,
указывая на занятость приемом и обработкой тетрады.

5. ПУ отвечает установкой высокого уровня на линии PtrClk.

6. Шаги 1-5 повторяются для второй тетрады.

Контакт

Сигнал SPP

I/O

Описание

14

AutoFeed#

0

HostBusy - сигнал квитирования.
Низкий уровень означает готовность к
приему тетрады, высокий подтверждает
прием тетрады

17

Sdectln#

0

Высокий уровень указывает на обмен
в режиме IEEE 1284 (в режиме SPP
уровень низкий)

10

Ack#

1

PtrClk. Низкий уровень означает
готовность тетрады, высокий - ответ
на сигнал HostBusy

11

Busy

I

Прием бита данных 3, затем бита 7

12

РЕ

I

Прием бита данных 2, затем бита 6

13

Sdect

I

Прием бита данных 1, затем бита 5

15

Error"

I

Прием бита данных 0, затем бита 4


Полубайтный режим сильно нагружает процессор, и поднять
скорость обмена выше 50 Кбайт/с не удается. Безусловное
его преимущество в том, что он работает на всех портах. Его
применяют в тех случаях, когда поток данных невелик (на-
пример, для связи с принтерами). Однако при связи с адап-
терами локальных сетей, внешними дисковыми накопителя-
ми и CD-ROM прием больших объемов данных требует
изрядного терпения со стороны пользователя.

Двунаправленный байтный режим - Byte Mode

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


ных может отключаться установкой бита С/?.5=1. Как и пре-
дыдущие, режим является программно-управляемым - все
сигналы квитирования анализируются и устанавливаются
драйвером. Сигналы порта описаны в табл. 1.5, временные
диаграммы - на рис. 1.4.

Контакт

Сигнал SPP

Имя
в байтном
режиме

I/O

Описание

*

Strobe"

HostClk

0

Импульс (низкого уровня)
подтверждает прием байта
в конце каждого цикла

14

AutoFeed#

HostBusy

о

Сигнал квитирования.
Низкий уровень означает
готовность хоста принять
байт; высокий уровень
устанавливается по приему
байта

17

Selecting

1284Active

о

Высокий уровень указывает
на обмен в режиме
IEEE 1284 (в режиме SPP
уровень низкий)

16

lnit#

lnit"

о

Не используется; установ-
лен высокий уровень

10

Ack#

PtrClk

I

Устанавливается в низкий
уровень для индикации
действительности данных
на линиях Data [0:7].
Низкий уровень устанавли-
вается в ответ на сигнал
HostBusy

11

Busy

PtrBusy

I

Состояние занятости пря-
мого канала

12

PE

AckDataReq*

1

Устанавливается ПУ для
указания на наличие обрат-
ного канала передачи

13

Select

Xflag*

I

Флаг расширяемости

15

Error#

DataAvail#*

I

Устанавливается ПУ для
указания на наличие обрат-
ного канала передачи

2-9

Data [0:7]

Data [0:7]

I/

0

Двунаправленный (прямой
и обратный) канал данных


* Сигналы действуют в последовательности согласования (см. далее).


15.jpg

Рис. 1.4. Прием данных в байтном режиме

Фазы приема байта данных:

1. Хост сигнализирует о готовности приема данных уста-
новкой низкого уровня на линии HostBusy.

2. ПУ в ответ помещает байт данных на линии Data [0:7].

3. ПУ сигнализирует о действительности байта установкой
низкого уровня на линии PtrClk.

4. Хост устанавливает высокий уровень на линии HostBusy,
указывая на занятость приемом и обработкой байта.

5. ПУ отвечает установкой высокого уровня на линии PtrClk.

6. Хост подтверждает прием байта импульсом HostCIR.

7. Шаги 1-6 повторяются для каждого следующего байта.

Побайтный режим позволяет поднять скорость обратного
канала до скорости прямого канала в стандартном режиме.
Однако он может работать только на двунаправленных
портах.

Режим ЕРР

Протокол ЕРР (Enhanced Parallel Port - улучшенный парал-
лельный порт) был разработан компаниями Intel, Xircom и
Zenith Data Systems задолго до принятия IEEE 1284. Он
предназначен для повышения производительности обмена по
параллельному порту. ЕРР был реализован в чипсете
Intel 386SL (микросхема 82360) и впоследствии принят мно-
жеством компаний как дополнительный протокол параллель-
ного порта. Версии протокола, реализованные до принятия
IEEE 1284, отличаются от нынешнего стандарта (см. далее).


Протокол ЕРР обеспечивает четыре типа циклов обмена:

^ запись данных;

ш чтение данных;

^ запись адреса;

^ чтение адреса.

Назначение циклов записи и чтения данных очевидно. Ад-
ресные циклы используются для передачи адресной, каналь-
ной и управляющей информации. Циклы обмена данными
отличаются от адресных циклов применяемыми стробирую-
щими сигналами. Назначение сигналов порта ЕРР и их связь
с сигналами SPP объясняются в табл. 1.6.

Контакт

Сигнал SPP

Имя в ЕРР

I/O

Описание

1

Strobe"

Write#

0

Низкий уровень - цикл
записи, высокий - цикл
чтения

14

AutoLF#

DataStb#

0

Строб данных. Низкий
уровень устанавливается
в циклах передачи данных

17

Selecting

AddrStbft

о

Строб адреса. Низкий уро-
вень устанавливается в ад-
ресных циклах

16

lnit"

Reset"

о

Сброс ПУ (низким уровнем)

10

Ack#

INTR#

I

Прерывание от ПУ

11

Busy

Wait#

Сигнал квитирования.
Низкий уровень разрешает
начало цикла (установку
строба в низкий уровень),
переход в высокий - раз-
решает завершение цикла
(снятие строба)

2-9

Data [0:7]

AD[0:7]

I/O

Двунаправленная шина
адреса/данных

12

PaperEnd

AckDataReq*

I

Используется по усмотрению
разработчика периферии

13

Select

Xflag*

I

Используется по усмотрению
разработчика периферии

15

Error#

DataAvail#*

'

Используется по усмотрению
разработчика периферии


* Сигналы действуют в последовательности согласования (см. далее).

2 Зак.№530


ЕРР-порт имеет расширенный набор регистров (табл. 1.7),
который занимает в пространстве ввода/вывода 5-8 смеж-
ных байт.

Имя регистра

Смещение

Режим

R/W

Описание

SPP Data Port

+0

SPP/EPP

W

Регистр данных SPP

SPP Status Port

+1

SPP/EPP

R

Регистр состояния SPP

SPP Control Port

+2

SPP/EPP

W

Регистр управления SPP

EPP Address
Port

+3

EPP

R/W

Регистр адреса EPP.
Чтение или запись в
него генерирует связан-
ный цикл чтения или
записи адреса EPP

EPP Data Port

+4

EPP

R/W

Регистр данных EPP.
Чтение (запись) гене-
рирует связанный цикл
чтения (записи) дан-
ных EPP

Not Defined

+5...+7

EPP

N/A

В некоторых кон-
троллерах могут исполь-
зоваться для 16-/
32-битных операций
ввода/вывода


В отличие от программно-управляемых режимов, описанных
ранее, внешние сигналы fPP-порта для каждого цикла об-
мена формируются аппаратно по одной операции записи или
чтения в регистр порта. На рис. 1.5 приведена диаграмма иик-
ла записи
данных, иллюстрирующая внешний цикл обмена,
вложенный в цикл записи системной шины процессора (иног-
да эти циклы называют связанными). Адресный цикл запи-
си отличается от цикла данных только стробом внешнего ин-
терфейса.

Цикл записи данных состоит из следующих фаз:

1. Программа выполняет цикл вывода (IOWR#) в порт 4 (EPP
Data Port).

2. Адаптер устанавливает сигнал Write* (низкий уровень),
и данные помещаются на выходную шину LPT-порта.


3. При низком уровне Wart# устанавливается строб данных.

4. Порт ждет подтверждения от ПУ (перевода Wait# в вы-
сокий уровень).

5. Снимается строб данных - внешний ЕРР-цикл завер-
шается.

6. Завершается процессорный цикл вывода.

7. ПУ устанавливает низкий уровень Wait#, указывая на
возможность начала следующего цикла.

16.jpg

Рис. 1.5. Цикл записи данных ЕРР

Пример адресного цикла чтения приведен на рис. 1.6. Цикл
чтения данных отличается только применением другого стро-
бирующего сигнала.

17.jpg

Рис. 1.6. Адресный цикл чтения ЕРР

Главной отличительной чертой ЕРР является выполнение
внешней передачи во время одного процессорного цикла вво-


да/вывода. Это позволяет достигать высоких скоростей об-
мена (0,5...2 Мбайт/с). ПУ, подключенное к параллельному
порту ЕРР, может работать со скоростью устройства, под-
ключаемого через слот ISA. Протокол блокированного кви-
тирования (interlocked handshakes) позволяет автоматичес-
ки настраиваться на скорость обмена, доступную и хосту, и
ПУ. ПУ может регулировать длительность всех фаз обмена
с помощью всего лишь одного сигнала Wait#. Протокол ав-
томатически подстраивается под длину кабеля - вносимые
задержки приведут только к удлинению цикла. Поскольку
кабели, соответствующие IEEE 1284 (см. выше), имеют оди-
наковые волновые свойства для разных линий, нарушения
передачи, связанного с "состязаниями" сигналов, происхо-
дить не должно. При подключении сетевых адаптеров или
внешних дисков к ЈPP-nopTy можно наблюдать непривыч-
ное явление: снижение производительности по мере удли-
нения интерфейсного кабеля.

Естественно, ПУ не должно "подвешивать" процессор на
шинном цикле обмена. Это гарантирует механизм тайм-аутов
PC, который принудительно завершает любой цикл обмена,
длящийся более 15 мкс. В ряде реализации ЕРР за тайм-аутом
интерфейса следит сам адаптер - если ПУ не отвечает в те-
чение определенного времени (5 мкс), цикл прекращается и
в дополнительном (не стандартизованном) регистре состоя-
ния адаптера фиксируется ошибка.

Устройства с интерфейсом ЕРР, разработанные до принятия
IEEE 1284, отличаются началом цикла: строб DataStb# или
AddrStb# устанавливается независимо от состояния WAIT#.
Это означает, что ПУ не может задержать начало следующе-
го цикла (хотя может растянуть его на требуемое время).
Такая спецификация называется ЕРР 1.7 (предложена
Xircom). Именно она применялась в контроллере 82360.
Периферия, совместимая с ЕРР 17, будет нормально рабо-
тать и с контроллером ЕРР 1284, но периферия в стандарте
ЕРР 1284 может отказаться работать с контроллером ЕРР 1.7.

С программной точки зрения контроллер ЯРР-порта выгля-
дит просто (см. табл. 1.7). К трем регистрам стандартного
порта, имеющим смещение 0, 1 и 2 относительно базового


адреса порта, добавлены два регистра (ЕРР Address Port и
ЕРР Data Port), чтение и запись в которые вызывает генера-
цию связанных внешних циклов.

Назначение регистров стандартного порта сохранено для со-
вместимости fPP-порта с ПУ и ПО, рассчитанными на при-
менение программно-управляемого обмена. Поскольку сиг-
налы квитирования адаптером вырабатываются аппаратно,
при записи в регистр управления СП биты 0, 1 и 3, соответ-
ствующие сигналам Strobeft, AutoFeed# и Selecting должны
иметь нулевые значения. Программное вмешательство мог-
ло бы нарушить последовательность квитирования. Некото-
рые адаптеры имеют специальные средства защиты (ЕРР
Protect),
при включении которых программная модифика-
ция этих бит блокируется.

Использование регистра данных ЕРР позволяет осуществлять
передачу блока данных с помощью одной инструкции REP
INSB
или REP OUTSB. Некоторые адаптеры допускают 16-/
32-битное обращение
к регистру данных ЕРР. При этом адап-
тер просто дешифрует адрес со смещением в диапазоне 4-7
как адрес регистра данных ЕРР, но процессору сообщает о раз-
рядности 8 бит. Тогда 16- или 32-битное обращение по ад-
ресу регистра данных ЕРР приведет к автоматической гене-
рации двух или четырех шинных циклов по нарастающим
адресам, начиная со смещения 4. Эти циклы будут выпол-
няться быстрее, чем то же количество одиночных циклов.
Таким образом обеспечивается производительность до
2 Мбайт/с, достаточная для адаптеров локальных сетей, вне-
шних дисков, стриммеров и CD-ROM. Адресные циклы ЕРР
всегда выполняются только в однобайтном режиме.

Важной чертой ЕРР является то, что обращение процессора
к ПУ осуществляется в реальном времени - нет буфериза-
ции. Драйвер способен отслеживать состояние и подавать
команды в точно известные моменты времени. Циклы чте-
ния и записи могут чередоваться в произвольном порядке
или идти блоками. Такой тип обмена удобен для регистро-
ориентированных ПУ
или ПУ, работающих в реальном вре-
мени, -
сетевых адаптеров, устройств сбора информации и
управления и т. п.


Режим ЕСР

Протокол ЕСР (Extended Capability Port - порт с расши-
ренными возможностями) был предложен Hewlett Packard
и Microsoft для связи с ПУ типа принтеров или сканеров.
Как и ЕРР, данный протокол обеспечивает высокопроизво-
дительный двунаправленный обмен данными хоста с ПУ.

Протокол ЕСР в обоих направлениях обеспечивает два типа
циклов:

^ циклы записи и чтения данных;

^ командные циклы записи и чтения.

Командные циклы подразделяются на два типа: передачу
канальных адресов и передачу счетчика RLC (Run-Length
Count).

В отличие от ЕРР, вместе с протоколом ЕСР сразу появился
стандарт на программную (регистровую) модель его адапте-
ра, изложенный в документе "The IEEE 1284 Extended
Capabilities Port Protocol and ISA Interface Standard" ком-
пании Microsoft. Этот документ определяет свойства прото-
кола, не заданные стандартом IEEE 1284:

^ компрессию данных хост-адаптером по методу RLE;

^ буферизацию FIFO для прямого и обратного каналов;

^ применение DMA и программного ввода/вывода.

Компрессия в реальном времени по методу RLE (Run-Length
Encoding) позволяет достичь коэффициента сжатия 64:1 при
передаче растровых изображений, которые имеют длинные
строки повторяющихся байт. Компрессию можно использо-
вать, только если ее поддерживает и хост, и ПУ.

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


Протокол ЕСР переопределяет сигналы SPP (табл. 1.8).

Контакт

Сигнал SPP

Имя в ЕСР

I/O

Описание

1

Strobe"

HostClk

0

Используется в паре
с PeriphAck для передачи
в прямом направлении
(вывод)

14

AutoLF#

HostAck

о

Указывает тип цикла
(команда/данные) при
передаче в прямом на-
правлении. Использует-
ся в паре с PeriphClk для
передачи в обратном на-
правлении

17

Selecting

1284Active

о

Высокий уровень указы-
вает на обмен в режиме
IEEE 1284 (в режиме
SPP уровень низкий)

16

lnit#

о

Низкий уровень пере-
ключает канал на пере-
дачу в обратном направ-
лении

ReverseRequest*

10

Ack#

PeriphQk

1

Используется в паре
с HostAck для передачи
в обратном направлении

11

Busy

PeriphAck

I

Используется в паре
с HostClk для передачи
в обратном направлении.
Индицирует тип коман-
да/данные при передаче
в обратном направлении

12

PaperEnd

AckReverse#

I

Переводится в низкий
уровень как подтверж-
дение сигналу
ReverseRequest#

13

Select

Xflag*

I

Флаг расширяемости

15

Error#

PeriphRequest#*

I

Устанавливается ПУ для
указания на доступность
(наличие) обратного ка-
нала передачи*

2-9

Data [0:7]

Data [0:7]

I/O

Двунаправленный канал
данных


* Сигналы действуют в последовательности согласования (см. далее).


Адаптер ЕСР тоже генерирует внешние протокольные сиг-
налы квитирования аппаратно, но его работа существенно
отличается от режима ЕРР.

На рис. 1.7а приведена диаграмма двух циклов прямой пе-
редачи: за циклом данных следует командный цикл. Тип цлкла
задается уровнем на линии HostAck: в цикле данных - вы-
сокий, в командном цикле - низкий. В командном цикле байт
может содержать канальный адрес или счетчик RLE. Отли-
чительным признаком является бит 7 (старший): если он
нулевой, то биты 0-6 содержат счетчик RLE (0-127), если
единичный - то канальный адрес. На рис. 1.76 показана пара
циклов обратной передачи.

18.jpg

19.jpg

Рис. 1.7. Передача в режиме ЕСР: a - прямая, б - обратная

В отличие от диаграмм обмена ЕРР, на рис. 1.7 не приведе-
ны сигналы циклов системной шины процессора. В данном
режиме обмен программы с ПУ разбивается на два относи-
тельно независимых процесса, которые связаны через FIFO-
буфер. Обмен драйвера с FIFO-буфером может осуществ-
ляться с использованием как DMA, так и программного


ввода-вывода. Обмен ПУ с буфером аппаратно выполняет
адаптер ЕСР. Драйвер в режиме ЕСР не имеет информации
о точном состоянии процесса обмена, но здесь обычно важ-
но только то, завершен он или нет. Прямая передача данных
на внешнем интерфейсе состоит из следующих шагов:

1. Хост помещает данные на шину канала и устанавливает
признак цикла данных (высокий уровень) или команды
(низкий уровень) на линии HostAck.

2. Хост устанавливает низкий уровень на линии HostClk,
указывая на действительность данных.

3. ПУ отвечает установкой высокого уровня на линии
PeriphAck.

4. Хост устанавливает высокий уровень линии HostClk, и
этот перепад может использоваться для фиксации дан-
ных в ПУ.

5. ПУ устанавливает низкий уровень на линии PeriphAck для
указания на готовность к приему следующего байта.

Поскольку передача в ЕСР происходит через FIFO-буферы,
которые могут присутствовать на обеих сторонах интерфей-
са, важно понимать, на каком этапе данные можно считать
переданными. Данные считаются переданными на шаге 4,
когда линия HostClk переходит в высокий уровень. В этот
момент модифицируются счетчики переданных и принятых
байт. В протоколе ЕСР есть условия, вызывающие прекра-
щение обмена между шагами 3 и 4. Тогда эти данные не долж-
ны рассматриваться как переданные.

Из рис. 1.7 видно и другое отличие ЕСР от ЕРР. Протокол
ЕРР позволяет драйверу чередовать циклы прямой и обрат-
ной передачи, не запрашивая подтверждения на смену на-
правления. В ЕСР смена направления должна быть согласо-
вана: хост запрашивает реверс установкой ReverseRequest#,
после чего он должен дождаться подтверждения сигналом
AckReverse#. Поскольку предыдущий цикл мог выполнять-
ся по прямому доступу, драйвер должен дождаться завер-
шения прямого доступа или прервать его, выгрузить буфер
FIFO, определив точное значение счетчика переданных байт,
и только после этого запрашивать реверс.


Обратная передача данных состоит из следующих шагов:

1. Хост запрашивает изменение направления канала, уста-
навливая низкий уровень на линии ReverseRequest#.

2. ПУ разрешает смену направления установкой низкого
уровня на линии AckReverse#.

3. ПУ помещает данные на шину канала и устанавливает
признак цикла данных (высокий уровень) или команды
(низкий уровень) на линии PeriphAck.

4. ПУ устанавливает низкий уровень на линии PeriphClk,
указывая на действительность данных.

5. Хост отвечает установкой высокого уровня на линии
HostAck.

6. ПУ устанавливает высокий уровень линии PeriphClk; этот
перепад может использоваться для фиксации данных хос-
том.

7. Хост устанавливает низкий уровень на линии HostAck для
указания на готовность к приему следующего байта.

Режимы и регистры ЕСР-порта *

Программный интерфейс и регистры ЕСР для адаптеров
IEEE 1284 определяет спецификация Microsoft. Определе-
ны режимы (табл. 1.9), в которых может функционировать
адаптер. Они задаются полем Mode регистра ECR (биты [7:5]).

Регистровая модель адаптера ЕСР (табл. 1.10) использует
свойства архитектуры стандартной шины и адаптеров ISA -
для дешифрации адресов портов ввода/вывода задействуются
только 10 младших линий шины адреса. Поэтому, например,
обращения по адресам Port, Port+400h, Port+800h... будут вос-
приниматься как обращения к адресу Port, лежащему в диа-
пазоне 0-3 FFh. Современные PC и адаптеры декодируют
большее количество адресных бит, поэтому обращения по
адресам 0378h и 0778h будет адресованы двум различным
регистрам. Помещение дополнительных регистров ЕСР "за
спину" регистров стандартного порта (смещение 400-402h)
преследует две цели. Во-первых, эти адреса никогда не ис-
пользовались традиционными адаптерами и их драйверами,
и их применение в ЕСР не приведет к сужению доступного


адресного пространства ввода/вывода. Во-вторых, этим обес-
печивается совместимость со старыми адаптерами на уров-
не режимов 000-001 и возможность определения присутствия
ЯСР-адаптера через попытку обращения к его расширенным
регистрам.

Режим

Название

Описание

000

SPPmode

Стандартный (традиционный) режим

001

Bi-directional mode

Двунаправленный порт (тип 1 для PS/2)

010

Fast Centronics

Однонаправленный с использованием
FIFO и DMA

Oil

ECP Parallel Port mode

ECP

100

EPP Parallel Port
mode*

Перевод в режим EPP

101

Зарезервировано

-

110

Test mode

Тестирование работы FIFO
и прерываний

111

Configuration mode

Доступ к конфигурационным регистрам


* Этот режим не входит в спецификацию Microsoft, но трактуется как
EPP контроллером SMC FDC37C665/666 и многими другими.

Каждому режиму ECP соответствуют (и доступны) свои
функциональные регистры. Переключение режимов осуще-
ствляется записью в регистр ECR. "Дежурными" режимами,
включаемыми по умолчанию, являются 000 или 001. В лю-
бом из них работает полубайтный режим ввода. Из этих ре-
жимов всегда можно переключиться в любой другой, но из
старших режимов (010-111) переключение возможно толь-
ко в 000 или 001. Для корректной работы интерфейса перед
выходом из старших режимов необходимо дождаться завер-
шения обмена по прямому доступу и очистки FIFO-буфера.

В режиме 000 (SPP) порт работает как стандартный одно-
направленный программно-управляемый SPP.

В режиме 001 (Bi-Di PS/2) порт работает как двунаправлен-
ный порт PS/2 типа 1. От режима 000 отличается возмож-
ностью реверса канала данных по биту CR.5.


Режим 010(Fast Centronics) предназначен только для высо-
копроизводительного вывода через FIFO-буфер с использо-
ванием DMA. Сигналы квитирования по протоколу Ceritromcs
вырабатываются аппаратно. Сигнал запроса прерывания
вырабатывается по состоянию FIFO-буфера, но не по сиг-
налу Аск# (запрос одиночного байта "не интересует" драй-
вер быстрого блочного вывода).

Режим 011 является собственно режимом ЕСР, описанным
ранее. Поток данных и команд, передаваемых в ПУ, поме-
щается в FIFO-буфер через регистры ECPDFIFO и ECPAFIFO
соответственно. Из FIFO они выводятся с соответствующим
признаком цикла (состояние линии HostAck). Принимаемый
поток данных от ПУ извлекается из FIFO-буфера через ре-
гистр ECPDFIFO. Получение адреса в командном цикле от
ПУ не предусматривается. Обмен с регистром ECPDFIFO мо-
жет производиться и по каналу DMA.

Компрессия по методу RLE при передаче выполняется про-
граммно. Для передачи подряд более двух одинаковых байт
данных в регистр ECPAFIFO записывается байт, у которого
младшие 7 бит содержат счетчик RLC (значение RLC=127
соответствует 128 повторам), а старший бит нулевой. После
этого в ECPDFIFO записывается сам байт. Отсюда очевидно,
что вывод данных с одновременным использованием комп-
рессии и DMA невозможен. Принимая эту пару байт (ко-
мандный байт и байт данных), ПУ осуществляет декомп-
рессию. При приеме потока от ПУ адаптер ЕСР декомпрессию
осуществляет аппаратно и в FIFO-буфер помещает уже де-
компрессированные данные.

Режим 100 (ЕРР) - один из способов включения режима ЕРР.

Режим 110 (Test Mode) предназначен для тестирования взаи-
модействия FIFO и прерываний. Данные могут переда-
ваться в/из регистра TFIFO с помощью DMA или программ-
ным способом. На внешний интерфейс обмен не
воздействует. Адаптер отрабатывает операции вхолостую на
максимальной скорости интерфейса (как будто сигналы
квитирования приходят без задержек). Адаптер следит за
состоянием буфера и по мере необходимости вырабатыва-
ет сигналы запроса прерывания. Таким образом программа


может определить максимальную пропускную способность
канала.

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

Смещение

Имя

R/W

Режимы ЕСР*

Название

000

DR

R/W

000-001

Data Register

000

ECPAF1FO

R/W

Oil

ЕСР Address FIFO

001

SR

R/W

Все

Status Register

002

CR

R/W

Все

Control Register

400

SDFIFO

R/W

010

Parallel Pwt Data FIFO

400

ECPDFIFO

R/W

Oil

ЕСР Data FIFO

400

TFIFO

R/W

110

Test FIFO

400

CNFGA

R

111

Configuration Register A

401

CNFGB

R/W

111

Configuration Register В

402

ECR

R/W

Все

Extended Control Register


* Регистры доступны только в указанных режимах (режим задается би-
тами 7-5 регистра ECR).

Регистр данных DR используется для передачи данных только
в программно-управляемых режимах (000 и 001).

Регистр состояния SR передает значение сигналов на соот-
ветствующих линиях (как в SPP).

Регистр управления CR имеет назначение бит, совпадающее
с SPP. В режимах 010, Oil запись в биты 0, 1 (сигналы
AutoLFft и Strobe*) игнорируется.

Регистр ECPAF1FO служит для помещения информации ко-
мандных циклов (канального адреса или счетчика RLE, в за-
висимости от бита 7) в FIFO-буфер. Из буфера информа-
ция будет выдана в командном цикле вывода.


Регистр SDFIFO используется для передачи данных в режи-
ме 010. Данные, записанные в регистр (или посланные по
каналу DMA), передаются через буфер FIFO по реализо-
ванному аппаратно протоколу Centronics. При этом должно
быть задано прямое направление передачи (бит CR.5=0).

Регистр DFIFO используется для обмена данными в режи-
ме 011 (ЕСР). Данные, записанные в регистр или считанные
из него (или переданные по каналу DMA), передаются че-
рез буфер FIFO по протоколу ЕСР.

Регистр TFIFO обеспечивает механизм тестирования FIFO-
буфера в режиме 110.

Регистр ECPCFGA позволяет считывать информацию об адап-
тере (идентификационный код в битах [7:4].

Регистр ECPCFGB хранит информацию, необходимую драй-
веру. Запись в регистр не влияет на работу порта.

Регистр ECR - главный управляющий регистр ЕСР.

Назначение бит регистра ECR'.

т ECR[7:5] -ЕСР MODE - задает режим ЕСР.

т ECR.4 - ERRINTREN^t (Error Interrupt Disable) - запреща-
ет прерывания по сигналу Еггог# (при нулевом значении
бита по отрицательному перепаду на этой линии выра-
батывается запрос прерывания).

^ ECR.3 - DMAEN (DMA Enable) - разрешает обмен по ка-
налу DMA.

т ECR.2 - SERVICEINTR (Service Interrupt) - запрещает сер-
висные прерывания, которые вырабатываются по оконча-
нии цикла DMA (если он разрешен), по порогу заполне-
ния/опустошения FIFO-буфера (если не используется
DMA) и по ошибке переполнения буфера сверху или снизу.

^ ECR. 1 - FIFOFS (FIFO Full Status) - сигнализирует о за-
полнении буфера; при FIFOFS=1 в буфере нет ни одно-
го свободного байта.

т ECR. О - FIFOES (FIFO Empty Status) - указывает на пол-
ное опустошение буфера; комбинация FfFOFS=FIFOES=i
означает ошибку работы с FIFO (переполнение сверху
или снизу).


Когда порт находится в стандартном или двунаправленном
режимах (000 или 001), первые три регистра полностью со-
впадают с регистрами стандартного порта. Так обеспечива-
ется совместимость драйвера со старыми адаптерами и ста-
рых драйверов с новыми адаптерами.

По интерфейсу с программой fCP-порт напоминает ЕРР:

после установки режима (записи кода в регистр ECR) обмен
данными с устройством сводится к чтению или записи в со-
ответствующие регистры. За состоянием FIFO-буфера на-
блюдают либо по регистру ECR, либо по обслуживанию сер-
висных прерываний от порта. Весь протокол квитирования
генерируется адаптером аппаратно. Обмен данными с ЕСР-
портом (кроме явного программного) возможен и по пря-
мому доступу к памяти (каналу DMA), что эффективно при
передаче больших блоков данных.

1.2.3. Согласование режимов IEEE 1284

ПУ в стандарте IEEE 1284 обычно не требуют от контроллера
реализации всех режимов, предусмотренных стандартом. Для
определения режимов и методов управления конкретным
устройством стандарт предусматривает последовательность
согласования (negotiation sequence).
Последовательность по-
строена так, что старые устройства, не рассчитанные на при-
менение IEEE 1284, на нее не ответят, и контроллер оста-
нется в стандартном режиме. Периферия IEEE 1284 может
сообщить о своих возможностях, и контроллер установит
режим, удовлетворяющий и хост, и ПУ.

Во время фазы согласования контроллер выставляет на ли-
нии данных байт расширяемости (extensibility byte), запра-
шивая подтверждение на перевод интерфейса в требуемый
режим или прием идентификатора ПУ (табл. 1.11). Иден-
тификатор передается контроллеру в запрошенном режиме
(любой режим обратного канала, кроме ЕРР). ПУ использу-
ет сигнал Xflag (Select в терминах SPP) для подтверждения
запрошенного режима обратного канала, кроме полубайтно-
го. Полубайтный режим поддерживается всеми устройства-
ми IEEE 1284. Бит Extensibility Link request послужит для
определения дополнительных режимов в будущих расшире-
ниях стандарта.


Бит

Описание

Допустимые
комбинации

бит [7:0]

7

Request Extensibility Link - зарезервирован

10000000

6

Запрос режима ЕРР

01000000

5

Запрос режима ЕСР с RLE

00110000

4

Запрос режима ЕСР без RLE

00010000

3

Зарезервировано

00001000

2

Запрос идентификатора устройства
с ответом в режиме:

полубайтный

00000100

байтный

00000101

ЕСР без RLE

00010100

ЕСР с RLE

0011 0100

1

Зарезервировано

00000010

0

Запрос полубайтного режима

00000001

none

Запрос байтного режима

00000000


Последовательность согласования (рис. 1.8) состоит из сле-
дующих шагов:

1. Хост выводит байт расширяемости на линии данных.

2. Хост устанавливает высокий уровень сигнала Selecting и
низкий - AutoFeed#, что означает начало последователь-
ности согласования.

3. ПУ отвечает установкой низкого уровня сигнала Ack# и
высокого - Errorft, PaperEnd и Select. Устройство, "не по-
нимающее" стандарта 1284, ответа не даст, и дальнейшие
шаги не выполнятся.

4. Хост устанавливает низкий уровень сигнала Strobe# для
записи байта расширяемости в ПУ.

5. Хост устанавливает высокий уровень сигналов Strobeft и
AutoLF#.


6. ПУ отвечает установкой в низкий уровень сигналов
PaperEnd и Еггог^, если ПУ имеет обратный канал пере-
дачи данных. Если запрошенный режим поддерживается
устройством, на линии Select устанавливается высокий
уровень, если не поддерживается - низкий.

7. ПУ устанавливает высокий уровень на линии Ack# для
указания на завершение последовательности согласова-
ния, после чего контроллер устанавливает требуемый ре-
жим работы.

110.jpg

Рис. 1.8. Последовательность согласования режимов IEEE 1284

1.2.4. Развитие стандарта IEEE 1284

Кроме основного стандарта IEEE 1284, который уже при-
нят, в настоящее время в стадии проработки находятся но-
вые стандарты, дополняющие его. К ним относятся:

^ IEEE Р1284.1 "Standard for Information Technology for
Transport Independent Printer/Scanner Interface (TIP/SI)".
Этот стандарт разрабатывается для управления и обслу-
живания сканеров и принтеров на основе протокола NPAP
(Network Printing Alliance Protocol).

n IEEE P1284.2 "Standard for Test, Measurement and
Conformance to IEEE Std. 1284" - стандарт для тестиро-


вания портов, кабелей и устройств на совместимость с
IEEE 1284.

ai IEEE P12843 "Standaixl for Interface and Protocol Extensions
to IEEE Std. 1284 Compliant Peripheral and Host Adapter
Ports" - стандарт на драйверы и использование устройств
прикладным программным обеспечением (ПО). Уже при-
няты спецификации BIOS для использования ЕРР драй-
верами DOS. Прорабатывается стандарт на разделяемое
использование одного порта цепочкой устройств или груп-
пой устройств, подключаемых через мультиплексор.

^ IEEE P1284.4 "Standard for Data Delivery and Logical
Channels for IEEE Std. 1284 Interfaces" направлен на реа-
лизацию пакетного протокола достоверной передачи дан-
ных через параллельный порт. Основой служит прото-
кол MLC (Multiple Logical Channels) фирмы
Hewlett-Packard, однако совместимость с ним в оконча-
тельной версии стандарта не гарантируется.

1.3. Применение параллельных интерфейсов
и LPT-портов

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

1.3.1. Использование параллельных интерфейсов

Распространенным применением LPT-порта является под-
ключение принтера и плоттера.
Остановимся на аппаратных
аспектах - режиме порта и кабеле подключения. Практически
все принтеры могут работать с портом в режиме SPP, но при-
менение расширенных режимов дает свои преимущества:

т Двунаправленный режим (Bi-Di) не повышает произво-
дительность, но служит для сообщения о состоянии и па-
раметрах принтера.

^ Скоростные режимы (Fast Centronics) повышают произво-
дительность принтера, но могут потребовать качественного
кабеля (см. далее). От принтера не требуется каких-либо
дополнительных "интеллектуальных" способностей.


^ Режим ЕСР - потенциально самый эффективный, имеет
системную поддержку во всех версиях Windows. На не-
которых принтерах реализован не полностью (может от-
сутствовать аппаратная компрессия). ЕСР поддерживают
принтеры HP DeskJet моделей бхх, LaserJet 4 и далее,
современные модели фирмы Lexmark. Требует примене-
ния кабеля, по частотным свойствам соответствующего
IEEE 1284.

Простейший вариант кабеля подключения принтера - 18-про-
водный кабель с неперевитыми проводами. Он используется
для работы в режиме SPP. При длине более 2 м желательно,
чтобы хотя бы линии Strobe# и Busy были перевиты с от-
дельными общими проводами. Для скоростных режимов мо-
жет оказаться непригодным, причем сбои могут происходить
нерегулярно и лишь при определенных последовательностях
передаваемых кодов. Встречаются кабели Centronics, у кото-
рых отсутствует связь контакта 17 разъема PC с контактом 36
разъема принтера. При попытке подключения таким кабелем
принтера, работающего в стандарте 1284, появится сообще-
ние о необходимости применения "двунаправленного кабе-
ля". Принтер не может сообщить системе о поддержке рас-
ширенных режимов, на что рассчитывают драйверы принтера.

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

Идеальным вариантом являются кабели, в которых все сиг-
нальные линии перевиты с общими проводами и заключены
в общий экран - то, что требует IEEE 1248. Такие кабели
гарантированно работают на скоростях до 2 Мбайт/с, их
длина может достигать 10 м.

В табл. 1.12 приводится распайка кабеля подключения прин-
тера с
разъемом XI типа A (DB25-P) со стороны PC и Х2
типа В (Centronics-36) или типа С (миниатюрный) со сторо-
ны принтера. Использование общих проводов (GND) зави-
сит от качества кабеля (см. выше). В простейшем случае


(18-проводный кабель) все сигналы GND объединяются в
один провод. Качественные кабели требуют отдельного об-
ратного провода для каждой сигнальной линии, однако в
разъемах типа А и В для этого недостаточно контактов (см.
табл. 1.12, где в скобках указаны номера контактов разъема
PC типа А, которым соответствуют обратные провода). В
разъеме типа С обратный провод (GND) имеется для каж-
дой сигнальной цепи; сигнальным контактам 1-17 этого
разъема соответствуют контакты GND 19-35.

XI,разъем
PC типа А

Сигнал

Х2, разъем
PRN типа В

Х2, разъем
PRN типа С

1

Strobe#

1

15

2

DataO

2

6

3

Data1

3

7

4

Data2

4

8

5

Data3

5

9

6

Data4

6

10

7

Data5

7

11

8

Data6

8

12

9

Data7

9

13

10

Ack#

10

3

11

Busy

11

1

12

PaperEnd

12

5

13

Select

13

2

14

AutoLF#

14

17

15

Error*

32

4

16

lnit#

31

14

17

Selecting

36

16

18

GND(1)

19

33

19

GND (2 3)

2021

2425

20

GND (4 5)

2223

2627

21

GND (6 7)

2425

2829

22

GND (8 9)

2627

3031

23

GND (11 15)

29

1922

24

GND (10 12 13)

28

20 21 23

25

GND (14 16 17)

30

32 34 35



Ряд отечественных (и стран бывшего СЭВ) принтеров име-
ет интерфейс ИРПР (IFSP в документации на принтеры
ROBOTRON). Он является близким родственником интер-
фейса Centronics, но со следующими отличиями:

as Линии данных инвертированы.
^ Протокол квитирования несколько иной.

^ Ко всем входным линиям (на принтере) подключены пары
согласующих резисторов: 220 Ом к питанию +5 В и 330 Ом
к общему проводу. Это позволяет использовать длинные
кабели, но перегружает большинство интерфейсных адап-
теров PC.

^ Сигналы ошибки и конца бумаги отсутствуют.

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

Для связи двух компьютеров по параллельному интерфейсу
применяются различные кабели в зависимости от режимов
используемых портов. Самый простой и медленный - полу-
байтный режим, работающий на всех портах. Для этого ре-
жима в кабеле достаточно иметь 10 сигнальных и один об-
щий провод. Распайка разъемов кабеля приведена в табл. 1.13.
Связь двух PC данным кабелем поддерживается стандартным
ПО типа Interink из MS-DOS или Norton Commander.

Для машин PS/2 с двунаправленным портом фирма IBM вы-
пускала переходное устройство в комплекте с программой Data
Migration Facility. Переходник устанавливался на разъем LPT-
порта PS/2, а к его разъему Х2 типа Centronics присоединял-
ся обычный принтерный кабель, подключаемый к LPT-порту
любого PC. Так предлагалось решить проблему переноса фай-
лов со старых компьютеров, оснащенных 5" дисководами, на
компьютеры PS/2 с дисководами 3,5". Распайка такого пере-
ходника приведена в табл. 1.14. Как видно, данный переход-
ник нельзя использовать при связи через Interink или Norton
Commander. Если обе соединяемые машины имеют двуна-


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

XI, разъем РС#1

Х2, разъем РС#2

Бит

Контакт

Контакт

Бит

DR.O

2

15

SR.3

DR.1

3

13

SR.4

DR.2

4

12

SR.5

DR.3

5

10

SR.6

DR.4

6

11

SR.7

SR.6

10

5

DR.3

SR.7

11

6

DR.4

SR.5

12

4

DR.2

SR.4

13

3

DR.1

SR.3

15

2

DR.O

GND

18-25

18-25

GND


Разъемы XI и Х2 - DB25-P (вилки).

XI

Х2

Контакт

Бит

Бит

Контакт

1

CR.O

SR.6

10

2

DR.O

DR.O

2

3

DR.1

DR.1

3

4

DR.2

DR.2

4

5

DR.3

DR.3

5

6

DR.4

DR.4

6

7

DR.5

DR.5

7

8

DR.6

DR.6

8

9

DR.7

DR.7

9

10

SR.6

CR.O

1

12

SR.5

CR.3

36

17

CR.3

SR.5

12

18-25

GND

GND

19-30, 33


Разъемы XI - DB25-P (вилка), Х2 - Centmnics-36 (розетка).


Высокоскоростная связь двух компьютеров может выпол-
няться и в режиме ЕСР (режим ЕРР неудобен, поскольку
требует синхронизации шинных циклов ввода/вывода двух
компьютеров). В табл. 1.15 приведена распайка кабеля. В
отличие от предыдущих таблиц, описывающих кабели для
программно-управляемых режимов, в ней приведены имена
сигналов, которые аппаратно генерируются адаптерами пор-
тов. Этот же кабель может использоваться и для связи в байт-
ном режиме. Такая связь поддерживается Windows 95.

Разъем XI

Разъем Х2

Контакт

Имя в ЕСР

Имя в ЕСР

Контакт

1

HostClk

PeriphClk

10

14

HostAck

PeriphAck

11

17

1284Active

PeriphRequest#

15

16

ReverseRequest*

AckReverse*

12

10

PeriphClk

HostClk

1

11

PeriphAck

^MostAck

14

12

AckReverse*

ReverseRequest#

16

13

Xflag

/-

-

15

PeriphRequest#

1284Active

17

2-9

Data [0:7]

Data [0:7]

2-9


Подключение сканера к LPT-порту эффективно, только если
порт обеспечивает хотя бы двунаправленный режим (Bi-Di),
поскольку основной поток - ввод. Лучше использовать порт
ЕСР, если этот режим поддерживается сканером (или ЕРР,
что маловероятно).

Подключение внешних накопителей (lomega Zip Drive, CD-
ROM и др.), адаптеров ЛВС и других симметричных уст-
ройств ввода/вывода имеет свою специфику. В режиме SPP
наряду с замедлением работы устройства заметна принци-
пиальная асимметрия этого режима: чтение данных проис-
ходит в два раза медленнее, чем (весьма небыстрая) запись.
Применение двунаправленного режима (Bi-Di или PS/2
Type 1}
устранит эту асимметрию - скорости сравняются.
Только перейдя на ЕРР, можно получить нормальную ско-


рость работы. В режиме ЕРР подключение к LPT-порту по-
чти не уступает по скорости подключению через ISA-кон-
троллер. Это справедливо и при подключении устройств со
стандартным интерфейсом шин к LPT-портам через преоб-
разователи интерфейсов (например, LPT - IDE, LPT - SCSI,
LPT - PCMCIA).

В табл. 1.16 описано назначение выводов разъема LPT-пор-
та в различных режимах и их соответствие битам регистров
стандартного порта.

Контакт

I/O

Бит*

SPP

ECP

ЕРР

1

0/1

CR.O\

Strobe#

Hostdk

Write#

2

0/1

DR.0

DataO

DataO

DataO

3

0/1

DR.1

Data-l

Data1

Data1

4

0/1

DR.2

Data 2

Data 2

Data 2

5

0/1

DR.3

Data3

Data3

Data3

6

0/1

DR.4

Data 4

Data 4

Data 4

7

0/1

DR.5

Data 5

Data 5

Data 5

8

0/1

DR.6

Data 6

Data 6

Data 6

9

0/1

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

AckReveree*

^*

13

I

SR.4

Select

Xflag

**

14

0/1

CR.1\

AutoLF#

HostAck

DataStb#

15

I

SR.3

Error"

PeriphRequest#

**

16

0/1

CR2

hit"

ReverseRequest*

Reset*

17

0/1

CR.3\

Selecting

1284Active

AddrStb#


* Символом "\" отмечены инвертированные сигналы (1 в регистре
соответствует низкому уровню линии).

** - означает "определяется пользователем".

1.3.2. Конфигурирование 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 (по умол-
чанию - 3).

Режимы работы порта:

и SPP - порт работает только в стандартном однонаправ-
ленном программно-управляемом режиме.

is PS/2, он же Bi-Directional - отличается от SPP возмож-
ностью реверса канала (установкой СЯ.5=7).

^ Fast Centronics - аппаратное формирование протокола Cen-
tronics с
использованием FIFO-буфера и, возможно, DMA.


т ЕРР - в зависимости от использования регистров порт
работает в режиме SPP или ЕРР.

ж ЕСР - по умолчанию включается в режим SPP или PS/2,
записью в ECR может переводиться в любой режим ЕСР,
но перевод в ЕРР записью в ECR кода 100 не гарантиру-
ется.

^ ЕСР+ЕРР - то же, что и ЕСР, но запись в ECR кода режи-
ма 100 переводит порт в ЕРР.

Выбор режима ЕРР, ЕСР или Fast Centronics сам по себе не
приводит к повышению быстродействия обмена с подклю-
ченными ПУ, а только дает возможность драйверу и ПУ
установить оптимальный режим в пределах их "разумения".
Большинство современных драйверов и приложений пыта-
ются использовать эффективные режимы, так что "подре-
зать им крылья" установкой простых режимов без веских
оснований не стоит.

Принтеры и сканеры могут пожелать режима ЕСР. Windows
(3-х, 95 и NT) имеет системные драйверы для этого режима.
В среде DOS печать через ЕСР поддерживается только спе-
циальным загружаемым драйвером.

Сетевые адаптеры, внешние диски и CD-ROM, подключае-
мые к параллельному порту, могут использовать режим ЕРР.
Для этого режима специальный драйвер пока еще не приме-
няется; использование ЕРР включается в драйвер самого под-
ключаемого устройства.

Большинство современных ПУ, подключаемых к LPT-пор-
ту, поддерживает стандарт 1284 и РпР. Для поддержки этих
функций компьютером с аппаратной точки зрения достаточ-
но иметь контроллер интерфейса, поддерживающий стан-
дарт 1284. Если подключаемое устройство поддерживает РпР,
оно по протоколу согласования режимов 1284 способно "до-
говориться" с портом о возможных режимах обмена. Под-
ключенное устройство должно сообщить операционной сис-
теме (ОС) все необходимые сведения о себе - идентификатор
производителя, модель и набор поддерживаемых команд.
Более подробная информация может содержать идентифи-
катор класса, подробное описание и идентификатор устрой-


ства, с которым обеспечивается совместимость. В соответ-
ствии с принятой информацией ОС может предпринять дей-
ствия по установке требуемого ПО для поддержки данного
устройства.

1.3.3. Неисправности и тестирование параллельных
портов

Тестирование параллельных портов разумно начинать с про-
верки их наличия
в системе. Список адресов установленных
портов появляется в таблице, выводимой BIOS на экран пе-
ред загрузкой ОС. Список можно посмотреть и с помощью
тестовых программ или прямо в B/OS Data Area с помощью
отладчика.

Если BIOS обнаруживает меньше портов, чем установлено
физически, скорее всего, двум портам присвоен один адрес.
При этом работоспособность ни одного из конфликтующих
портов не гарантируется: они будут одновременно выводить
сигналы, но при чтении состояния конфликт на шине ско-
рее всего приведет к искажению данных. Программное тес-
тирование порта без диагностической заглушки (Loop Back)
не покажет ошибок, поскольку при этом читаются данные
выходных регистров, а они у всех конфликтующих (по от-
дельности исправных) портов совпадут. Именно такое тес-
тирование производит BIOS при проверке на наличие пор-
тов. Разбираться с такой ситуацией следует, последовательно
устанавливая порты и наблюдая за адресами, появляющи-
мися в списке.

Если физически установлен только один порт, a BIOS его
не обнаруживает, то либо порт отключен при конфигуриро-
вании, либо он вышел из строя (скорее всего из-за наруше-
ний правил подключения). Иногда вам везет, и неисправ-
ность устраняется при "передергивании" платы в слоте -
там возникают проблемы с контактами.

Наблюдаются и такие "чудеса" - при "теплой" перезагруз-
ке DOS после Windows 95 порт не виден (и приложения не
могут печатать из MS-DOS). Однако после повторной пере-
загрузки ПО^Гпорт оказывается на месте. С этим явлением
легче смириться, чем бороться.


Тестирование портов с помощью диагностических программ
позволяет проверить выходные регистры, а при использова-
нии специальных заглушек - и входные линии. Поскольку
количество выходных линий порта (12) и входных (5) раз-
лично, то полная проверка порта с помощью пассивной за-
глушки принципиально невозможна. Разные программы те-
стирования требуют применения разных заглушек (рис. 1.9).

111.jpg

Рис. 1.9. Схема заглушки для тестирования LPT-порта
программой Checkit

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

т Если вывод файла с точки зрения DOS проходит (копи-
рование файла на устройство с именем LPTn или PRN со-
вершается быстро и успешно), а принтер (исправный) не
напечатал ни одного символа - скорее всего, это обрыв
(неконтакт в разъеме) цепи Strobed.

^ Если принтер находится в состоянии On Line, но появ-
ляется сообщение о его неготовности, причину следует
искать в линии Busy.

^Если принтер, подключенный к порту, в стандартном ре-
жиме (SPP) печатает нормально, а при переходе в ЕСР
начинаются сбои, следует проверить кабель - соответству-
ет ли он требованиям IEEE 1284 (см. выше). Дешевые


кабели с неперевитыми проводами нормально работают
на скоростях 50-100 Кбайт/с, но при скорости 1-
2 Мбайт/с, обеспечиваемой ЕСР, имеют полное право не
работать, особенно при длине более 2 м.

йя Если при установке драйвера РпР-принтера появилось
сообщение о необходимости применения "двунаправлен-
ного кабеля", проверьте наличие связи контакта 17 разъе-
ма DB-25 с контактом 36 разъема Centronics. Хотя эта
связь изначально предусматривалась, в ряде кабелей она
отсутствует.

^ Если принтер искажает информацию при печати, возмо-
жен обрыв (или замыкание) линий данных. В этом слу-
чае удобно воспользоваться файлом, содержащим после-
довательность кодов всех печатных символов. Вот пример
программы на языке Basic:

10 OPEN "b-incod.chr" FOR OUTPUT AS #1
20 FOR J-2 TO 15
30 FOR 1=0 TO 15
40 PRINT#1. СНР$(1б*]+1);

50 NEXT I
60 PRINT#1
70 NEXT J
80 CLOSE #1
90 END

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

Аппаратные прерывания от LPT-порта используются не все-
гда. Даже DOS-программа фоновой печати PRINT работает с
портом по опросу состояния, а ее обслуживающий процесс
запускается по прерыванию от таймера. Поэтому неисправ-
ности, связанные с цепью прерывания от порта, проявляют-


ся не часто. Однако по-настоящему многозадачные ОС (на-
пример, NetWare) стараются работать с портом по прерыва-
ниям. Протестировать линию прерывания можно, только
подключив к порту ПУ или заглушку. Если к порту с неис-
правным каналом прерывания подключить адаптер локаль-
ной сети, то он, возможно, будет работать, но с очень низ-
кой скоростью: на любой запрос ответ будет приходить с
задержкой в десятки секунд - принятый из адаптера пакет
будет приниматься не по прерыванию (сразу по приходу), а
по внешнему тайм-ауту.

1.3.4. Функции BIOS для LPT-порта

BIOS обеспечивает поддержку LPT-порта, необходимую для
организации вывода по интерфейсу Centronics.

В процессе начального тестирования POST BIOS проверяет
наличие параллельных портов по адресам 3BCh, 378h и 278h
и помещает базовые адреса обнаруженных портов в ячейки
BIOS Data Area 0:0408h, 040Ah, 040Ch, 040Eh. Эти ячейки
хранят адреса портов LPT1-LPT4, нулевое значение адреса
является признаком отсутствия порта с данным номером. В
ячейки 0:0478, 0479, 047А, 047В заносятся константы, зада-
ющие тайм-аут для этих портов.

Поиск портов обычно ведется достаточно примитивно - по
базовому адресу (в регистр данных предполагаемого порта)
выводится тестовый байт (ААЬ или 55h), затем производит-
ся ввод по тому же адресу. Если считанный байт совпал с
записанным, предполагается, что найден LPT-порт; его ад-
рес помещается в ячейку BIOS Data Area. Базовые адреса пор-
тов могут быть впоследствии изменены программно. Адрес
порта LPT4 BIOS самостоятельно установить не может, по-
скольку в списке стандартных адресов поиска имеются толь-
/ ко три указанных.

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


метить по поведению включенного принтера во время пере-
загрузки компьютера - у принтера надолго гаснет индика-
тор On-Line. Следствие этого явления - невозможность рас-
печатки экранов (например, параметров BIOS Setup) no
клавише Print Screen до загрузки ОС.

Программное прерывание BIOS INT 17h обеспечивает следу-
ющие функции поддержки LPT-порта:

is OOh - вывод символа из регистра AL по протоколу
Centronics (без аппаратных прерываний). Данные поме-
щаются в выходной регистр, и, дождавшись готовности
принтера (снятия сигнала Busy), формируется строб.

sa Olh - инициализация интерфейса и принтера (установка
исходных уровней управляющих сигналов, формирова-
ние импульса lnit#, запрет аппаратных прерываний и пе-
реключение на вывод двунаправленного интерфейса).

^ 02h - опрос состояния принтера (чтение регистра состо-
яния порта).

При вызове INT 17h номер функции задается в регистре АН,
номер порта - в регистре DX(Q - LPT1, 1 - LPT2...). При воз-
врате регистр АН содержит код состояния - биты регистра
состояния SR[7:3] (биты 6 и 3 инвертированы) и флаг тайм-
аута в бите 0. Флаг тайм-аута устанавливается при неудач-
ной попытке вывода символа, если сигнал Busy не снимает-
ся в течение времени, определенного для данного порта в
ячейках тайм-аута. В этом случае, согласно протоколу
Centronics, строб данных не вырабатывается.

Перехват прерывания INT 17h является удобным способом
внедрения собственных драйверов принтера. Потребность в
них может возникать при подключении к порту принтера с
интерфейсов ИРПР или необходимости перекодировки сим-
волов.