Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архітектура методичка.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
20.71 Mб
Скачать

97. Режим ecp

Протокол ЕСР (Extended Capability Port - порт із розширеними можливостями) був запропонований фірмами Hewlett Packard і Microsoft як прогресивний режим зв'язку з периферією типу принтерів і сканерів. Як і ЕРР, даний протокол забезпечує високопродуктивний двонаправлений обмін даними хоста з периферійними пристроями.

Протокол ЕСР в обох напрямках забезпечує два типи циклів:

- Цикли запису і читання даних,

- Командні цикли запису і читання.

Командні цикли поділяються на два типи: передача канальних адрес і лічильника RLC (Run-Length Count).

Протоколом ЕСР відповідає стандарту IEEE 1284, але має специфічні особливості реалізації:

- Компресія даних хост-адаптером за методом RLE;

- Буферизація FIFO для прямого і зворотного каналів;

- Застосування DMA і програмного введення / виводу.

Компресія в реальному часі за методом RLE (Run-Length Encoding) дозволяє досягти коефіцієнта стискування до 64:1 при передачі растрових зображень, які зазвичай мають довгі рядки повторюваних байт.

Канальна адресація ЕСР застосовується для адресації безлічі логічних пристроїв, що входять в одне фізичне (наприклад, комбінований пристрій факс / принтер / модем).

Протокол ЕСР також перевизначає сигнали SPP (табл. 3.5).

Сигнали діють в послідовності узгодження (див. нижче).

Адаптер ЕСР теж генерує зовнішні протокольні сигнали квитирования апаратно, але його робота суттєво відрізняється від режиму ЕРР.

На рис. 3.4, а приведена діаграма двох циклів прямої передачі: за циклом даних слід командний цикл. Тип циклу задається рівнем на лінії Ш ^ Аск (в циклі даних - високий, у командному циклі - низький). У командному циклі байт може містити канальний адресу або лічильник RLE.

Відмітною ознакою є біт 8 (старший): якщо він нульовий, то біти 1-7 містять лічильник ЯЬЕ (0-127), якщо одиничний - то канальний адресу. На рис. 3.4, б наведено два цикли зворотної передачі.

На відміну від режиму ЕРР, цикли обміну ЕСР не пов'язані з циклами системної шини процесора. У даному режимі обмін програми з периферійним пристроєм розбивається на два щодо незалежних процесу, які пов'язані через РНЮ-буфер. Обмін програмного драйвера з РІТЮ-буфером може здійснюватися як з використанням ОМА, так і програмним введенням-висновком. Обмін ПУ з буфером апаратно виконує адаптер ЕСР. Драйвер в режимі ЕСР не має інформації про точний стан процесу обміну, але в разі обміну з принтером зазвичай важлива тільки інформація про те, завершено він чи ні.

Пряма передача даних на зовнішньому інтерфейсі складається з наступних кроків:

1. Хост поміщає дані на шину каналу і встановлює ознака циклу даних (високий рівень) або команди (низький рівень) на лінії HostAck.

2. Хост встановлює низький рівень на лінії HostCik, вказуючи на дійсність даних.

3. ПУ відповідає установкою високого рівня на лінії PeriphAck.

4. Хост встановлює високий рівень лінії HostClk (дані вважається переданими). У цей момент модифікуються лічильники переданих і прийнятих байт. У протоколі ЕСР є умови, що викликають припинення обміну між кроками 3 та 4, і тоді ці дані не повинні розглядатися як передані.

5. ПУ встановлює низький рівень на лінії PeriphAck для вказівки на готовність до прийому наступного байта.

Протокол ЕРР дозволяє драйверу чергувати цикли прямий і зворотної передачі, не запитуючи підтвердження на зміну напряму. У ЕСР зміна напрямку повинна бути погоджена: хост запитує реверс установкою ReverseRequest #, після чого він повинен дочекатися його підтвердження сигналом AckReverse #. Тільки після цього можлива передача даних в іншому напрямку. Оскільки попередній цикл міг виконуватися по прямому доступу, драйвер повинен дочекатися завершення прямого доступу або перервати його, вивантажити назад буфер FIFO, визначивши точне значення лічильника переданих байт, і тільки після цього запитувати реверс.

Зворотній передача даних складається з наступних кроків:

1. Хост запитує зміна напрямку каналу, встановлюючи низький рівень на лінії ReverseRequest #.

2. ПУ дозволяє зміну напрямку установкою низького рівня на лінії AckReverse #.

3. ПУ поміщає дані на шину каналу і встановлює ознака циклу даних (високий рівень) або команди (низький рівень) на лінії PeriphAck.

4. ПУ встановлює низький рівень на лінії PeriphClk, вказуючи на дійсність даних.

5. Хост відповідає установкою високого рівня на лінії HostAck.

6. ПУ встановлює високий рівень лінії PeriphClk, і цей перепад може використовуватися для фіксації даних хостом.

7. Хост встановлює низький рівень на лінії HostAck для вказівки на готовність до прийому наступного байта.

Програмна модель і регістри ЕСР визначаються специфікацією IEEE 1284. Адаптер LPT-порту може функціонувати в різних режимах (див. табл. 3.6), які задаються полем Mode регістра ECR (біти7-5).

У режимі ТОВ (SPP) порт працює як стандартний односпрямований програмно-керований SPP.

У режимі 001 (Bi-Di PS / 2) порт працює як двонаправлений порт PS / 2 типу 1. Від режиму ТОВ відрізняється можливістю реверсу каналу даних по 5-му битку регістру управління.

Режим 010 (Fast Centronics) призначений для однонаправленої виводу через FIFO-буфер з можливістю використання DMA. Сигнали квитирования по протоколу Centronics виробляються апаратно. Сигнал запиту переривання виробляється за станом FIFO-буфера.

Режим 011 і є власне режимом ЕСР, описаним вище. У цьому режимі потік даних і команд, що передаються у периферійний пристрій, поміщається в FIFO-буфер через регістри ECPDFIFO і ECPAJFIFO відповідно. З FIFO вони виводяться з відповідною ознакою циклу (стан лінії HostAck). Приймається потік даних від ПУ витягується з FIFO-буфера через регістр ECPDFIFO. При цьому отримання адреси в командному циклі від ПУ не передбачається. Обмін з регістром ECPDFIFO може проводитися і по каналу DMA.

Компресія по методу RLE при передачі виконується програмно. Для передачі поспіль більше двох однакових байт даних у регістр ECPAFIFO записується байт, у якого молодші 7 біт містять лічильник RLC (значення RLC = 127 відповідає 128 повторам), а старший біт нульовий. Після цього в ECPDFIFO записується сам байт. Приймаючи цю пару байт (командний байт і байт даних), ПУ здійснює декомпресію. При прийомі потоку від ПУ адаптер ЕСР декомпресію здійснює апаратно і в FIFO-буфер поміщає вже декомпрессірованний дані. З цього опису роботи компресії випливає, що висновок даних з одночасним використанням компресії і DMA неможливий.

Режим 100 (ЕРР) описаний вище.

Режим 110 (Test Mode) призначений для тестування взаємодії механізмів FIFO і переривань. У цьому режимі дані можуть передаватися в / з регістра TFIFO за допомогою DMA або програмним способом. При цьому на зовнішній інтерфейс цей обмін не впливає. Адаптер відпрацьовує операції на максимальній швидкості інтерфейсу і в міру необхідності виробляє сигнали запиту переривання. Таким чином програма може визначити максимальну пропускну здатність каналу.

Режим 111 (Configuration mode) призначений для доступу до конфігураційним регістрів. Його виділення захищає адаптер і протокол від некоректних змін конфігурації в процесі обміну.

Регістри адаптера ЕСР (табл. 3.7) включають три регістра стандартного режиму SPP і додаткові регістри зі зміщенням 400h - 402h. Таке рішення пояснюється наступним. Традиційні адаптери ISA для дешифрування адреси портів введення / виводу використовували тільки 10 молодших ліній шини адреси, тому звернення за адресами, наприклад, Port, Port +400 h, Port +800 h. .. будуть сприйматися як звернення до адреси Port, який лежить в діапазоні 0-3FFh. Сучасні PC і адаптери декодують 12 адресних біт, і можуть звертатися до додаткових регістрів (цим забезпечується сумісність зі старими адаптерами в режимах 000-001 і можливість визначення присутності ЕСР-адаптера спробою звернення до його розширеним регістрів).

Для кожного режиму ЕСР доступні свої функціональні регістри. Перемикання режимів здійснюється записом в регістр Есл. За замовчуванням включається режими 000 або 001. З цих режимів завжди можна переключитися в будь-який інший, але з старших режимів (010-111) перемикання можливе тільки в 000 або 001. Для коректної роботи інтерфейсу перед виходом із старших режимів необхідно дочекатися завершення обміну по прямому доступу і спустошення РШО-буфера.

Нижче наводиться опис регістрів.

Регістр даних ІЄ використовується для передачі даних лише в програмно-керованих режимах (000 і 001).

Регістр стану БЯ передає значення сигналів на відповідних лініях (як в ЯРР).

Регістр управління CR має призначення біт, що збігається з SPP * У режимах 010,011 запис в біти 0,1 ігнорується.

Регістр ECPAFIFO служить для приміщення інформації командних циклів (канального адреси або лічильника RLE, залежно від біта 7) у FIFO-буфер. З буфера ця інформація буде видана в командному циклі виводу.

Регістр SDFIFO використовується для передачі даних в режимі 010. Дані, записані в цей регістр (або надіслані по каналу DMA), передаються через буфер FIFO по апаратно - реалізованому протоколу Centronics. При цьому повинно бути задано пряме напрям передачі (біт 5 регістра управління дорівнює нулю).

Регістр DFIFO використовується для обміну даними в режимі 011 (ЕСР). Дані, записані в цей регістр або лічені з нього (або передані по каналу DMA), передаються через буфер FIFO по протоколу ЕСР.

Регістр TFIFO забезпечує механізм тестування FIFO-буфера в режимі 110.

Регістр ECPCFGA дозволяє зчитувати інформацію про адаптері (ідентифікаційний код в бітах 7 - 4).

Регістр ECPCFGB призначений для зберігання інформації, необхідної драйверу. Запис у цей регістр не впливає на роботу порту.

Регістр ECR є головним керуючим регістром ЕСР. Його біти мають таке призначення:

- 7 - 5: ЕСР MODE - задають режим ЕСР (див. табл. 3.6);

- 4: ERRINTREN # - (Error Interrupt Disable) забороняє переривання сигналу ERRORS (при нульовому значенні біта по негативному перепаду на цій лінії виробляється запит переривання);

- 3: DMAEN - (DMA Enable) дозволяє обмін по каналу DMA;

- 2: SERVICEINTR - (Service Interrupt) забороняє сервісні переривання, які виробляються по закінченні циклу DMA (якщо він дозволений), по порогу заповнення / спустошення FIFO-буфера (якщо не використовується DMA) і помилково переповнення або спустошення буфера;

- 1: FIFOFS - (FIFO Full Status) сигналізує про заповнення буфера (при FEFOFS = l в буфері вільного місця);

- 0: FIFOES - (FIFO Empty Status) вказує на повне спустошення буфера. Комбінація FIFOFS = FIFOES = l означає помилку роботи з FIFO.

По інтерфейсу з програмою ЕСР-порт нагадує ЕРР: після установки режиму (записом коду в регістр ECR) обмін даними з пристроєм зводиться до операцій читання або запису у відповідні регістри. За станом (заповненням) FIFO-буфера спостерігають або за опитуванням (читанням регістра ECR), або з обслуговування сервісних переривань від порту. Весь протокол квитирования генерується адаптером апаратно