Подключение lpt порта к материнской плате. Особенности и принцип работы lpt порта принтера. Режим работы порта

высшего профессионального образования

«Комсомольский-на-Амуре государственный технический университет»

Кафедра «Промышленная электроника»

Тестирование LPT-порта персонального компьютера

Методические указания к лабораторной работе по курсу

«Отладочные средства микропроцессорных систем» для студентов направления 210100 «Электроника и наноэлектроника»

Комсомольск-на-Амуре 2013

Тестирование LPT-порта персонального компьютера: Методические указания к лабоpатоpной работе по курсу "Отладочные средства микропроцессорных систем" для студентов направления 210100 «Электроника и наноэлектроника» / Сост. С.М. Копытов. - Комсомольск-на-Амуpе: Комсомольский-на-Амуpе гос. техн. ун-т, 2013. - 19 с.

Рассмотрены параллельный интерфейс Centronics, сигналы и программная поддержка LPT-порта персонального компьютера, приведены рекомендации по его тестированию.

Предлагаемые методические указания предназначены для студентов направления 210100.

Печатается по постановлению редакционно-издательского совета Комсомольского-на-Амуре государственного технического университета.

Согласовано с отделом стандартизации.

Рецензент В.А. Егоров

Цель работы: изучить основные возможности стандартного LPT-порта. Освоить принципы программно-управляемого обмена информацией через параллельный порт. Научиться проверять его работоспособность.

1 Основные сведения

1.1 Описание параллельного интерфейса

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

В современных офисных компьютерах LPT-порт, как правило, не предусмотрен, однако, установив мультикарту расширения портов, такой порт можно получить в свое распоряжение.

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в адресном пространстве устройств ввода/вывода. Количество регистров зависит от типа порта, однако три из них стандартны и присутствуют всегда. Это регистр данных, регистр состояния и регистр управления. Адреса регистров отсчитываются от базового, стандартные значения которого 3BCh, 378h, 278h. Порт может использовать аппаратное прерывание (IRQ7 или IRQ9). Многие современные системы позволяют изменять режим работы порта, его адрес и IRQ из настроек базовой системы ввода-вывода (Base Input Output System – BIOS) Setup.

LPT порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-х битную шину управляющих сигналов. Очевидно, что порт асимметричен  12 линий работают на вывод и только 5 на ввод.

При начальной загрузке BIOS пытается обнаружить параллельный порт, причем делает это примитивным и не всегда корректным образом  по возможным базовым адресам портов передается тестовый байт, состоящий из чередующегося набора нулей и единиц (55h или AAh), затем производится чтение по тому же адресу, и если прочитанный байт совпал с записанным, то считается, что по данному адресу найден LPT порт. Определить адрес порта LPT4 BIOS не может. Для работы с ПУ в BIOS предусмотрено прерывание INT 17h, предоставляющее возможность передавать данные (побайтно), инициализировать ПУ и получать информацию о его состоянии.

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

Таблица 1 - Сигналы интерфейса Centronics

Направление

Назначение

Строб данных. Передается ЭВМ, данные фиксируются по низкому уровню сигнала.

Линии данных. D0 - младший бит.

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

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

"1" сигнализирует о конце бумаги

"1" сигнализирует о включении принтера (ГП – готовность приемника), обычно +5 В через резистор от источника питания ПУ)

Автоматический перевод строки. Если "0", то ПУ при получении символа CR (перевод каретки) выполняет функцию LF – перевод строки

Ошибка ПУ (off-line, нет бумаги, нет тонера, внутренняя ошибка)

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

Выбор принтера. При "1" принтер не воспринимает остальные сигналы интерфейса

Общий провод

Примечание: столбец "T" – активный уровень сигнала: "1" – высокий активный уровень, "0" – низкий активный уровень. Столбец "Направление" – направление передачи по отношению к принтеру: I – Input (вход), O – Output (выход).

Сигнал Auto LF практически не применяется, но его неправильное значение приводит к тому, что принтер либо делает пропуски строк, либо печатает строки поверх друг друга, либо дублирует строки при печати в два прохода.

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

Протокол обмена данными по интерфейсу Centronics приведен на рисунке 1.

Рисунок 1 - Протокол обмена данными по интерфейсу Centronics

Передача начинается с проверки источником сигнала Error. Если он установлен, то обмен не производится. Затем проверяется состояние сигнала Busy. Если он равен "0", то источник приступает к передаче байта данных. Для передачи байта источник выставляет на линии D0-D7 байт данных и выдает сигнал Strobe#. Приемник по сигналу Strobe# (здесь и далее по тексту значок "#" после названия сигнала является признаком того, что сигнал имеет низкий активный уровень) читает данные с шины данных и выставляет сигнал Busy на время его обработки. По окончании обработки приемник выдает сигнал ACK# и снимает сигнал Busy.

Если в течение длительного времени (6 – 12 сек) источник не получает ACK#, то он принимает решение об ошибке "тайм-аут" (time-out) устройства. Если после приема байта приемник по какой - либо причине не готов принимать данные, то он не снимает сигнал Busy. При программной реализации обмена по указанному протоколу желательно ограничить время ожидания снятия Busy (обычно 30 – 45 сек), иначе возможно зависание программы.

Стандартный параллельный порт называется SPP (Standard Parallel Port). SPP порт является однонаправленным, на его базе программно реализуется протокол обмена Centronics. Порт обеспечивает возможность генерации IRQ по импульсу ACK# на входе. Сигналы порта выводятся на стандартный разъем DB-25S (розетка), который размещен непосредственно на плате адаптера или соединяется с ним плоским шлейфом (в случае, если адаптер интегрирован с материнской платой).

Названия сигналов соответствуют названиям сигналов интерфейса Centronics (таблица 1), а изображение разъема интерфейсного адаптера со стороны компьютера приведено на рисунке 2.

Таблица 2 - Разъем и шлейф стандартного LPT порта

Провод шлейфа

10, 22, 14, 16, 18, 20, 22, 24, 26

Примечание. I/O – направление передачи: I – вход; O – выход; O(I) – выход, состояние которого может быть считано при определенных условиях, O/I – выходные линии, состояние которых читается при чтении из соответствующих регистров порта. * - Вход ACK# соединен с питанием +5 В через резистор 10 кОм. Это сделано для исключения ложных прерываний, т.к. прерывание генерируется по отрицательному перепаду сигнала на входе ACK#.

Рисунок 2 - Разъем интерфейсного адаптера Cetronics DB-25S

В качестве недостатков стандартного LPT порта (SPP) следует отметить невысокую скорость передачи данных (100 – 150 кБ/сек), загрузку процессора при передаче данных, невозможность двунаправленного побайтного обмена. Существует "радиолюбительская" методика двунаправленного обмена, которая состоит в том, что для ввода данных на линии D0-D7 выставляют "1", а в качестве передатчика используют микросхемы с открытым коллектором, которые при открытом транзисторе могут "подсаживать" напряжение логической единицы до уровня порядка 1.5 – 1.7 В. Ток ограничен на уровне 30 мА. Как очевидно из уровней сигналов, они не соответствуют уровням ТТЛ, поэтому многие порты не работают в таком режиме или работают нестабильно. Кроме того, такой способ может быть опасен для адаптера порта, который будет работать с предельными для него токами.

Стандарт 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) Mode – двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей;

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

В современных машинах с LPT-портом на системной плате режим порта – SPP, ЕРР, ЕСР или их комбинация задается в BIOS Setup. Режим Compatibility Mode полностью соответствует SPP и часто установлен по умолчанию. Все остальные режимы расширяют функциональные возможности интерфейса и повышают его производительность. Кроме того, стандарт регламентирует способ согласования режима, доступного как ПК, так и периферийному устройству.

Физический и электрический интерфейс. Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов. Существенным является то, что при передаче используются уровни ТТЛ логики.

Стандарт IEEE 1284 определяет три типа используемых разъемов: А (DB-25S), B (Centronics-36), C (новый малогабаритный 36-контактный разъем). Интерфейсные кабели могут иметь от 18 до 25 проводников (в зависимости от числа проводников GND). Обычные кабели могут работать только на низких скоростях при длине не более 2 метров. Улучшенные экранированные кабели с сигнальными проводниками, перевитыми с общими проводами, могут иметь длину до 10 метров. Такие кабели маркируются как "IEEE Std 1284 - 1994 Compliant".

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

Контроллер порта расположен в адресном пространстве устройств ввода-вывода и обращение к нему производится посредством команд IN и OUT ассемблера. Информацию о портах LPT1 – LPT3 можно получить, прочитав переменные BIOS, приведенные в таблице 3.

Таблица 3 - Переменные BIOS для LPT портов

Имя порта

Адрес в BIOS

Тип переменной

Описание

Базовый адрес порта LPT1. Если переменная равна 0, то порт LPT1 не найден

Константа, задающая тайм-аут

Базовый адрес порта LPT2. Если переменная равна 0, то порт LPT2 не найден

Константа, задающая тайм-аут

Базовый адрес порта LPT3. Если переменная равна 0, то порт LPT3 не найден

Константа, задающая тайм-аут

Базовый адрес порта LPT4. Если переменная равна 0, то порт LPT4 не найден

Константа, задающая тайм-аут

BIOS ищет порты по адресам Base: 3BCh, 378h, 278h. Порт LPT4 BIOS найти не может:

378h - параллельный адаптер LPT1;

278h - параллельный адаптер LPT2;

3BCh - параллельный адаптер LPT3.

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

Таблица 4 - Регистры стандартного LPT порта

Регистр данных (DR). Записанные в этот регистр данные выводятся на выходные линии интерфейса D0D7. Результат чтения этого регистра зависит от схемотехники адаптера и соответствуют либо записанным ранее данным, либо сигналам на линиях D0D7, что не всегда одно и тоже. При стандартном включении справедлив первый вариант - читаемые данные равны ранее записанным.

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

Таблица 5 - Биты регистра состояния SR

Название

Назначение

Инверсное отображение состояния линии Busy (11). При низком уровне на линии 11 (Busy) – бит равен "1" – ПУ готово к приему очередного байта

Отображение состояния линии ACK# (10).

"0" – подтверждение приема,

"1" – обычное состояние

Отображение состояния линии Paper End (12).

"0" – норма, "1" – в ПУ нет бумаги

Отображение состояния линии Select (13).

"0" - ПУ не выбрано, "1" - ПУ выбрано

(инверсн.)

Отображение состояния линии Error (15).

"0" – ошибка ПУ, "1" – обычное состояние

Флаг прерывания по ACK# (только PS/2).

Обнуляется, если ACK# вызвал аппаратное прерывание. "1" – после сброса или после чтения регистра состояния

Не используются (резерв)

Регистр управления (CR). Регистр управления представляет собой 4-х битный порт вывода, допускающий чтение и запись. Биты 0, 1, 3 инвертируются, т.е. "1" в данных битах регистра управления соответствует "0" на соответствующих линиях порта. Назначение битов регистра управления приведены в таблице 6. Бит 5 используется только двунаправленными портами.

Таблица 6 - Биты регистра управления CR

Название

Назначение

Бит управления направлением порта.

"1" – режим ввода, "0" – режим вывода

Бит управления генерацией прерывания по ACK# . "1" – разрешить прерывание по спаду ACK# (10)

Управление линией SLCT IN# (17).

"1" – работа принтера разрешена.

Управление линией INIT# (16). "1" – обычное состояние, "0" – аппаратный сброс ПУ

Управление линией Auto LF# (14). "1" – включить режим "Auto LF", "0" – обычное состояние

Управление линией Strobe# (1). "1" – стробирование данных, "0" – обычное состояние

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

Язык высокого уровня следует выбирать, если необходимо производить сложные вычисления, или в случае, если высокое быстродействие программы не требуется. Объектные коды, полученные в результате трансляции программ, написанных на языке высокого уровня, обычно занимают в памяти ЭВМ намного больше места и исполняются медленнее в сравнении с программами на ассемблере. Часто применяется подход, когда критичные к быстродействию части программы пишутся на ассемблере, а вычислительные процедуры – на языке высокого уровня, например, на Паскале или Си.

Рассмотрим работу с регистрами интерфейса CENTRONICS на языке PASCAL или ассемблере:

Х - число типа "byte" (0..255). Например, при посылке 170 10 = =10101010 2 на линии d0–d7 единичный сигнал будет присутствовать на выводах d1, d3, d5, d7 (обозначение выводов начинается с d0). Число 170 останется на выводах разъёма до тех пор, пока Вы не перешлёте туда же другое число (это может сделать и другая программа) или не выключите компьютер. Заметьте, что адрес порта в команде задан в шестнадцатиричном виде, а посылка - в десятичном. Если вместо Паскаль-команды

Port[$378]:=170;

Вы примените

где d – переменная, то переменная примет значение последнего посланного в порт байта или, при переходе в режим приёма, значение байта, поданного на порт внешним устройством.

Пример чтения статус-регистра на языке Pascal:

В переменной d после выполнения программы будет отображено состояние порта. Допустим, переменная вернула значение 126 10 . В двоичном виде оно выглядит как 01111110 2 . Младшие (правые) три бита (нулевой, первый и второй) не используются, и почти равны 1, 1 и 0. Третий бит – 1, значит на ERROR высокий уровень. Та же ситуация на SELECT, Paper End, ACK и BUSY (не забывайте, что сигнал BUSY является инвертированным).

Приведем пример фрагмента программы, которая считывает байт с линий данных D0-D7:

Port[$37A]:=32 ; значение 32 "включает" единицу в пятом

d:=Port[$378] ; бите, переводя порт в режим ввода

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

1.2 Тестирование LPT-поpтa

Тестирование LPT-поpтa можно выполнить с помощью простой заглуш­ки, которую можно изготовить, воспользовавшись таблице 7.

Таблица 7 - Таблица цепей заглушки для тестирования LPT-поpтa

Направление

Направление

Заглушка изготавливается из разъема-вилки DB-25M путем распайки на нем перемычек между контактами, указанными в таблице.

В лабораторной работе используется программа test - lpt , предложенная в . Первоначально программа предназначалась для тестирования LPT-порта. Но на поверке оказалось, что с ее помощью очень удобно отлажи­вать новые устройства, подключаемые к LPT-порту, а также отыскивать неисправности при ремонте различных цифровых устройств. Кроме того, эта программа является прекрасным учебным пособием для начинающих программистов и схемотехников. Онанаписана на языке программи­рования C++. При запуске программы на экране монитора появляется окно работы программы, приведенное на рисунке 3.

Рисунок 3 - Окно работы программы test-lpt

В центре этого окна изображен разъем LPT-порта с назначением контактов и отображением логического уровня сигнала на каждом из них. Описание сигналов разъема DB-25F параллельного порта LPT при­ведено в таблице 1.

В регистрах, доступных по записи, можно произвольно менять информацию, при этом состояние порта автоматически будет подчиняться действиям пользователя программы, и логические уровни на разъеме будут также изменяться. Выбор регистра по записи производится клавишей TAB . Таким образом, можно управлять LPT-портом в статическом режиме и отлаживать внешние устройства, подключенные к нему. Поскольку некоторые разряды регистров инвертируются в самом компьютере, в программу введена маска инверсии данных разрядов при чтении и записи для устранения путаницы. Поэтому данные регистры обозначены со знаком апострофа, например SR".

В нижней части окна программы находятся строки помощи. При нажа­тии клавиши F 10 можно вызвать до пяти экранов справочной информации для LPT- порта. В них содержится информация о назначении сигналов порта, соответствии их контактам разъема, описаны функции прерыва­ния порта, алгоритм вывода символа на печать, адреса и назначение всех регистров порта и другая полезная информация.

Клавиши Fl - F3 позволяют выбрать номер используемого LPT- порта от 1 до 3 при их наличии в компьютере. В противном случае будет выдано сообщение о недоступности соответствующего LPT-порта, и выбор не будет произведен.

1.3 Использование LPT-поpтa для ввода-вывода сигналов

В качестве примера использования LPT-порта для управления внешним устройством рассмотрим подключение к компьютеру униполярного шагового двигателя.

Шаговый двигатель (ШД) – это электромеханическое устройство, которое преобразует электрические импульсы в дискретные механические перемещения. Шаговые двигатели обладают некоторыми уникальными свойствами, что делает их исключительно удобными для применения или даже незаменимыми в некоторых областях.

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

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

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

ШД обладают следующими особенностями :

1. Угол поворота ротора определяется числом импульсов, которые поданы на двигатель.

2. Двигатель обеспечивает полный момент в режиме остановки (если обмотки запитаны).

3. Прецизионное позиционирование и повторяемость. Хорошие шаговые двигатели имеют точность 3-5% от величины шага. Эта ошибка не накапливается от шага к шагу.

4. Возможность быстрого старта/остановки/реверсирования.

5. Высокая надежность, связанная с отсутствием щеток, срок службы шагового двигателя фактически определяется сроком службы подшипников.

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

7. Возможность получения очень низких скоростей вращения для нагрузки, присоединенной непосредственно к валу двигателя без промежуточного редуктора.

8. Может быть перекрыт довольно большой диапазон скоростей, скорость пропорциональна частоте входных импульсов.

Шаговые двигатели также имеют недостатки :

1. Им присуще явление резонанса.

2. Возможна потеря контроля положения ввиду работы без обратной связи.

3. Потребление энергии не уменьшается даже без нагрузки.

4. Затруднена работа на высоких скоростях.

5. Невысокая удельная мощность.

6. Относительно сложная схема управления.

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

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

Для согласования маломощных ТТЛ выходов LPT-порта с низким сопротивлением обмоток шагового двигателя удобно использовать микросхему драйвера ULN2003, которая содержит семь мощных транзисторных ключей n-p-n-типа, собранных по схеме Дарлингтона. Каждый ключ способен управлять нагрузкой с током потребления до 500 мА. Микросхема имеет резисторы в цепи базы, что позволяет напрямую подключить ее входы к обычным цифровым микросхемам. Все эмиттеры соединены вместе и выведены на общий вывод E. Коллекторы транзисторных ключей через выпрямительные диоды подсоединены к выводу CLMP, что позволяет управлять с помощью этой микросхемы индуктивными нагрузками при минимуме внешних компонентов. В нашем стенде использовано только четыре транзисторных ключа.

Электрическая схема подключения шагового двигателя показана на рисунке 4.

Рисунок 4 – Схема включения шагового двигателя

Выводы шагового двигателя подсоединены к разрядам D0 – D3 регистра данных параллельного порта через микросхему ULN2003. Параллельно входам драйвера к разрядам D0 – D3 подключены красные светодиоды с ограничивающими ток резисторами. Это позволяет в режиме отладки и на малых скоростях вращения наблюдать порядок подачи импульсов на обмотки двигателя.

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

Роль датчика обратной связи выполняет фототранзистор оптопары. На нем построен простейший ключ с общим эмиттером, выходной ток которого дополнительно усиливается двумя ключевыми каскадами на транзисторах КТ315. Усиленный сигнал фототранзистора зажигает для наглядности зеленый светодиод и поступает на разряд S3 (вывод 15 разъема) регистра состояния порта.

Алгоритм для управления шаговым двигателем достаточно прост. Необходимо формировать на выводах порта специальную последовательность импульсов. Эта последовательность показана в таблице 8.

Таблица 8 – Комбинация импульсов для вращения вала двигателя

Номер шага


Указанная в таблице последовательность реализует половинный угол поворота вала на один шаг. Если использовать комбинации только для шагов 1, 3, 5 и 7, то получим полный угол поворота вала на один шаг.

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

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

Ниже приведен короткий пример программы для Turbo С, работающей в операционной системе MS-DOS. Эта программа заставляет шаговый двигатель вращаться в прямом направлении, в режиме полного угла на один шаг.

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

; Управление шаговым двигателем через LPT порт

MODEL SMALL ; модель памяти

STACK 100h ; сегмент стека размером 100h

DATA ; сегмент данных

TEXT1 DB "Число шагов на один оборот - ",0DH,0AH, "$"

RESULT DB " ", 0DH, 0AH, "$" ; число шагов на 1 оборот в ASCII

TEXT2 DB "Задайте число шагов по часовой стрелке - ",0DH,0AH, "$"

TEXT3 DB "Задайте число шагов против часовой стрелки - ",0DH,0AH, "$"

TEXT4 DB "Задайте время одного шага в мкс (от 2000 до 65000) - ", 0DH, 0AH, "$"

err_msg db "Bad number entered"

crlf db 0Dh,0Ah,"$"

buffer db 6 ; максимальный размер буфера ввода

blength db ? ; размер буфера после считывания

bcontents DB 10 DUP (0) ; содержимое буфера

ST_MCS DW 0 ; старший байт микросекунд

ML_MCS DW 10000 ; младший байт микросекунд

COUNT_T DW 1 ; счетчик шагов в полном обороте

COUNT_L DW 0 ; счетчик шагов влево

COUNT_R DW 0 ; счетчик шагов вправо

ERROR DB 0 ; флаг ошибки

CODE ; сегмент кода

main proc ; начало процедуры main

mov ds, ax ; установить регистр DS

MOV DX, OFFSET TEXT1

INT 21H ; вывод сообщения

MOV AL, 00010001B

H1: ROL AL, 1 ; установить вал в начальное положение

MOV DX, 378H ; адрес регистра данных LPT

CALL TIME ; задержка шага

MOV DX, 379H ; адрес регистра состояния LPT

TEST AL, 08H ; анализ состояния фототранзистора

JNZ H1 ; повторить, если не начало

H2: ROR AL,1 ; шагаем вправо, чтобы убрать шторку

INC COUNT_T ; накапливаем счетчик шагов

MOV AX, COUNT_T ; перекодируем в ASCII и выводим шаги

MOV DX, OFFSET TEXT2

INT 21H ;вывод сообщения

CALL DEC2HEX ; вводим число шагов влево и

;перекодируем из ASCII в двоичное

MOV COUNT_L, AX ; сохраняем число шагов влево

MOV DX, OFFSET TEXT3

INT 21H ; вывод сообщения

CALL DEC2HEX ; вводим число шагов вправо и;перекодируем из ASCII в двоичное

JNZ FIN ; конец, если неправильный ввод числа

MOV COUNT_R, AX ; сохраняем число шагов вправо

MOV DX, OFFSET TEXT4

INT 21H ; вывод сообщения

CALL DEC2HEX ; вводим время шага и

; перекодируем из ASCII в двоичное

JNZ FIN ; конец, если неправильный ввод числа

MOV ML_MCS, AX ; сохраняем время шага

MOV AL, 00010001B

H3: ROL AL, 1 ; вращаем двигатель влево

H4: ROR AL, 1 ; вращаем двигатель вправо

FIN: mov ah, 4ch ; функция DOS завершения программы

int 21h ; завершить программу

main endp ; конец процедуры main

; десятичных ASCII-цифр в ES:DI, заканчивающуюся символом «$»

MOV DI,OFFSET RESULT ; адрес результата

MOV BX, 10 ; делитель

XOR CX, CX ;счетчик цифр в 0

DIVLP: XOR DX, DX

DIV BX ;разделить число на 10

ADD DL, "0" ;добавить к остатку ASCII код нуля

PUSH DX ;записать цифру в стек

INC CX ;увеличить счетчик цифр

TEST AX, AX ;и, если еще есть, что делить,

JNZ DIVLP ;продолжить деление

STOSB ;дописать ее в конец строки в ES:DI

LOOP STORE ;продолжить для всех CX цифр

;MOV BYTE PTR ES:, "$" ;дописать "$" в конец строки

MOV DX, OFFSET RESULT ;в DX адрес строки

INT 21H ;вывод строки

TIME PROC NEAR ; задержка в микросекундах

; Подпрограмма DEC2HEX переводит десятичное число в шестнадцатиричное

DEC2HEX PROC NEAR ; Зубков, с. 152

mov dx, offset crlf

int 21h ; перевод строки

; перевод числа в ASCII-формате из буфера в бинарное число в AX

xor di,di ; DI = 0 - номер байта в буфере

xor ax,ax ; AX = 0 - текущее значение результата

mov si,cx ; SI - длина буфера

mov cl,10 ; CL = 10, множитель для MUL

mov bl,byte ptr bcontents

sub bl,"0" ; цифра = код цифры - код символа "0"

jb asc_error ; если код символа был меньше, чем код "0",

cmp bl,9 ; или больше, чем "9",

ja asc_error ; выйти из программы с сообщением об ошибке

mul cx ; иначе: умножить текущий результат на 10,

add ax,bx ; добавить к нему новую цифру,

inc di ; увеличить счетчик

cmp di,si ; если счетчик+1 меньше числа символов -

jb asc2hex ; продолжить(счетчик считается от 0)

ret ; завершение подпрограммы (результат в AX)

asc_error: MOV ERROR, 1 ; флаг ошибки

mov dx,offset err_msg

int 21h ; вывести сообщение об ошибке

ret ; и завершить подпрограмму

end main ; конец программы с точкой входа main

pushad ; поместить в стек все общие регистры

mov ecx, ; загружаем нужное число тиков RDTSC

; Вычислить опасную границу счетчика

mov ebx,0ffffffffh ; 2 32 -1

sub ebx, ecx ; отнимаем частоту процессора

;RDTSC ; чтение счетчика тактов процессора

cmp eax, ebx ; сравнить текущее RDTSC с опасной границей

dec ecx ; вычесть уже отмерянное циклом из нужного; числа тиков

jae warn_bord ; если больше - зациклить во избежание

; перехода через 0

mov ebx, eax ; загрузить начальное значение счетчика тактов

; Ожидать в течение ecx тиков (ecx = freq минус уже пройденные тики)

add ebx, ecx ; получить конечное значение счетчика

;RDTSC ; получить текущее значение счетчика

DB 0FH, 31H ; код команды RDTSC

cmp eax, ebx ; сравнить текущее и конечное значение

jb tp ; пока текущее меньше - зациклить

popad ; извлечь из стека все общие регистры

Lpt порт, нередко называемый параллельным — это один из наиболее старых портов ПК. Хотя, в наши дни такой порт имеется далеко не на всех материнских платах, однако он по-прежнему имеет некоторое распространение, в связи с чем многим пользователям компьютеров и оргтехники, в частности, принтеров, очень интересно узнать о том, что он собой представляет.

Для начала нужно разобрать, что подразумевает под собой аббревиатура lpt порт. Итак, под LPT подразумевается сокращение сочетания нескольких английских слов, а именно: Line Print Terminal. В переводе на русский язык LPT означает построчный принтерный терминал. Исходя из названия, становится понятно, что он в первую очередь предназначен для принтера. Но с теоретической точки зрения, к LPT можно подключать и некоторые другие аппараты. Для этой цели применяют специальный адаптер — переходник lpt. Следует добавить, что он имеет еще одно название, принятое в кругах пользователей – порт принтера.

В целом lpt порт обладает довольно длительной историей развития. Его разработали сотрудники компании Centronics, которая в начале 70-х годов прошлого века специализировалась на производстве матричных печатающих устройств. В начале 80-х годов данный порт принтера стал широко применяться со стороны фирмы IBM, которая использовала его на своих ПК. В то десятилетие lpt-порт даже успел стать стандартным вариантом, необходимым для осуществления подключения устройств с высокими скоростями, имеющихся в те годы.

Первоначально интерфейс LPT был представлен в нескольких отличных друг от друга редакциях. При этом в оригинальной версии он был однонаправленным, т.е. с его помощью можно было осуществлять передачу информации исключительно к периферийному устройству. Безусловно, подобного рода ситуация не устраивала многих пользователей, т.к. уже в те годы выпускались печатающие устройства, требовавшие осуществление передачи данных в двух направлениях. Именно поэтому некоторое время спустя, разработчикам пришлось несколько раз совершенствовать интерфейс LPTl. Данный процесс длился до тех пор, пока не был представлен его стандарт, получивший наименование IEEE 1284. Таким образом, разработчиками была представлена окончательная схема порта. Новый стандарт обладал поддержкой нескольких различных режимов работы. Кроме того, он был совместим с прежними стандартами. В своей финальной редакции интерфейс принтера мог поддерживать достаточно высокую скорость передачи информации на то время, которая достигала 5 Мб/с!

Как работает параллельный порт?

Название параллельный LPT получил вследствие того, что передача данных в подсоединяемом к нему кабеле осуществляется параллельным образом, для чего одновременно используется несколько проводников. Именно благодаря этому он существенным образом отличается от сом, который является последовательным. Количество проводников в кабеле, который подключается к LPT, как правило, восемь. Помимо этого, в нем может быть расположено несколько линий, предназначенных для передачи управляющих сигналов. Таким образом, использование порта com по сравнению с LPT имеет ряд сильных ограничений и недостатков.

Несмотря на то что порт Centronics в большей степени использовался для организации подключения между принтером и ПК, тем не менее его применяли и для других целей. К примеру, с помощью LPT можно непосредственным образом соединить друг с другом два персональных компьютера – для этого обычно используется кабель Interlink. До тех пор, пока сетевые карты Ethernet не приобрели широкое распространение, соединение подобного типа пользовалось большой популярностью. Конечно, оно не могло обеспечить пользователей действительно высокими скоростями передачи информации, но, несмотря на это, такой способ подключения двух компьютеров друг к другу в те годы был чуть ли не единственным возможным. Следует добавить, что есть даже специальные ключи электронного типа, которые предназначаются специально для подключения к параллельному порту.

Об особенностях работы LPT

Как было уже сказано выше, в отличие от com, LPT обладает поддержкой параллельной передачи данных. В первых моделях персональных компьютеров он являлся одним из наиболее скоростных. Его интерфейс благодаря возможности осуществления передачи информации по нескольким линиям, во многом схож по своей архитектуре с шинами, используемыми в ПК. Но именно обстоятельство подобного рода и ограничивает длину кабеля, которая не может превышать 5 метров. В противном случае в подключении между ПК и принтером постоянно будут возникать помехи.

Для организации обычной передачи данных, как правило, необходимо 10 сигнальных линий. Что касается остальных линий, то они применяют для совместимости со стандартом кабеля Centronics. Максимальный параметр напряжения, который применяется в сигнальных линиях LTP, обычно равен +5 В.

Разъем порта и кабель Centronics

Если говорить о разъеме параллельного порта, то он располагается на самой матплате, хотя до середины 90-х годов прошлого столетия данный элемент обычно располагался на т.н. мультикарте, которая вставлялась в слот расширения. Выходом LPT является разъем DB25 с 25-контактами.

Чтобы установить соединение между персональным компьютером и печатающей оргтехникой с помощью персонального порта необходимо воспользоваться кабелем Centronics. При этом разъем, имеющийся на оргтехнике, является 36-контактным. Таким образом, основная особенность данного кабеля заключается в наличии двух разных разъемов по обеим сторонам.
Также примите во внимание, что довольно часто разъемом Centronics называют тот разъем кабеля, который предназначен для матплаты персонального компьютера, но на самом деле им является разъем для принтера – т.е. тот, который включает в себя 36 контактов. Что касается разъема, предназначенного непосредственно для LPT, то он именуется Amphenolstacker. Подобные различия в названиях обязательно нужно знать, чтобы называть все вещи своими именами.

Итог

В заключение можно сказать, что параллельный порт Line Print Terminal является интерфейсом ПК, который к нашему времени уже порядком устарел. Несмотря на большое распространение в последние десятилетия прошлого столетия, на сегодняшний день данный порт не располагает большой поддержкой со стороны многих компаний, выпускающих компьютерное оборудование, оргтехнику и программное обеспечение. Несмотря на это, LPT по-прежнему с успехом применяется на многих устаревших к нашему времени моделях ПК и печатающих устройств. Но довольно часто для организации подключения между компьютером и старым принтером требуется наличие переходника com-lpt. Сегодня их в принципе можно найти в продаже, но при наличии необходимых знаний и навыков, спять такой переходник можно абсолютно самостоятельно.

Порт «LPT» редко встречается на современных компьютерах. Это специальный разъем компьютера для подключения принтера. Некоторые компьютеры были снабжены несколькими портами «LPT». Эти порты нумеровались: «LPT1», «LPT2» и так далее.

Параллельные порты

Исторически так сложилось, что порты для подключения компьютера разделены на категории: серийные и параллельные порты. «LPT» относится к параллельным портам. Это значит, что информация перемещается по восьми различным проводам, то есть одновременно и параллельно. Компьютеры имеют дело с двоичной информацией. Двоичность преобразует информацию в массивы нулей и единиц. Одно двоичное число (ноль или единица) называется битом. Группа из восьми бит называется байтом. Восемь бит каждого байта, которые перемещаются из компьютера в параллельный порт, перемещаются одновременно. Другой тип кабеля, подключенный к серийному порту, перемещает восемь бит каждого байта друг за другом.

Значение

У параллельного порта есть название. По умолчанию название для единственного параллельного порта компьютера «LPT1». Данный вид портов в основном используется для подключения принтера. К таким портам можно подключить и другие устройства, однако пользователи используют принтер гораздо чаще, чем другие устройства. Подключение принтера к компьютеру делает его «периферией». «Периферийным» может быть любое подключенное с помощью специального кабеля к компьютеру дополнительное устройство. Это «периферийное» оборудование одновременно может использоваться только одним компьютером. Единственный способ подключить уже подключенное «периферийное» устройство к другому компьютеру, чтобы использовать принтер, подключенный к первому компьютеру – с помощью сети и программного обеспечения. Этот процесс отличен от сетевого принтера, который подключается к сети, а не к одному компьютеру. В этом случае используется другой тип кабеля и другой тип порта.

Подключение

Параллельный порт «LPT» и соответствующий разъем имеет 25 штифтов и называется «DB-25», либо «D-Type 25». В разъеме штифты оголены. Они вставляются в 25 отверстий параллельного порта. Восемь из 25 штифтов отвечают за передачу данных, остальные несут либо данные управления, либо инструкции принтера вроде сообщений от принтера о отсутствии бумаги в принтере.

Будущее

Сетевые принтеры подключаются к компьютеру не с помощью порта «LPT», а с помощью порта «Ethernet». К порту «LPT» можно подключить не только принтер, но и другие устройства. Сегодня «периферийные» устройства не используют параллельные порты. И порты «LPT», и серийные порты сегодня ушли в историю и на смену им пришел «USB» порт, либо сетевой порт. Способность беспроводного подключения новых принтеров и периферийных устройств предоставляет еще одну альтернативу «LPT» порту, как способу подключения принтера к компьютеру.

Порт параллельного интерфейса был введен в PCдля подключения принтера -LPT-порт (Line PrinTer -построчный принтер).

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

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

Интерфейс Centronics

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

Таблица 1.

Сигналы интерфейса Centronics

Назначение

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

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

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

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

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

Сигнализирует о включении принтера

Автоматический перевод строки.

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

Инициализация

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

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

Направление

(вход/выход) применительно к принтеру.

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

Традиционный lpt-порт

Традиционный порт SPP (Standard Parallel Port)является одно­направленным портом, на базе которого программно реализуется протокол обмена Centronics.Порт обеспечивает возможность вырабатывания запроса ап­паратного прерывания по импульсу на входе АСК#. Сигналы порта выводятся наразъем DB-25S (розетка), установленный непосредственно на плате адаптера (или системной плате) или соединяемый с ней плоским шлейфом. Название и назначение сигналов разъема порта (табл. 2)соответствуют интерфейсу Centronics.

Таблица 2.

Разъем стандартного LPT-порта

Контакт DB-25S

Провод шлейфа

Назначение

18, 20, 22, 24, 26

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

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

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

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

Data Register (DR) -регистр данных, адрес= BASE.Данные, записанные в этот порт,выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях.

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

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

SR.7-Busy -инверсные отображения состояния линии Busy (11);

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

SR.5 -РЕ (Paper End) -отображения состояния линии Paper End (12).

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

SR.3-Error -отображения состояния линии Error (15).

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

SR -зарезервированы.

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

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

CR -зарезервированы.

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

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

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

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

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

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

Запрос аппаратного прерывания (обычно IRQ7или IRQ5)вырабатывается по отрицательному перепаду сигнала на выводе 10разъема интерфейса (АСК#) при установке CR.4=1. Прерывание вырабатывается, когда принтер подтвер­ждает прием предыдущего байта.

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

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

Ввод из регистра состояния и проверка готовности устройства (бит SR.7 - сигнал BUSY).

По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2цикла lOWRff).

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

Порт параллельного интерфейса был введен в PC для подключения принтера - отсюда и пошло его название LPT-порт (Line PrinTer - построчный принтер). Традиционный, он же стандартный, LPT-порт (так называемый SPP-порт) ориентирован на вывод данных, хотя с некоторыми ограничениями позволяет и вводить данные. Существуют различные модификации LPT-порта - двунаправленный, EPP, ECP и другие, расширяющие его функциональные возможности, повышающие производительность и снижающие нагрузку на процессор. Поначалу они являлись фирменными решениями отдельных производителей, позднее был принят стандарт IEEE 1284.

С внешней стороны порт имеет 8-битную шину данных, 5-битную шину сигналов состояния и 4-битную шину управляющих сигналов, выведенные на разъем-розетку DB-25S. В LPT-порте используются логические уровни ТТЛ, что ограничивает допустимую длину кабеля из-за невысокой помехозащищенности ТТЛ-интерфейса. Гальваническая развязка отсутствует - схемная земля подключаемого устройства соединяется со схемной землей компьютера. Из-за этого порт является уязвимым местом компьютера, страдающим при нарушении правил подключения и заземления устройств. Поскольку порт обычно располагается на системной плате, в случае его «выжигания» зачастую выходит из строя и его ближайшее окружение, вплоть до выгорания всей системной платы.

С программной стороны LPT-порт представляет собой набор регистров, расположенных в пространстве ввода-вывода. Регистры порта адресуются относительно базового адреса порта, стандартными значениями которого являются 3BCh, 378h и 278h. Порт может использовать линию запроса аппаратного прерывания, обычно IRQ7 или IRQ5. В расширенных режимах может использоваться и канал DMA.

Порт имеет поддержку на уровне BIOS - поиск установленных портов во время теста POST и сервисы печати Int 17h (см. п. 8.3.3) обеспечивают вывод символа (по опросу готовности, не используя аппаратных прерываний), инициализацию интерфейса и принтера, а также опрос состояния принтера. Практически все современные системные платы (еще начиная с PCI-плат для процессоров 486) имеют встроенный адаптер LPT-порта. Существуют карты ISA с LPT-портом, где он чаще всего соседствует с парой СОМ-портов, а также с контроллерами дисковых интерфейсов (FDC+IDE). LPT-порт обычно присутствует и на плате дисплейного адаптера MDA (монохромный текстовый) и HGC (монохромный графический «Геркулес»). Есть и карты PCI с дополнительными LPT-портами.

К LPT-портам подключают принтеры, плоттеры, сканеры, коммуникационные устройства и устройства хранения данных, а также электронные ключи, программаторы и прочие устройства. Иногда параллельный интерфейс используют для связи между двумя компьютерами - получается сеть, «сделанная на коленке» (LapLink).

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

Традиционный, он же стандартный, LPT-порт называется стандартным параллельным портом (Standard Parallel Port, SPP), или SPP-портом, и является однонаправленным портом, через который программно реализуется протокол обмена Centronics (см. п. 8.3.1). Название и назначение сигналов разъема порта (табл. 1.1) соответствуют интерфейсу Centronics.

Таблица 1.1. Разъем стандартного LPT-порта

Контакт DB-25S № провода в кабеле Назначение I/O¹ Бит² Сигнал
1 1 O/I CR.0\ Strobe#
2 3 O(I) DR.0 Data 0
3 5 O(I) DR.1 Data 1
4 7 O(I) DR.2 Data 2
5 9 O(I) DR.3 Data 3
6 11 O(I) DR.4 Data 4
7 13 O(I) DR.5 Data 5
8 15 O(I) DR.6 Data 6
9 17 O(I) DR.7 Data 7
10 19 SR.6 Ack#
11 21 I SR.7\ Busy
12 23 I SR.5 PaperEnd (PE)
13 25 I SR.4 Select
14 2 O/I CR.1\ Auto LF# (AutoFeed#)
15 4 I SR.3 Error#
16 6 O/I CR.2 Init#
17 8 O/I CR.3\ Select In#
18-25 10, 12, 14, 16, 18, 20, 22, 24, 26 - - -

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

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

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

Адаптер SPP-порта содержит три 8-битных регистра, расположенных по соседним адресам в пространстве ввода-вывода, начиная с базового адреса порта BASE (3BCh, 378h или 278h).

Data Register (DR) - регистр данных, адрес=BASE. Данные, записанные в этот регистр, выводятся на выходные линии Data. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же.

Status Register (SR) - регистр состояния (только чтение), адрес=BASE+1. Регистр отображает 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.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). Единичное значение соответствует высокому уровню линии - сигналу о включении принтера.

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

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

♦ SR - зарезервированы.

Control Register (CR) - регистр управления, адрес=ВАSЕ+2, допускает запись и чтение. Регистр связан с 4-битным портом вывода управляющих сигналов (биты 0–3) для которых возможно и чтение; выходной буфер обычно имеет тип «открытый коллектор». Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты 0, 1, 3 инвертируются.

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

♦ CR - зарезервированы.

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

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

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

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

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

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

Запрос аппаратного прерывания (обычно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#) при установке CR.4=1. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.

Перечислим шаги процедуры вывода байта по интерфейсу Centronics с указанием требуемого количества шинных операций процессора.

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

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

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

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

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

Схемотехника выходных буферов данных LPT-портов отличается большим разнообразием. На многих старых моделях адаптеров SPP-порт данных можно использовать и для организации ввода. Если в порт данных записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа «открытый коллектор» подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из того же регистра данных. Однако выходным цепям передатчика информации придется «бороться» с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для «победы» в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 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\
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. Прием данных в полубайтном режиме

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

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

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

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

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. В низкий уровень устанавливается в ответ на сигнал 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 Data I/O DR Двунаправленный (прямой и обратный) канал данных

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

Фазы приема байта данных перечислены ниже.

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

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

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 AD 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.

Естественно, ПУ не должно «подвешивать» процессор на шинном цикле обмена. Это гарантирует механизм тайм-аутов 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 Data 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 (биты ).

Таблица 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 позволяет считывать информацию об адаптере (идентификационный код в битах ).

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

Регистр ECR - главный управляющий регистр ЕСР. Его биты имеют следующее назначение:

♦ ECR - ЕСР 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 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-порта

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

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

Обнаруженные порты инициализируются - записью в регистр управления формируется и снимается сигнал Init#, после чего записывается значение 0Ch, соответствующее исходному состоянию сигналов интерфейса. В некоторых случаях сигнал Init# активен с момента аппаратного сброса до инициализации порта при загрузке ОС. Это можно заметить по поведению включенного принтера во время перезагрузки компьютера - у принтера надолго гаснет индикатор On-Line. Следствие этого явления - невозможность распечатки экранов (например, параметров BIOS Setup) по нажатию клавиши Print Screen до загрузки ОС.

1.5. Параллельный порт и PnP

Большинство современных периферийных устройств, подключаемых к LPT-порту, поддерживает стандарт 1284 и функции PnP. Для поддержки этих функций компьютером с аппаратной точки зрения достаточно иметь контроллер интерфейса, соответствующий стандарту 1284. Если подключаемое устройство поддерживает PnP, оно по протоколу согласования режимов 1284 способно «договориться» с портом, представляющим «интересы» компьютера, о возможных режимах обмена. Далее, для работы PnP подключенное устройство должно сообщить операционной системе все необходимые сведения о себе. Как минимум это идентификаторы производителя, модели и набор поддерживаемых команд. Более развернутая информация об устройстве может содержать идентификатор класса, подробное описание и идентификатор устройства, с которым обеспечивается совместимость. В соответствии с принятой информацией для поддержки данного устройства операционная система может предпринять действия по установке требуемого программного обеспечения.

Устройства с поддержкой PnP распознаются ОС на этапе ее загрузки, если, конечно же, они подключены к порту интерфейсным кабелем и у них включено питание. Если ОС Windows обнаруживает подключенное устройство PnP, отличающееся от того, что прописано в ее реестре для данного порта (или просто новое устройство), она пытается установить требуемые для устройства драйверы из дистрибутива ОС или из комплекта поставки нового устройства. Если Windows не желает замечать вновь подключенного устройства PnP, это может свидетельствовать о неисправности порта или кабеля. Система PnP не работает, если устройство подключается дешевым «не двунаправленным» кабелем, у которого отсутствует связь по линии SelectIn# (контакт 17 порта LPT и контакт 36 разъема Centronics).

1.6. Применение LPT-порта

Обычно LPT-порт используют для подключения принтера (см. п. 8.3.1), однако этим его применение не исчерпывается.

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

Таблица 1.11. Кабель связи PC-PC (4-битный)

X1, разъем PC#1 X2, разъем PC#2
Бит Контакт Контакт Бит
DR.0 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.0
GND 18-25 18-25 GND

Разъемы X1 и X2 - DB25-P (вилки).

Высокоскоростная связь двух компьютеров может выполняться и в режиме ЕСР (режим ЕРР неудобен, поскольку требует синхронизации шинных циклов ввода- вывода двух компьютеров).

В табл. 1.12 приведена распайка кабеля, в аналогичной таблице предыдущих книг автора (см. и ) была ошибка (перепутаны контакты 13 и 15). Из всех сигналов в кабеле не используется лишь PeriphRequest# (контакт 15). В цепи линий данных рекомендуется вставить последовательные резисторы (0,5–1 кОм), препятствующие протеканию слишком больших токов, когда порты данных обоих компьютеров находятся в режиме вывода. Эта ситуация возникает, когда коммуникационное ПО компьютеров еще не запущено. Связь в режиме ЕСР поддерживается Windows 9х, в комплект поставки этих ОС входит драйвер PARALINK.VxD, но из-за внутренней ошибки он неработоспособен. «Заплатку» на этот драйвер, а также тестовую утилиту и необходимые описания можно найти в сети (www.lpt.com, www.lvr.com/parport.htm).

Таблица 1.12. Кабель связи PC-PC в режиме ЕСР и байтном режиме

Разъем X1 Разъем X2
Контакт Имя в ЕСР Имя в ЕСР Контакт
1 HostClk PeriphClk 10
14 HostAck PeriphAck 11
17 1284Active Xflag 13
16 ReverseRequest# AskReverse# 12
10 PeriphClk HostClk 1
11 PeriphAck HostAck 14
12 AckReverse# ReverseRequest# 16
13 Xflag 1284Active 17
2, 3…9 Data Data 2, 3…9

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

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

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

Таблица 1.13. Назначение выводов разъема LPT-порта и бит регистров в режимах SPP, ЕСР и ЕРР

Контакт I/O Бит¹ SPP ECP EPP
1 O/I CR.0\ Strobe# HostClk Write#
2 O/I DR.0 Data 0 Data 0 Data 0
3 O/I DR.1 Data 1 Data 1 Data 1
4 O/I DR.2 Data 2 Data 2 Data 2
5 O/I DR.3 Data 3 Data 3 Data 3
6 O/I DR.4 Data 4 Data 4 Data 4
7 O/I DR.5 Data 5 Data 5 Data 5
8 O/I DR.6 Data 6 Data 6 Data 6
9 O/I DR.7 Data 7 Data 7 Data 7
10 I SR.6 Ack# PeriphClk INTR#
11 I SR.7\ Busy PeriphAck Wait#
12 I SR.5 PaperEnd AckReverse#
13 I SR.4 Select Xflag
14 O/I CR.1\ Auto LF# HostAck DataStb#
15 I SR.3 Error# PeriphRequest#
16 O/I CR.2 Init# ReverseRequest# Reset#
17 O/I CR.3\ Select In# 1284Active AddrStb#

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

² Определяется пользователем.

1.7. Конфигурирование LPT-портов

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

Конфигурирование LPT-порта зависит от его исполнения. Порт, расположенный на плате расширения (мультикарте), устанавливаемой в слот ISA или ISA+VLB, конфигурируется джамперами на самой плате. Порт на системной плате конфигурируется через BIOS Setup.

Ниже перечислены параметры, подлежащие конфигурированию.

♦ Базовый адрес - 3BCh, 378h или 278h. При инициализации BIOS проверяет наличие портов по адресам именно в этом порядке и, соответственно, присваивает обнаруженным портам логические имена LPT1, LPT2, LPT3. Адрес 3BCh имеет адаптер порта, расположенный на плате MDA или HGC. Большинство портов по умолчанию конфигурируется на адрес 378h и может переключаться на 278h.

♦ Используемая линия запроса прерывания: для LPT - IRQ7, для LPT2 - IRQ5. Традиционно прерывания от принтера не задействуются, и этот дефицитный ресурс можно сэкономить. Однако при использовании скоростных режимов ЕСР (или Fast Centronics) работа через прерывания может заметно повысить производительность и снизить загрузку процессора.

♦ Использование канала DMA для режимов ЕСР и Fast Centronics - разрешение и номер канала DMA.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 1.8. Схема заглушки для тестирования LPT-порта: а - для CheckIt, б - для Norton Diagnostics

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

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

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

♦ Если принтер, подключенный к порту, в стандартном режиме (SPP) печатает нормально, а при переходе в режим ЕСР начинаются сбои, следует проверить кабель - соответствует ли он требованиям IEEE 1284 (см. выше). Дешевые кабели с неперевитыми проводами нормально работают на скоростях 50-100 Кбайт/с, но при скорости 1–2 Мбайт/с, обеспечиваемой ЕСР, имеют полное право не работать, особенно при длине более 2 м.

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

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

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