Драйвера для lpt usb кабеля

Драйвера для lpt usb кабеля

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

«У меня в компьютере (ноутбуке) нет 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 порты». Прямое обращение к пинам порта будет работать.

Источник

Драйвер для работы с LPT портом (интегрированным или в виде платы PCI)

Лет 10-15 назад параллельный порт был довольно востребованным интерфейсом для связи между устройствами. Сегодня производители различных устройств отдают предпочтение последовательным интерфейсам. Тем не менее, и сегодня LPT порт всё ещё можно встретить. А некоторые разработчики ещё пишут под него программы (или поддерживают написанные во времена расцвета параллельных интерфейсов). Но в компьютерах сейчас LPT порт – достаточно большая редкость. Существуют, конечно, платы расширения для компьютера, которые реализуют интерфейс LPT. Они в основном представляют собой платы на шине PCI. К сожалению, далеко не весь софт, который был написан для интегрированных в материнскую плату LPT портов, будет работать с LPT-PCI-платами.

Предлагается решение этой проблемы: программный класс, написанный под .NET, и динамическую библиотеку, которая работает с LPT. Данная реализация проверена на 32- и 64-разрядных Windows XP, Windows 7, 8 и 10 как со встроенными LPT портами, так и реализованными в виде плат расширения на шине PCI или PCI-Express. Скачать драйвер для LPT порта можно по ссылке внизу после статьи.

1 Установка драйвера для работы с LPT портом

В приложенном архиве находятся две папки – для 32-разрядной и для 64-разрядной версий Windows. В одной из папок лежит файл InstallDriver.exe. Сначала запустите этот файл, он установит динамические библиотеки в систему. После этого компьютер следует перезагрузить.

Чтобы использовать предлагаемый драйвер, файлы inpout32.dll и inpoutx64.dll должны располагаться в одной директории с исполняемым файлом вашей программы.

2 Программный класс использования библиотек работы с LPT портом

Мной был написан класс для .NET, который использует динамические библиотеки inpout32.dll и inpoutx64.dll и позволяет считывать из параллельного порта и записывать в его регистры данные.

Упомянутые библиотеки написаны не мной. Я предлагаю удобный класс-оболочку, упрощающий работу с данными библиотеками. Кроме того, автор библиотек в файле readme.txt сообщает, что его драйвер не поддерживает PCI устройства. Мне удалось его запустить для работы как с интегрированным параллельным портом, так и LPT портом, реализованном в виде платы расширения на шине PCI-Express. Причём порт отлично работает и на современной Windows10 x64, и на более старых системах.

Вот код класса LPT на языке VB.NET:

Код класса LPT на языке VB.NET (разворачивается)

Код класса LPT на языке C#:

Код класса LPT на языке C# (разворачивается)

3 Применение класса .NET для работы с LPT портом

Если мы посмотрим на список экспортируемых функций библиотеки inpout32.dll с помощью замечательного инструмента DLL Export Viewer от NirSoft, то увидим следующую картину:

Список экспортируемых функций библиотеки inpout32.dll

Это список функций, которые мы можем использовать. Фактически все они используются в классе LPT, но реализация скрыта, и из публичных методов пользователю доступны только два метода и одно свойство (они рассматриваются чуть далее).

При инстанцировании класс сам определит, библиотеку какой разрядности ему использовать – inpout32.dll или inpoutx64.dll. Поэтому от пользователя не требуется никаких действий по инициализации или определения разрядности используемой dll. Вы можете сразу записывать или читать из LPT порта. Одно «Но»: если драйвер не установлен, обращение к любому из методов динамической библиотеки вызовет исключение, поэтому рекомендую использовать блоки Try…Catch для перехвата и обработки исключений.

Несколько примеров использования класса LPT.

Для определения, используется ли 64-разрядная версия драйвера (inpoutx64.dll при True) или 32-разрядная (inpout32.dll при False) (на самом деле, это знать не обязательно, класс использует именно ту библиотеку, которая нужна, но вдруг вам для чего-то понадобится это узнать из своей программы):

Для записи числа «123» в регистр контроля LPT порта вызовите из своего класса:

Для чтения одного байта из регистра данных LPT порта и чтения регистра статуса:

Здесь currentPortадрес LPT порта. Причём, если у вас интегрированный LPT порт, то его адрес будет, скорее всего, 378h. А если у вас LPT порт на плате расширения, то адрес будет другой, например, D100h или C100h.

Чтобы узнать адрес LPT порта, зайдите в диспетчер устройств Windows, найдите раздел Порты COM и LPT, выберите используемый параллельный порт, и в окне свойств (щёлкнув по нему правой кнопкой мыши) посмотрите, какие ресурсы использует выбранный порт (необходимо брать первое значение из диапазона).

Ресурсы, используемые LPT портом, в диспетчере устройств Windows

Например, в данном случае необходимо использовать номер порта C100.

Скачать вложения:

Поделиться

Похожие материалы (по тегу)

Другие материалы в этой категории:

8 комментарии

Вы не подскажете,что дальше делать? Я скачал visual C , скопировал ваш код для С# и вставил. но при отладке выдает ошибки. Например такое: Ошибка 1 Элемент «ProjectData» не существует в текущем контексте. C:\Users\Роман\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 71 17 ConsoleApplication1
Я ни бум-бум. Но мне нужно изменить аддресацию для Pci-LPT платы St-lab i400 Parallel Port. Там значения нестандартные прописались D090-D097. Что делать? Хотелось бы иметь возможность активировать этот код

Роман, а что значит скачал «Visual C»? Дело в том, что нужна подходящая среда разработки (IDE), например, Visual Studio или Visual Studio Code. Какую вы используете? Конкретно по ошибке «Элемент «ProjectData» не существует в текущем контексте» я вам не подскажу. Скорее всего дело в настройках проекта, это уж смотрите сами. Попросите кого-то более опытного помочь настроить IDE. Код рабочий, 100%. Мне по работе приходится иметь дело со старым оборудованием, и я успешно использую его. Только я использую VB.NET, а код на C# получил путём декомпиляции готовой сборки. Попробуйте использовать код на VB.NET. Он к тому же проще для понимания новичкам.

Привет! Я понял, что я не то что-то делаю. Я попробую то что вы советуете — среду vb.net. Мне только главное знать,поможет ли это мне запустить старый лпт сканер 98 года: canoscan fb320p. Так как сканер отказывает работать с нестандартными адресами порта. Пока что единственный способ каким мне удалось решить эту проблему, это установка vmware player — добавление виртуального lpt, которому автоматом присваиваются правильные адреса и сканер тут же реагирует и начинает работать. Только есть в этом одна проблема: очень медленно! Минут 20-30 занимает сканирование 300 точек. Хотелось бы как-то решить эту проблему без vmware, но вот думаю, поможет ли этот код, так как я в описании функций не вижу там инструкций для смены аддресации.

Мне кажется, что для решения вашей задачи со сканером это решение не подходит, и запустить старый сканер не получится. Потому что придётся самому переписывать софт для сканирования. Ваша задача должна решаться как-то на уровне драйвера порта или той программы, которая используется для сканирования. Может быть, есть обновлённые драйверы для сканера с возможностью указывать адрес порта. А может проще найти старый комп, где на материнке присутствует LPT. Кстати, Asus до сих пор выпускает материнские платы с LPT под более-менее современные процессоры, например, модель H81M-C.

Спасибо тебе, добрый человек. Установка этого драйвера и замена inpout32.dll в директории исполняемой программы, помогли запустить софт, который ранее работал только на Win XP из под Win 10×64

Василий, рад, что помог!

В программировании я не разбираюсь. Есть такая проблема: для прошивки контроллеров AVR раньше использовал программатор AVReal. Он быстро и качественно работает. Покупая новый компьютер я специально искал материнку с LPT портом. Однако в Win10-64бит старые драйвера ввода-вывода не работают и они должны иметь цифровую подпись. Соответственно получаю сообщение об ошибке при использовании программатора. У меня вопрос: можно ли с Вашим драйвером LPT порта решить эту проблему? Какие шаги по установке и использованию я должен выполнить? Если не сложно, скиньте ответ на мою почту

Источник