LPT (mode EPP, 0,5- 1,7 Mбайт/с)

Работа с LPT-портом в Win NT/2000/XP

LPT-порт (Line PrinTer) — порт параллельного интерфейса, который изначально создавался для подключения принтера. BIOS обеспечивает поддержку LPT-порта, необходимую для организации вывода по интерфейсу Centronics. Адресное пространство порта занимает диапазон &H378-&H37F

LPT-порт имеет 12 выходных и 5 входных линий. Такое довольно большое количество линий делает возможным подключение к порту несложной аппаратуры, возможно даже не имеющей своего микроконтроллера. Поэтому этот порт, несмотря на исчезновение принтеров с LPT-интерфейсом, активно используется для подключения простых программаторов микросхем памяти, JTAG-интерфейсов для перепрошивки (замены программного обеспечения) спутниковых рессиверов, DVD-плееров и другой электронной техники. Популярен LPT-порт и у моддеров, поскольку позволяет подключить к компьютеру LCD-дисплеи без изготовления сложных плат-интерфейсов.

Windows 2000/XP не позволяет приложениям обращаться к портам ввода-вывода напрямую. Для этого нужно использовать драйвер, работающий в KERNEL-mode (в режиме ядра операционной системы).

Ограничение доступа к портам ввода-вывода для обычных прикладных программ (работающих в пользовательском режиме) позволяет сделать операционную систему более стабильной. Хотя с другой стороны никто не мешает программисту написать драйвер, обращающийся к портам.

Интересно, что для процессора Intel x86 можно написать драйвер, использующий один из двух принципиально разных подходов. Первый вариант — драйвер сам обращается к портам, а прикладная программа только указывает драйверу, что делать. Этот вариант в общем случае является стандартным и предпочтительным.

Для решения проблемы существуют четыре популярных варианта драйверов, позволяющих прикладной программе обращаться к портам ввода-вывода: драйвер DLPortIO, драйвер UserPort, драйвер GiveIO.sis, драйвер Port95nt.

Все четыре варианта практически равноценны.

LPT (mode EPP, 0,5- 1,7 Mбайт/с)

LРТ порт один из самых простых и доступных, для использования портов параллельного интерфейса входящий в состав любого персонального компьютера. Но по сегодняшним реалиям, он уходит в прошлое, уступая более компактным, быстрым и современным внешним интерфейсам типа USB, EATA, Ethernet, и другим. Однако для новичков и даже тем, кто с ним сталкивался, потрепал не мало нервов. Однако с него проще всего начать изучать взаимодействие аппаратно-программной части персонального компьютера с любым внешним устройством, с которым оно должно общаться.

Проект LPT, который мне удалось сделать, выполнен на микросхеме типа CPLD XC95144XL фирмы Xilinx, программное обеспечение написано для ОС — Windows 98/ME/XP. Режим работы данного параллельного порта выбран не случайно – EPP. Реально максимально возможная скорость передачи данных лежала в пределах 0,5 -1,7 Мбайт/с, что для некоторых задач вполне хватало.

Чтобы Вам не терять время, которое мне пришлось потратить на изучение всех режимов работы данного LPT порта, его программирование, особенностей программирование портов для операционных систем Windows 98/ME/XP, выбор элементной базы для проекта, создание принципиальной схемы, печатной платы и других тонкостей, включая проектирование и создание битового потока для ПЛИС типа CPLD XC95144XL. Есть два пути: коммерческий и некоммерческий. При коммерческом способе (с соблюдением конфендициальности секретов Ноу-хау) — Вы получаете самую полную информацию по данному проекту, экономя свое драгоценное время и финансы. При некоммерческом способе — Вы можете получить только незначительную часть того, что необходимо или использовать в качестве справочной информации.

Ну, пожалуй начнем….

Сам адаптер параллельного LPT порта представляет собой часть контроллера размещенного на материнской плате любого персонального компьютера и состоит из набора регистров, расположенных в пространстве ввода/вывода. Регистры порта адресуются относительно базового адреса порта (378h или 278h). LPT порт может использовать линию запроса аппаратного прерывания, обычно IRQ7 или IRQ5. Наличие LPT порта указывает на присутствие в задней стенке или в другом месте – разъема с 25 контактами типа DB-25 (мама). Параллельный LРТ порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-битную шину управляющих сигналов.

Для настройки режима LPT порта нужно войти в ВIOS материнской платы. BIOS разных производителей не сильно отличаются друг от друга, но и бывает так, что не все режимы можно установить из-за урезанных дешевых контроллеров, которые эти режимы не поддерживает. Нас будет интересовать установка “чистого” режима — EPP. Отсутствие такового говорит об урезанном контроллере и для дальнейших манипуляций нет гарантий стабильной работы даже в режиме ECP+EPP. Бывают еще дополнительные настройки данного режима — EPP 1.7 или EPP 1.9, но это другая история.

Подробно описывать режим EPP не буду, так как литературы достаточно. А основные преимущества отмечу:

Во-первых, все информационные и управляющие сигналы для каждого из 4-х режимов (цикл записи данных, цикл чтения данных, цикл записи адреса, цикл чтения адреса) формируются аппаратно.

Во-вторых, в этом режиме достигаются высокие скорости обмена для данного интерфейса, за счет выполнения внешней передачи во время одного процессорного цикла ввода/вывода.

В третьих, гибкость и автоматическая подстройка под длительность всех фаз обмена и длину кабеля, позволяет иметь простую отладку и программирование устройства сопряжения с персональным компьютером.

Данный проект представляет собой устройство сопряжения между LPT портом персонального компьютера и внешним устройством, которым нужно управлять. Это может быть и память типа FLASH, различные микропроцессорные контроллеры, датчики и т. д.

Реальная скорость передачи данных лежит в пределах от 0,5 Мбайт/с до 1,7 Мбайт/с. Не много, но достаточно, для большинства задач, которые могут быть выполнены на данном интерфейсе. Поскольку слишком много факторов влияют на данную скорость, рекомендую для достижения максимально возможной и стабильной скорости придерживаться следующих некоторых из правил:

— не увеличивать длину кабеля более 1,5 метров, для избежания удлинения циклов записи и чтения из-за вносимых кабелем задержек;

— не пользоваться прямым обращением к портам ввода/вывода с помощью ассемблерных инструкций в среде Windows XP, из-за особенностей программирования для данной операционной системы. В других более ранних версий намного проще;

— не забывать про согласование приемных и передающих цепей интерфейса;

— использовать правила конструирования печатных плат и некоторые особенности схемотехники, позволяющие достигать высокие скорости возможные для данного LPT порта.;

— по мере возможности, использовать в персональном компьютере процессор с максимальной частотой и большей оперативной памяти, особенно если это необходимо для работы на ОС Windows XP.

— ну и еще чего много надо, но это ноу-хау!

Теперь поговорим о ПЛИС…

На сегодняшний день существуют два основных типа ПЛИС (Программируемые Логические Интегральные Схемы)отличающихся друг от друга архитектурой построения внутренних программируемых комбинационных схем, способом загрузки, емкостью логических элементов, числом эквивалентных вентилей и т. д.:

— FPGA (Field Programmable Gate Array);

— CPLD (Complex Programmable Logic Devices).

В данном проекте в виду небольшого числа требуемых для реализации логических элементов и триггеров, подойдет ПЛИС типа CPLD XC95144XL фирмы Xilinx. Подробное описание на русском языке по данной микросхеме, Вы можете свободно скачать по адресу: http://www.plis.ru/pic/pict/File/9500xl_rus.pdf. Здесь достаточно понятно описывается внутренняя структура ПЛИС типа CPLD.

Отмечу только некоторые особенности и принципы программирования ПЛИС типа CPLD.

— для того чтобы запрограммировать данный тип ПЛИС необходимо иметь загрузочный JTAG-кабель. Принципиальную схему данного кабеля для подключения через LPT порт можно скачать по адресу: http://www.plis.ru/pic/pict/File/jtag_cable.pdf. Если позволяют финансы, то лучше купить готовый кабель, стоимость которого не велика (25$). Есть загрузочный JTAG-кабель для USB-порта, но стоит намного дороже, в зависимости от того с отладочной платой его брать или без нее. Для удобства отладки в дальнейшем, лучше брать именно загрузочный JTAG-кабель для USB-порта, поскольку отпадет проблема отключать и снова подключать его в варианте для LPT порта, устройство которое реализовано в данном проекте тоже подключается к LPT порту! Можно и обойтись и двумя компьютерами, можно одним компьютером и коммутатором для LPT порта. Кому как нравится, выбор за Вами.

— загрузка битового потока осуществляется через специально выделенные выводы JTAG-порта (TCK, TDI, TDO, TMS). Сам битовый поток создается с помощью специальной системы проектирования, предоставляемый производителем (в нашем случае — Xilinx) на платной или бесплатной основе. Для простых и не больших проектов подойдет бесплатная и свободно скачиваемая версия – ISE WebPACK 9.2i. Для того, чтобы ее получить необходимо зарегистрироваться на сайте производителя для получения доступа к файлам на странице: http://www.xilinx.com/support/download/index.htm. Для сложных и больших проектов потребуются полнофункциональные, новые версии — ISE 9.2i, ISE 10.1i или более поздние. Производитель предоставляет 60-ти дневные версии для ознакомления, а потом все равно требуется иметь лицензию. Как работать и какую использовать систему проектирования рассмотрим позже.

— во время загрузки, в виду особенностей технологии и реализации внутренних схем, используемых в ПЛИС, не рекомендую подавать тактовые сигналы на выводы, а особенно на управляющие выводы глобальных сигналов тактирования (GCK) для нормального завершения процесса загрузки.

— для избежания выхода из строя выводов микросхем ПЛИС, используете рекомендации по согласованию выходных уровней сигнала, описанных в документации на микросхему CPLD XC95144XL фирмы Xilinx.

— еще чего много надо, но это опять ноу-хау!

Дальше немного о системе проектирования, которое необходимо использовать для создания битового потока ПЛИС…

В настоящее время, системы проектирования имеют направленность к тому, чтобы разработчик использовал языки программирования для описания схем — VHDL или Verilog. Мотивируя это тем, что это удобно и быстро. На самом же деле смысл заключается в том, что созданный ранее проект можно перенести на другую платформу или другой проект. Один написал, а другие этим пользуются. К сожалению, я бы не пошел таким путем, и не посоветовал бы и Вам идти на начальном этапе. Использовать эти языки можно, но схемотехника всегда останется главным языком разработчика, что все же пока сохраняется в системах проектирования, как один из способов создания принципиальной схемы.

Я пытался работать во многих системах проектирования выпускаемых фирмой Xilinx. Начиная от XACT 6.0 и кончая, последней версией, на сегодняшний день — ISE 10.1. Более понятной, простой, удобной и удачной версией считаю – ISE Foundation 4.1i. Единственными минусами будут не возможность использовать самых современных кристаллов и новых средств отладки схем, что возможно в более новых версиях. Однако частое смена версий (каждый год), большое число ошибок, неграмотное программирование отдельных модулей под ОС Windows XP или Windows Vista, не оптимизированный компилятор упаковки в кристалл, и еще много чего вызывает отвращение с одной стороны, и появление новых инструментов отладки с другой стороны вызывает восторг. Ну, это уже так производитель сам выбрал путь, оставляя нам лишь выбирать то, что душе угодно. Можно воспользоваться сторонними производителями систем проектирования, выбрать другого производителя ПЛИС (Altera), но поверьте там тоже, есть свои достоинства и недостатки, c которыми мне то же приходилось сталкиваться. Свой выбор я сделал в пользу фирмы Xilinx, как самый крупный лидер на мировом рынке микросхем программируемой логики.

Общим для всех версий систем проектирования, выпускаемых фирмой XIlinx, все равно остается – битовый поток, который можно загружать из любой версии. Однако перенести проект из старой версии в новую, или наоборот – это проблема, которую исправлять никто не хочет, да и зачем, всем нужно сорвать деньги. Но это другая история…

Системы проектирования всегда стоили не мало, и где их взять каждый решает сам. В нормальном обществе за все надо платить, к этому рано или поздно даже в нашей стране это будет. Но есть и другая сторона вопроса сколько платить? Ни для кого не секрет, что в Интернете есть полно пиратов, которые продадут Вам за гроши данные системы проектирования, или много keygen-ов с помощью которых можно взломать даже 60-дневные версии. Но Я сторонник – легального или свободного распространяемого программного обеспечения. Платили бы нормальную зарплату и даже домой можно купить – если надо.

Так что для начала и для не больших проектов подойдет бесплатная и свободно скачиваемая версия – ISE WebPACK 9.2i.. Ну если позволяют финансы, то лучше обратиться к одному из дилеров фирмы Xilinx в России – Инлайн Групп.

Вот и добрались до самого проекта…

Данный проект выполнен в виде устройства сопряжения между компьютером и внешним устройством, в моем случае для управления накопителем на FLASH памяти. В принципе устройство сопряжения получилось универсальным и может использоваться для управления любым устройством имеющий скорость передачи данных не более 1,7 Мбайт (13,6 Мбит). Основой проекта служит ПЛИС типа CPLD XC95144XL фирмы Xilinx. Данная микросхема программируемой логики содержит 144 макроячейки, что эквивалентно 3200 вентилям. В каждой макроячейке содержится по одному триггеру, таким образом, всего в нашем распоряжении — 144 триггера. Для того, чтобы согласовать внешнее устройство с LPT портом персонального компьютера по протоколу EPP, вполне хватит данных ресурсов ПЛИС. Поскольку протокол EPP позволяет формировать все сигналы аппаратно, это сильно упрощает задачу и экономит ресурсы ПЛИС.

Само устройство сопряжение выполнено на двух сторонней печатной плате:

Печатная плата устройства сопряжения LPT-порта

Размеры и габариты значения не имеют, каждый может изменять их по своему усмотрению. Одно остается неизменным – принципиальная схема данного устройства, в которую мало кто будет изменять или дополнять. Так как мною уже пройден длинный путь и учитывая замечательное свойство выводов ПЛИС – быть программируемым на любую функцию внешнего вывода, то это сильно упрощает саму разводку печатной платы и компоновку элементов печатной платы. Грамотная разводка печатной платы – является одним из главных факторов влияющих на работоспособность любого электронного устройства. Приводить здесь принципиальную электрическую схему и монтажную схему печатной платы мне бы не хотелось бы (ноу-хау), но структурную схему представляю для пояснения данного проекта.

Сама структурная схема выглядит так:

Самая сложная и интересная часть данного проекта — отладка и стыковка программной и аппаратных частей между собой. Тут надо четко понимать, что главным элементом управления является персональный компьютер (PC), а не подключенное к нему периферия, которая тоже может содержать собственные микропроцессоры, контролеры и т. д. Поэтому в данном проекте протокол связи и обмена информации между персональным компьютером и периферией, через устройство сопряжения продуман так, чтобы добиться максимальной возможной скорости передачи данных, надежной и простой системы обмена информации, минимальных требований к написанию программной части проекта.

Программное обеспечение для данного проекта работает и написано для операционных систем семейства Windows 98/ME/XP. Здесь тоже полно подводных камней и хитростей, которые нужно будет учитывать при написании и использовании драйвера устройства сопряжения, для каждой из операционных систем семейства Windows в отдельности. При написании программы всегда нужно играть по правилам самой Microsoft, а именно использовать функции WinAPI и знать как обойти защиту ядра системы. Нужно учитывать уровень приоритета на прерывания от периферии и грамотно программировать, и по мере необходимости использовать готовые решения других производителей.

Для отладки данного проекта необходимо использовать предусмотренные контрольные точки, которые можно проконтролировать с помощью цифрового логического анализатора или осциллографа.

В целом проект получился удачным и может быть легко перестроен под другую задачу. Не смотря на то, что LPT порт устаревает, скорость считывания данных (до 13,6 Мбит/с) выше, чем у Usb-порта работающего в режиме Full speed, где теоретически возможна скорость передачи до 12 Мбит/c, реально намного ниже 5 — 11 Мбит/с, но это другая история.

Порт ECP

Дальнейшим развитием параллельного порта явился порт ECP (Extended Capability Port). Скорость передачи данных по сравнению с EPP немного возрасла, в ECP, также как и в EPP, используется метод DMА. Он позволяет создавать цепочку из 128 устройств.

Одной из самых важных функций, рализованных в ECP, является сжатие данных. Это позволяет еще больше повысить реальную скорость передачи. Сжатие возмодно как программно, путем применения драйвера, так и аппаратно самой схемой порта. Для сжатия используется метод RLE (Run Length Encoding), при которм последовательность из повторяющихся символов передается двумя байтами: первый определяет повторяющийся байт, а второй — число повторений. Данная функция, однако, не является обязательной. Она работает только в том случае, когда и устройство поддерживает ее. Если таковой поддержки нет, то порт обменивается данными с устройством без сжатия.

Режимы параллельного порта (AT, EPP, ECP) можно выставить в CMOS Setup. Если вс работает нормально, то в любом случае ставьте EPP/ECP. Если порт поддерживает эти режимы (а это любой современный параллельный порт), то эта опция, как правило, уже установлена как оптимальное значение.

Компьютер с lpt портом

Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y

Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2022

Компьютер с lpt портом

За время существования этого сайта мне довольно часто задают один и тот же вопрос, который можно описать примерно следующим образом:

«У меня в компьютере (ноутбуке) нет LPT порта. Купил себе переходник USB-LPT. Установил. Ваши примеры не работают. Почему?»

В итоге решил описать этот вопрос подробнее и написать статью. Да, действительно, сейчас стационарных PC с LPT портом нужно поискать (т.е. далеко не каждая «мать» сейчас идет в комплекте с LPT портом). Про ноутбуки вообще говорить не приходится. Современные модели LPT порт вообще не применяют. Только очень дорогие и специализированные машины, типа DELL, могут «похвастаться» наличием этого порта.

Также, сейчас в продаже можно свободно приобрести вот такие устройства, называемые LPT-USB переходниками.

Инстркуция гласит что этот прибор полностью совместим с различными принтерами, сканерами и т.д. Подключаем переходник к USB порту, устанавливаем драйвера. Смотрим диспетчер устройств. Скорее всего в ветке «Порты LPT/COM» ни чего не появилось (хотя бывают исключения). Скорее всего повится либо новая ветка со странным устройством с именем, например, LPT1USB либо в разделе USB устройств появится странная запись о «USB устройстве поддержки LPT принтеров». Пробуем запустить какой-нибудь пример из статей выше. И ни тут то было — ни чего не работает. Пробуем адрес порта LPT1 — ни чего не работает. Пробуем адресс порта LPT2. К сожалению, такая модернизация адреса в запросах тоже ни к чему не приводит — светодиоды как не загорались так и не загораются.

Чтобы разобраться в чем тут дело давайте вернемся на время к обычному «родному железному» LPT порту — LPT1, который из материнской платы «торчит». Зайдем в диспетчер устройств, заглянем в свойства нашего порта. Там мы увидим вот такую картину. Отлично видно, что система прописала базовый адрес ввода-вывода 0x378 и запрос на прерывание номер 7. Все правильно.

Теперь погрузимся на уровень программирования. В примерах статей выше мы минуя систему защиты ввода-вывода легальными и нелегальными способами напрямую общались с реально существующим регистром ввода-вывода, которому присвоен адрес 0x378. Тут все понятно. Незабудем также о том, что Windows рекомендует работать с LPT портом используя вызовы API функций — OpenFile(), WriteFile(), ReadFile(). Приложения, которые используют LPT порт для обмена информацией по парралельному интерфейсу с внешними устройствами (принтер, например) так и делает. У него нет задачи установить на каком-либо бите регистра Data лигическую еденицу. Ему (приложению) нужно просто отправить пакет данных, а кто там будет какие линиии при этом «дергать» и считывать его не сильно интересует. Эти операции проводит системный драйвер LPT порта. Он подгружается в память при загрузке ОС. Когда мы вызываем функцию OpenFile(«LPT1», . ) мы по сути дела обращаемся к драйверу порта, который имеет символическое имя LPT1. Драйвер делает кучу всякой работы — запрещает доступ к порту другим процессам, настраивает параметры протокола передачи данных, собственно реализует эту передачу, но в конечном итоге все это сводится к прямому управлению отдельными битами LPT порта на уровне ядра ОС.

А теперь попробуем поработать с нашим переходником USB-LPT. Начнем как не покажется странным, с API вызовов. Запускаем OpenFile(«LPT1USB», . ) (смотря как этот переходник диспетчере устройств назовется, если вообще назовется). Что при этом происходит? Дело в том, что теперь мы будем работать не с драйвером LPT порта ОС а с драйвером этого переходника! Вот в чем фокус то! Он принимает пакет данных от нашего пользовательского приложения и в нужном формате через систмный драйвер USB отсылает этот пакет на USB контроллер, «ноги» которого торчат из внешней LPT розетки на проводе (ну это так, «грубое объяснение»). Видете, здесь нет ни какого намека на обращение к регистрам по адресам 0x378(0x278), т.к. их просто нет!

Поэтому, когда Вы патаетесь запускать примеры данного раздела и обращаться напрямую по адресам 0x378 (если этот «псевдо порт» назвался LPT1USB или что-то в этом духе), 0x278 (LPT2_. ) и т.д. ни чего не происходит. Их просто нет! А вот программа котороая работает через API вызовы ни чего не заметит — вся низкоуровневая работа делается драйвером, а каким драйвером и куда пойдут пакеты данных (в реальный порт ввода-вывода или в USB хост-контроллер) — приложению неважно! Попробуйте открыть свойства «псевдопорта» в диспетчере устройств. Нет вкладки с ресурсами? Есть, но там каие-то неадекватные значения или вкладка деактивировнна? В том то и дело.

ИТОГО: С вероятностью 99% купленный Вами переходник USB-LPT не сможет обеспечить Вам работу на низком уровне с пинами этого порта.

Почему 99%? Потомоу что есть самодельниые USB-LPT переходники, которые определяются Windows как полноценный порт LPT1 и ему присваивается вполне обыденный адрес 0x378. Обращения на прямую к пинам порта проходят успешно! Однако это очень нестандартная конструкция (в первую очередь драйвер, который занимается перехватом обращений по базовому адресау порта LPT1). Все это не очень надежно (обновление ОС — и конструкция теряет работоспосбность) и для использования рекомендовано быть может только с натяжкой.

И что тагда делать?

Как ни покажется странным — решение ЕСТЬ. Вы всегда сможете добавить настоящий LPT порт в свой настольный компьютер или ноутбук. Во-первых, забудте сразу о переходниках с интерфейсом USB. Для решения этой задачи необходимо приробрести PCI-LPT переходник для настольного PC (необходимо наличие свободного PCI слота) или PCMCIA-LPT переходник для ноутбука (см. фото ниже).

В случае использования этих устройств ни каких проблем нет. Определяются они как настоящие «родные» LPT порты. Соответствующая запись будет добавлена в диспетчер устройств во вклдаку «LPT/COM порты». Прямое обращение к пинам порта будет работать.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector