6. Хост подтверждает прием байта импульсом HostClk.
Шаги 1–6 повторяются для каждого следующего байта. Квитирование осуществляется парой сигналов HostBusy и PtrClk; ПУ может и не использовать сигнал HostClk (это приглашение к выдаче следующего байта, напоминающее сигнал Ack# в интерфейсе Centronics). Побайтный режим позволяет поднять скорость обратного канала до скорости прямого канала в стандартном режиме. Однако он способен работать только на двунаправленных портах, которые раньше применялись в основном на малораспространенных машинах PS/2, но практически все современные порты можно сконфигурировать на двунаправленный режим (в настройках BIOS Setup — Bi-Di или PS/2).
1.3.3. Режим EPP
Протокол EPP (Enhanced Parallel Port — улучшенный параллельный порт) был разработан компаниями Intel, Xircom и Zenith Data Systems задолго до принятия стандарта IEEE 1284. Этот протокол предназначен для повышения производительности обмена по параллельному порту, впервые был реализован в чипсете Intel 386SL (микросхема 82360) и впоследствии принят множеством компаний как дополнительный протокол параллельного порта. Версии протокола, реализованные до принятия IEEE 1284, отличаются от нынешнего стандарта (см. ниже).
Протокол EPP обеспечивает четыре типа циклов обмена:
♦ запись данных;
♦ чтение данных;
♦ запись адреса;
♦ чтение адреса.
Назначение циклов записи и чтения данных очевидно. Адресные циклы используются для передачи адресной, канальной и управляющей информации. Циклы обмена данными отличаются от адресных циклов применяемыми стробирующими сигналами. Назначение сигналов порта EPP и их связь с сигналами SPP объясняются в табл. 1.4.
Таблица 1.4. Сигналы LPT-порта в режиме ввода-вывода EPP
| Контакт | Сигнал SPP | Имя в EPP | I/O | Описание |
|---|---|---|---|---|
| 1 | Strobe# | Write# | O | Низкий уровень — цикл записи, высокий — цикл чтения |
| 14 | AutoLF# | DataStb# | O | Строб данных. Низкий уровень устанавливается в циклах передачи данных |
| 17 | SelectIn# | AddrStb# | O | Строб адреса. Низкий уровень устанавливается в адресных циклах |
| 16 | Init# | Reset# | O | Сброс ПУ (низким уровнем) |
| 10 | Ack# | INTR# | I | Прерывание от ПУ |
| 11 | Busy | Wait# | I | Сигнал квитирования. Низкий уровень разрешает начало цикла (установку строба в низкий уровень), переход в высокий — разрешает завершение цикла (снятие строба) |
| 2-9 | Data[0:7] | AD[0:7] | I/O | Двунаправленная шина адреса/данных |
| 12 | PaperEnd | AckDataReq¹ | I | Используется по усмотрению разработчика периферии |
| 13 | Select | Xflag¹ | I | Используется по усмотрению разработчика периферии |
| 15 | Error# | DataAvail#¹ | I | Используется по усмотрению разработчика периферии |
¹ Сигналы действуют в последовательности согласования (см. ниже).
EPP-порт имеет расширенный набор регистров (табл. 1.5), который занимает в пространстве ввода-вывода 5–8 смежных байт.
Таблица 1.5. Регистры EPP-порта
| Имя регистра | Смещение | Режим | R/W | Описание |
|---|---|---|---|---|
| SPP Data Port | +0 | SPP/EPP | W | Регистр данных SPP |
| SPP Status Port | +1 | SPP/EPP | R | Регистр состояния SPP |
| SPP Control Port | +2 | SPP/EPP | W | Регистр управления SPP |
| EPP Address Port | +3 | EPP | R/W | Регистр адреса EPP. Чтение или запись в него генерирует связанный цикл чтения или записи адреса EPP |
| EPP Data Port | +4 | EPP | R/W | Регистр данных EPP. Чтение (запись) генерирует связанный цикл чтения (записи) данных EPP |
| Not Defined | +5…+7 | EPP | N/A | В некоторых контроллерах могут использоваться для 16-32-битных операций ввода-вывода |