Процедура вывода байта по интерфейсу Centronics через стандартный порт включает следующие шаги (в скобках приведено требуемое количество шинных операций процессора):
Вывод байта в регистр данных (1 цикл IOWR#).
Ввод из регистра состояния и проверка готовности устройства (бит SR.7 — сигнал BUSY).
По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2 цикла lOWRff).
Стандартный порт сильно асимметричен — при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работает только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена — Nibble Mode. В этом режиме, называемым также и Hewlett Packard Bitronics, одновременно передаются 4 бита данных, пятая линия используется для квитирования.
Функции BIOS для LPT-порта
BIOS обеспечивает поддержку LPT-порта, необходимую для организации вывода по интерфейсу Centronics.
В процессе начального тестирования POST BIOS проверяет наличие параллельных портов по адресам ЗВСЬ, 378h и 278h и помещает базовые адреса обнаруженных портов в ячейки BIOS DATA AREA 0:0408h, 040Ah, 040СП, 040ЕП. Эти ячейки хранят адреса портов с логическими именами LPT1-LPT4. В ячейки 0:0478, 0479, 047А, 047В заносятся константы, задающие выдержку тайм-аута для этих портов.
Поиск портов обычно ведется по базовому адресу. Если считанный байт совпал с записанным, считается, что найден LPT-порт, и его адрес помещают в ячейку BIOS DATA AREA. Адрес порта LPT4 BIOS самостоятельно установить не может, поскольку в списке стандартных адресов поиска имеются только три вышеуказанных.
Обнаруженные порты инициализируются — записью в регистр управления формируется и снимается сигнал Initff, после чего записывается значение 00h, соответствующее исходному состоянию сигналов интерфейса.
Программное прерывание BIOS I NT 17h обеспечивает следующие функции поддержки LPT-порта:
00h — вывод символа из регистра AL по протоколу Centronics. Данные помещаются в выходной регистр и после готовности принтера формируется строб.
01h — инициализаия интерфейса и принтера.
02h — опрос состояния принтера.
При вызове INT 17h номер функции задается в регистре АН, номер порта — в регистре DX (0 — LPT1, 1 — LPT2...). При возврате после любой функции регистр АН содержит код состояния — биты регистра состояния SR[7:3] (биты 6 и 3 инвертированы) и флаг тайм-аута в бите 0. Флаг тайм-аута устанавливается при неудачной попытке вывода символа.
Расширения параллельного порта
Недостатки стандартного порта частично устраняют новые типы портов, появившихся в компьютерах семейства PS/2.
Двунаправленный порт 1 (Typel parallel port) — интерфейс, введенный с PS/2. Такой порт кроме стандартного режима может работать в режиме ввода или двунаправленном. Протокол обмена формируется программно, а для указания направления передачи в регистр управления порта введен специальный бит: при CR.5=0 буфер данных работает на вывод, при CR.5=1 — на ввод.
Порт с прямым доступом к памяти (Type 3 DMA parallel port) применялся в PS/2 моделей 57, 90, 95. Этот тип был введен для повышения пропускной способности и разгрузки процессора при выводе на принтер. Программе, работающей с данным портом, требовалось только задать блок данных в памяти, подлежащих выводу, и вывод по протоколу Centronics производился без участия процессора.
Физический и электрический интерфейс
Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов.
К передатчикам предъявляются следующие требования:
Уровни сигналов без нагрузки не должны выходить за пределы -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 мкА.
Входная емкость не должна превышать 50 пФ.
Стандарт IEEE 1284 определяет три типа используемых разъемов. Типы Л (DB-25) и В (Centronics-36) используются в традиционных кабелях подключения принтера, тип С — новый малогабаритный 36-контактный разъем.
Интерфейсные кабели, традиционно используемые для подключения принтеров, обычно имеют от 18 до 25 проводников, в зависимости от числа проводников цепи GND.
Стандарт IEEE 1284 регламентирует и свойства кабелей:
Все сигнальные линии должны быть перевитыми с отдельными обратными (общими) проводами.
Каждая пара должна иметь импеданс 62(±)6 Ом в частотном диапазоне 4-16 МГц.
Уровень перекрестных помех между парами не должен превышать 10%.
Кабель должен иметь экран (фольгу), покрывающий не менее 85% внешней поверхности. На концах кабеля экран должен быть окольцован и соединен с контактом разъема.
Кабели, удовлетворяющие этим требованиям, маркируются надписью IЕЕЕ Std 1284-1994 Compliant». Они могут иметь длину до 10 метров.
Режимы передачи данных
Стандарт IEEE 1284 определяет пять режимов обмена, один из которых полностью соответствует традиционному стандартному программно-управляемому выводу по протоколу Centronics. Остальные режимы используются для расширения функциональных возможностей и повышения производительности интерфейса. Стандарт определяет способ согласования режима, по которому программное обеспечение может определить режим, доступный и хосту (в нашем случае это PC), и периферийному устройству.
Режимы нестандартных портов, реализующих протокол обмена Centronics аппаратно («Fast Centronics, «Parallel Port FIFO Mode»), могут и не являться режимами IEE1284, несмотря на наличие в них черт ЕРР и ЕСР.
При описании режимов обмена фигурируют следующие понятия:
Хост — компьютер, обладающий параллельным портом.
ПУ — периферийное устройство, подключаемое к этому порту (им может оказаться и другой компьютер). обозначениях сигналов Ptr обозначает передающее периферийное устройство.
Прямой канал — канал вывода данных от хоста в ПУ.
Обратный канал канал ввода данных в хост из ПУ.
Полубайтный режим ввода — Nibble Mode
Режим полубайтного обмена является наиболее общим решением задачи двунаправленного обмена данными, поскольку может работать на всех стандартных (традиционных) портах. Все эти порты имеют 5 линий ввода состояния, используя которые периферийное устройство может посылать в PC байт тетрадами (nibble — полубайт, 4 бита) за два приема. Назначение сигналов порта приведено в табл 4.
Таблица 4.
Сигналы LPT-порта в полубайтном режиме ввода
Контакт | Сигнал SPP | I/O | Использование сигнала при приеме данных в Nibble Mode | |
14 | AUTOFEED# | 0 | HostBusy — сигнал квитирования. Низкий уровень означает готовность к приему тетрады, высокий подтверждает прием тетрады | |
17 | SELECTIN» | 0 | Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) | |
10 | АСК# | ' | PtrClk. Низкий уровень означает действительность тетрады, переход в высокий — ответ на сигнал HostBusy | |
11 | BUSY | I | Прием бита данных 3, затем бита 7 | |
12 | РЕ | I | Прием бита данных 2, затем бита 6 | |
13 | SELECT | I | Прием бита данных 1, затем бита 5 | |
15 | ERRORS | I | Прием бита данных 0, затем бита 4 |
Прием байта данных в полубайтном режиме состоит из следующих фаз:
1. Хост сигнализирует о готовности приема данных установкой низкого уровня на линии HostBusy.
2. ПУ в ответ помещает тетраду на входные линии состояния.
3. ПУ сигнализирует о действительности тетрады установкой низкого уровня на линии PtrClk.
4. Хост устанавливает высокий уровень на линии HostBusy, указывая на занятость приемом и обработкой тетрады.
5. ПУ отвечает установкой высокого уровня на линии PtrCLk.
6. Шаги 1-5 повторяются для второй тетрады.
Полубайтный режим работает на всех портах со скоростью обмена не выше 50 Кбайт/с . Его применяют в тех случаях, когда прием данных от устройства производится в небольших объемах (например, для связи с принтерами).
Двунаправленный байтный режим Byte Mode
Данный режим обеспечивает прием данных с использованием двунаправленного порта, у которого выходной буфер данных может отключаться установкой бита CR.5=1. Как и в стандартном и в полубайтном режиме, данный режим является программно-управляемым — все сигналы квитирования анализируются и устанавливаются программным драйвером. Назначение сигналов порта приведено в табл. 5.
Таблица 5.
Сигналы LPT-порта в байтном режиме ввода/вывода
Контакт | Сигнал SPP | Имя в Byte Mode | I/O | Описание |
1 | STROBES | HostClk | 0 | Импульс (низкого уровня) подтверждает прием байта в конце каждого цикла |
14 | AUTOFEED# | HostBusy | 0 | Сигнал квитирования. Низкий уровень означает готовность хоста принять байт, высокий уровень устанавливается по приему байта |
17 | SELECT-IN» | 1284Active | 0 | Высокий уровень указывает на обмен в режиме IEEE 1284. (В режиме SPP уровень низкий) |
16 | INIT# | INIT# | 0 | Не используется, установлен высокий уровень |
10 | АСКй | Ptrtik | Устанавливается в низкий уровень для индикации действительности данных на линиях DATA[7:0]. В низкий уровень устанавливается в ответ на сигнал HostBusy | |
11 | BUSY | PtrBusy | I | Состояние занятости прямого канала |
12 | РЕ | AckDataReq* | I | Устанавливается ПУ для указания на наличие обратного канала передачи* |
13 | SELECT | Xflag* | I | Флаг расширяемости* |
15 | ERRORS | DataAvau#* | I | Устанавливается ПУ для указания на наличие обратного канала передачи* |
2-9 | DATA[7:0] | DATA[7:0] | I/0 | Двунаправленный (прямой и обратный) канал данных |
Прием байта данных в байтном режиме состоит из следующих фаз: