У дома Многогодишни цветя Драйвер за работа с lpt порт. Портове (COM и LPT). Инсталиране на драйвер за работа с LPT порт

Драйвер за работа с lpt порт. Портове (COM и LPT). Инсталиране на драйвер за работа с LPT порт

Cooltek представи още една новост на пазара - калъф в средата на кулата, наречен GT-04. Моделът съчетава изключителни характеристики като функционалност, ергономичност, стилен дизайн и атрактивна цена (59,99 евро). Шасито е завършено в изцяло черно с ярки оранжеви/зелени акценти отпред. Тук са представени и чифт кошници за 5,25 "оптични устройства и 3,5" гнездо за устройства.

Кутията Cooltek GT-04 (оранжево/зелено) е оборудвана със страничен прозорец, който отваря изглед към компонентите на системата. ...

Kingston Technology, водещ производител на памет за компютри с дълга история на пазарен успех, обяви нови модули памет в чест на десетата годишнина на продуктовата линия HyperX. Забележителна характеристика на новите продукти е черната печатна платка, използвана в семействата HyperX и HyperX Beast, както и наличието на уникален топлоразпределител, който значително подобрява разсейването на топлината.

Част от гамата на Predator, серията HyperX Beast с черна печатна платка се отличава с огромен капацитет за съхранение и максимални работни честоти. В търговията на дребно модулите ...

Изключително за любителите на монтирането на система от чисто бели компоненти, CORSAIR добави механизми в тази цветова схема към добре познатата серия захранвания CORSAIR RMx. В допълнение към корпуса на самия източник, изцяло модулните кабели са получили бял цвят, а наличието на малък брой черни компоненти придава модерен вид на новите механизми, подчертавайки контраста.

Всички варианти на линията CORSAIR RMx White имат висококачествена елементна база (включително чисто японски високотемпературни кондензатори ...

С този проблем се сблъскват всеки, който се опитва да свърже всякакви устройства към LPT порта. Веднага щом кажете на програмата "използвайте LPT", ще получите грешка - тя е отразена на екранната снимка вдясно. Така че нека се опитаме да го разберем и да го поправим.

Попаднах на него, когато добавях контролна платка с 1-LPT и 2-COM порта. Имаше определена нужда от това - свързване на Band-декодер RU -005A. Това ще бъде обсъдено в следващата статия. Междувременно бих искал да получа правилно работещ LPT -порт в Win -Test под Windows-7 (64 bit).

Съвременните компютри отдавна не включват паралелен порт. Като алтернатива можете да поставите допълнителен контролер в него. Не се плашете от тази дума, в нея няма нищо ужасно. Причината за възникването на горната грешка е проста - драйверите и библиотеките на DriverLINX (DLPortIO.sys + DLPortIO.dll) не съществуват за версии на Windows за x86-64 архитектура (AMD64, Intel64). Разработчикът Scientific Software Tools Inc спря да поддържа драйвера, като го прехвърли на друга компания и те спряха само на 32-битовата версия. Macrosoft вдига рамене и го изпраща на производителя. Въпреки това има добър комплект - това е InpOut32 (hwinterface.sys + inpout32.dll) и дори 64-битова версия на InpOutx64 с драйвер hwinterfacex64.sys.

Нека да преминем от теория към практическа реализация. В наличност:

  • Win-Test версия 4.10, актуализирана до Ревизия: 524 от 13 юли 2013 г.
  • Windows 7 Ultimate (64 бита) с всички актуализации.
  • Intel Core i7-3770 (3,4 GHz) + PC3-10700 (667 MHz) 8x2 = 16 Gb + Asus P8Z77-V LX
  • Контролер * PCI COM / LPT (2 + 1) порт WCH353 насипно

Инсталиране на контролера

Самият контролер не е нищо интересно по същество и името му дава почти пълна представа - два COM и един LPT порт, инсталиран е в PCI. Самото устройство е евтино и струва 360 рубли (около $12), произведено в Китай.

Опаковката беше OEM. Комплектът включва два контура с COM портове на скобата и диск с уж драйвери. Не съм ги инсталирал, както вече знаех предварително - не стават. Всички пътища водеха до уебсайта на производителя. За всеки случай давам линк и пускам същия драйвер в архива.


Процедурата за инсталиране на контролера не предизвика проблеми - всичко е доста просто. Изключете компютъра, инсталирайте го в свободен PCI слот, включете го, инсталирайте драйвера. Комплектът включва инсталатор. Неговият интерфейс не е сложен и ясен. Всичко мина при автоматичното откриване на типа карта и беше достатъчно да щракна само Install driver. Процесът на инсталиране е придружен от движеща се лента на интерфейса, всичко е много ясно.

Програмата ви позволява да преназначавате портове, ако е необходимо. Например, ако има виртуални COM портове. За да направите това, след инсталирането щракнете върху About и бутона Modify Port Name.

Горните скрийншоти не се нуждаят от специални коментари, щракнете и снимките ще станат по-големи. Всичко е във ваши ръце - конфигурирайте новите портове по ваша преценка и според вашите нужди.

Краят на факта, че инсталацията е била успешна, трябва да бъде наличието на тези устройства в диспечера на устройства на компютъра. Отидете там и проверете. В моя случай вече имаше интегриран COM-порт на дънната платка (е, имам нужда от него). Съответно списъкът с пристанища е както следва:

Възможно е да трябва да знаете адреса на този порт и да го посочите правилно в настройките на програмата, където ще се използва този порт. По подразбиране адресите на портовете трябва да са както следва:

LPT -1 - 378

LPT -2 - 278

LPT -3 - 3BC

В нашия случай те ще се различават от обичайните стойности, т.к тези портове не са интегрирани на дънната платка и начинът за комуникация с тях е чрез PCI шината. В моя вариант се оказа D 010(използваме първата стойност). Ето защо, преди да инсталирате (купите) такъв контролер, вижте дали вашата програма има възможност да задава други I/O диапазони.

Независимо от това, драйверите включват малка помощна програма, която ви позволява да преназначавате такива адреси (не го разбрах, няма нужда).

Преди около 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 шината. Освен това портът работи добре на съвременните Windows 10 x64 и на по-старите системи.

Ето кода за класа LPT във VB.NET:

Код на клас VB.NET LPT(разгъва се) Импортира System.Runtime.InteropServices "" " "" "Работа с LPT порт. При създаването той определя наличието на драйвер и избира подходящата библиотека." "" Public NotInheritable Class LPT #Region "CONST" Public Const DLL32 As String = "c: \ temp \ inpout32.dll" Public Const DLL64 As String = "c: \ temp \ inpoutx64.dll" Public Const DLL32DRV As String = "c: \ temp \ inpoutx32drv.dll "" "" "" "Регистри на паралелен порт." "" Public Enum регистър като цяло число "" " "" "Регистър на данните за SPP / EPP." ""ДАННИ = 0 "" " "" "Регистър на състоянието на SPP / EPP." ""СТАТУС = ДАННИ + 1 "" " "" "Регистър за управление на SPP / EPP." ""КОНТРОЛ = ДАННИ + 2 "" " "" "Регистър на EPP адреси. Четенето или записването в него генерира свързан цикъл на четене или запис на EPP адрес." "" EPP_АДРЕС = ДАННИ + 3 "" " "" "Регистър на EPP данни. Четене (Запис) генерира свързан цикъл на четене (запис) на EPP данни." "" EPP_DATA = ДАННИ + 4 "" " "" "Регистър за активиране на режим EPP." "" """ "" "Ако е само смесено" ECP + EPP "или" Extended "- най-вероятно все още ще трябва да пишете в ECR порт байт 0x80" "" (ECR е регистърът на ECP режим, ECR = BASE_ADDR + 0x402, BASE_ADDR е основният адрес на LPT -порт "" " ECR = DATA + & H402 "TEST End Enum #End Region" / CONST #Region "DllImport" Частна споделена функция IsInpOutDriverOpen () Като функция за край на байта Частна споделена функция IsInpOutDriverOpen_x64 () Като UInt64 Крайна функция Частна споделена функция Inp32 (PortAddress като UInt32) Като функция за край на байта Частен споделен Sub Out32 (адрес на порт като UInt32, данни като UInt32) Краен под Частна споделена функция Inp64 (PortAddress като UInt64) Като функция за край на байта Private Shared Sub Out64 (PortAddress като UInt64, Data As UInt64) End Sub #End Region "/ DllImport #Region" CTOR "" "" "" "Проверява дали може да се използва драйверът x86 или x64. Ако не, хвърля "драйверът не е инсталиран "изключение." "" Shared Sub New () Dim x86 As Boolean = CheckIsDriverX86 () Dim x64 As Boolean = CheckIsDriverX64 () If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else End Throw не е инсталиран SubDrive (Драйвът е инсталиран) "" " "" "Инициализация на порт - настройка XXXX0100" b в контролния регистър. "" " Private Shared Sub InitLpt (порт като Ulong) Запис (порт, Register.ECR и H80) Запис (порт, Register.CONTROL и H4) End Sub #End Region "/ CTOR #Region" PROPS "" "" "" "Дали се използва 64-битова версия на драйвера." "" Ако драйверът не е инсталиран, се връща NULL. "" "Обществено споделено свойство само за четене IsX64Driver се използва като булев? Get Return _IsX64DriverUsed End Get End Property Private Shared Само за четене _IsX64DriverUsed като булев? = Нищо #End Region "/ PROPS #Region" МЕТОДИ "" "" "" "Определя дали драйверът е 32-битов." ""Частна споделена функция CheckIsDriverX86 () Като Boolean Опитайте Dim res As Byte = IsInpOutDriverOpen () Върнете True Catch ex като изключение Върнете False End Try End Function "" " "" "Определя дали драйверът е 64-битов." ""Частна споделена функция CheckIsDriverX64 () Като булева Опитайте Dim nResult Като ULong = IsInpOutDriverOpen_x64 () Връщане (nResult<>0) Catch ex Като изключение Връщане False End Try End Function #End Region "/ METHODS #Region" Четене / запис на LPT порт "" "" "" "Чете 1 байт данни от посочения регистър на LPT порт." "" """ Номер на пристанище. """ Регистър на пристанището.Публична споделена функция Четене (порт като ULong, по избор рег. като регистър = регистър.ДАННИ) Като байт Дим данни като байт = 0 Ако се използва IsX64Driver, тогава данни = Inp64 (CULng (порт + рег.)) Други данни = Inp32 (CUInt (порт + рег.) )) Край Ако Връщане на данни Край Функция "" " "" "Записва номер в посочения регистър на LPT порта." "" """ Адрес на пристанището. """ Регистър на пристанището. """ Обществено споделено подзаписване (порт като ULong, reg като регистър, данни като ULong) If IsX64DriverUsed then Out64 (port + CULng (reg), data) Else If (данни<= UInteger.MaxValue) Then Out32(CUInt(port + reg), CUInt(data)) Else Throw New ArgumentException("В 32-разрядных системах аргумент должен быть 32-разрядным (тип UInt32).", "data") End If End If End Sub #End Region "/Read / Write LPT Port """ "" "Тестове за наличието на LPT порт на посочения адрес." "" """ Адрес на паралелен порт.Публична споделена функция CheckPortPresent (lptAddress As ULong) As Boolean Dim portPresent като Boolean = False Опитайте InitLpt (lptAddress) Dim data As ULong = Read (lptAddress, Register.DATA) "запазване на текущата стойност на регистъра на данните"? Запис (lptAddress, Register.DATA и H0) portPresent = portPresent И (& H0 = Четене (lptAddress, Register.DATA)) Запис (lptAddress, Register.DATA и H55) portPresent = portPresent И (& H55 = Четене (lptAddress) , Register.DATA )) Write (lptAddress, Register.DATA, & HAA) portPresent = portPresent И (& HAA = Read (lptAddress, Register.DATA)) Write (lptAddress, Register.DATA, data) "възстановява предишната стойност на регистъра на данните" Проверете наличието на контролни регистри и If (Not portPresent) Тогава данни = Четене (lptAddress, Register.CONTROL) portPresent = ((данни<>0) И също (данни<>& HFF)) "Не е празен? => Наличен порт. Ако (не е порта сега) Тогава данни = Четене (lptAddress, Register.STATUS) portPresent = ((данни<>0) И също (данни<>& HFF)) Край, ако Край, ако Catch ex Като изключение Върни False Край Опитай Връщане на портНастоящ край Функция Край клас "/ LPT

Код на клас LPT в C #:

Код на клас LPT в C #(разгъва се) с помощта на System; използване на System.Diagnostics; използване на System.Runtime.InteropServices; namespace LPTIO (/// Клас за работа с LPT порт. Когато е създаден, той определя наличието на драйвера и неговата битова дълбочина. обществен запечатан клас LPT(private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Дали се използва 64-битовата версия на драйвера. public static bool IsX64DriverUsed (получи (връщане на LPT._IsX64DriverUsed ;)) статичен LPT ()(ако (LPT.getIsDriverX86 ()) (LPT._IsX64DriverUsed = false;) иначе (ако (! LPT.getIsDriverX64 ()) хвърли ново SystemException ("Драйверът за LPT порта не е инсталиран."); LPT._IsX64DriverUsed = true;) ) публичен LPT () () частен статичен външен байт IsInpOutDriverOpen (); частен статичен външен ulong IsInpOutDriverOpen_x64 (); частен статичен външен байт Inp32 (uint PortAddress); частен статичен външен void Out32 (uint portAddress, uint данни); частен статичен външен байт Inp64 (ulong PortAddress); private static extern void Out64 (ulong PortAddress, ulong Data); /// Определя дали драйверът е за 32-битов Windows. частен статичен bool getIsDriverX86 ()(bool флаг; опитайте (LPT.IsInpOutDriverOpen (); флаг = true;) улов (Exception ex) (ProjectData.SetProjectError (ex); flag = false; ProjectData.ClearProjectError ();) флаг за връщане;) /// Дефинира, е драйверът за 64-битов Windows. частен статичен bool getIsDriverX64 ()(bool флаг; опитайте (флаг = Decimal.Compare (нов десетичен (LPT.IsInpOutDriverOpen_x64 ()), Decimal.Zero)! = 0;) улов (Exception ex) (ProjectData.SetProjectError (ex); флаг = false; ProjectData. ClearProjectError ();) флаг за връщане;) /// Чете 1 байт данни от LPT порта. /// Номер на пристанище. /// Регистър на пристанището. публичен статичен байт Четене (ulong порт, LPT.Register reg = LPT.Register.DATA)(връщане! LPT.IsX64DriverUsed? LPT.Inp32 (Convert.ToUInt32 (Decimal.Add (нов Decimal (порт), нов Decimal ((int) reg))))): LPT.Inp64 (Convert.ToUInt64 (Decimal.Add (нов) Десетичен (порт), нов Десетичен ((int) reg))));) /// Записва номер в LPT порта. /// Адрес на пристанището. /// Регистър на пристанището. /// Номер за писане. При 32-битови системи аргументът не трябва да е повече от максималната стойност за типа UInt32. public static void Записване (ulong порт, LPT. регистрационен номер, ulong данни)(ако (LPT.IsX64DriverUsed) (LPT.Out64 (отметнато (порт + (ulong) (uint) рег.), данни);) иначе (ако (data> (ulong) uint.MaxValue) хвърляне на ново изключение на ArgumentException ("32- на битови системи, аргументът трябва да е 32-битов (тип UInt32). "," данни "); LPT.Out32 (Convert.ToUInt32 (Decimal.Add (нов десетичен (порт), нов десетичен ((int) reg)))) , проверено ((uint) данни));)) /// LPT портови регистри. публичен enum регистър(ДАННИ, СТАТУС, КОНТРОЛ,)))

3 Използване на класа .NETза работа с LPT порт

Ако погледнем списъка с експортирани библиотечни функции inpout32.dllс прекрасен инструмент DLL Export Viewerот NirSoft, ще видим следната картина:

Това е списък с функции, които можем да използваме. На практика всички те се използват в класната стая LPT, но реализацията е скрита и само два метода и едно свойство са достъпни за потребителя от публичните методи (те са разгледани малко по-нататък).

При инстанциране, самият клас ще определи коя библиотека трябва да използва - inpout32.dllили inpoutx64.dll... Следователно не се изисква действие от потребителя за инициализиране или определяне на битността на използваното dll... Можете да четете или пишете директно от LPT порта. Едно „Но“: ако драйверът не е инсталиран, извикването на някой от методите на динамичната библиотека ще доведе до изключение, така че препоръчвам да използвате блокове Опитай да хванешза улавяне и обработка на изключения.

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

За да определите дали се използва 64-битова версия на драйвера (inpoutx64.dll ако е истина) или 32-битова версия (inpout32.dll ако е фалшива) (всъщност не е необходимо да знаете това, класът използва точно библиотеката, от която се нуждаете, но изведнъж вие за нещо, което трябва да разберете от вашата програма):

Bool is64bitDriver = LPT.IsX64DriverUsed;

За да запишете номера "123" в регистъра за управление на LPT порта, обадете се от вашия клас:

LPT.Write (currentPort, LPT.Register.CONTROL, 123);

За да прочетете един байт от регистъра за данни на LPT порта и да прочетете регистъра на състоянието:

Байт b = LPT.Read (текущ порт, LPT.Register.DATA); байт s = LPT.Read (текущ порт, LPT.Register.STATUS);

Тук currentPort - Адрес на LPT порт... Освен това, ако имате интегриран LPT порт, тогава неговият адрес най-вероятно ще бъде 378ч... И ако имате LPT порт на разширителна платка, тогава адресът ще бъде различен, например D100hили C100h.

За да намерите адреса на LPT порта, отидете в диспечера на устройства на Windows, намерете секцията COM и LPT портове, изберете използвания паралелен порт и в прозореца със свойства (като щракнете с десния бутон върху него) вижте какви ресурси използва избраният порт (трябва да вземете първата стойност от диапазона).


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

Изтеглете прикачени файлове:

  • Изтеглете драйвер за LPT порт (3281 изтегляния)

Силно препоръчваме да го опознаете. Там ще намерите много нови приятели. Това е и най-бързият и ефикасен начин да се свържете с администраторите на проекти. Разделът Antivirus Updates продължава да работи - винаги актуални безплатни актуализации за Dr Web и NOD. Нямахте време да прочетете нещо? Пълното съдържание на пълзящата линия може да бъде намерено на този линк.

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

LPT порт (Л ine П rin T er) е порт за паралелен интерфейс, който първоначално е създаден за свързване на принтер. BIOS осигурява поддръжка на LPT порт, необходима за осигуряване на изход през интерфейса Centronics. Адресното пространство на порта заема диапазона & H378- & H37F

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

Windows 2000 / XP не позволява на приложенията да имат директен достъп до I/O портове. За да направите това, трябва да използвате драйвер, който работи в режим KERNEL (в режим на ядрото на операционната система).

Ограничаването на достъпа до I/O портове за общи приложни програми (работещи в потребителски режим) прави операционната система по-стабилна. Въпреки че, от друга страна, никой не пречи на програмиста да напише драйвер, който адресира портовете.

Интересното е, че за процесор Intel x86 можете да напишете драйвер, използвайки един от двата принципно различни подхода. Първата опция е, че самият драйвер има достъп до портовете, а приложната програма само казва на драйвера какво да прави. Тази опция обикновено е стандартна и предпочитана.

За да разрешите проблема, има четири популярни опции за драйвери, които позволяват на приложна програма да има достъп до I/O портове: драйвер DLPortIO, шофьор Потребителски порт, шофьор GiveIO.sis, шофьор Порт95nt.

И четирите опции са почти равни.

DLPortIO драйвер

DLportIO - драйвер за достъп до порт от пакета DriverLINXот Scientific Software Tools, Inc. (http://www.sstnet.com) в съкратена форма (без описание и ненужна документация). За нормалната работа на програмите за поддръжка на LCD, можем да препоръчаме точно този вариант на драйвера.

Самият драйвер се състои от два компонента:
... DLPortIO.dll - Win32 DLL, който осигурява хардуерни I/O функции и
... DLPortIO.sys - драйвер за WinNT, работещ в режим на ядрото на ОС (не се изисква за Win95 / 98)

В инсталационния пакет на драйвера освен тези два компонента има и файл Install.exe, който премества двата гореспоменати драйвера в папката с драйвери на Windows и ги регистрира в системата.

Няма какво повече да се пише за този драйвер. Не се изисква конфигурация. Изтеглете, инсталирайте, използвайте. Не забравяйте да погледнете края на статията и да прочетете гаранцията за производителност на LPT порта.

Инсталацията е елементарна - стартирайте файла Install.exe, инсталирайте го. В края на инсталацията погледнете в папката C: \ Windows \ System32 \ драйвери и проверете за наличието на два файла с драйвери (DLPortIO.sys и DLPortIO.dll). Ако видим, че тези файлове не са копирани, ги вземаме от инсталационния пакет и ги копираме ръчно. Не се притеснявайте, нищо лошо няма да се случи с вашия компютър. Рестартираме компютъра и работим с LPT порта.

Ако изведнъж, в резултат на манипулиране на оборудването, получите съобщение от драйвера за следния план: "драйверът на устройството dlportio.sys не е зареден. Порт I / O няма да има ефект", не се паникьосвайте. Този проблем се отстранява по следния начин:
... Стартирайте regedit.
... Отиваме в регистъра в клона HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \.
... Променете стойността на параметъра в папката dlportio ЗапочнетеНа 1 .
... Рестартираме компютъра.

Драйвер за потребителски порт

Шофьор Потребителски портотваря достъп до портове в Win NT / 2000 / XP за програми. Тази версия на драйвера за LPT порт се използва най-често от "технари", които работят с програмисти и JTAG, тъй като драйверът има поне някои настройки за конфигурация.

В архива на драйверите има три файла:
... UserPort.sys - драйвер за WinNT, работещ в режим на ядрото на ОС,
... UserPort.exe е програма за конфигуриране на драйвера и
... UserPort.pdf - файл с описание.

Инсталиране на UserPort:
... 1. Разопаковайте архива в отделна папка.
... 2. Копирайте файла UserPort.sys в C: \ Windows \ System32 \ драйвери

Настройка на UserPort:
... Стартирайте UserPort.exe.
... Пред нас ще се появи панел с 2 прозореца.

Левият прозорец се отнася за работата на програмата в прозореца на DOS, десният на цял екран. По подразбиране те съдържат номера на LPT портове - всички те могат да бъдат премахнати с помощта на бутона "Премахване". И в двата прозореца трябва да въведете необходимите номера на портове, които планирате да използвате.

За използване на драйвери с повечето програмисти, JTAG и програми за поддръжка на дисплея, добавете следните параметри към лявата колона:
378 , 379 и 37Аза LPT1
278 , 279 и 27Аза LPT2(Ако адресът на LPT порта не е преназначен в BIOS).

Нека обясня какво означават числата. 0x378е адресът на порта.
... Адрес 0x378Наречен основени служи за писане и четене данникъм и от порт, чрез шина за данни D0-D7.
... Адрес 0x379 (основен + 1)създаден за четене на битовесъстояния от устройството, свързано към LPT порта.
... Адрес 0x37A (основен + 2)служи за битови записиконтрол на устройството, свързано към LPT порта.

Добавете така:
0x378-0x378
0x37A-0x37A



Трябва да добавите адреси на портове към списъка през прозореца за въвеждане и с помощта на бутона "Добавяне". Адрес 0x379най-често не е необходимо и е възможно да не се въвежда, тъй като е предназначено за четене на битовесигнали за състояние от устройство, свързано към LPT порта, и повечето устройства (програмисти, JTAG "и дори повече LCD индикатори) не генерират сигнали за състояние. 0x378-0x37F.

Отидете на Контролен панел, Система, изберете раздела Оборудване, Диспечер на устройства, отидете на Портове (COM и LPT) и разгледайте свойствата на LPT порта, на който искате да установите връзка. В Свойства отворете раздела Ресурси и погледнете стойността на параметъра Входен/изходен диапазон (I/O)... (Обикновено в Windows XP е така 378 - 37F)

След като се формира списъкът с адреси, трябва да натиснете бутона "Старт", драйверът ще се стартира и ще се появи съобщение:



След това натиснете бутона "Актуализиране", драйверът ще бъде регистриран в системата, след това "Изход". Разбира се, няма нужда да натискаме бутона "Стоп", докато използваме драйвера.

Ако системата се рестартира, когато натиснете бутона „Актуализиране“, трябва да опитате да стартирате регистрацията на драйвера в системата с администраторски права или да опитате временно да деактивирате защитната стена или антивируса, които могат да блокират смущенията в системните процеси. Ако нещо не работи, прочетете UserPort.pdf

За да проверите дали се е появил достъп до портове, можете да стартирате програмата "lpt-test.exe".

След стартиране на програмата ще се появи прозорец със следното съдържание:



Липсата на съобщение "LPT портът се тества (Адрес XXXh)" и следващите редове показва, че драйверът не работи.

Тази програма просто изпраща различни номера към регистъра на данните Dx и Ux контролния регистър на LPT порта и след това ги чете. Регистърът на състоянието на LPT порт Sx е само за четене. Екранът показва номера и адреса на тествания LPT порт. Ако портът е изправен, не трябва да се издават съобщения за регистрите Dx и Ux.



LPT-TEST v1.03 1995-2003 Copyright (C) S.B. Алеманов. Москва "БИНАР".
По време на тестването към портовете не трябва да се свързват периферни устройства.
Dx - обл. данни (изходящи), Ux - рег. контрол (изход), Sx - рег. състояние (inp).

Порт LPT1 се тества (адрес 378h)
2-ри контакт (D0) - няма "1"
3-ти контакт (D1) - няма "1"
4-ти щифт (D2) - без "1"
5-ти щифт (D3) - без "1"
6-ти щифт (D4) - без "1"
7-ми контакт (D5) - без "1"
8-ми щифт (D6) - без "1"
9-ти щифт (D7) - без "1"
1-ви контакт (U0) - няма "1"
14-ти щифт (U1) - без "1"
17-ти щифт (U3) - без "1"
1-ви контакт (U0) - няма "0"
14-ти контакт (U1) - без "0"
17-ти контакт (U3) - без "0"
15-ти контакт (S3) - без "0"


Ако регистрите Dx или Ux са дефектни, тогава се показва съобщението "no 0" или "no 1" и се посочва номерът на контакта на LPT конектора (сигналите на този контакт могат да се видят с осцилоскоп). Входът на регистъра на състоянието на Sx може да бъде "0" или "1", но обикновено, когато нищо не е свързано към LPT порта, всички входове на регистъра на състоянието имат "1". Появата на регистъра на състоянието "0" на входа може да е знак, че входът е повреден, ако преди винаги е имало "1".
На някои машини, ако регистърът на данните или контролният регистър са дефектни, тогава достъпът до LPT порта изобщо не се появява. Очевидно, когато компютърът е включен, BIOS тества LPT порта и, ако е дефектен, след това го деактивира.

Ако възникнат проблеми, възможно е някои драйвери да пречат на работата, като периодично изпращат импулси към LPT порта (това може да се види с осцилоскоп). Например, можете да прекъснете връзката с LPT порта в настройките на принтера:
деактивирайте LPT1: Порт за принтер
активиране на ФАЙЛ: Печат във файл

След като всички проблеми бъдат елиминирани и тестът е преминал, трябва да имате достъп до портовете и можете да стартирате програмата с помощта на LPT порта. В противен случай устройството, свързано към порта на такава машина, няма да работи.

Драйвер GiveIO.sys

Още през 1996 г. американският програмист Дейл Робъртс проведе серия от експерименти, които доведоха до драйвер GiveIO.sys... Досега този драйвер остава един от популярните инструменти, които позволяват на приложна програма да има достъп до I/O портове.

Самият автор на драйвера силно препоръчва използването на този драйвер само за целите на отстраняване на грешки. Окончателната версия на приложната програма трябва, вместо независим достъп до I/O портовете, да повери този въпрос на драйвер, написан специално за тази цел. Драйверът трябва да се държи "правилно", като провери дали устройството вече се използва от някое друго приложение.

Въпреки това, ако сте абсолютно сигурни, че никой друг не използва необходимите входно-изходни портове (например, нямате принтер, свързан към LPT), можете спокойно да използвате драйвера GiveIO.sys.

Инсталиране на драйвери:

1. Изтеглете архива, разопаковайте и копирайте файла GiveIO.sys в директорията C: \ Windows \ System32 \ Drivers (ако приемем, че вашият Windows е инсталиран в директорията C: \ Windows).
... 2. Стартирайте файла install.reg. На екрана ще се появи следното съобщение:


... 3. Отговаряме утвърдително. В този случай ще се появи съобщение, че информацията е въведена успешно в регистъра. Ако желаете, можете да се убедите в това. Стартирайте редактора на системния регистър regedit.exe и в клона HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ giveioпроверете за наличието на следните записи:


... 4. Рестартираме компютъра и проверяваме работата на програмите с помощта на драйвера.

Шофьор GiveIO.sysхората активно използват и с течение на времето се появиха и други опции за неговото инсталиране.

Например - шофьор GiveIO.sysако има файл с "хардуерна информация" GiveIO.infможе да се инсталира чрез аплета Add Hardware.




Ще покажем драйвера GiveIO.sys на операционната система, така че тя да вярва в съществуването на хардуера на GiveIO.

Изтеглете набор от файлове за тази опция за инсталиране на драйвер GiveIO.sys(giveio_sys_v2.rar - 78 kb). Архивът съдържа файловете GiveIO.sys и GiveIO.inf, както и подробни инструкции за инсталиране с илюстрации.

В допълнение към опциите за "ръчно" инсталиране на драйвери, има няколко опции за инсталатор, който извършва инсталация в автоматичен режим.

Изтеглете набор от файлове за автоматично инсталиране на драйвери GiveIO.sys(giveio_sys_install.rar - 28 kb). Архивът съдържа файловете GiveIO.sys и instdrv.exe, както и файла remove-giveio.cmd, с който драйверът GiveIO.sysмогат да бъдат премахнати от системата.

Port95nt драйвер

Терминът " шофьор Port95nt "тук няма да е напълно правилен. Всъщност това е същият драйвер DLPortIOот опаковката DriverLINXот Scientific Software Tools, Inc, само в пълна версия, с няколко помощни програми за контрол на портове, с описания и много примери за програмисти. За обикновен потребител няма полза от допълнителни компоненти, а компонентите на драйвера DLPortIO.sys и DLPortIO.dll са абсолютно същите като в намалената версия.

Посочен Port95nt като драйвер по две причини. Първият е за пълнота на списъка с препратки към драйвери за LPT портове, намиращи се в Интернет.

Втората причина е, че в някои случаи може да има проблеми с инсталирането на намалена версия на DLPortIO под WinXP. Обикновено, но рядко, това се случва в съкратени "авторски" WinXP компилации. В този случай можете да вземете пълната версия на инсталатора (1.5MB). Въпреки че според мен ще бъде по-бързо да поставите ръчно DLPortIO.sys и DLPortIO.dll в необходимата папка, отколкото да се занимавате с избора на инсталатор, който може да го направи вместо вас.

Допълнителни мерки

В допълнение към инсталирането на един от горните драйвери, за нормална работа на LPT порта под WinXP OS, трябва да редактирате системния регистър с помощта на REG файла xp_stop_polling.reg(xp_stop_polling.rar - 0,48 kb)

Понякога устройствата, използващи LPT порта, работят нестабилно под WinXP. Такива неизправности могат да бъдат причинени от подсистемата Plug-and-Play (PnP) в Windows, която периодично анкетира LPT, за да открие свързани устройства. Такава анкета се извършва при стартиране на системата, но може да се случи и по време на работа. За съжаление, драйверът DLportIO.sys и други опции на драйвера не блокират достъпа до LPT от други програми при работа с клиентския порт на този драйвер и PnP подсистемата е сигурна, че портът не е зает, адресира го и нарушава работата на външни устройства. REG файлът се използва за отстраняване на проблема. xp_stop_polling.reg... Този файл записва ключ в системния регистър на Windows, който забранява такава анкета, докато системата работи.

В допълнение към инсталирането на драйвера и ограничаването на едновременния достъп до порта за програми, за да се осигури хардуерна съвместимост и нормална работа на оборудването с LPT порт, е необходимо да се зададе в BIOS правилен адреси режим на работа на порта(„Нормално“, SPP или EPP, но не ECP).

Следните параметри подлежат на конфигуриране чрез BIOS Setup:

Базов адрес, който може да бъде 378h, 278h и 3BCh. По време на инициализацията BIOS проверява за наличието на портове по адреси в този ред и съответно присвоява логическите имена LPT1, LPT2, LPT3 на откритите портове. Адресът 3BCh има порт адаптер, разположен на платката MDA или HGC (предшественици на съвременните графични карти). Повечето портове са конфигурирани да адресират 378h по подразбиране и могат да бъдат превключени на 278h.

Използваната линия за заявка за прекъсване за LPT1 обикновено е IRQ7, за LPT2 - IRQ5. Много "настолни" приложения не използват прекъсвания на принтера и този оскъден компютърен ресурс може да бъде запазен. Въпреки това, когато се използват високоскоростни режими ECP (Fast Centronics), работата при прекъсвания може значително да подобри производителността и да намали натоварването на процесора.

В същото време режимът ECP не може да се използва с устройства, които изискват стриктно време (програмисти и JTAG интерфейси).

В заключение, малко за терминологията:

. SPP(Стандартен паралелен порт). Често, за по-лесно разбиране, в BIOS "се обозначава с термина" Нормално".
. ЕНП(Подобрен паралелен порт) е високоскоростна двупосочна версия на интерфейса. Променено предназначението на някои сигнали, въведена възможност за адресиране на множество логически устройства и 8-битов вход на данни, 16-байтов хардуерен FIFO буфер. Максималният обменен курс е до 2 Mb / s.
. ECP(Enhanced Capability Port) е интелигентна опция за EPP. Въведена е възможността за разделяне на предаваната информация на команди и данни, поддръжка на DMA и компресиране на предаваните данни чрез метода RLE (Run-Length Encoding - кодиране на повтарящи се серии).


И така, нека разгледаме следната опция за работа с I / O портове в Windows NT. Тази "опция" ще бъде специален драйвер GiveIO.sysкоето позволява на приложението, което го е стартирало, да работи свободно на всякакви портове. Пише този шофьор Дейл РобъртсБог знае кога, но не е загубил своята актуалност досега.



Ще ви кажа накратко как работи: в началото на нашата програма, за да комуникирате с портове, трябва да се свържете с драйвера GiveIO.sys... По този начин той ще зададе системната растерна карта на I/O Permission Map за нашето приложение, така че да му бъде разрешен директен достъп до всякакви портове. Карта на разрешения за вход/изходе неразделна част от системата за защита на вход/изход на Windows NT. Това е растерна карта, всеки бит от която съответства на I/O порт. Ако бит = 1, тогава достъпът до порта е затворен, ако 0, значи е отворен. За всяко потребителско приложение всички битове са настроени на 1 и следователно не можем директно да се намесваме в порта. GiveIO.sys нагло "вписва" в този масив и поставя 0 навсякъде - т.е. получаваме възможност за достъп до всеки порт от приложението.



Първо изтеглете архива с драйвера и инсталационния файл:


Сега трябва да се регистрираме и да инсталираме драйвера в системата. За да направите това, трябва да извършите редица операции. Първо копирайте файла с драйвера GIVEIO.sysв папката C: \ Windows \ system32 \ драйвери \ ако, разбира се, системата е инсталирана на диска С:\и не сте променили пътищата за инсталиране на Windows.

Натиснете да... В този случай ще получите съобщение за успешното въвеждане на информация в регистъра. Можете да се убедите в това. В редактора на системния регистър regedit.exeв клона HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ giveioможете да видите следното:

За да влязат в сила направените от нас промени, е наложително да РЕСТАРТирате КОМПЮТЪРА.


Време е да започнете да програмирате. В кода на нашата програма Port.exe(вижте) ще направим някои промени, които ще му позволят достъп до портове не само в Windows 9x, както беше преди, но и в Windows NT. Полученият код ще изглежда така:

#include "iostream.h" #include "conio.h" #include "stdlib.h" #include "windows.h" int main () (int Address = 888; cout<<"Test LPT port with GiveIO.sys"<

Всичко. Компилираме, стартираме. Щракнете върху 1-0: всичко трябва да работи. Ако съобщението се появи Грешка! Не мога да отворя драйвера! Натиснете произволен клавиш, за да излезете..., тогава инсталирането на драйвера е неуспешно и трябва да се инсталира отново.

Благодарение на giveio.sysСледните асемблерни букви също ще работят успешно:

Asm (mov dx, 378h mov al, 1 out dx, al)

© Дмитрий Иванов
2005-2006

Ново в сайта

>

Най - известен