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
Что адресуют адресные циклы?
Это целиком отдано на усмотрениеразработчика. По существу, это дополнительный отдешифрированный порт, но, в отличие от циклов данных, доступ здесь только байтовый. При процессорной реализации периферии, возможно, проще вообще не пользоваться адресными циклами; при чисто "дискретной" реализации логично использовать их именно для внутренней адресации на устройстве (если таковая нужна).
Когда 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?
Да, важен, и, увы, здесь тоже разночтения. Я встречался со следующими реализациями:
Для совместимости со всеми реализациями делалось следующее:
- 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
Рекомендуемый контент
Радиолюбителю