Полубайтный режим ввода — Nibble Mode
Режим полубайтного обмена является наиболее общим решением задачи двунаправленного обмена данными, поскольку может работать на всех стандартных (традиционных) портах. Все эти порты имеют 5 линий ввода состояния, используя которые периферийное устройство может посылать в PC байт тетрадами (nibble — полубайт, 4 бита) за два приема. Назначение сигналов порта приведено в табл 4.
Таблица 4.
Сигналы LPT-порта в полубайтном режиме ввода
Контакт | Сигнал SPP | I/O | Использование сигнала при приеме данных в Nibble Mode |
AUTOFEED# | HostBusy — сигнал квитирования. Низкий уровень означает готовность к приему тетрады, высокий подтверждает прием тетрады | ||
SELECTIN» | Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) | ||
АСК# | ' | PtrClk. Низкий уровень означает действительность тетрады, переход в высокий — ответ на сигнал HostBusy | |
BUSY | I | Прием бита данных 3, затем бита 7 | |
РЕ | I | Прием бита данных 2, затем бита 6 | |
SELECT | I | Прием бита данных 1, затем бита 5 | |
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 | Описание |
STROBES | HostClk | Импульс (низкого уровня) подтверждает прием байта в конце каждого цикла | ||
AUTOFEED# | HostBusy | Сигнал квитирования. Низкий уровень означает готовность хоста принять байт, высокий уровень устанавливается по приему байта | ||
SELECT-IN» | 1284Active | Высокий уровень указывает на обмен в режиме IEEE 1284. (В режиме SPP уровень низкий) | ||
INIT# | INIT# | Не используется, установлен высокий уровень | ||
АСКй | Ptrtik | Устанавливается в низкий уровень для индикации действительности данных на линиях DATA[7:0]. В низкий уровень устанавливается в ответ на сигнал HostBusy | ||
BUSY | PtrBusy | I | Состояние занятости прямого канала | |
РЕ | AckDataReq* | I | Устанавливается ПУ для указания на наличие обратного канала передачи* | |
SELECT | Xflag* | I | Флаг расширяемости* | |
ERRORS | DataAvau#* | I | Устанавливается ПУ для указания на наличие обратного канала передачи* | |
2-9 | DATA[7:0] | DATA[7:0] | I/0 | Двунаправленный (прямой и обратный) канал данных |
Прием байта данных в байтном режиме состоит из следующих фаз:
1. Хост сигнализирует о готовности приема данных установкой низкого уровня на линии HostBusy.
2. ПУ в ответ помещает байт данных на линии DATA[7:0].
3. ПУ сигнализирует о действительности байта установкой низкого уровня на линии PtrClk.
4. Хост устанавливает высокий уровень на линии HostBusy, указывая на занятость приемом и обработкой байта.
5. ПУ отвечает установкой высокого уровня на линии PtrClk.
6. Хост подтверждает прием байта импульсом HostClk.
7. Шаги 1-6 повторяются для каждого следующего байта.
Побайтный режим позволяет поднять скорость обратного канала до скорости прямого канала в стандартном режиме. Однако работать он может только на двунаправленных портах, которые применяются в основном лишь на малораспространенных машинах PS/2.
Режим ЕРР
Протокол ЕРР (Enhanced Parallel Port — улучшенный параллельный порт) предназначен для повышения производительности обмена по параллельному порту. ЕРР был реализован в чипсете Intel 386SL (микросхема 82360) и используется как дополнительный протокол параллельного порта.
Протокол ЕРР обеспечивает четыре типа циклов обмена:
Цикл записи данных.
Цикл чтения данных.
Цикл записи адреса.
Цикл чтения адреса.
Адресные циклы могут быть использованы для передачи адресной, канальной и управляющей информации. Циклы обмена данными явно отличаются от адресных циклов применяемыми стробирующими сигналами. Назначение сигналов порта ЕРР и их связь с сигналами SPP приведены в табл. 6.
Таблица 6.
Сигналы LPT-порта в режиме ввода/вывода ЕРР
Контакт | Сигнал SPP | Имя в ЕРР | I/O | Описание |
STROBE» | WRITE» | Низкий уровень — признак цикла записи, высокий — чтения | ||
AUTOFEEDff | DATASTB# | Строб данных. Низкий уровень устанавливается в циклах передачи данных | ||
SELECTING | ADDRSTB# | Строб адреса. Низкий уровень устанавливается в адресных циклах | ||
INIT# | RESETS | Сброс ПУ (низким уровнем) | ||
Контакт | Сигнал SPP | Имя в ЕРР | I/O | Описание |
АСК# | INTR# | I | Прерывание от ПУ | |
BUSY | WAIT» | I | Сигнал квитирования. Низкий уровень разрешает начало цикла (установку строба в низкий уровень), переход в высокий — разрешает завершение цикла (снятие строба) | |
2-9 | D[8:0] | AD[8:0] | I/O | Двунаправленная шина адреса/данных |
РЕ | AckDataReq* | I | Используется по усмотрению разработчика периферии | |
SELECT | Xflag* | I | Используется по усмотрению разработчика периферии | |
ERROR | DataAvaiW* | I | Используется по усмотрению разработчика периферии |
ЕРР-порт имеет расширенный набор регистров (табл. 7), который занимает в пространстве ввода/вывода 5-8 смежных байт.
Таблица 7.
Регистры ЕРР-порта
Имя регистра | Смещение | Режим | R/W | Описание |
SPP Data Port | +0 | SPP/EPP | W | Регистр данных стандартного порта |
SPP Status Port | +1 | SPP/EPP | R | Регистр состояния стандартного порта |
SPP Control Port | +2 | SPP/EPP | W | Регистр управления стандартного порта |
EPP Address Port | +3 | EPP | R/W | Регистр адреса ЕРР. Чтение или запись в него генерирует связанный цикл чтения или записи адреса ЕРР |
EPP Data Port | +4 | EPP | R/W | Регистр данных ЕРР. Чтение (запись) генерирует связанный цикл чтения (записи) данных ЕРР |
Not Defined | +5...+7 | EPP | N/A | В некоторых контроллерах могут использоваться для 16-32-битных операций ввода/вывода |
В отличие от программно-управляемых режимов, описанных выше, внешние сигналы ЕРР-порта (как информационные, так и сигналы квитирования) для каждого цикла обмена формируются аппаратно по одной операции записи или чтения в регистр порта.
Главной отличительной чертой ЕРР является выполнение внешней передачи во время одного процессорного цикла ввода/вывода. Это позволяет достигать высоких скоростей обмена (0,5-2 Мбайт/с). Периферийное устройство, подключенное к параллельному порту ЕРР, может работать на уровне производительности устройства, подключаемого через слот ISA. Периферийное устройство может регулировать длительность всех фаз обмена с помощью всего лишь одного сигнала WAIT#. Протокол автоматически подстраивается и под длину кабеля — вносимые задержки только приведут к удлинению цикла.
«ЗАВИСАНИЕ» процессора на шинном цикле обмена препятствует механизм тайм-аутов PC, который принудительно завершает любой цикл обмена, длящийся более 15 мкс.
С программной точки зрения контроллер ЕРР-порта выглядит достаточно просто (см. табл.7). К трем регистрам стандартного порта, имеющим смещение 0, 1 и 2 относительно базового адреса порта, добавлены два регистра (ЕРР Address Port и ЕРР Data Port), чтение и запись в которые вызывает генерацию связанных внешних циклов.
Назначение регистров стандартного порта сохранено, что обеспечивает совместимость ЕРР-порта с периферийными устройствами и программным обеспечением, рассчитанными на применение программно-управляемого обмена. Поскольку сигналы квитирования адаптером вырабатываются аппаратно, при записи в регистр управления CR биты 0, 1 и 3, соответствующие сигналам STROBES, AUTOFEEDS и SELECTING, должны иметь нулевые значения. В противном случае программное вмешательство может нарушить последовательность квитирования. Некоторые адаптеры имеют специальные средства защиты (ЕРР Protect), при включении которых программная модификация этих бит блокируется.