Главная » Файлы » Разное

Переходник USB-LPT
12.09.2012, 15:02
Сейчас стационарных PC с LPT портом нужно поискать (т.е. далеко не каждая "материнка" сейчас идет в комплекте с LPT портом). Про ноутбуки вообще говорить не приходится. Современные модели LPT порт вообще не применяют. Только очень дорогие и специализированные машины, типа DEll, могут "похвастаться" наличием этого порта.

А так, как мне нужен был LPT порт, я нашел сей девайс:




Очень простой в повторении конвертер USB - LPT. Это клон версии 1.5 на односторонней печатке. Он может подойти для программирования микросхем ISP, JTAG, SEEPROM, управлять примитивной автоматикой, не критичной к скорости работы. Оригинальная схема нарисована мутно, а по сути - элементарная. Если проанализировать, то схема упрощается до безобразия - три резистора на входе с USB, и 15 выводов на LPT. Кварц в стандартном включении.

Если при правильной прошивке комп не определит нового устройства, то резистор R3 поменяйте на 1.5кОм и а для надежности нужно понизить питающее напряжение до 3,3...3,6V (как в исходной схеме).



Топология печатки версии 1.5.



Спаяли, прошили через тот же LPT. После прошивки перерезали проводник между RESET(1) и PC2(25). Включили внешний кварц (для этого проекта hfuse=0x89 lfuse=0xAE)

Воткнули шнур в USB - ура! Установили драйвера... 
Устройство работает, но очень медленно...

А если всё работает, а записать ничто через него нельзя, то читаем дальше...

Инструкция гласит что этот прибор полностью совместим с различными принтерами, сканерами и т.д. Подключаем переходник к USB порту, устанавливаем драйвера. Смотрим диспетчер устройств - да там действительно появился некий LPT порт, например LPT2. Ok. Пробуем запустить какой-нибудь пример из статей выше. И ни тут то было - ни чего не работает. Грамотный читатель вдруг вспомнит что LPT2 имеет базовый адрес ввода-вывода 0x278. Однако такая модернизация адреса в запросах ни к чему не приводит - светодиоды как не загорались так и не загораются.

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



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

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

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

Материал брал с:

1. Оф. сайт: сюда тут и прошивка

2. www.pcports.ru
Категория : Разное | Добавил : Stalker753 | Теги : Переходник, USB - LPT
Просмотров : 9455 | Загрузок : 0 | Рейтинг : 0.0/0
Всего комментариев : 0
avatar
Яндекс.Метрика
24 log 24 LOG statistick
счетчик посещений
Если вы видите это,
то ваш браузер устарел
и не поддерживает технологий
CSS 3.0