Параллельный порт – новое знакомство! — Часть I

Автор статьи: Копыльцов Михаил (ELC)

E-mail: elc2004@bk.ru

Введение.

Данная серия статей посвящена работе с параллельным (LPT) портом компьютера. В статье будут рассмотрены общие принципы передачи сигналов, приведены примеры работы с портом с исходниками кода для Visual Basic 6.0.

В первой части рассмотрены теоретические основы, разобраны режимы работы порта, в соответствии со стандартом  IEEE 1284, приведены временные диаграммы, поясняющие принципы работы порта, рассмотрены вопросы физического и электрического интерфейса.

 Часть I.

Первое знакомство…

Исторически так сложилось, что параллельный интерфейс появился в первых компьютерах исключительно как интерфейс подключения принтера. Отсюда и его название LPT (Line Printer). Однако впоследствии параллельный порт стал использоваться также и для подключения других устройств – сканеров, дисководов типа ZIP и других устройств. Изначально параллельный интерфейс позволял передавать данные только в одном направлении – от ПК к принтеру. Естественно, в скором времени, потребовалось осуществлять двусторонний обмен данными, в результате чего был разработан стандарт двунаправленной передачи данных.

Собственно адаптер параллельного интерфейса представляет собой регистры, располагающиеся в адресном пространстве ввода/вывода. Имеются три стандартных (обязательных) регистра, без которых порт не может работать. Это регистр данных, регистр состояния и регистр управления. Стандартный LPT порт имеет 8-битную шину данных, 5-битную шину состояния и 4-битную шину управляющих сигналов.

При загрузки BIOS пытается обнаружить параллельный порт компьютера, причем делает это совершенно примитивным способом:  по базовым адресам портов (а их как правило три — &H378 (LPT1), &H278 (LPT2), &H3BC (LPT3)) передается тестовый байт, состоящий из набора логических единиц (реже чередование нулей и единиц), а затем производится чтение по тем же адресам. Если прочитанный байт совпал с записанным, то считается, что LPT порт найден и он исправен. Именно по этой причине, после загрузки компьютера, на линии данных порта присутствуют логические единицы. Это надо учитывать при разработке устройств, подключаемых к порту.

Стандарт IEEE 1284

Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, определяет режимы передачи данных, методы определения поддерживаемых режимов для ведущего и периферийного устройств, а также определяет физический и электрический интерфейс, в результате чего обеспечивается высокая скорость двунаправленной связи между персональным компьютером и периферией, которая может быть в 50 – 100 раз больше, чем у оригинального (стандартного) параллельного парта. При этом сохраняется полная обратная совместимость со всеми существующими периферийными  устройствами параллельного порта и принтерами.

Стандарт определяет пять режимов передачи данных:

1. Compatibility Mode (Режим Совместимости) – стандартный однонаправленный режим передачи данных от персонального компьютера к периферийному устройству, используя протокол и интерфейс “Centronics”. Иногда в литературе используется под термином SPP(Standard Parallel Port).

2. Nibble Mode (Режим Тетрады) – ввод байта происходит за два цикла (по 4 бита), при этом используются линии состояния (регистры состояния). Иногда в литературе именуется как режим Hewlett Packard Bi-tronics (по имени компании предложивший к использованию данный режим). Используется только для приема информации.

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

4. EPP ( Enhanced Parallel Port ) Mode (Расширенный Параллельный Порт) – поддерживает двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения/записи). Применяется для работы с внешними устройствами памяти (CD-ROM, ленточными накопителями, жесткими дисками), сетевыми адаптерами и т.д.

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

На сегодняшний день почти все производители материнских плат реализуют три основные режима передачи данных (SPP, EPP и ECP) с помощью специализированных чипов ввода-вывода (т.е. обработка данных происходит полностью на аппаратном уровне). В результате байт данных может быть передан периферии простой инструкцией OUT (для режимов EPP и ECP соответственно), что, несомненно, облегчает задачу разработки приложений для LPT порта. Один из режимов работы (или их комбинация) задается в BIOS Setup. Режим Compatibility Mode (или SPP) часто установлен по умолчанию.

Подробно о стандарте  IEEE 1284 можно прочитать на сайте находящимся по адресу: http://www.fapo.com/1284int.htm, где размещена оригинальная версия данного стандарта. Остановимся более подробно на режимах EPP и ECP, как на более современных и простых в понимании режимах работы порта. Но начнем, все-таки, с режима Compatibility Mode, на базе которого реализуется Стандартный Параллельный Порт.

Стандартный параллельный порт (Standard Parallel Port) – SPP

Стандартный Параллельный Порт является однонаправленным, на его базе  программно реализуется протокол обмена Centronics. В таком режиме данные передаются на линии данных, состояние периферийного устройства не проверяется ни на какие ошибки и на занятость, затем программно формируется строб данных для тактирования подключенного устройства. Сигналы порта выводятся на стандартный разъем типа DB-25S, который размещается непосредственно на материнской плате компьютера. Назначение сигналов и контактов разъема порта представлены в таблице 1.

Таблица 1.

Контакт DB-25SНаправление передачиСигнал Назначение
1 out/inStrobe# 1Строб данных. Передается ПК, данные фиксируются по низкому уровню сигнала.
2 — 9out (in) 2 D0 – D7Линии данных. D0 – младший бит
10 inACK# 3Acknowledge – импульс подтверждения приема байта (запрос на прием следующего).
11in Busy«Занят». Прием данных возможен только при низком уровне сигнала.
12 in PE«1» сигнализирует о конце бумаги
13in Select«1» — готовность приемника (сигнализирует о включении принтера).
 14out/in Auto LF#Автоматический перевод строки. Если «0», то принтер при получении символа CR (перевод каретки) выполнит функцию перевода строки (LF)
15in Error#Ошибка (нет бумаги, off-line, нет тонера, внутренняя ошибка)
 16out/in Init#Инициализация (переход к началу строки, сброс всех параметров на значения по умолчанию)
17out/in Select In#Выбор принтера. При «1» принтер не воспринимает остальные сигналы интерфейса
18 — 25 GNDОбщий провод

__________________

1 Здесь и далее по тексту значок «#» после названия сигнала является признаком того, что сигнал имеет низкий активный уровень.

2 Значения направления передачи: in – вход; out – выход; out/in – выходные линии, состояние которых читается при чтении из соответствующих регистров порта; out (in) – выход, состояние которого может быть считано при определенных условиях.

3 Вход ACK# соединен с источником питания +5В через резистор 10 кОм. Это сделано для исключения ложных прерываний, т.к. прерывание генерируется по отрицательному перепаду сигнала на входе ACK#.

В качестве недостатков стандартного LPT порта следует отметить невысокую скорость передачи данных (максимум до 150 КБ/сек), загрузку процессора при передаче данных, невозможность двунаправленного побайтного обмена. Такая скорость еще достаточна для связи с матричными и наиболее старыми лазерными принтерами, но ее недостаточно для связи с LAN адаптерами, сменными приводами CD-ROM и лазерными принтерами нового поколения.

 Режим Compatibility Mode (SPP) был включен в стандарт IEEE 1284 с целью обеспечения совместимости с огромной массой установленных принтеров и периферийных устройств.

Режим EPP (Enhanced Parallel Port)

Протокол Расширенного Параллельного Порта был разработан компаниями Intel, Xircom и Zenith Data Systems как средство для обеспечения высокопроизводительной связи через LPT порт, при этом протокол должен оставаться совместимым с протоколом стандартного параллельного порта (Centronics). Впервые реализация этого протокола была осуществлена аппаратным методом компанией Intel на базе набора 386SL (82360).

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

Протокол EPP обеспечивает 4 типа циклов обмена данными:

  1. Цикл записи данных
  2. Цикл чтения данных
  3. Цикл записи адреса
  4. Цикл чтения адреса

Циклы Данных предназначены для передачи данных между компьютером и периферийным устройством. Циклы адреса могут использоваться для передачи адреса, канала или команды и управляющей информации. Также эти циклы могут рассматриваться как два различных типа циклов данных. Разработчик может использовать и интерпретировать информацию циклов адреса и/или данных в своих проектах любым способом, однако необходимо иметь в виду, что циклы чтения/записи адреса и данных отличаются протоколами (используют разные стробирующие сигналы). Внешние сигналы EPP режима порта формируются аппаратно в течение одного процессорного цикла ввода/вывода, что позволяет достичь скоростей 0,5 – 2 МБ/с. Назначение сигналов LPT порта, работающего в режиме EPP, приведены в таблице 2. Для наглядности, в этой же таблице приведены сигналы стандартного параллельного порта (режим SPP).

Таблица 2.

КонтактСигнал режима SPPСигнал режима EPP Направление передачи Назначение
1Strobe#WRITE#out«0» — цикл записи
«1» — цикл чтения
2 – 9D0 – D7D0 – D7out(in)Двунаправленные линии адреса / данных
10ACK#INTR#inПериферийное прерывание. Используется для выдачи прерываний ПК от внешнего устройства
11BUSYWAIT#inСигнал квитирования (рукопожатия). «0» — разрешение начала цикла (установить строб); «1» — разрешение завершения цикла (сбросить строб).
12   PE   ACKDATAREQ   in   Определяется пользователем. Может использоваться по-разному каждой периферией
13   SELECT   XFLAG   in   Определяется пользователем. Может использоваться по-разному каждой периферией
14   Auto Feed#   DATASTB#   out   Строб Данных. (Соответственно, указывает на то, что операция Data_Read или Data_Write находится в процессе выполнения.)
15   ERROR#   DATAAVAIL#   in   Определяется пользователем. Может использоваться по-разному каждой периферией
16   INIT#   RESET#   out   Сброс периферийного устройства (Соответственно по «0»)
17   SLCT IN#   ADDRSTB#   out   Строб Адреса. (Соответственно, указывает на то, что операция Address_Read или Address_Write находится в процессе выполнения.)
 18 — 25 GND GND —Общий провод

        Наличие сигнала WAIT# очень важно – с помощью данного сигнала периферийное устройство может подстраивать скорость обмена данными (адресом) под свое быстродействие. Кроме того, протокол, поддерживающий сигнал WAIT#, может подстраиваться под длину интерфейсного кабеля – при этом, вносимые за счет длины кабеля задержки просто приведут к удлинению циклов обмена. В поддержке данного сигнала WAIT# наблюдается различие стандартов EPP: стандарт, удовлетворяющий  спецификации IEEE 1284 поддерживает данный сигнал и, стандарт, не поддерживающий сигнал WAIT#, не удовлетворяет спецификации IEEE 1284 и относится к устаревшим типам портов. Такие порты меняют состояние стробирующих сигналов DATASTB# и ADDRSTB# независимо от WAIT# и, как следствие, периферийное устройство не может подстроить скорость обмена. Такая спецификация называется EPP 1.7.

Ниже на временных диаграммах 1 и 2 представлены цикл записи (IOW) и цикл чтения (IORD).

Временная диаграмма 1 (цикл записи)

Временная диаграмма 2 (цикл чтения)

Цифрами на временной диаграмме цикла записи (1) соответствует:

  1. Программа выполняет цикл записи в порт EPP Data (IOW);
  2. Устанавливается (в лог. «0») линия WRITE, и данные помещаются на линии порта (Data);
  3.  После этого адаптер устанавливает строб данных (Data Strobe – устанавливается только при низком уровне сигнала WAIT) и ждет подтверждения от периферийного устройства (подтверждением является изменение сигнала WAIT до уровня лог. «1»).
  4. Порт ожидает подтверждения от периферийного устройства.
  5. По приходу сигнала WAIT (лог. «1»), адаптер снимает строб данных. На этом внешний цикл обмена завершается.
  6. Затем завершается процессорный цикл ввода/вывода (снятие сигнала IOW).
  7. Спустя некоторое время периферийное устройство устанавливает низкий уровень WAIT, указывая тем самым, на возможность начала нового цикла обмена.

Временная диаграмма цикла чтения (2) отличается лишь тем, что линия WRITE в течение всего цикла обмена находится в состоянии дог. «1», указывая тем самым, что происходит цикл чтения данных.         ПРОДОЛЖЕНИЕ СЛЕДУЕТ….

Подписаться
Уведомлять
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Поделиться своими мыслямиx
()
x