Fчасто Aзадаваемые Qвопросы

   
Fчасто Aзадаваемые Qвопросы

Одним из полезных ресурсов для разработчиков электронной техники является конференция сети FIDONET RU.EMBEDDED(fido7.ru.embedded), которая также доступна в Интернете, например, черезсервера или . Конференция посвящена вопросам, связанным со встроенными системами, микроконтроллерами и другими компонентами этих систем, их разработкой, кросс-программированием, отладкой, тестированием: хард, софт, инструментарий, проблемы, возникающие при разработке и использовании, схемы, алгоритмы, исходные тексты, ноу-хау. По адресу находится FAQ конференции Љ ответы на часто задаваемые вопросы, которые пишут сами участники. Ведёт FAQ Алексей Владимиров ( Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ). Мы начинаем публиковать выдержки из FAQ. Сегодня на вопросы о EPP отвечает Александр Вишняков.

Что такое EPP?

EPP (Enchanced Parallel Port ) - скоростной (до 2 Мб/с) двунаправленный интерфейс, являющийся развитиемCentronics и Bidirectional режимов LPT-порта. Его главная особенность - приём или передача байта со стороны PC осуществляется за одно обращение к порту I/O (более того, при 16/32-разрядном обращении принимается или передаётся сразу 2/4 байта, соответственно), цикл квитирования приёма-передачи реализован аппаратно (для ISA - посредством сигнала IOCHRDY). Грубо говоря, EPP - отдешифрированный порт I/O, вынесенный на кабель. Сигналы LPT-порта получили другие функции и другие названия. Для более подробного знакомства можно посмотреть, например, и .

Как включить режим EPP на компьютере?

Переключение режимов LPT-порта, как правило, производится "магическими последовательностями". Смотреть их надо в описаниях соответствующих микросхем MIO (SIO). Довольно подробный список микросхем SIO содержится на ic.doma.kiev.ua/bios/chip/sio.htm.

Для пользователя выбор режимаLPT-порта сводится к установкам в BIOS SETUP. Как правило, там есть режимы Standard, Bidirectional, EPP, ECP, часто - ECP+EPP, на более старых - что-нибудь вроде Extended. Если есть режим "чистого" EPP - выбирайте его (часто есть ещё выбор между EPP1.7 и EPP1.9). Если только смешанный "ECP+EPP" или "Extended" - скорее всего, потребуется ещё выполнить запись в порт ECR байта 0x80 (ECR - это регистр ECP-режима, ECR=BASE_ADDR+0x402; BASE_ADDR - базовый адрес LPT-порта). Если это не поможет - всё же не обойтись без документации на микросхему.Кстати, учтите, что базовый адрес порта в режиме EPP не может быть 3BC(поскольку EPP занимает в пространстве I/O 8 смежных адресов, а по адресу 3С0 уже расположены регистры CGA), некоторые BIOS™ы не блокируют возможность ввода конфигурации "EPP на 3BC". Нужно помнить, что регистр управления LPT-порта по-прежнему влияет на состояние выходных линий, а для работы аппаратного квитирования нужно перевести линии nDATASTB, nADDRSTB, nWRITE в состояние "1" (ВIOS также это делать не обязан), сброс устройства линией nRESET также целиком в вашей власти.

В чём различие между EPP1.7, EPP1.9, IEEE1284?

Краткую историю вопроса можно почерпнуть на . EPP1.7 ещё называют pre-1284 EPP, EPP1.9 - доработка, положенная в основу стандарта IEEE1284 (точнее, IEEE1284 описываетвсе режимы LPT-порта: Compatibility, Nibble, Byte, EPP, ECP), сам стандарт может быть заказан на , точный его текст в Интернете я не видел. Отличие 1.7 и 1.9 (IEEE1284) - в способе квитирования.

Временная диаграмма для EPP1.9(передача двух байт, рассматривается на примере циклов данных, для цикловадреса - аналогично) показана на рис. 1.

Рис. 1

EPP-Host опускает линию nDATASTB только при низком уровне сигнала nWAIT, а поднимает только при высоком, то есть периферийное устройство (далее "периферия") подтверждает оба фронта сигналаnDATASTB.

Временная диаграмма для EPP1.7 - на рис. 2.

Рис. 2

Здесь передача первого байтавыглядит как и раньше, но с опусканием линии nWAIT периферия "замешкалась", и Host имеет право начать новый цикл обмена (опустить nDATASTB) при любом уровне сигнала nWAIT. С подъёмом же линии nDATASTB - разнобой - некоторые реализации 1.7 поднимают её только после перехода nWAIT из "0" в "1" (как на рис. 2 вверху), то есть им важно наличие фронта; другие требуют только, чтобы nWAIT было "1". То есть, если периферия хочет задержать подъём nDATASTB, она должна быстро выставить nWAIT="0l", иначе цикл может выглядеть, как показано на рис. 3(длительность импулься nDATASTB="0" при этом меньше 500 нс).

Рис. 3

Можно ли сделать EPP-периферию на микроконтроллере?

Конечно, но процессор должен быть достаточно быстрым - цикл I/O нельзя затягивать слишком долго (большинство EPP-Host контроллеров отслеживают тайм-аут квитирования (10 мкс по стандарту), да и у ISA есть тайм-аут для IOCHRDY (иногда может устанавливаться в BIOS SETUP)). Порты процессора должны быть достаточно мощными и с триггерамиШмитта на ввод. Для совместимости с обоими толкованиями EPP1.7 может понадобиться внешняя обвеска (триггер). Так например, скорости 20 МГц PIC16C65 практически не хватило для чисто программного квитирования, и была использована следующая схема (рис. 4):

Рис. 4

  • Исходно (при nDATASTB = "1") , SW = "0" , nWAIT = "0".
  • При переходе nDATASTB из "1" в "0", nWAIT остаётся в "0", PIC обнаруживает этот переход, считывает или выставляет байт данных и затем даёт короткий импульс "1" по линии SW (SetWait), что приводит к установке nWAIT = "1".
  • Host поднимает nDATASTB в "1", nWAIT автоматически опускается в"0". Триггер легко строится на элементах И-НЕ/ИЛИ-НЕ.

    Что адресуют адресные циклы?

    Это целиком отдано на усмотрениеразработчика. По существу, это дополнительный отдешифрированный порт, но, в отличие от циклов данных, доступ здесь только байтовый. При процессорной реализации периферии, возможно, проще вообще не пользоваться адресными циклами; при чисто "дискретной" реализации логично использовать их именно для внутренней адресации на устройстве (если таковая нужна).

    Когда EPP-устройство генерирует прерывание?

    Поскольку (в отличие от Centronics)передача байта квитируется автоматически, то прерывание на передачу одного байта не требуется. Логично использовать линию прерывания для сообщения о готовности к обмену очередного блока данных (при высоких скоростях буферизация на обеихсторонах почти всегда необходима). В вашем распоряжении есть также две User-defined линии (PE, nERROR).

    А если EPP-устройство всё же не успевает квитировать?

    В большинстве реализаций хоста есть бит Time-Out (ошибка квитирования со стороны периферии) - это бит 0 порта статуса (BASE_ADDR+1), который в Centronics не использовался. Разумеется, нерационально проверять этот бит после передачи/приёма одного байта, делать это можно после обмена блоком данных. Бит Time-Out сбрасывается либо при чтении порта статуса, либо (гораздо чаще) при записи байта xxxxxxx1b в порт статуса (вCentronics он был Read Only), так что запись 0x01 не помешает в любом случае. Но если бит Тime-Out не реализован, и в младшем бите статуса всегда считывается 1, то ясно, что такая "проверка" недопустима, поэтому в начале работы программа на PC может попытаться сбросить бит 0 статуса; если это не удаётся - то битаTime-Out нет. Имейте в виду, что с момента после возникновения Time-Out и до его сброса Host-контроллер может вести себя непредсказуемо. Например, наблюдалось (микросхема SMS FDC37C672), как при возникновении Time-Out в цикле EPP-чтенияшина данных как бы запирается на ввод (и бит направления LPT-порта перестаёт на это влиять!), циклы EPP- записи больше не генерируются, а циклы EPP-чтения идут нормально. Как правило, такие "тонкости" в "даташитах" не приводятся.

    Важен ли бит направления порта LPT?

    Да, важен, и, увы, здесь тоже разночтения. Я встречался со следующими реализациями:

  • Направление шины данных определяется битом направления LPT (бит 5 регистра BASE_ADDR+2) в промежутках между EPP-циклами, и направлением EPP-цикла (запись или чтение) в момент самого цикла.
  • Аналогично 1), но в цикле EPP-записи при бите направления iа1lа (на ввод) байт на шину данных не выставляется, хотя квитирование ведётся.
  • Аналогично 1), но бит направления должен совпадать с фактическим направлением EPP-цикла. Иначе сигналы квитирования (nDATASTB/nADDRSTB, nWRITE) не генерируются (но и Time-Out тоже не фиксируется).
  • Бит направления программируется, но ни на что не влияет. После записи в порт данных LPT (BASE_ADDR+0) или EPP-цикла записи порт остаётся на вывод, после EPP-цикла чтения порт остаётся на ввод.

    Для совместимости со всеми реализациями делалось следующее:

    • EPP-периферия в основном держит шину данных на ввод и переводит на вывод только в момент EPP-цикла чтения (по спаду nDATASTB/nADDRSTB при nWRITE=i/1"). При обмене блоками по оговоренному протоколу коммутация направления возможна и один раз на целый блок;
    • на EPP-хосте бит направления устанавливается в "0" перед началом передачи блока данных и в "1" перед началом приёма блока данных;
    • для защиты от возможных столкновений шины данных при сбоях предусмотренные стандартом последовательные резисторы становятся совершенно необходимыми.

    Нужно ли применять специальный кабель?

    По стандарту IEEE1284 - нужно -специальный кабель с экранированием каждого сигнала, однако такие кабели дороги и не всегда доступны.

    Опыт показывает, что EPP прекрасноработает на стандартном 25-контактном RS-232 кабеле, в том числе, на кабеле длиной 6 метров, при сочленении нескольких кабелей и с использованием механического переключателя принтера. Разумеется, рекомендации по подтяжкам, последовательным резисторам и триггерам Шмитта на входах нужно соблюдать.

    Какие ещё проблемы могут возникнуть?

    Если ваше EPP-устройство должноработать как в автономном режиме, так и в режиме связи с PC (следовательно, имеет автономное питание), то возникает неприятная проблема "натекания" напряжения (через выходы и резисторы подтяжек включенного устройства на питание выключенного через защитные диоды и те же подтяжки). При уровне порядка 1 В импульсный блок питания PC может просто не включиться (наблюдалось неоднократно). Поэтому желательно, чтобы ваше устройство умело обнаруживать,когда PC выключен, но на входах с подтяжками это не так просто сделать! В моём устройстве это делалось по уровню сигнала nADDRSTB (адресные циклы не использовались), эта линия специально имела подтяжку не к +5 В а к земле (и немного подфильтрована). Если PC включен и порт в режиме EPP, то nADDRSTB="1" , в противном случае, PIC16 переводил все выходные линии в iи0lи и отключалподтяжки на входных (использовался один транзистор на все подтяжки). Также следует учесть, что в процессе перезагрузки PC на порту EPP может быть что угодно (например, Windows98 мучает LPT-порт при загрузке не так, как Windows95), нужно позаботиться, чтобы устройство не приняло это за исполнительную команду - как минимум, оно должно обнаруживать ошибки интерфейса, корректно восстанавливаться по сигналу nRESET.

    Какая скорость может быть достигнута на EPP?

    Максимальная скорость обменадостигается при использовании на Host-PC команд "rep ins", "rep out". (ввод/вывод цепочки байт в порт). Цифры, полученные на двух компьютерах при максимально быстром квитировании (nWAIT получен инверсией nDATASTB), сведены в таблицу.
    Таблица PC chip (card) 8 bit
    (rep insb)
    (rep outsb)
    16 bit
    (rep insw)
    (rep outsw)
    32 bit
    (rep insd)
    (rep outsd)
    Cel-433 (440BX) W83977TF
    (EPP-ISA)*
    (EPP-PCI)** 645 Kб/с
    590 Kб/с
    1175 Kб/с 870 Kб/с
    770 Kб/с
    ? 1000 Кб/с
    930 Kб/с
    ? K5-166 (430TX) IT8679F
    (EPP-PCI) 800 Kб/с
    1330 Kб/с 910 Kб/с
    ? 1050 Kб/с
    ?

    * ) (EPP-ISA) - карточка с микросхемой AP138B (ASP), производитель - .

    ** ) (EPP-PCI) - карточка с микросхемой OX16PCI954 (Oxford Semiconductor), производитель - (на момент подготовки FAQ были неясности с работой этой карты при 16/32-разрядном I/O).

    I/O Recovery в BIOS SETUP выставленыминимальные, прочие опции "разгона" ISA на обеих машинах отсутствовали. Парадоксально, но на более "медленной" машине EPP работал быстрее и на интегрированном порту, и на PCI. По опыту коллег, при "разгоне" скорость 2 Mб/с достижима даже на интегрированном порту.

    E-mail: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript






  • Рекомендуемый контент




    Copyright © 2010-2017 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.