ицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для «победы» в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет показывает, что даже в случае короткого замыкания контакта разъема на землю при выводе «единицы» на этом резисторе падает напряжение 1,5 В, что входной схемой приемника будет воспринято как «единица». Поэтому нельзя полагать, что такой способ ввода будет работать на всех компьютерах. На некоторых старых адаптерах портов выходной буфер отключается перемычкой на плате. Тогда порт превращается в обыкновенный порт ввода.
1.2. Расширения параллельного порта
Недостатки стандартного порта частично устраняли новые типы портов, появившиеся в компьютерах PS/2.
Двунаправленный порт 1 (Туре 1 parallel port) — интерфейс, введенный в PS/2. Такой порт кроме стандартного режима может работать в режиме ввода или двунаправленном режиме. Протокол обмена формируется программно, а для указания направления передачи в регистр управления порта введен специальный бит
CR.5
: 0 — буфер данных работает на вывод, 1 — на ввод. Не путайте этот порт, называемый также enhanced bi-directional, с EPP. Данный тип порта «прижился» и в обычных компьютерах, в CMOS Setup он может называться PS/2 или Bi-Di.Порт с прямым доступом к памяти (Туре 3 DMA parallel port) применялся в PS/2 моделей 57, 90, 95. Был введен для повышения пропускной способности и разгрузки процессора при выводе на принтер. Программе, работающей с портом, требовалось только задать в памяти блок данных, подлежащих выводу, а затем вывод по протоколу Centronics производился без участия процессора.
Позже появились другие адаптеры LPT-портов, реализующие протокол обмена Centronics аппаратно, — Fast Centronics. Некоторые из них использовали FIFO-буфер данных — Parallel Port FIFO Mode. He будучи стандартизованными, такие порты разных производителей требовали наличия собственных специальных драйверов. Программы, использующие прямое управление регистрами стандартных портов, не могли задействовать их дополнительные возможности. Такие порты часто входили в состав мультикарт VLB. Существуют их варианты с шиной ISA, а также встроенные в системную плату.
1.3. Стандарт IEEE 1284
Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, описывает порты SPP, EPP и ECP. Стандарт определяет 5 режимов обмена данными, метод согласования режима, физический и электрический интерфейсы. Согласно IEEE 1284, возможны следующие режимы обмена данными через параллельный порт:
♦Режим совместимости (Compatibility Mode) — однонаправленный (вывод) по протоколу Centronics. Этот режим соответствует SPP-порту.
♦Полубайтный режим (Nibble Mode) — ввод байта в два цикла (по 4 бита), используя для приема линии состояния. Этот режим обмена подходит для любых адаптеров, поскольку задействует только возможности стандартного порта.
♦Байтный режим (Byte Mode) — ввод байта целиком, используя для приема линии данных. Этот режим работает только на портах, допускающих чтение выходных данных (Bi-Directional или PS/2 Туре 1, см. выше).
♦Режим EPP (EPP Mode) — двунаправленный обмен данными (EPP означает Enhanced Parallel Port). Управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту. Эффективен при работе с устройствами внешней памяти и адаптерами локальных сетей.
♦Режим ECP (ECP Mode) — двунаправленный обмен данными с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding) и использования FIFO-буферов и DMA (ECP означает Extended Capability Port). Управляющие сигналы интерфейса генерируются аппаратно. Эффективен для принтеров и сканеров (здесь может использоваться сжатие) и различных устройств блочного обмена.
Стандарт определяет способ, по которому ПО может определить режим, доступный и хосту (PC), и периферийному устройству (или присоединенному второму компьютеру). Режимы нестандартных портов, реализующих протокол обмена Centronics аппаратно (Fast Centronics, Parallel Port FIFO Mode), могут и не являться режимами IEEE 1284, несмотря на наличие в них черт EPP и ECP.
В компьютерах с LPT-портом на системной плате режим — SPP, EPP, ECP или их комбинация — задается в BIOS Setup. Режим совместимости полностью соответствует SPP-порту. Остальные режимы подробно рассмотрены ниже.
При описании режимов обмена фигурируют следующие понятия:
♦хост — компьютер, обладающий параллельным портом;
♦ПУ — периферийное устройство, подключаемое к этому порту;
♦Ptr — в названиях сигналов обозначает передающее ПУ;
♦прямой канал — канал вывода данных от хоста в ПУ;
♦обратный канал — канал ввода данных в хост из ПУ.
1.3.1. Полубайтный режим ввода — Nibble Mode
Полубайтный режим предназначен для двунаправленного обмена и может работать на всех стандартных портах. Порты имеют 5 линий ввода состояния, используя которые ПУ может посылать в хост байт тетрадами (nibble — полубайт, 4 бита) за два приема. Сигнал
Ack#
, вызывающий прерывание, которое может использоваться в данном режиме, соответствует биту 6 регистра состояния, что усложняет программные манипуляции с битами при сборке байта. Сигналы порта приведены в табл. 1.2, временные диаграммы — на рис. 1.1.
Таблица 1.2. Сигналы LPT-порта в полубайтном режиме ввода
Контакт Сигнал SPP I/O Бит Описание 14 AutoFeed# O CR.1\ HostBusy — сигнал квитирования. Низкий уровень означает готовность к приему тетрады, высокий подтверждает прием тетрады 17 SelectIn# O CR.3\ Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) 10 Ack# I SR.6 PtrClk. Низкий уровень означает готовность тетрады, высокий — ответ на сигнал HostBusy 11 Busy I SR.7 Прием бита данных 3, затем бита 7 12 РЕ I SR.5 Прием бита данных 2, затем бита 6 13 Select I SR.4 Прием бита данных 1, затем бита 5 15 Error# I SR.3 Прием бита данных 0, затем бита 4
Рис. 1.1. Прием данных в полубайтном режиме
Прием байта данных в полубайтном режиме состоит из следующих фаз:
1. Хост сигнализирует о готовности приема данных установкой низкого уровня на линии
HostBusy
.2. ПУ в ответ помещает тетраду на входные линии состояния.
3. ПУ сигнализирует о готовности тетрады установкой низкого уровня на линии
PtrClk
.4. Хост устанавливает высокий уровень на линии HostBusy, указывая на занятость приемом и обработкой тетрады.
5. ПУ отвечает установкой высокого уровня на линии
PtrClk
.6. Шаги 1–5 повторяются для второй тетрады.
Полубайтный режим сильно нагружает процессор, и поднять скорость обмена выше 50 Кбайт/с не удается. Безусловное его преимущество в том, что он работает на всех портах. Его применяют в тех случаях, когда поток данных невелик (например, для связи с принтерами). Однако при связи с адаптерами локальных сетей, внешними дисковыми накопителями и CD-ROM прием больших объемов данных требует изрядного терпения со стороны пользователя.
1.3.2. Двунаправленный байтный режим — Byte Mode
В этом режиме данные принимаются с использованием двунаправленного порта, у которого выходной буфер данных может отключаться установкой бита
CR.5
=1. Как и предыдущие, режим является программно-управляемым — все сигналы квитирования анализируются и устанавливаются драйвером. Сигналы порта описаны в табл. 1.3, временные диаграммы — на рис. 1.2.
Таблица 1.3. Сигналы LPT-порта в байтном режима ввода-вывода
Контакт Сигнал SPP Имя в байтном режиме I/O Бит Описание 1 Strobe# HostClk O CR.0\ Импульс (низкого уровня) подтверждает прием байта в конце каждого цикла 14 AutoFeed# HostBusy О CR.1\ Сигнал квитирования. Низкий уровень означает готовность хоста принять байт; высокий уровень устанавливается по приему байта 17 SelectIn# 1284Active О CR.3\ Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) 16 Init# Init# O CR.2 Не используется; установлен высокий уровень 10 Ack# PtrClk I SR.6 Устанавливается в низкий уровень для индикации действительности данных на линиях Data[0:7]. В низкий уровень устанавливается в ответ на сигнал HostBusy 11 Busy PtrBusy I SR.7\ Состояние занятости прямого канала 12 PE AckDataReq¹ I SR.5 Устанавливается ПУ для указания на наличие обратного канала передачи 13 Select Xflag¹ I SR.4 Флаг расширяемости 15 Error# DataAvail#¹ I SR.3 Устанавливается ПУ для указания на наличие обратного канала передачи 2-9 Data[0:7] Data[0:7] I/O DR[0:7] Двунаправленный (прямой и обратный) канал данных
¹ Сигналы действуют в последовательности согласования (см. ниже).
Рис. 1.2. Прием данных в байтном режиме
Фазы приема байта данных перечислены ниже.
1. Хост сигнализирует о готовности приема данных установкой низкого уровня на линии
HostBusy
.2. ПУ в ответ помещает байт данных на линии
Data[0:7]
.3. ПУ сигнализирует о действительности байта установкой низкого уровня на линии
PtrClk
.4. Хост устанавливает высокий уровень на линии
HostBusy
, указывая на занятость приемом и обработкой байта.5. ПУ отвечает установкой высокого уровня на линии
PtrClk
.6. Хост подтверждает прием байта импульсом
HostClk
.Шаги 1–6 повторяются для каждого следующего байта. Квитирование осуществляется парой сигналов
HostBusy
и PtrClk
; ПУ может и не использовать сигнал HostClk
(это приглашение к выдаче следующего байта, напоминающее сигнал Ack
# в интерфейсе Centronics). Побайтный режим позволяет поднять скорость обратного канала до скорости прямого канала в стандартном режиме. Однако он способен работать только на двунаправленных портах, которые раньше применялись в основном на малораспространенных машинах PS/2, но практически все современные порты можно сконфигурировать на двунаправленный режим (в настройках BIOS Setup — Bi-Di
или PS/2
).1.3.3. Режим EPP
Протокол EPP (Enhanced Parallel Port — улучшенный параллельный порт) был разработан компаниями Intel, Xircom и Zenith Data Systems задолго до принятия стандарта IEEE 1284. Этот протокол предназначен для повышения производительности обмена по параллельному порту, впервые был реализован в чипсете Intel 386SL (микросхема 82360) и впоследствии принят множеством компаний как дополнительный протокол параллельного порта. Версии протокола, реализованные до принятия IEEE 1284, отличаются от нынешнего стандарта (см. ниже).
Протокол EPP обеспечивает четыре типа циклов обмена:
♦ запись данных;
♦ чтение данных;
♦ запись адреса;
♦ чтение адреса.
Назначение циклов записи и чтения данных очевидно. Адресные циклы используются для передачи адресной, канальной и управляющей информации. Циклы обмена данными отличаются от адресных циклов применяемыми стробирующими сигналами. Назначение сигналов порта EPP и их связь с сигналами SPP объясняются в табл. 1.4.
Таблица 1.4. Сигналы LPT-порта в режиме ввода-вывода EPP
Контакт Сигнал SPP Имя в EPP I/O Описание 1 Strobe# Write# O Низкий уровень — цикл записи, высокий — цикл чтения 14 AutoLF# DataStb# O Строб данных. Низкий уровень устанавливается в циклах передачи данных 17 SelectIn# AddrStb# O Строб адреса. Низкий уровень устанавливается в адресных циклах 16 Init# Reset# O Сброс ПУ (низким уровнем) 10 Ack# INTR# I Прерывание от ПУ 11 Busy Wait# I Сигнал квитирования. Низкий уровень разрешает начало цикла (установку строба в низкий уровень), переход в высокий — разрешает завершение цикла (снятие строба) 2-9 Data[0:7] AD[0:7] I/O Двунаправленная шина адреса/данных 12 PaperEnd AckDataReq¹ I Используется по усмотрению разработчика периферии 13 Select Xflag¹ I Используется по усмотрению разработчика периферии 15 Error# DataAvail#¹ I Используется по усмотрению разработчика периферии
¹ Сигналы действуют в последовательности согласования (см. ниже).
EPP-порт имеет расширенный набор регистров (табл. 1.5), который занимает в пространстве ввода-вывода 5–8 смежных байт.
Таблица 1.5. Регистры EPP-порта
Имя регистра Смещение Режим 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-битных операций ввода-вывода
В отличие от программно-управляемых режимов, описанных выше, внешние сигналы EPP-порта для каждого цикла обмена формируются аппаратно по одной операции записи или чтения в регистр порта. На рис. 1.3 приведена диаграмма цикла записи данных, иллюстрирующая внешний цикл обмена, вложенный в цикл записи системной шины процессора (иногда эти циклы называют связанными). Адресный цикл записи отличается от цикла данных только стробом внешнего интерфейса.
Рис. 1.3. Цикл записи данных EPP
Цикл записи данных состоит из следующих фаз.
1. Программа выполняет цикл вывода (
IOWR#
) в порт 4 (EPP Data Port
).2. Адаптер устанавливает сигнал
Write#
(низкий уровень), и данные помещаются на выходную шину LPT-порта.3. При низком уровне
Wait#
устанавливается строб данных.4. Порт ждет подтверждения от ПУ (перевода
Wait#
в высокий уровень).5. Снимается строб данных — внешний EPP-цикл завершается.
6. Завершается процессорный цикл вывода.
7. ПУ устанавливает низкий уровень
Wait#
, указывая на возможность начала следующего цикла.Пример адресного цикла чтения приведен на рис. 1.4. Цикл чтения данных отличается только применением другого стробирующего сигнала.
Рис. 1.4. Адресный цикл чтения EPP
Главной отличительной чертой EPP является выполнение внешней передачи во время одного процессорного цикла ввода-вывода. Это позволяет достигать высоких скоростей обмена (0,5–2 Мбайт/с). ПУ, подключенное к параллельному порту EPP, может работать со скоростью устройства, подключаемого через слот ISA.
Протокол блокированного квитирования (interlocked handshakes) позволяет автоматически настраиваться на скорость обмена, доступную и хосту, и ПУ. ПУ может регулировать длительность всех фаз обмена с помощью всего лишь одного сигнала
Wait#
. Протокол автоматически подстраивается под длину кабеля — вносимые задержки приведут только к удлинению цикла. Поскольку кабели, соответствующие стандарту IEEE 1284 (см. выше), имеют одинаковые волновые свойства для разных линий, нарушения передачи, связанного с «состязаниями» сигналов, происходить не должно. При подключении сетевых адаптеров или внешних дисков к EPP-порту можно наблюдать непривычное явление: снижение производительности по мере удлинения интерфейсного кабеля.Естественно, ПУ не должно «подвешивать» процессор на шинном цикле обмена. Это гарантирует механизм тайм-аутов PC, который принудительно завершает любой цикл обмена, длящийся более 15 мкс. В ряде реализаций EPP за тайм-аутом интерфейса следит сам адаптер — если ПУ не отвечает в течение определенного времени (5 мкс), цикл прекращается и в дополнительном (нестандартизованном) регистре состояния адаптера фиксируется ошибка.
Устройства с интерфейсом EPP, разработанные до принятия IEEE 1284, отличаются началом цикла: строб
DataStb#
или AddrStb
# устанавливается независимо от состояния WAIT#
. Это означает, что ПУ не может задержать начало следующего цикла (хотя может растянуть его на требуемое время). Такая спецификация называется EPP 1.7 (предложена Xircom). Именно она применялась в контроллере 82360. Периферия, совместимая с IEEE 1284 EPP, будет нормально работать с контроллером EPP 1.7, но ПУ в стандарте EPP 1.7 может отказаться работать с контроллером EPP 1284.С программной точки зрения контроллер EPP-порта выглядит просто (см. табл. 1.5). К трем регистрам стандартного порта, имеющим смещение 0, 1 и 2 относительно базового адреса порта, добавлены два регистра (
EPP Address Port
и EPP Data Port
), чтение и запись в которые вызывает генерацию связанных внешних циклов.Назначение регистров стандартного порта сохранено для совместимости EPP-порта с ПУ и ПО, рассчитанными на применение программно-управляемого обмена. Поскольку сигналы квитирования адаптером вырабатываются аппаратно, при записи в регистр управления CR биты 0, 1 и 3, соответствующие сигналам
Strobe#
, AutoFeed#
и SelectIn#
должны иметь нулевые значения. Программное вмешательство могло бы нарушить последовательность квитирования. Некоторые адаптеры имеют специальные средства защиты (EPP Protect), при включении которых программная модификация этих бит блокируется.Использование регистра данных EPP позволяет осуществлять передачу блока данных с помощью одной инструкции
REP INSB
или REP OUTSB
. Некоторые адаптеры допускают 16/32-битное обращение к регистру данных EPP. При этом адаптер просто дешифрует адрес со смещением в диапазоне 4–7 как адрес регистра данных EPP, но процессору сообщает о разрядности 8 бит. Тогда 16- или 32-битное обращение по адресу регистра данных EPP приведет к автоматической генерации двух или четырех шинных циклов по нарастающим адресам, начиная со смещения 4. Эти циклы будут выполняться быстрее, чем то же количество одиночных циклов. Более «продвинутые» адаптеры для адреса регистра данных EPP сообщают разрядность 32 бит и для них до 4 байт может быть передано за один цикл обращения процессора. Таким образом обеспечивается производительность до 2 Мбайт/с, достаточная для адаптеров локальных сетей, внешних дисков, стриммеров и CD-ROM. Адресные циклы EPP всегда выполняются только в однобайтном режиме.Важной чертой EPP является то, что обращение процессора к ПУ осуществляется в реальном времени — нет буферизации. Драйвер способен отслеживать состояние и подавать команды в точно известные моменты времени. Циклы чтения и записи могут чередоваться в произвольном порядке или идти блоками. Такой тип обмена удобен для регистро-ориентированных ПУ или ПУ, работающих в реальном времени, например устройств сбора информации и управления. Этот режим пригоден и для устройств хранения данных, сетевых адаптеров, принтеров, сканеров и т.п.
К сожалению, режим EPP поддерживается не всеми портами — он отсутствует, к примеру, в ряде блокнотных ПК. Так что при разработке собственных устройств ради большей совместимости с компьютерами приходится ориентироваться на режим ECP.
1.3.4. Режим ECP
Протокол ECP (Extended Capability Port — порт с расширенными возможностями) был предложен Hewlett Packard и Microsoft для связи с ПУ типа принтеров или сканеров. Как и EPP, данный протокол обеспечивает высокопроизводительный двунаправленный обмен данными хоста с ПУ.
Протокол ECP в обоих направлениях обеспечивает два типа циклов:
♦ циклы записи и чтения данных;
♦ командные циклы записи и чтения.
Командные циклы подразделяются на два типа: передача канальных адресов и передача счетчика RLC (Run-Length Count).
В отличие от EPP вместе с протоколом ЕСР сразу появился стандарт на программную (регистровую) модель его адаптера, изложенный в документе «The IEEE 1284 Extended Capabilities Port Protocol and ISA Interface Standard» компании Microsoft. Этот документ определяет свойства протокола, не заданные стандартом IEEE 1284:
♦ компрессия данных хост-адаптером по методу RLE;
♦ буферизация FIFO для прямого и обратного каналов;
♦ применение DMA и программного ввода-вывода.
Компрессия в реальном времени по методу RLE (Run-Length Encoding) позволяет достичь коэффициента сжатия 64:1 при передаче растровых изображений, которые имеют длинные строки повторяющихся байт. Компрессию можно использовать, только если ее поддерживают и хост, и ПУ.
Канальная адресация ECP применяется для адресации множества логических устройств, входящих в одно физическое. Например, в комбинированном устройстве факс/принтер/модем, подключаемом только к одному параллельному порту, возможен одновременный прием факса и печать на принтере. В режиме SPP, если принтер установит сигнал занятости, канал будет занят данными, пока принтер их не примет. В режиме ECP программный драйвер просто адресуется к другому логическому каналу того же порта.
Протокол ECP переопределяет сигналы SPP (табл. 1.6).
Таблица 1.6. Сигналы LPT-порта в режиме ввода-вывода ECP
Контакт Сигнал SPP Имя в ECP I/O Описание 1 Strobe# HostClk О Строб данных, используется в паре с PeriphAck для передачи в прямом направлении (вывод) 14 AutoLF# HostAck О Указывает тип цикла (команда/данные) при передаче в прямом направлении. Используется как сигнал подтверждения в паре с PeriphClk для передачи в обратном направлении 17 SelectIn# 1284Active O Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) 16 Init# ReverseRequest# O Запрос реверса. Низкий уровень сигнализирует о переключении канала на передачу в обратном направлении 10 Ack# PeriphClk I Строб данных, используется в паре с 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 Двунаправленный канал данных
¹ Сигналы действуют в последовательности согласования (см. ниже)
Адаптер ECP тоже генерирует внешние протокольные сигналы квитирования аппаратно, но его работа существенно отличается от режима EPP.
На рис. 1.5, а приведена диаграмма двух циклов прямой передачи: за циклом данных следует командный цикл. Тип цикла задается уровнем на линии
HostAck
: в цикле данных — высокий, в командном цикле — низкий. В командном цикле байт может содержать канальный адрес или счетчик RLE. Отличительным признаком является бит 7 (старший): если он нулевой, то биты 0–6 содержат счетчик RLE (0-127), если единичный — то канальный адрес. На рис. 1.5, б показана пара циклов обратной передачи.Рис. 1.5. Передача в режиме ECP: а — прямая, б — обратная
В отличие от диаграмм обмена EPP, на рис. 1.5 не приведены сигналы циклов системной шины процессора. В данном режиме обмен программы с ПУ разбивается на два относительно независимых процесса, которые связаны через FIFO-буфер. Обмен драйвера с FIFO-буфером может осуществляться как с использованием DMA, так и программного ввода-вывода. Обмен ПУ с буфером аппаратно выполняет адаптер ECP. Драйвер в режиме ЕСР не имеет информации о точном состоянии процесса обмена, но обычно важно только то, завершен он или нет.
Прямая передача данных на внешнем интерфейсе состоит из следующих шагов:
1. Хост помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии
HostAck
.2. Хост устанавливает низкий уровень на линии
HostClk
, указывая на действительность данных.3. ПУ отвечает установкой высокого уровня на линии
PeriphAck
.4. Хост устанавливает высокий уровень линии
HostClk
, и этот перепад может использоваться для фиксации данных в ПУ.5. ПУ устанавливает низкий уровень на линии
PeriphAck
для указания на готовность к приему следующего байта.Поскольку передача в ЕСР происходит через FIFO-буферы, которые могут присутствовать на обеих сторонах интерфейса, важно понимать, на каком этапе данные можно считать переданными. Данные считаются переданными на шаге 4, когда линия
HostClk
переходит в высокий уровень. В этот момент модифицируются счетчики переданных и принятых байт. В протоколе ЕСР есть условия, вызывающие прекращение обмена между шагами 3 и 4. Тогда эти данные не должны рассматриваться как переданные.Из рис. 1.5 видно и другое отличие ЕСР от EPP. Протокол EPP позволяет драйверу чередовать циклы прямой и обратной передачи, не запрашивая подтверждения на смену направления. В ЕСР смена направления должна быть согласована: хост запрашивает реверс установкой
ReverseRequest#
, после чего он должен дождаться подтверждения сигналом AckReverse#
. Поскольку предыдущий цикл мог выполняться по прямому доступу, драйвер должен дождаться завершения прямого доступа или прервать его, выгрузить буфер FIFO, определив точное значение счетчика переданных байт, и только после этого запрашивать реверс.Обратная передача данных состоит из следующих шагов:
1. Хост запрашивает изменение направления канала, устанавливая низкий уровень на линии
ReverseRequest#
.2. ПУ разрешает смену направления установкой низкого уровня на линии
AckReverse#
.3. ПУ помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии
PeriphAck
.4. ПУ устанавливает низкий уровень на линии
PeriphClk
, указывая на действительность данных.5. Хост отвечает установкой высокого уровня на линии
HostAck
.6. ПУ устанавливает высокий уровень линии
PeriphClk
; этот перепад может использоваться для фиксации данных хостом.7. Хост устанавливает низкий уровень на линии
HostAck
для указания на готовность к приему следующего байта.1.3.5. Режимы и регистры ЕСР-порта
Программный интерфейс и регистры ЕСР для адаптеров IEEE 1284 определяет спецификация Microsoft. Порт ЕСР может работать в различных режимах, приведенных в табл. 1.7, где код соответствует полю
Mode
регистра ECR
(биты [7:5]).
Таблица 1.7. Режимы ЕСР-порта
Код Режим 000 SPP mode, стандартный (традиционный) режим 001 Bi-directional mode, двунаправленный порт (тип 1 для PS/2) 010 Fast Centronics, однонаправленный с использованием FIFO и DMA 011 ЕСР Parallel Port mode, собственно режим ЕСР 100 ЕРР Parallel Port mode, режим ЕРР¹ 101 Зарезервировано 110 Test mode, тестирование работы FIFO и прерываний 111 Configuration mode, доступ к конфигурационным регистрам
¹ Этот режим не входит в спецификацию Microsoft, но трактуется как ЕРР многими адаптерами портов, если в CMOS Setup установлен режим ЕСР+ЕРР.
Регистровая модель адаптера ЕСР (табл. 1.8) использует свойства архитектуры стандартной шины и адаптеров ISA, где для дешифрации адресов портов ввода-вывода задействуются только 10 младших линий шины адреса. Поэтому, например, обращения по адресам
Port
, Port+400h
, Port+800h
… будут восприниматься как обращения к адресу Port, лежащему в диапазоне 0-3FFh. Современные PC и адаптеры декодируют большее количество адресных бит, поэтому обращения по адресам 0378h и 0778Н будут адресованы двум различным регистрам. Помещение дополнительных регистров ЕСР «за спину» регистров стандартного порта (смещение 400-402Н) преследует две цели. Во-первых, эти адреса никогда не использовались традиционными адаптерами и их драйверами, и их применение в ЕСР не приведет к сужению доступного адресного пространства ввода-вывода. Во-вторых, этим обеспечивается совместимость со старыми адаптерами на уровне режимов 000–001 и возможность определения факта присутствия ЕСР-адаптера посредством обращения к его расширенным регистрам.
Таблица 1.8. Регистры ЕСР
Смещение Имя R/W Режимы ECP¹ Название 000 DR R/W 000-001 Data Register 000 ECPAFIFO R/W 011 ЕСР Address FIFO 001 SR R/W Все Status Register 002 CR R/W Все Control Register 400 SDFIFO R/W 010 Parallel Port Data FIFO 400 ECPDFIFO R/W 011 ECP Data FIFO 400 TFIFO R/W 110 Test FIFO 400 ECPCFGA R 111 Configuration Register A 401 ECPCFGB R/W 111 Configuration Register В 402 ECR R/W Все Extended Control Register
¹ Регистры доступны только в данных режимах (указаны значения бит 7–5 регистра ECR)
Каждому режиму
ЕСР
соответствуют (и доступны) свои функциональные регистры. Переключение режимов осуществляется записью в регистр 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. Сигналы квитирования по протоколу Centronics вырабатываются аппаратно. Сигнал запроса прерывания вырабатывается по состоянию FIFO-буфера, но не по сигналу
Ack#
(запрос одиночного байта «не интересует» драйвер быстрого блочного вывода).Режим 011 является собственно режимом ЕСР, описанным выше, Поток данных и
команд
, передаваемых в ПУ, помещается в FIFO-буфер через регистры ECPDFIFO
и ECPAFIFO соответственно. Из FIFO они выводятся с соответствующим признаком цикла (состояние линии HostAck
). Принимаемый поток данных от ПУ извлекается из FIFO-буфера через регистр ECPDFIFO
. Получение адреса в командном цикле от ПУ не предусматривается. Обмен с регистром ECPDFIFO
может производиться и по каналу DMA.Компрессия по методу RLE при передаче выполняется программно. Для передачи подряд более двух одинаковых байт данных в регистр
ЕСPAFIFO
записывается байт, у которого младшие 7 бит содержат счетчик RLC (значение RLC=127 соответствует 128 повторам), а старший бит нулевой. После этого в ECPDFIFO
записывается сам байт. Принимая эту пару байт (командный байт и байт данных), ПУ осуществляет декомпрессию. При приеме потока от ПУ адаптер ЕСР декомпрессию осуществляет аппаратно и в FIFO-буфер помещает уже декомпрессированные данные. Отсюда очевидно, что вывод данных с одновременным использованием компрессии и DMA невозможен.Режим 100 (EPP) — один из способов включения режима EPP (если таковой поддерживается адаптером и разрешен в CMOS Setup).
Режим 110 (Test Mode) предназначен для тестирования взаимодействия FIFO и прерываний. Данные могут передаваться в регистр TFIFO и из него с помощью DMA или программным способом. На внешний интерфейс обмен не воздействует. Адаптер отрабатывает операции вхолостую на максимальной скорости интерфейса (как будто сигналы квитирования приходят без задержек). Адаптер следит за состоянием буфера и по мере необходимости вырабатывает сигналы запроса прерывания. Таким образом программа может определить максимальную пропускную способность канала.
Режим 111 (Configuration mode) предназначен для доступа к конфигурационным регистрам. Выделение режима защищает адаптер и протокол от некорректных изменений конфигурации в процессе обмена.
Как уже упоминалось, каждому режиму ЕСР соответствуют свои функциональные регистры (табл. 1.8).
Регистр данных
DR
используется для передачи данных только в программно-управляемых режимах (000 и 001).Регистр состояния
SR
передает значение сигналов на соответствующих линиях (как в SPP).Регистр управления
CR
имеет назначение бит, совпадающее с SPP. В режимах 010, 011 запись в биты 0, 1 (сигналы AutoLF#
и Strobe#
) игнорируется.Регистр
ECPAFIFO
служит для помещения информации командных циклов (канального адреса или счетчика RLE
, в зависимости от бита 7) в FIFO-буфер. Из буфера информация будет выдана в командном цикле вывода.Регистр
SDFIFO
используется для передачи данных в режиме 010. Данные, записанные в регистр (или посланные по каналу DMA), передаются через буфер FIFO по реализованному аппаратно протоколу Centronics. При этом должно быть задано прямое направление передачи (бит CR.5
=0).Регистр
DFIFO
используется для обмена данными в режиме 011 (ЕСР). Данные, записанные в регистр или считанные из него (или переданные по каналу DMA), передаются через буфер FIFO по протоколу ЕСР.Регистр
TFIFO
обеспечивает механизм тестирования FIFO-буфера в режиме 110.Регистр
ECPCFGA
позволяет считывать информацию об адаптере (идентификационный код в битах [7:4]).Регистр
ECPCFGB
позволят хранить любую информацию, необходимую драйверу. Запись в регистр не влияет на работу порта.Регистр
ECR
— главный управляющий регистр ЕСР. Его биты имеют следующее назначение:♦
ECR[7:5]
— ЕСР MODE
— задают режим ЕСР;♦
ECR.4
— ERRINTREN#
— (Error Interrupt Disable) запрещает прерывания по сигналу Error#
(при нулевом значении бита по отрицательному перепаду на этой линии вырабатывается запрос прерывания);♦
ECR.3
— DMAEN
— (DMA Enable) разрешает обмен по каналу DMA;♦
ECR.2
— SERVICEINTR
— (Service Interrupt) запрещает сервисные прерывания, которые вырабатываются по окончании цикла DMA (если он разрешен), по порогу заполнения/опустошения FIFO-буфера (если не используется DMA) и по ошибке переполнения буфера сверху или снизу;♦
ECR.1
— FIFOFS
— (FIFO Full Status) сигнализирует о заполнении буфера; при FIFOFS
=1 в буфере нет ни одного свободного байта;♦
ECR.0
— FIFOES
— (FIFO Empty Status) указывает на полное опустошение буфера; комбинация FIFOFS
=FIFOES
=1 означает ошибку работы с FIFO (переполнение сверху или снизу).Когда порт находится в стандартном или двунаправленном режимах (000 или 001), первые три регистра полностью совпадают с регистрами стандартного порта. Так обеспечивается совместимость драйвера со старыми адаптерами и старых драйверов с новыми адаптерами.
По интерфейсу с программой ECP-порт напоминает EPP: после установки режима (записи кода в регистр
ECR
) обмен данными с устройством сводится к чтению или записи в соответствующие регистры. За состоянием FIFO-буфера наблюдают либо по регистру ECR
, либо по обслуживанию сервисных прерываний от порта. Весь протокол квитирования генерируется адаптером аппаратно. Обмен данными с ЕСР-портом (кроме явного программного) возможен и по прямому доступу к памяти (каналу DMA), что эффективно при передаче больших блоков данных.1.3.6. Согласование режимов IEEE 1284
ПУ в стандарте IEEE 1284 обычно не требуют от контроллера реализации всех предусмотренных этим стандартом режимов. Для определения режимов и методов управления конкретным устройством стандарт предусматривает последовательность согласования (negotiation sequence). Последовательность построена так, что старые устройства, не поддерживающие IEEE 1284, на нее не ответят, и контроллер останется в стандартном режиме. Периферия IEEE 1284 может сообщить о своих возможностях, и контроллер установит режим, удовлетворяющий и хост, и ПУ.
Во время фазы согласования контроллер выставляет на линии данных байт расширяемости (extensibility byte), запрашивая подтверждение на перевод интерфейса в требуемый режим или прием идентификатора ПУ (табл. 1.9). Идентификатор передается контроллеру в запрошенном режиме (любой режим обратного канала, кроме EPP). ПУ использует сигнал
Xflag
(Select
в терминах SPP) для подтверждения запрошенного режима обратного канала, кроме полубайтного, который поддерживается всеми устройствами IEEE 1284. Бит Extensibility Link request
послужит для определения дополнительных режимов в будущих расширениях стандарта.
Таблица 1.9. Биты в байте расширяемости
Бит Описание Допустимые комбинации бит [7:0] 7 Request Extensibility Link — зарезервирован 1000 0000 6 Запрос режима ЕРР 0100 0000 5 Запрос режима ЕСР с RLE 0011 0000 4 Запрос режима ЕСР без RLE 0001 0000 3 Зарезервировано 0000 1000 2 Запрос идентификатора устройства с ответом в режиме: полубайтный 0000 0100 байтный 0000 0101 ЕСР без RLE 0001 0100 ЕСР с RLE 0011 0100 1 Зарезервировано 0000 0010 0 Запрос полубайтного режима 0000 0001 none Запрос байтного режима 0000 0000
Последовательность согласования (рис. 1.6) состоит из следующих шагов.
1. Хост выводит байт расширяемости на линии данных.
2. Хост устанавливает высокий уровень сигнала
SelectIn#
и низкий — AutoFeed#
, что означает начало последовательности согласования.3. ПУ отвечает установкой низкого уровня сигнала
Ack#
и высокого — Error#
, PaperEnd
и Select
. Устройство, «не понимающее» стандарта 1284, ответа не даст, и дальнейшие шаги не выполнятся.4. Хост устанавливает низкий уровень сигнала
Strobe#
для записи байта расширяемости в ПУ.5. Хост устанавливает высокий уровень сигналов
Strobe#
и AutoLF#
.6. ПУ отвечает установкой в низкий уровень сигналов
PaperEnd
и Error#
, если ПУ имеет обратный канал передачи данных. Если запрошенный режим поддерживается устройством, на линии Select
устанавливается высокий уровень, если не поддерживается — низкий.7. ПУ устанавливает высокий уровень на линии
Ack#
для указания на завершение последовательности согласования, после чего контроллер задает требуемый режим работы.Рис. 1.6. Последовательность согласования режимов IEEE 1284
1.3.7. Физический и электрический интерфейсы
Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов, которые по уровням совместимы с ТТЛ. Спецификации стандартного порта не задавали типов выходных схем, предельных значений величин нагрузочных резисторов и емкости, вносимой цепями и проводниками. На относительно невысоких скоростях обмена разброс этих параметров не вызывал проблем совместимости. Однако расширенные (функционально и по скорости передачи) режимы требуют четких спецификаций. IEEE 1284 определяет два уровня интерфейсной совместимости. Первый уровень (Level I) определен для устройств медленных, но использующих смену направления передачи данных. Второй уровень (Level II) определен для устройств, работающих в расширенных режимах с высокими скоростями и длинными кабелями. К передатчикам предъявляются следующие требования.
♦ Уровни сигналов без нагрузки не должны выходить за пределы -0,5…+5,5 В.
♦ Уровни сигналов при токе нагрузки 14 мА должны быть не ниже +2,4 В для высокого уровня (VOH) и не выше +0,4 В для низкого уровня (VOL) на постоянном токе.
♦ Выходной импеданс RO, измеренный на разъеме, должен составлять 50±5 Ом на уровне VOH-VOL. Для обеспечения заданного импеданса используют последовательные резисторы в выходных цепях передатчика. Согласование импеданса передатчика и кабеля снижает уровень импульсных помех.
♦ Скорость нарастания (спада) импульса должна находиться в пределах 0,05-0,4 В/нс.
Ниже перечислены требования к приемникам.
♦ Допустимые пиковые значения сигналов -2,0…+7,0 В.
♦ Пороги срабатывания должны быть не выше 2,0 В (VIH) для высокого уровня и не ниже 0,8 В (VIL) для низкого.
♦ Приемник должен иметь гистерезис в пределах 0,2–1,2 В (гистерезисом обладают специальные микросхемы — триггеры Шмитта).
♦ Входной ток микросхемы (втекающий и вытекающий) не должен превышать 20 мкА, входные линии соединяются с шиной питания +5 В резистором 1,2 кОм.
♦ Входная емкость не должна превышать 50 пФ.
Когда появилась спецификация ЕСР, компания Microsoft рекомендовала применение динамических терминаторов на каждую линию интерфейса. Однако в настоящее время следуют спецификации IEEE 1284, в которой динамические терминаторы не применяются. Рекомендованные схемы входных, выходных и двунаправленных цепей приведены на рис. 1.7.
Рис. 1.7. Оконечные цепи линий интерфейса IEEE 1284: a — однонаправленные линии, б — двунаправленные
Стандарт IEEE 1284 определяет три типа используемых разъемов. Типы A (DB-25) и В (Centronics-36) характерны для традиционных кабелей подключения принтера, тип С — новый малогабаритный 36-контактный разъем.
Традиционные интерфейсные кабели имеют от 18 до 25 проводов, в зависимости от числа проводников цепи GND. Эти проводники могут быть как перевитыми, так и нет. К экранированию кабеля жестких требований не предъявлялось. Такие кабели вряд ли будут надежно работать на скорости передачи 2 Мбайт/с и при длине более 2 м.
Стандарт IEEE 1284 регламентирует свойства кабелей.
♦ Все сигнальные линии должны быть перевитыми с отдельными обратными (общими) проводами.
♦ Каждая пара должна иметь импеданс 62±6 Ом в частотном диапазоне 4-16 МГц.
♦ Уровень перекрестных помех между парами не должен превышать 10%.
♦ Кабель должен иметь экран (фольгу), покрывающий не менее 85% внешней поверхности. На концах кабеля экран должен быть окольцован и соединен с контактом разъема.
Кабели, удовлетворяющие этим требованиям, маркируются надписью «IEEE Std 1284–1994 Compliant». Они могут иметь длину до 10 метров, обозначения типов приведены в табл. 1.10.
Таблица 1.10. Типы кабелей IEEE 1284
Тип Расшифровка Разъем 1 Разъем 2 AMAM Type A Male — Type A Male А (вилка) А (вилка) AMAF Type A Male — Type A Female А (вилка) А (розетка) AB Type A Male — Туре В Plug — стандартный кабель к принтеру А (вилка) В АС Type A Male — Туре С Plug — новый кабель к принтеру А (вилка) С BC Туре В Plug — Type С Plug В С CC Туре С Plug — Type С Plug С С
1.3.8. Развитие стандарта IEEE 1284
Ниже перечислены некоторые дополнения основного стандарта IEEE 1284.
♦IEEE P1284.1 «Standard for Information Technology for Transport Independent Printer/Scanner Interface (TIP/SI)». Этот стандарт разрабатывается для управления и обслуживания сканеров и принтеров на основе протокола NPAP (Network Printing Alliance Protocol).
♦IEEE P1284.2 «Standard for Test, Measurement and Conformance to IEEE Std. 1284» — стандарт для тестирования портов, кабелей и устройств на совместимость с IEEE 1284.
♦IEEE P1284.3 «Standard for Interface and Protocol Extensions to IEEE Std. 1284 Compliant Peripheral and Host Adapter Ports» — стандарт на драйверы и использование устройств прикладным программным обеспечением (ПО). Приняты спецификации BIOS для использования EPP драйверами DOS. Прорабатывается стандарт на разделяемое использование одного порта цепочкой устройств или группой устройств, подключаемых через мультиплексор.
♦IEEE P1284.4 «Standard for Data Delivery and Logical Channels for IEEE Std. 1284 Interfaces» направлен на реализацию пакетного протокола достоверной передачи данных через параллельный порт. Основой служит протокол MLC (Multiple Logical Channels) фирмы Hewlett-Packard, однако совместимость с ним в окончательной версии стандарта не гарантируется.
1.4. Системная поддержка LPT-порта