Передача в режиме ЕСР: a - прямая, б - обратная
Рисунок 1.7. Передача в режиме ЕСР: a - прямая, б - обратная
В отличие от диаграмм обмена ЕРР, на Рисунок 1.7 не приведе- ны сигналы циклов системной шины процессора. В данном режиме обмен программы с ПУ разбивается на два относи- тельно независимых процесса, которые связаны через FIFO- буфер. Обмен драйвера с FIFO-буфером может осуществ- ляться с использованием как DMA, так и программного
ввода-вывода. Обмен ПУ с буфером аппаратно выполняет адаптер ЕСР. Драйвер в режиме ЕСР не имеет информации о точном состоянии процесса обмена, но здесь обычно важ- но только то, завершен он или нет. Прямая передача данных на внешнем интерфейсе состоит из следующих шагов:
1. Хост помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии HostAck.
2. Хост устанавливает низкий уровень на линии HostClk, указывая на действительность данных.
3. ПУ отвечает установкой высокого уровня на линии PeriphAck.
4. Хост устанавливает высокий уровень линии HostClk, и этот перепад может использоваться для фиксации дан- ных в ПУ.
5. ПУ устанавливает низкий уровень на линии PeriphAck для указания на готовность к приему следующего байта.
Поскольку передача в ЕСР происходит через FIFO-буферы, которые могут присутствовать на обеих сторонах интерфей- са, важно понимать, на каком этапе данные можно считать переданными. Данные считаются переданными на шаге 4, когда линия HostClk переходит в высокий уровень. В этот момент модифицируются счетчики переданных и принятых байт. В протоколе ЕСР есть условия, вызывающие прекра- щение обмена между шагами 3 и 4. Тогда эти данные не долж- ны рассматриваться как переданные.
Из Рисунок 1.7 видно и другое отличие ЕСР от ЕРР. Протокол ЕРР позволяет драйверу чередовать циклы прямой и обрат- ной передачи, не запрашивая подтверждения на смену на- правления. В ЕСР смена направления должна быть согласо- вана: хост запрашивает реверс установкой ReverseRequest#, после чего он должен дождаться подтверждения сигналом AckReverse#.
Поскольку предыдущий цикл мог выполнять- ся по прямому доступу, драйвер должен дождаться завер- шения прямого доступа или прервать его, выгрузить буфер FIFO, определив точное значение счетчика переданных байт, и только после этого запрашивать реверс.
Обратная передача данных состоит из следующих шагов:
1. Хост запрашивает изменение направления канала, уста- навливая низкий уровень на линии ReverseRequest#.
2. ПУ разрешает смену направления установкой низкого уровня на линии AckReverse#.
3. ПУ помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии PeriphAck.
4. ПУ устанавливает низкий уровень на линии PeriphClk, указывая на действительность данных.
5. Хост отвечает установкой высокого уровня на линии HostAck.
6. ПУ устанавливает высокий уровень линии PeriphClk; этот перепад может использоваться для фиксации данных хос- том.
7. Хост устанавливает низкий уровень на линии HostAck для указания на готовность к приему следующего байта.
Режимы и регистры ЕСР-порта *
Программный интерфейс и регистры ЕСР для адаптеров IEEE 1284 определяет спецификация Microsoft. Определе- ны режимы (табл. 1.9), в которых может функционировать адаптер. Они задаются полем Mode регистра ECR (биты [7:5]).
Регистровая модель адаптера ЕСР (табл. 1.10) использует свойства архитектуры стандартной шины и адаптеров ISA - для дешифрации адресов портов ввода/вывода задействуются только 10 младших линий шины адреса. Поэтому, например, обращения по адресам Port, Port+400h, Port+800h... будут вос- приниматься как обращения к адресу Port, лежащему в диа- пазоне 0-3 FFh. Современные PC и адаптеры декодируют большее количество адресных бит, поэтому обращения по адресам 0378h и 0778h будет адресованы двум различным регистрам. Помещение дополнительных регистров ЕСР "за спину" регистров стандартного порта (смещение 400-402h) преследует две цели. Во-первых, эти адреса никогда не ис- пользовались традиционными адаптерами и их драйверами, и их применение в ЕСР не приведет к сужению доступного
адресного пространства ввода/вывода. Во-вторых, этим обес- печивается совместимость со старыми адаптерами на уров- не режимов 000-001 и возможность определения присутствия ЯСР-адаптера через попытку обращения к его расширенным регистрам.
Режим |
Название |
Описание |
000 |
SPPmode |
Стандартный (традиционный) режим |
001 |
Bi-directional mode |
Двунаправленный порт (тип 1 для PS/2) |
010 |
Fast Centronics |
Однонаправленный с использованием FIFO и DMA |
Oil |
ECP Parallel Port mode |
ECP |
100 |
EPP Parallel Port mode* |
Перевод в режим EPP |
101 |
Зарезервировано |
- |
110 |
Test mode |
Тестирование работы FIFO и прерываний |
111 |
Configuration mode |
Доступ к конфигурационным регистрам |
Каждому режиму ECP соответствуют (и доступны) свои функциональные регистры. Переключение режимов осуще- ствляется записью в регистр 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. Сигналы квитирования по протоколу Ceritromcs вырабатываются аппаратно. Сигнал запроса прерывания вырабатывается по состоянию FIFO-буфера, но не по сиг- налу Аск# (запрос одиночного байта "не интересует" драй- вер быстрого блочного вывода).
Режим 011 является собственно режимом ЕСР, описанным ранее. Поток данных и команд, передаваемых в ПУ, поме- щается в FIFO-буфер через регистры ECPDFIFO и ECPAFIFO соответственно. Из FIFO они выводятся с соответствующим признаком цикла (состояние линии HostAck). Принимаемый поток данных от ПУ извлекается из FIFO-буфера через ре- гистр ECPDFIFO. Получение адреса в командном цикле от ПУ не предусматривается. Обмен с регистром ECPDFIFO мо- жет производиться и по каналу DMA.
Компрессия по методу RLE при передаче выполняется про- граммно. Для передачи подряд более двух одинаковых байт данных в регистр ECPAFIFO записывается байт, у которого младшие 7 бит содержат счетчик RLC (значение RLC=127 соответствует 128 повторам), а старший бит нулевой. После этого в ECPDFIFO записывается сам байт. Отсюда очевидно, что вывод данных с одновременным использованием комп- рессии и DMA невозможен. Принимая эту пару байт (ко- мандный байт и байт данных), ПУ осуществляет декомп- рессию. При приеме потока от ПУ адаптер ЕСР декомпрессию осуществляет аппаратно и в FIFO-буфер помещает уже де- компрессированные данные.
Режим 100 (ЕРР) - один из способов включения режима ЕРР.
Режим 110 (Test Mode) предназначен для тестирования взаи- модействия FIFO и прерываний. Данные могут переда- ваться в/из регистра TFIFO с помощью DMA или программ- ным способом. На внешний интерфейс обмен не воздействует. Адаптер отрабатывает операции вхолостую на максимальной скорости интерфейса (как будто сигналы квитирования приходят без задержек). Адаптер следит за состоянием буфера и по мере необходимости вырабатыва- ет сигналы запроса прерывания. Таким образом программа
может определить максимальную пропускную способность канала.
Режим 111 (Configuration mode) предназначен для доступа к конфигурационным регистрам. Вьвделение режима защища- ет адаптер и протокол от некорректных изменений конфи- гурации в процессе обмена.
Смещение |
Имя |
R/W |
Режимы ЕСР* |
Название |
000 |
DR |
R/W |
000-001 |
Data Register |
000 |
ECPAF1FO |
R/W |
Oil |
ЕСР Address FIFO |
001 |
SR |
R/W |
Все |
Status Register |
002 |
CR |
R/W |
Все |
Control Register |
400 |
SDFIFO |
R/W |
010 |
Parallel Pwt Data FIFO |
400 |
ECPDFIFO |
R/W |
Oil |
ЕСР Data FIFO |
400 |
TFIFO |
R/W |
110 |
Test FIFO |
400 |
CNFGA |
R |
111 |
Configuration Register A |
401 |
CNFGB |
R/W |
111 |
Configuration Register В |
402 |
ECR |
R/W |
Все |
Extended Control Register |
* Регистры доступны только в указанных режимах (режим задается би- тами 7-5 регистра ECR).
Регистр данных DR используется для передачи данных только в программно-управляемых режимах (000 и 001).
Регистр состояния SR передает значение сигналов на соот- ветствующих линиях (как в SPP).
Регистр управления CR имеет назначение бит, совпадающее с SPP. В режимах 010, Oil запись в биты 0, 1 (сигналы AutoLFft и Strobe*) игнорируется.
Регистр ECPAF1FO служит для помещения информации ко- мандных циклов (канального адреса или счетчика RLE, в за- висимости от бита 7) в FIFO-буфер. Из буфера информа- ция будет выдана в командном цикле вывода.
Регистр SDFIFO используется для передачи данных в режи- ме 010. Данные, записанные в регистр (или посланные по каналу DMA), передаются через буфер FIFO по реализо- ванному аппаратно протоколу Centronics. При этом должно быть задано прямое направление передачи (бит CR.5=0).
Регистр DFIFO используется для обмена данными в режи- ме 011 (ЕСР). Данные, записанные в регистр или считанные из него (или переданные по каналу DMA), передаются че- рез буфер FIFO по протоколу ЕСР.
Регистр TFIFO обеспечивает механизм тестирования FIFO- буфера в режиме 110.
Регистр ECPCFGA позволяет считывать информацию об адап- тере (идентификационный код в битах [7:4].
Регистр ECPCFGB хранит информацию, необходимую драй- веру. Запись в регистр не влияет на работу порта.
Регистр ECR - главный управляющий регистр ЕСР.
Назначение бит регистра ECR'.
т ECR[7:5] -ЕСР MODE - задает режим ЕСР.
т ECR.4 - ERRINTRENt (Error Interrupt Disable) - запреща- ет прерывания по сигналу Еггог# (при нулевом значении бита по отрицательному перепаду на этой линии выра- батывается запрос прерывания).
ECR.3 - DMAEN (DMA Enable) - разрешает обмен по ка- налу DMA.
т ECR.2 - SERVICEINTR (Service Interrupt) - запрещает сер- висные прерывания, которые вырабатываются по оконча- нии цикла DMA (если он разрешен), по порогу заполне- ния/опустошения FIFO-буфера (если не используется DMA) и по ошибке переполнения буфера сверху или снизу.
ECR. 1 - FIFOFS (FIFO Full Status) - сигнализирует о за- полнении буфера; при FIFOFS=1 в буфере нет ни одно- го свободного байта.
т ECR. О - FIFOES (FIFO Empty Status) - указывает на пол- ное опустошение буфера; комбинация FfFOFS=FIFOES=i означает ошибку работы с FIFO (переполнение сверху или снизу).
Когда порт находится в стандартном или двунаправленном режимах (000 или 001), первые три регистра полностью со- впадают с регистрами стандартного порта. Так обеспечива- ется совместимость драйвера со старыми адаптерами и ста- рых драйверов с новыми адаптерами.
По интерфейсу с программой fCP-порт напоминает ЕРР:
после установки режима (записи кода в регистр ECR) обмен данными с устройством сводится к чтению или записи в со- ответствующие регистры. За состоянием FIFO-буфера на- блюдают либо по регистру ECR, либо по обслуживанию сер- висных прерываний от порта. Весь протокол квитирования генерируется адаптером аппаратно. Обмен данными с ЕСР- портом (кроме явного программного) возможен и по пря- мому доступу к памяти (каналу DMA), что эффективно при передаче больших блоков данных.