Стандартный интерфейс параллельного порта получил
Стандартный интерфейс параллельного порта получил свое первоначальное название по имени американской фирмы Centronics - производителя принтеров. Первые версии этого стандарта были ориентированы исключительно на принтеры, подразумевали передачу данных лишь в одну сторону (от компьютера к принтеру) и имели невысокую скорость передачи (150-300 Кбайт/с). Такие скорости неприемлемы для современных печатающих устройств. Кроме того, для работы с некоторыми устройствами необходима двусторонняя передача данных. Поэтому некоторые фирмы (Xircom, Intel, Hewlett Packard, Microsoft) предложили несколько модификаций скоростных параллельных интерфейсов: EPP (Enhanced Parallel Port) - до 2 Мбайт/с, ECP (Extended Capabilities Port) - до 4 Мбайт/с и др. На основе этих разработок в 1994 году Институтом инженеров по электронике и электротехнике был принят стандарт IEEE 1284-1994, ныне повсеместно используемый в персональных компьютерах в качестве стандартного параллельного интерфейса.
1 | O | STROBE# | WRITE# | HostClk | |
2 | O (I) | DATA0 | AD0 | D0 | |
3 | O (I) | DATA1 | AD1 | D1 | |
4 | O (I) | DATA2 | AD2 | D2 | |
5 | O (I) | DATA3 | AD3 | D3 | |
6 | O (I) | DATA4 | AD4 | D4 | |
7 | O (I) | DATA5 | AD5 | D5 | |
8 | O (I) | DATA6 | AD6 | D6 | |
9 | O (I) | DATA7 | AD7 | D7 | |
10 | I | ACK# | PtrClk | Intr# | PeriphClk |
11 | I | BUSY | D3/D7 | Wait# | PeriphAck |
12 | I | PE | D2/D6 | AckDataReq | AckReverse# |
13 | I | SELECT | D1/D5 | XFlag | XFlag |
14 | O | AUTOFD# | HostBusy | DataStb# | HostAck |
15 | I | ERROR# | D0/D4 | DataAvail# | PeriphReq# |
16 | O | INIT# | Reset# | ReverseReq# | |
17 | O | SLCTIN# | NibbleMode | AddrStb# | 1284Active |
18-25 | - | GND | GND | GND | GND |
Режим SPP (Стандартный параллельный порт) используется для совместимости со старыми принтерами, не поддерживающими IEEE 1284. Режиму SPP соответствуют три программно доступных регистра:
- порт BASE+0 - SPP Data - регистр данных,
- порт BASE+1 - SPP Status - регистр состояния,
- порт BASE+2 - SPP Control - регистр управления.
Для устройства LPT1 базовым адресом (BASE) в пространстве портов ввода-вывода обычно является 378h.
В этом режиме линии DATA[0:7] используются для прямой передачи данных (от компьютера к периферийному устройству). Сигналы STROBE#, ACK# и BUSY используются для квитирования. Сигналом STROBE# компьютер информирует о готовности данных на линиях DATA[0:7]. Если устройство приняло выставленные компьютером данные, то оно выставляет сигнал ACK#. Во время приема данных, во время инициализации, а также при наличии ошибки устройство выставляет сигнал BUSY. О возникновении ошибочной ситуации сигнализирует линия ERROR#, а также PE (кончилась бумага). О том, что принтер включен и готов к работе, сообщается при помощи сигнала SELECT. Для подтверждения выбора принтера компьютер выставляет сигнал SLCTIN#. При необходимости очистить буфер принтера и перевести его в исходное состояние выставляется INIT#. Сигнал AUTOFD# используется при работе с матричными принтерами в текстовом режиме для продвижения бумаги на одну строку.
Для организации обратного канала (передача данных от принтера в компьютер) в режиме SPP возможны два механизма: механизм двунаправленного порта (впервые представленный в IBM PS/2 в 1987 г.) и механизм передачи полубайтами (Nibble Mode). При использовании механизма двунаправленного порта способ квитирования не декларируется.
Особенностью обратного канала в Nibble Mode является то, что за один цикл передается только 4 бита данных. Таким образом, скорость в обратном канале в два раза меньше, чем в прямом канале. Преимуществом использования Nibble Mode является возможность программной реализации этого механизма на любом старом параллельном порту, не поддерживающем IEEE 1284. Сигналом активности этого механизма является высокий уровень на линии NibbleMode (при прямой передаче на этой линии выставляется низкий уровень). Для квитирования используются линии HostBusy (сигнал устанавливается компьютером в низкий уровень, когда он готов к приему) и PtrClk (низкий уровень сигнала подтверждает действительность данных D[0:4]/D[5:7]).
В режиме EPP ( Улучшенный параллельный порт) используется аппаратная реализация сигналов квитирования, благодаря чему возможно увеличение скорости передачи до 2 Мбайт/с. Этот режим поддерживает адресацию устройств, благодаря чему возможно подключение нескольких (до 64) устройств к одному порту. Генерация цикла чтения или записи на шине IEEE 1284 со всеми необходимыми сигналами квитирования происходит при обращении к регистру EPP Address (BASE+3) или EPP Data (BASE+4). При этом адаптер IEEE 1284 устанавливает сигнал Write# в зависимости от направления передачи (низкий уровень - прямая передача, высокий уровень - обратная передача). Для периферийного устройства информацией о том, являются ли биты на линиях AD[0:7] данными или адресом, является сигналы DataStb# (строб данных) или AddrStb# (строб адреса). Периферийное устройство информирует компьютер о своей готовности принять очередной байт при помощи сигнала Wait#. Сигнал Reset#, так же как и в режиме SPP используется для инициализации устройства. Установка периферийным устройством сигнала Intr# вызывает генерацию прерывания. Сигналы AckDataReq и DataAvail# используются по усмотрению разработчика, например, для квитирования в обратном канале.
Режим ECP (Порт расширенных возможностей) также использует аппаратное квитирование и адресацию устройств (до 128). Дополнительно ECP поддерживает распознавание ошибок, согласование скорости и режима передачи, буферизацию данных в очереди FIFO (с использованием DMA) и их компрессию по алгоритму RLE (Run Length Encoding), что позволяет достигать скорость до 4 Мбайт/с.
Признаком активности режима ECP является высокий уровень сигнала 1284Active. При прямой передаче для квитирования используются сигналы HostClk и PeriphAck, а сигнал HostAck указывает на тип передаваемых данных: высокий уровень - обычные данные, низкий уровень - команда или адрес. Для запроса обратного канала компьютер выставляет сигнал ReverseReq#, который устройство подтверждает сигналом AckReverse#. В обратном канале для квитирования применяются сигналы PeriphClk и HostAck, а сигнал PeriphAck используется устройством для указания типа передаваемых данных.
Устройство может запросить обслуживание при помощи сигнала PeriphReq#.
В режиме ECP параллельный порт может эмулировать работу любого другого режима IEEE 1284, что определяется в соответствующих битах расширенного регистра управления (ECR) по адресу BASE+400h:
0002 | SPP | Режим стандартного параллельного порта с программным квитированием |
0012 | Bi-directional mode | Поддержка обратного канала для режима SPP, как в IBM PS/2 |
0102 | Fast Centronics | Режим стандартного параллельного порта с аппаратным квитированием |
0112 | ECP | Режим ECP с поддержкой FIFO и RLE |
1002 | EPP | Режим EPP |
1012 | Reserved | |
1102 | Test mode | Режим самотестирования FIFO и прерываний |
1112 | Configuration mode | Режим конфигурирования |