Не работает pci lpt контроллер

Обновлено: 03.07.2024

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

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

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

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

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

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

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

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

Список экспортируемых функций библиотеки 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

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

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

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

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

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

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

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

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

Прошу помощи в решении данной проблеммы.

Попробуйте в настройках BIOS(для Award - PnP/PCI Configurations) выставить прерывание(зарезервировать) на той шине PCI, на которую "посажен" контроллер, такое прерывание IRQ, которое свободное в вашей системе. На остальных шинах PCI резервирование прерываний отключите. Может и поможет.

Неисправности комьютеров Как найти дефект в компьютере Сигналы BIOS и POST Прошивка BIOS компьютера Схемы компьютеров и их блоков

Какие типовые неисправности в компьютерах?

Профессиональные мастера как правило знают все типовые дефекты и виды их проявления. Тем не менее кратко перечислим проявления для тех кто впервые попал на страницы форума:

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

Как найти неисправный элемент?

В двух словах не возможно указать всю методику поиска неисправности. Во первых необходимо определить неисправный блок. Для этого требуется понимать аппаратное устройство ПК, взаимную связь его отдельных блоков(модулей) внутри системного блока либо внешних устройств:

  • Блок питания
  • Материнская плата
  • Процессор
  • Оперативная память
  • Жёсткий диск
  • Видеокарта
  • Звуковая карта
  • DVD-привод
  • Внешние устройства

Что такое сигналы BIOS и POST?

Большинство мастеров знают, что БИОС-ы cовременных компютеров производят самотестирование при включениии. Обнаруженные ошибки сигнализируют звуковым сигналом и через внутреннюю программу POST (англ. Power-On Self-Test) — самотестирование при включении.

Как перепрошить BIOS?

Существует три основных способа обновления БИОС материнской платы:

  1. внутренним ПО самого БИОС-а
  2. специальной утилитой из DOS или Windows
  3. прошить чип БИОС-а программатором

Где скачать схему компьютера?

На сайте уже размещены схемы и сервисные мануалы. Это схемы на блоки питания, материнские платы, различные интерфейсы, и прочие. Они находятся в самих темах и отдельных разделах:

vladik, ссылка скрыта от публикации может сгодится. Попробуйте в настройках BIOS(для Award - PnP/PCI Configurations) выставить прерывание(зарезервировать) на той шине PCI, на которую "посажен" контроллер, такое прерывание IRQ, которое свободное в вашей системе. На остальных шинах PCI резервирование прерываний отключите. Может и поможет.

Дело в том что в моём BIOSe на данной вкладке присутствует только один пункт: PLUG & PLAY O/S YES/NO и больше ничего!

Добавлено 28.12.2008 19:48

vladik, ссылка скрыта от публикации может сгодится.
Это драйвер для принудительного открытия порта LPT из-под Windows XP, не более того! Мне же нужно задать контроллеру стандартные адреса и стандартное прерывание для LPT. vladik, как вариант поменяй контроллер в фирме, раз они уверяли, что все ОК. vladik, как вариант поменяй контроллер в фирме, раз они уверяли, что все ОК.
Вопрос в том, на что менять! Я звонил их менеджеру, грят- привозите мы вам вернём деньги если он не работает у вас.
Получается- что брать I-152 как у Олег77 и идти по его стопам?

Покопавшись в инете нашёл даташит на микросхему NM9805, на которой собран данный контроллер. Выяснил, что есть 2 варианта конфигурирования- с внешней EEPROM и без таковой. На моей плате её не было, пришлось установить, предварительно запрограммировав установками по умолчанию (согласно даташиту) и активировать обращение к ней удалением резистора. Но ситуацию это не изменило. Может я чего то упустил. Выкладываю даташит на неё, может кто то подскажет правильное решение. Заранее спасибо!

ссылка скрыта от публикации

На свой страх и риск

nessy, если бы ты ещё подробно пояснил как это сделать, то я был бы тебе премного благодарен! Так , к свадению: у меня тоже программатор не работает на PCI-LPT.
На встроенный в материнке -- все без проблем.
Похоже это у них (PCI-LPT) у всех такая болячка.

Я в английском не силен но

Simply copy io.dll, io.ini and inpout32.dll to the directory that contains the current io.dll. Open io.ini and change the default address (0x378) to the base address of your parallel port. Now run your software as normal.

Автор применял для программатора willem, пишет что нужно просто заменит в папке с софтом программатора родной io.dll на тот что он предлагает.
Твой программатор пользует io.dll?

nessy, дело в том что процедура обращения к портам находится в теле программы в конкретно моей программе. И этот способ с созданием INI файла не проходит тут. Стандартные адреса адаптеру никак не назначишь,на шину pci помоему они не отображаются, только если софт работает через драйвер обмануть можно.

Вопрос в том как обмануть. Мой драйвер может открыть доступ к любому порту, который я ему укажу, но толку нет- сама программа программатора обращается непосредственно к адресам одного из стандартного LPT порта! И видеть адреса EC00h она не в состоянии, даже если внешний драйвер открыл туда доступ (что реально проверял тестовой программой).

Попробую взять карточку на чипе NM9835, для неё есть программа (прикладываю) которая позволяет сделать переназначение адресов.

P.S> Интересно, что при установке под чистым DOS'ом можно сконфигурировать порт на любой адрес, в том числе и на стандартный, и всё прекрасно работает, но неприемлемо хотя бы только потому что параметры этой конфигурации при каждой перезагрузке надо снова указывать.

Добавлено 30.12.2008 01:25

Вот файл,позволяющий сконфигурировать карточку на чипе 9835, завтра попробую если найду её.

Итак,только сегодня смог взять карточку на чипе NM9835. Удалось заставить с помощью вышеприведённой программы присвоить виртуальному LPT-порту адрес 278h, после чего его увидела программа программатора (с адресами 378h и 3BCh упорно не хотела, какие бы настройки в системе и оболочке программатора я не выставлял), но читает-пишет с ошибками, и тест программатора тоже не проходит. Драйвера скачивал и ставил разные, не помогает.

Снова жду дельного совета (кроме естесственно замены материнки на более дешёвую но с LPT).

vladik, если программатор работает напрямую с регистрами порта не по проторолу LPT, то эмуляция наверно не поможет, разве, что писать свой драйвер ( поробуй с разными режимами LPT (нормал, EPP, ECP)) А есть ли возможность менять прерывание у этого контроллера ?

Владик,проблему с NETMOS 9835 я решил,читал все посты,но делал ошибки,внимательно в файле INI прописывай адрес,ОРАНЖ РАБОТАЕТ,ПРОВЕРЕНО,материнка
такая же,прикладываю файл,смотри.Language=1
Path=
Port=0xdbf8

lesnick77, спасибо за ответ! Свою проблемму я решил ещё проще- связался с разработчиками программатора и попросил в новой версии управляющей программы сделать возможность задания произвольного адреса порта, это помогло. Привет.У меня та же фигня.Не могу программатором пользоваться на своей материнке,у неё родной лпт выгорел ,вот купил такую же штучку,только ST-LAB I400 на MCS9865.Не могу изменить прерывания в винде,а программа программатор не видит новый лпт(старый я отключал и включал).Не подскажете как и куда обратиться,или может есть решение проблемы?:-)Заранее благодарю вас Та же проблема , но ST-LAB I420 на MCS9865. Подскажита утилита NetMosLptRedir подойдет для смены адреса??Может еще что-то есть подобное??

Я купил PCI I / O с ET3632 чип MC9865. 1V После установки драйвера я могу поменять только номер LPT а другое не возможно
утилита NetMosLptRedir непонятно какой адрес поставить в окне, пробовал Windows7 и Windows XP SP2 результат везде одина
ковый никакой ,
В таблице (Device Manager)
E000-E007
D800-D807
Memory-FEB8B000 FEBFBFFF
Memory-FEBFA000 FEBFAFFF

Мне нужно I / O 387-037F
IRQ-07

Generally most of the Security Dongles / Scanners / Programming Software’s expect the parallel port to use port number as LPT1 or port to be use Legacy IO Addresses. We can change Parallel port number, but it is not possible to change IO Address of MCS9865 Parallel port if you are using Windows NT / 2000 / 2003 server / XP / Vista / Windows7 and Linux operating systems. Because Windows maintain a much tighter control over the I/O devices and prevent any Re-Mapping at Driver level. So the device must use the Addresses assigned by the PCI System at Boot-Up.

The Procedure to change LPT port number:

1. Go into the Device Manager.

2. Right click on the MosChip parallel port and click on “Properties” (under Ports COM & LPT).

3. Go to "Port Settings" tab in the Properties page, you can see the option to change the LPT Port number. (Please refer the attached Screen Shot)

4. Select the LPT number and press OK.

Let us know if you need any further clarifications.

Bhanu Chaitanya CH

Я так понял , что назначение адреса порта зависит от материнской платы -какой адрес даст тот и будет.

Я решил подобную проблему. Под WMware поставил XP. А под ней уже запускаю софт, которому нужны правильные адрес и прерывание LPT. WMware их корректно эмулирует.

Неисправности комьютеров Как найти дефект в компьютере Сигналы BIOS и POST Прошивка BIOS компьютера Схемы компьютеров и их блоков

Какие типовые неисправности в компьютерах?

Профессиональные мастера как правило знают все типовые дефекты и виды их проявления. Тем не менее кратко перечислим проявления для тех кто впервые попал на страницы форума:

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

Как найти неисправный элемент?

В двух словах не возможно указать всю методику поиска неисправности. Во первых необходимо определить неисправный блок. Для этого требуется понимать аппаратное устройство ПК, взаимную связь его отдельных блоков(модулей) внутри системного блока либо внешних устройств:

  • Блок питания
  • Материнская плата
  • Процессор
  • Оперативная память
  • Жёсткий диск
  • Видеокарта
  • Звуковая карта
  • DVD-привод
  • Внешние устройства

Что такое сигналы BIOS и POST?

Большинство мастеров знают, что БИОС-ы cовременных компютеров производят самотестирование при включениии. Обнаруженные ошибки сигнализируют звуковым сигналом и через внутреннюю программу POST (англ. Power-On Self-Test) — самотестирование при включении.

Как перепрошить BIOS?

Существует три основных способа обновления БИОС материнской платы:

  1. внутренним ПО самого БИОС-а
  2. специальной утилитой из DOS или Windows
  3. прошить чип БИОС-а программатором

Где скачать схему компьютера?

На сайте уже размещены схемы и сервисные мануалы. Это схемы на блоки питания, материнские платы, различные интерфейсы, и прочие. Они находятся в самих темах и отдельных разделах:

VMware создаёт виртуальную машину(виртуальный компьютер) в котором эмулируются порты со стандартной адрессацией.

спасибо обязательно попробую

вот нашёл для PonyProg конечно LPT ещё пока не проверил, но после этого в программе его можно увидеть, изменить

А что скажите по этому поводу
_ ссылка скрыта от публикации /
это только для HASP или пойдет для всего?? Кто пробовал??

Не знаю актуальна будет информация или нет.
По настройке порта и прерывания метод должен работать. Проверить не могу.

И так принцип такой:
заходим в BIOS и отключаем PLUG & PLAY на плате
Теперь распределение прерываний и портов ну и других ресурсов занимается операционная система.
теперь загружаемся в Windows. Заходим в диспетчер устройств.

1. Посмотрим распределение ресурсов. Заходим Верхнее меню/Вид/Ресурсы по типу.
появятся все ресурсы аппаратуры.
Нас например интересуют прерывание 7. Открываем ветку IRQ и смотрим кому принадлежит прерывание 7.
возможны два варианта: 7 нету в списке и и есть строка 7 и название устройства
если нет 7 переходим к шагу 3.
если прерывание 7 принадлежит нашему устройству, то хорошо, ничего делать не надо.

2 Освободить прерывание от не правильного устройства
Итак мы знаем название устройства, которое нам необходимо отключить от прерывания. на нем нажимаем правую кнопку мыши и заходим в Свойства.
Идем в кладку Ресурсы и видим, что это устройство действительно занимает наше прерывание
Встаем на строку IRQ7 убираем галку с пункта "Автоматическая настройка" и начинаем перебирать конфигурации (должно поменяться IRQ) или нажимаем на кнопку изменить и выбираем нужное прерывание, в этом режиме в низу видим есть конфликты (то есть не занято прерывание). Кстати если все прерывания заняты, то можно освободить его выполнив 1 и 2 пункты.
Если пункт автоматическая настройка и кнопка Изменить не активны ( серый цвет) то или драйвер не позволяет менять или микросхема не поддерживает замену
ну тут я ван ничем не помогу.

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

Аналогично выставляются порты и другие ресурсы.
Как уже говорили в биос может быть привязка ресурсов к плате, ее тоже надо бы правильно настроить.
я раньше таким способом звуковую карту настраивал (там тоже должны быть определенные прерывания, порты и DMA)

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

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

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

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

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

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

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

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

Список экспортируемых функций библиотеки 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

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

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

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

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

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

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

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

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

Читайте также: