Acasă Flori perene Driver pentru lucrul cu portul lpt. Porturi (COM și LPT). Instalarea unui driver pentru lucrul cu un port LPT

Driver pentru lucrul cu portul lpt. Porturi (COM și LPT). Instalarea unui driver pentru lucrul cu un port LPT

Cooltek a lansat pe piață un alt produs nou – o carcasă de mijloc, numită GT-04. Modelul îmbină caracteristici excepționale precum funcționalitatea, ergonomia, designul stilat și un preț atractiv (59,99 euro). Șasiul este finisat în total negru, cu accente portocalii/verzi strălucitoare pe panoul frontal. Există, de asemenea, o pereche de coșuri pentru unitățile optice de 5,25 inchi, precum și un compartiment pentru o unitate de 3,5 inchi.

Carcasa Cooltek GT-04 (Portocaliu/Verde) este echipată cu o fereastră laterală care oferă o vedere asupra componentelor sistemului. ...

Kingston Technology, un producător lider de memorie pentru PC cu o lungă istorie de succes pe piață, a anunțat lansarea de noi module de memorie pentru a sărbători cea de-a 10-a aniversare a liniei de produse HyperX. O caracteristică notabilă a noilor produse este negrul placă de circuit imprimat, folosit în familia HyperX și HyperX Beast, precum și prezența unui distribuitor de căldură unic care îmbunătățește semnificativ disiparea căldurii.

Seria HyperX Beast cu PCB negru, parte a liniei Predator, se caracterizează prin capacitate uriașă și frecvențe maxime de operare. În retail, module...

Exclusiv pentru fanii montării unui sistem din componente albe ca zăpada, organizația CORSAIR a adăugat mecanisme în această culoare la binecunoscuta serie de surse de alimentare CORSAIR RMx. Pe lângă corpul sursei în sine, culoare alba a primit cabluri complet modulare, iar prezența unui număr mic de componente negre conferă un aspect la modă noilor mecanisme, subliniind contrastul.

Toate variantele liniei CORSAIR RMx White au o bază de elemente de înaltă calitate (inclusiv utilizarea de condensatoare de temperatură înaltă pur japoneze...

Această problemă se confruntă cu toți cei care încearcă să conecteze orice dispozitiv la portul LPT. De îndată ce spuneți programului „utilizați LPT”, veți primi o eroare - se reflectă în captura de ecran din dreapta. Deci, să încercăm să ne dăm seama și să o reparăm.

L-am întâlnit când am adăugat o placă de control cu ​​porturi 1-LPT și 2-COM. Era neapărat nevoie de acest lucru - conectarea decodorului de bandă RU-005A. Acest lucru va fi discutat în următorul articol. Între timp, aș dori să obțin un port LPT care funcționează corect în Win -Test sub Windows -7 (64 de biți).

Calculatoarele moderne nu au un port paralel de ceva timp. Alternativ, puteți instala un controler suplimentar în el. Nu vă speriați de acest cuvânt, nu este nimic înfricoșător în el. Motivul pentru care apare eroarea de mai sus este simplu - driverul și biblioteca DriverLINX (DLPortIO.sys + DLPortIO.dll) nu există pentru versiuni Windows pentru arhitectura x86-64 (AMD64, Intel64). Dezvoltatorul Scientific Software Tools Inc a încetat să mai suporte driverul, transferându-l către o altă companie și s-au oprit doar la versiunea pe 32 de biți. Microsoft ridică din umeri și îl trimite producătorului. Cu toate acestea, există un kit bun - acesta este InpOut32 (hwinterface.sys+inpout32.dll) și chiar și versiunea pe 64 de biți a InpOutx64 cu driverul hwinterfacex64.sys.

Să trecem de la teorie la implementare practică. În stoc:

  • Win-Test versiunea 4.10, actualizată pentru a lansa Revizia: 524 din 13-iul-2013.
  • Windows 7 Ultimate (64 de biți) cu toate actualizările.
  • Intel Core i7-3770 (3,4 GHz) + PC3-10700 (667 MHz) 8x2=16 Gb + Asus P8Z77-V LX
  • Controler * PCI COM/LPT (2+1)port WCH353 bulk

Instalarea controlerului

Controlerul în sine nu este nimic interesant în esență și numele său oferă o idee aproape completă - două porturi COM și unul LPT, este instalat în PCI. Dispozitivul în sine este ieftin și costă 360 de ruble (aproximativ 12 USD), fabricat în China.

Ambalajul a fost OEM. Kitul include două cabluri cu porturi COM pe suport și un disc cu presupuse drivere. Nu le-am instalat, știam deja dinainte că nu se vor potrivi. Toate drumurile duceau la site-ul producătorului. Pentru orice eventualitate, dau un link și postez același driver în arhivă.


Procedura de instalare a controlerului nu a cauzat probleme - totul a fost destul de simplu. Opriți computerul, instalați-l într-un slot PCI liber, porniți-l, instalați driverul. Setul include un program de instalare. Interfața sa nu este complicată și de înțeles. Pentru mine, totul a trecut prin detectarea automată a tipului de card și tot ce trebuia să fac a fost să dau clic pe Instalare driver. Procesul de instalare este însoțit de o bară mobilă pe interfață, totul este foarte clar.

Programul vă permite să reatribuiți porturi dacă este necesar. De exemplu, dacă există porturi COM virtuale. Pentru a face acest lucru, după instalare, faceți clic pe Despre și pe butonul Modificare nume port.

Capturile de ecran de mai sus nu au nevoie de comentarii speciale, faceți clic și imaginile vor deveni mai mari. Totul este în mâinile tale - configura noile porturi care apar la discreția ta și pentru a se potrivi nevoilor tale.

Dovada finală că instalarea a avut succes ar trebui să fie prezența acestor dispozitive în Device Manager de pe computer. Du-te acolo și verifică. In cazul meu, placa de baza avea deja un port COM integrat (bine.. am nevoie de el). În consecință, lista de porturi s-a dovedit astfel:

Este posibil să fie nevoie să cunoașteți adresa acestui port și să o specificați corect în setările programului unde va fi folosit acest port. În mod implicit, adresele portului ar trebui să fie după cum urmează:

LPT -1 - 378

LPT-2 - 278

LPT -3 - 3BC

În cazul nostru, acestea vor diferi de valorile obișnuite, deoarece Aceste porturi nu sunt integrate pe placa de baza si modalitatea de comunicare cu ele este prin magistrala PCI. În versiunea mea a funcționat D010(folosim prima valoare). Prin urmare, înainte de a instala (a cumpăra) un astfel de controler, vedeți dacă programul dvs. are capacitatea de a seta alte intervale de I/O.

Cu toate acestea, driverele includ un mic utilitar care vă permite să realocați astfel de adrese (nu m-am ocupat de el, nu este nevoie).

Cu aproximativ 10-15 ani în urmă, un port paralel era o interfață destul de populară pentru comunicarea între dispozitive. Astăzi producătorii diverse dispozitive dați preferință interfețelor seriale. Cu toate acestea, astăzi un port LPT mai poate fi găsit. Și unii dezvoltatori încă mai scriu programe pentru el (sau le susțin pe cele scrise în perioada de glorie a interfețelor paralele). Dar în computere acum este suficient un port LPT foarte rar. Există, desigur, plăci de expansiune pentru computer care implementează interfața LPT. Ele sunt practic plăci de magistrală PCI. Din păcate, nu toate programele care au fost scrise pentru integrate placa de baza Porturile LPT, vor funcționa cu carduri LPT-PCI.

Se propune o soluție la această problemă: o clasă de software scrisă sub .NET și o bibliotecă dinamică care funcționează cu LPT. Această implementare a fost testată pe Windows XP, Windows 7, 8 și 10 pe 32 și 64 de biți, ambele cu porturi LPT încorporate și implementate ca plăci de expansiune pe magistrala PCI sau PCI-Express. Puteți descărca driverul pentru portul LPT din linkul de mai jos după articol.

1 Instalarea driverului pentru lucrul cu portul LPT

Arhiva atașată conține două foldere - pentru versiunile de Windows pe 32 și 64 de biți. Există un fișier într-unul dintre foldere InstallDriver.exe. Mai întâi rulați acest fișier, acesta va instala biblioteci dinamice pe sistem. După aceasta, computerul trebuie repornit.

Pentru a utiliza driverul sugerat, fișierele inpout32.dllȘi inpoutx64.dll trebuie să fie localizat în același director cu fișierul executabil al programului dvs.

2 Clasa de program pentru utilizarea bibliotecilor lucrează cu portul LPT

Am scris o clasă pentru .NET care folosește biblioteci dinamice inpout32.dllȘi inpoutx64.dllși vă permite să citiți date din portul paralel și să scrieți date în registrele acestuia.

Bibliotecile menționate nu au fost scrise de mine. Ofer o clasă de wrapper convenabilă care simplifică lucrul cu aceste biblioteci. În plus, autorul bibliotecilor din dosar citiți-mă.txt raportează că driverul său nu acceptă dispozitive PCI. Am reușit să-l fac să funcționeze atât cu portul paralel integrat, cât și cu portul LPT, implementat ca o placă de expansiune pe magistrala PCI-Express. Mai mult, portul funcționează perfect atât pe Windows10 x64 modern, cât și pe sistemele mai vechi.

Iată codul pentru clasa LPT în VB.NET:

Cod de clasă LPT în limbajul VB.NET(se extinde) Importă System.Runtime.InteropServices """ """ Funcționează cu un port LPT. Când este creat, detectează prezența unui driver și selectează biblioteca corespunzătoare. """ 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" """ """ Registre porturi paralele. """ Public Enum Register As Integer """ """ Registrul de date SPP/EPP. """ DATE = 0 """ """ Registrul de stare SPP/EPP. """ STARE = ​​DATE + 1 """ """ Registrul de control SPP/EPP. """ CONTROL = DATE + 2 """ """ Registrul adresei EPP. Citirea sau scrierea în acesta generează un ciclu de citire sau scriere asociat adresei EPP. """ EPP_ADDRESS = DATE + 3 """ """ Registrul de date EPP. Citire (scriere) generează un ciclu de citire (scriere) de date EPP asociat. """ EPP_DATA = DATE + 4 """ """ Registrul de activare a modului EPP. """ """ """ Dacă se amestecă doar "ECP+EPP" sau "Extended" - cel mai probabil va trebui să scrieți și octetul 0x80 pe portul ECR """ (ECR este registrul modului ECP, ECR=BASE_ADDR+0x402, BASE_ADDR este Adresă de bază LPT -port """ ECR = DATE + &H402 „TEST End Enum #End Region” /CONST #Region „DllImport” Funcția privată partajată IsInpOutDriverOpen() ca funcție de sfârșit de octet Funcție privată partajată IsInpOutDriverOpen_x64() ca funcție UInt64 End Funcție partajată privată Inp32(PortAddress As UInt32) Ca funcție de sfârșit de octet Private Partajat Sub Out32 (portAddress ca UInt32, date ca UInt32) End Sub Funcție partajată privată Inp64(PortAddress As UInt64) Ca funcție de sfârșit de octet Private Partajat Sub Out64 (PortAddress ca UInt64, Data ca UInt64) End Sub #End Region "/DllImport #Region "CTOR" """ „"" Verifică dacă driverele x86 sau x64 pot fi utilizate. Dacă nu, se afișează o excepție „driver neinstalat”. Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 As Boolean = CheckIsDriverX64() If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else DriverUsed = False Else Portul nu este instalat sistemul de excepție L. ) End If End Sub """ """ Inițializare port - setarea XXXX0100"b în registrul de control. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region "/CTOR #Region "PROPS" """ """ Dacă se utilizează versiunea pe 64 de biți a driverului. """ Dacă driverul nu este instalat, este returnat NULL. """ Proprietatea publică partajată numai pentru citire IsX64DriverUsed as Boolean? Obține returnare _IsX64DriverUsed End Obține End Proprietate Privat Partajat Numai citire _IsX64DriverUsed ca boolean? = Nimic #End Region "/PROPS #Region "METHODS" """ """ Stabilește dacă driverul este pe 32 de biți. """ Funcție partajată privată CheckIsDriverX86() Ca boolean Încercați Dim res As Byte = IsInpOutDriverOpen() Întoarce Adevărat Captură ex Ca excepție Întoarce Fals Sfârșit Încercați Sfârșit Funcția """ """ Stabilește dacă driverul este pe 64 de biți. """ Funcție partajată privată CheckIsDriverX64() As Boolean Try Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult<>0) Prinde ex Ca excepție Returnează fals Sfârșit Încercați Sfârșit Funcția #Sfârșit Regiunea „/METODE #Regiune „Citește/Scrie Port LPT” „”” """ Citește 1 octet de date din registrul portului LPT specificat. """ """ Numarul portului. """ Registrul portului. Public Shared Function Read(port As ULong, Optional reg As Register = Register.DATA) As Byte Dim data As Byte = 0 If IsX64DriverUsed Then data = Inp64(CULng(port + reg)) Else data = Inp32(CUInt(port + reg) ) )) End If Return data End Function """ """ Scrie un număr în registrul portului LPT specificat. """ """ Adresa portului. """ Registrul portului. """ Public Shared Sub Write (port ca ULong, reg As Register, date ca ULong) If IsX64DriverUsed Then Out64(port + CULng(reg), data) Else If (date<= 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 """ """ Testează prezența unui port LPT la o anumită adresă. """ """ Adresa portului paralel. Funcție comună publică CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Încercați InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) "salvați valoarea curentă a registrului de date" Să verificăm: ce a fost scris a fost si citit? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent Și (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent Și (&H55 = Read(lptAddress, Register.DATA) )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent Și (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, date) "restaurează valoarea anterioară a registrului de date" Verificați prezența registrelor de control și a datelor dacă portul nu este detectat (în cazul unui port unidirecțional) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>0) Și De asemenea (date<>&HFF)) „Nu este gol? => Portul este prezent. Dacă (Nu este portPresent) Atunci date = Read(lptAddress, Register.STATUS) portPresent = ((date<>0) Și De asemenea (date<>&HFF)) End If End If Catch ex Ca Exception Return False End Try Return portPresent End Function End Class "/LPT

Codul clasei LPT în C#:

Cod de clasă LPT în C#(se extinde) folosind System; folosind System.Diagnostics; folosind System.Runtime.InteropServices; namespace LPTIO ( /// Clasă pentru lucrul cu un port LPT. Când este creat, determină prezența unui driver și capacitatea de biți a acestuia. clasa publică sigilată LPT( private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Dacă versiunea pe 64 de biți a driverului este utilizată. public static bool IsX64DriverUsed (get ( returnează LPT._IsX64DriverUsed ; ) ) LPT static()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) throw new SystemException ("Driverul pentru portul LPT nu este instalat."); LPT._IsX64DriverX64()) adevărat; ) ) public LPT() ( ) privat static octet extern IsInpOutDriverOpen(); privat static extern ulong IsInpOutDriverOpen_x64(); privat static extern octet Inp32(uint PortAddress); private static extern void Out32(uint portAddress, uint date); octet extern static privat Inp64(ulong PortAddress); private static extern void Out64 (ulong PortAddress, ulong Data); /// Stabilește dacă driverul este pentru Windows pe 32 de biți. privat static bool getIsDriverX86()( bool flag; try ( LPT.IsInpOutDriverOpen(); flag = true; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); ) return flag; ) /// Determină dacă Driverul este pentru Windows pe 64 de biți? privat static bool getIsDriverX64()( steag bool; încercați ( flag = Decimal.Compare(new Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData. ClearProjectError(); ) return flag; ) /// Citește 1 octet de date de la portul LPT. /// Numarul portului. /// Registrul portului. octet static public Citire (port lung, LPT.Register reg = LPT.Register.DATA)( return !LPT.IsX64DriverUsed ? LPT.Inp32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg))))): LPT.Inp64(Convert.ToUInt64(Decimal.Add(new) Decimal(port), nou Decimal((int) reg)))); ) /// Scrie un număr pe portul LPT. /// Adresa portului. /// Registrul portului. /// Număr de înregistrat. Pe sistemele pe 32 de biți, argumentul nu trebuie să fie mai mult de valoare maximă pentru tipul UInt32. public static void Write (port ulong, LPT.Register reg, date ulong)( if (LPT.IsX64DriverUsed) ( LPT.Out64(bifat (port + (ulong) (uint) reg), date); ) else ( if (date > (ulong) uint.MaxValue) lansează un nou ArgumentException("La 32- pe sistemele de biți, argumentul trebuie să fie pe 32 de biți (tip UInt32).", „date”); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)) ), verificat ((uint) date)); ) ) /// Registrele portului LPT. Registrul de enumerare publică(DATE, STARE, CONTROL, )))

3 Folosind o clasă .NET pentru lucrul cu portul LPT

Dacă ne uităm la lista de funcții de bibliotecă exportate inpout32.dll cu un instrument grozav DLL Export Viewer de la NirSoft, vom vedea următoarea imagine:

Aceasta este o listă de funcții pe care le putem folosi. De fapt, toate sunt folosite în clasă LPT, dar implementarea este ascunsă, iar dintre metodele publice, doar două metode și o proprietate sunt disponibile utilizatorului (sunt discutate puțin mai departe).

În timpul instanțierii, clasa însăși va determina ce bibliotecă ar trebui să folosească - inpout32.dll sau inpoutx64.dll. Prin urmare, utilizatorul nu este obligat să întreprindă nicio acțiune pentru a inițializa sau a determina adâncimea de biți utilizată dll. Puteți scrie sau citi imediat din portul LPT. Un „Dar”: dacă driverul nu este instalat, apelarea oricăreia dintre metodele de bibliotecă dinamică va provoca o excepție, așa că recomand folosirea blocurilor Încearcă să prinzi pentru a prinde și gestiona excepțiile.

Câteva exemple de utilizare a clasei LPT.

Pentru a determina dacă se utilizează versiunea pe 64 de biți a driverului (inpoutx64.dll dacă este adevărat) sau pe 32 de biți (inpout32.dll dacă este fals) (de fapt, nu trebuie să știți acest lucru, clasa folosește exact biblioteca este necesar, dar dintr-o dată, dintr-un anumit motiv, va trebui să aflați acest lucru din programul dvs.):

Bool is64bitDriver = LPT.IsX64DriverUsed;

Pentru a scrie numărul „123” în registrul de control al portului LPT, sunați din clasa dvs.:

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

Pentru a citi un octet din registrul de date portului LPT și a citi registrul de stare:

Octet b = LPT.Read(currentPort, LPT.Register.DATA); octet s = LPT.Read(currentPort, LPT.Register.STATUS);

Aici currentPort - adresa portului LPT. Mai mult, dacă aveți un port LPT integrat, atunci adresa acestuia va fi cel mai probabil 378h. Și dacă aveți un port LPT pe o placă de expansiune, atunci adresa va fi diferită, de exemplu, D100h sau C100h.

Pentru a afla adresa portului LPT, accesați Windows Device Manager, găsiți secțiunea Porturi COM și LPT, selectați portul paralel pe care îl utilizați și în fereastra de proprietăți (făcând clic dreapta pe el) priviți ce resurse folosește portul selectat (trebuie să luați prima valoare din interval).


De exemplu, în în acest caz, trebuie folosit numărul portului C100.

Descărcați atașamente:

  • Descărcați driverul pentru portul LPT (3281 descărcări)

Vă recomandăm cu căldură să vă întâlniți cu el. Acolo vei găsi mulți prieteni noi. În plus, este cel mai rapid și mod eficient contactați administratorii de proiect. Secțiunea Actualizări antivirus continuă să funcționeze - actualizări gratuite mereu actualizate pentru Dr Web și NOD. Nu ai avut timp să citești ceva? Conținut complet Tickerul poate fi găsit la acest link.

Lucrul cu un port LPT în Win NT/2000/XP

Port LPT (L ine P rin T er) este un port de interfață paralel care a fost creat inițial pentru a conecta o imprimantă. BIOS-ul oferă suport pentru portul LPT, care este necesar pentru a organiza ieșirea prin interfața Centronics. Spațiul de adrese de port ocupă intervalul &H378-&H37F

Portul LPT are 12 linii de ieșire și 5 linii de intrare. Acest lucru este destul un numar mare de liniile face posibila conexiune la portul unui echipament simplu, care poate nici măcar să nu aibă propriul microcontroler. Prin urmare, acest port, în ciuda dispariției imprimantelor cu interfață LPT, este utilizat în mod activ pentru a conecta programatori simple de cipuri de memorie, interfețe JTAG pentru intermitent (înlocuirea software) receptoare de satelit, playere DVD și alte echipamente electronice. Portul LPT este, de asemenea, popular în rândul modderilor, deoarece vă permite să conectați ecrane LCD la computer fără a face plăci de interfață complexe.

Windows 2000/XP nu permite aplicațiilor să acceseze direct porturile I/O. Pentru a face acest lucru, trebuie să utilizați un driver care rulează în modul KERNEL (în modul kernel al sistemului de operare).

Restricționarea accesului la porturile I/O pentru programele de aplicație obișnuite (care rulează în modul utilizator) face sistemul de operare mai stabil. Deși, pe de altă parte, nimeni nu oprește programatorul să scrie un driver care accesează porturile.

Mă întreb pentru ce procesor Intel x86, puteți scrie un driver care utilizează unul dintre două în mod fundamental abordări diferite. Prima opțiune este că driverul însuși accesează porturile, iar programul de aplicație îi spune doar șoferului ce trebuie să facă. Această opțiune este în general standard și preferată.

Pentru a rezolva problema, există patru opțiuni de driver populare care permit unui program de aplicație să acceseze porturile I/O: driver DLPortIO, conducător auto UserPort, conducător auto GiveIO.sis, conducător auto Port95nt.

Toate cele patru opțiuni sunt aproape echivalente.

Driver DLPortIO

DLportIO - driver de acces la port din pachet DriverLINX de la Scientific Software Tools, Inc. (http://www.sstnet.com) într-o formă prescurtată (fără descriere și documentație inutilă). Pentru funcționarea normală a programelor de întreținere pentru indicatoarele LCD, vă putem recomanda această opțiune de driver.

Driverul în sine este format din două componente:
. DLPortIO.dll - Win32 DLL care oferă I/O hardware și
. DLPortIO.sys - driver pentru WinNT, care rulează în modul nucleu al sistemului de operare (nu este necesar pentru Win95/98)

În pachetul de instalare a driverului, pe lângă aceste două componente, există și un fișier Install.exe care le mută pe cele două menționate mai sus în folderul Drivere Windowsși înregistrarea acestora în sistem.

Nu mai este nimic de scris despre acest șofer. Nu este necesară configurarea. Descărcat, instalat, folosit. Nu uitați să vă uitați la sfârșitul articolului și să citiți despre asigurarea funcționalității portului LPT.

Instalarea este simplă - rulați fișierul Install.exe și instalați. Odată ce instalarea este finalizată, căutați în folderul C:\Windows\System32\drivers și verificați dacă există două fișiere driver (DLPortIO.sys și DLPortIO.dll). Dacă vedem că aceste fișiere nu au fost copiate, le luăm din pachetul de instalare și le copiam manual. Nu vă faceți griji, nimic rău nu se va întâmpla cu computerul dvs. Repornim computerul și lucrăm cu portul LPT.

Dacă brusc, ca urmare a manipulărilor cu echipamentul, primiți un mesaj de la driver ca acesta: „Dlportio.sys device driver not loaded. Port I/O va avea niciun efect”, nu intrați în panică. Această problemă este rezolvată astfel:
. Lansați regedit.
. Mergem la filiala din registru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. În folderul dlportio, modificați valoarea parametrului start pe 1 .
. Reporniți computerul.

Driver UserPort

Conducător auto UserPort deschide accesul la porturile din Win NT/2000/XP pentru programe. Această versiune a driverului de port LPT este folosită cel mai adesea de „tehnicieni” care lucrează cu programatori și JTAG, deoarece driverul are cel puțin unele setări de configurare. Poate fi folosit și pentru a opera programe de întreținere pentru indicatoarele LCD.

Arhiva driverului conține trei fișiere:
. UserPort.sys - driver pentru WinNT, care rulează în modul nucleu al sistemului de operare,
. UserPort.exe este un program pentru configurarea driverului și
. UserPort.pdf - fișier de descriere.

Instalare UserPort:
. 1. Despachetați arhiva într-un folder separat.
. 2. Copiați fișierul UserPort.sys în C:\Windows\System32\drivers

Setare UserPort:
. Rulați UserPort.exe.
. În fața noastră va apărea un panou cu 2 ferestre.

Fereastra din stânga se referă la programul care rulează într-o fereastră DOS, cea din dreapta la ecran complet. În mod implicit, acestea conțin numere de port LPT - toate pot fi eliminate folosind butonul „Eliminare”. În ambele ferestre trebuie să introduceți numerele de porturi necesare pe care intenționați să le utilizați.

Pentru utilizare de la driver cu majoritatea programatorilor, JTAG-urilor și programelor de servicii de afișare, adăugați următorii parametri în coloana din stânga:
378 , 379 Și 37A Pentru LPT1
278 , 279 Și 27A Pentru LPT2(Dacă adresa portului LPT este reatribuită în BIOS).

Să explic ce înseamnă numerele. 0x378- aceasta este adresa portului.
. Abordare 0x378 numit de bazăși este folosit pentru scris și citit date către și dinspre port, prin magistrala de date D0-D7.
. Abordare 0x379 (de bază+1) creat pentru citiți biți starea de la un dispozitiv conectat la portul LPT.
. Abordare 0x37A (de bază+2) serveste pentru înregistrare pe biți controlul dispozitivului conectat la portul LPT.

Adăugați-l astfel:
0x378-0x378
0x37A-0x37A



Trebuie să adăugați adrese de porturi la listă prin fereastra de introducere și folosind butonul „Adăugați”. Abordare 0x379 cel mai adesea nu este necesar și poate fi omis, deoarece este destinat citiți biți starea de la un dispozitiv conectat la portul LPT, iar majoritatea dispozitivelor (programatoare, JTAG-uri și indicatoare LCD, în special) nu generează semnale de stare.Dacă se dorește, puteți, dimpotrivă, introduceți întreaga gamă de adrese alocate de sistem pt. portul LPT 0x378-0x37F.

Să mergem la Panou de control, Sistem, selectați fila Echipament, manager de dispozitiv, mergeți la Porturi (COM și LPT) și uitați-vă la proprietățile portului LPT prin care doriți să stabiliți o conexiune. În Proprietăți, deschideți fila Resurse și uitați-vă la valoarea parametrului Interval de intrare/ieșire (I/O).. (De obicei, în Windows XP este 378 - 37F)

După generarea listei de adrese, trebuie să faceți clic pe butonul „Start”, driverul va fi lansat și va apărea mesajul:



Apoi faceți clic pe butonul „Actualizare”, șoferul va fi înregistrat în sistem, apoi „Ieșire”. Desigur, nu este nevoie să apăsăm butonul „Stop” în timp ce folosim driverul.

Dacă sistemul repornește atunci când faceți clic pe butonul „Actualizare”, ar trebui să încercați să înregistrați driverul în sistem cu drepturi de administrator sau să încercați să dezactivați temporar firewall-ul sau antivirusul, ceea ce poate bloca interferența cu procesele sistemului. Dacă ceva nu funcționează, citiți UserPort.pdf

Pentru a verifica dacă a apărut accesul la porturi, puteți rula programul "lpt-test.exe".

După pornirea programului, va apărea o fereastră cu următorul conținut:



Absența mesajului „Portul LPT este în curs de testare (Adresa XXXh)” și liniile de după acesta indică faptul că driverul nu funcționează.

Acest program pur și simplu trimite diverse numere către registrul de date Dx și registrul de control Ux al portului LPT, apoi le citește. Registrul de stare Sx a portului LPT este numai pentru citire. Numărul și adresa portului LPT testat sunt afișate pe ecran. Dacă portul este sănătos, atunci nu ar trebui emise mesaje pentru registrele Dx și Ux.



LPT-TEST v1.03 1995-2003 Copyright (C) S.B.Alemanov. Moscova „BINAR”.
În timpul testării, niciun dispozitiv periferic nu trebuie conectat la porturi.
Dx - reg. date (out), Ux - reg. control (out), Sx - reg. stare (inp).

Portul LPT1 este testat (Adresa 378h)
Al doilea contact (D0) - nu "1"
Al treilea contact (D1) - nu „1”
Al 4-lea contact (D2) - nu „1”
Al 5-lea pin (D3) - fără „1”
Al șaselea pin (D4) - fără „1”
Al șaptelea pin (D5) - fără „1”
Al 8-lea pin (D6) - fără „1”
Al 9-lea pin (D7) - fără „1”
Primul contact (U0) - nu „1”
Al 14-lea pin (U1) - fără „1”
Al 17-lea pin (U3) - fără „1”
Primul contact (U0) - nu "0"
Al 14-lea pin (U1) - fără „0”
Al 17-lea contact (U3) - fără „0”
Al 15-lea contact (S3) - nu „0”


Dacă registrele Dx sau Ux sunt defecte, atunci este afișat mesajul „nu 0” sau „nu 1” și este indicat numărul pinului de pe conectorul LPT (semnalele de pe acest pin pot fi vizualizate cu un osciloscop). Intrarea registrului de stare Sx poate fi fie „0” fie „1”, dar de obicei, atunci când nu este conectat nimic la portul LPT, toate intrările registrului de stare sunt „1”. Apariția stării „0” la intrarea registrului poate fi un semn că intrarea a fost întreruptă, dacă anterior a existat întotdeauna un „1” acolo.
Pe unele mașini, dacă registrul de date sau registrul de control este defect, atunci accesul la portul LPT nu apare deloc. Aparent, atunci când porniți computerul, BIOS-ul testează portul LPT și, dacă este defect, îl dezactivează.

Dacă apar probleme, este posibil ca unii drivere să interfereze cu funcționarea trimițând periodic impulsuri către portul LPT (acest lucru poate fi văzut cu un osciloscop). De exemplu, vă puteți deconecta de la portul LPT în setările imprimantei:
dezactivați LPT1: Port pentru imprimantă
enable FILE: Imprimați în fișier

După ce toate problemele sunt rezolvate și testul este trecut, ar trebui să apară accesul la porturi și puteți rula un program care utilizează portul LPT. În caz contrar, dispozitivul conectat la portul de pe o astfel de mașină nu va funcționa.

Driver GiveIO.sys

În 1996, programatorul american Dale Roberts a efectuat o serie de experimente, al căror rezultat a fost conducătorul GiveIO.sys. Până acum, acest driver rămâne unul dintre instrumentele populare care permite unui program de aplicație să acceseze porturile I/O.

Însuși autorul driverului recomandă insistent utilizarea acestui driver numai în scopuri de depanare. Versiunea finală a programului de aplicație ar trebui, în loc să acceseze porturile I/O în sine, să încredințeze această sarcină unui driver scris special pentru aceste scopuri. Driverul trebuie să se comporte „corect” verificând dacă dispozitivul este deja utilizat de o altă aplicație.

Cu toate acestea, dacă sunteți absolut sigur că nimeni nu folosește porturile I/O necesare în afară de dvs. (de exemplu, nu aveți o imprimantă conectată la LPT), puteți utiliza în siguranță driverul GiveIO.sys.

Instalarea driverului:

1. Descărcați arhiva, despachetați și copiați fișierul GiveIO.sys în directorul C:\Windows\System32\Drivers (presupunând că Windows este instalat în directorul C:\Windows).
. 2. Rulați fișierul install.reg. Pe ecran va apărea următorul mesaj:


. 3. Răspundem afirmativ. Va apărea un mesaj care indică faptul că informațiile au fost introduse cu succes în registru. Dacă doriți, puteți verifica acest lucru. Lansăm editorul de registry regedit.exe și în ramură HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio Verificăm prezența următoarelor înregistrări:


. 4. Reporniți computerul și verificați funcționarea programelor folosind driverul.

Conducător auto GiveIO.sys oamenii îl folosesc în mod activ și, în timp, au apărut alte variante de instalare.

De exemplu - șofer GiveIO.sys dacă există un fișier cu „informații hardware” GiveIO.inf poate fi instalat prin intermediul applet-ului „Instalare hardware”.




Vom arăta driverul GiveIO.sys sistem de operare, astfel încât să creadă în existența echipamentelor GiveIO.

Descărcați un set de fișiere pentru această opțiune de instalare a driverului GiveIO.sys(giveio_sys_v2.rar - 78kb). Arhiva conține fișierele GiveIO.sys și GiveIO.inf, precum și instrucțiuni detaliate instrucțiuni de instalare cu ilustrații.

Pe lângă opțiunile de instalare „manuală” a driverului, au fost scrise mai multe versiuni ale programului de instalare care efectuează instalarea automat.

Descărcați un set de fișiere pentru instalare automatăşoferii GiveIO.sys(giveio_sys_install.rar - 28kb). Arhiva conține fișierele GiveIO.sys și instdrv.exe, precum și fișierul remove-giveio.cmd, cu care driverul GiveIO.sys poate fi eliminat din sistem.

Driver Port95nt

Termenul " conducător auto Port95nt" nu va fi complet corect aici. În esență, acesta este același driver DLPortIO din pachet DriverLINX din Scientific Software Tools, Inc., doar în versiune completă, cu câteva utilitare de administrare a porturilor, cu o descriere și multe exemple pentru programatori. Utilizatorul mediu nu beneficiază de componente suplimentare, iar componentele driverului DLPortIO.sys și DLPortIO.dll sunt exact aceleași ca în versiunea scurtată.

Am menționat Port95nt ca driver din două motive. Prima este completarea listei de referințe la driverele de porturi LPT găsite pe Internet.

Al doilea motiv este că în unele cazuri pot apărea probleme cu instalarea unei versiuni scurtate de DLPortIO sub WinXP. De obicei, dar nu des, acest lucru se întâmplă în versiunile „autor” reduse ale WinXP. În acest caz, puteți lua versiunea completa program de instalare (1,5 MB). Deși, în opinia mea, va fi mai rapid să puneți manual DLPortIO.sys și DLPortIO.dll în folderul dorit decât să vă deranjați să selectați un program de instalare care poate face acest lucru pentru dvs.

Măsuri suplimentare

Pe lângă instalarea unuia dintre driverele menționate mai sus, pentru funcționarea normală a portului LPT sub WinXP OS, trebuie să editați registrul folosind un fișier REG xp_stop_polling.reg(xp_stop_polling.rar - 0,48 kb)

Sub WinXP, dispozitivele care utilizează portul LPT sunt uneori instabile. Cauza unor astfel de defecțiuni poate fi subsistemul Plug-and-Play (PnP) din Windows, care interogează periodic LPT-ul pentru a detecta dispozitivele conectate. Acest sondaj are loc atunci când sistemul pornește, dar poate apărea și în timpul funcționării. Din păcate, driverul DLportIO.sys și alte opțiuni de driver nu blochează accesul la LPT din alte programe atunci când lucrează cu portul client al acestui driver, iar subsistemul PnP este sigur că portul nu este ocupat, îl accesează și întrerupe funcționarea dispozitive externe. Fișierul REG este folosit pentru a remedia problema. xp_stop_polling.reg. Acest fișier este scris în registru Tasta Windows, care interzice astfel de interogare în timp ce sistemul rulează.

Pe lângă instalarea driverului și limitarea accesului simultan la portul pentru programe, pentru a asigura compatibilitatea hardware și funcționarea normală a echipamentelor cu portul LPT, este necesar să setați adresa corectaȘi modul de operare port(„Normal”, SPP sau EPP, dar nu ECP).

Următorii parametri pot fi configurați prin BIOS Setup:

Adresa de bază, care poate fi 378h, 278h și 3BCh. În timpul inițializării, BIOS-ul verifică prezența porturilor după adresă exact în această ordine și, în consecință, atribuie nume logice LPT1, LPT2, LPT3 porturilor detectate. Adresa 3BCh are un adaptor de port situat pe placa MDA sau HGC (predecesorii plăcilor video moderne). Cele mai multe porturi sunt configurate să abordeze 378h în mod implicit și pot fi comutate la 278h.

Linia de cerere de întrerupere utilizată, IRQ7 este de obicei folosită pentru LPT1, IRQ5 pentru LPT2. În multe aplicații desktop, întreruperile imprimantei nu sunt utilizate, iar această resursă limitată de PC poate fi salvată. Cu toate acestea, atunci când utilizați moduri de mare viteză ECP (Fast Centronics), întreruperea operațiunii poate îmbunătăți semnificativ performanța și poate reduce sarcina procesorului.

În același timp, modul ECP nu poate fi utilizat cu dispozitive care necesită sincronizare strânsă (programatori și interfețe JTAG).

În concluzie, puțin despre terminologie:

. SPP(Port paralel standard - port paralel standard). Adesea, pentru a simplifica înțelegerea, în BIOS este notat cu termenul " Normal".
. EPP(Port paralel îmbunătățit) - opțiune de interfață bidirecțională de mare viteză. Scopul unor semnale a fost schimbat, capacitatea de a adresa mai multe dispozitive logice și intrare de date pe 8 biți și un buffer hardware FIFO de 16 octeți a fost introdus. Viteza maxima schimb - până la 2 Mb/s.
. ECP(Enhanced Capability Port) - o versiune inteligentă a EPP. A fost introdusă capacitatea de a separa informațiile transmise în comenzi și date, suport pentru DMA și comprimarea datelor transmise folosind metoda RLE (Run-Length Encoding).


Deci, să luăm în considerare următoarea opțiune pentru lucrul cu porturile I/O în Windows NT. Această „opțiune” va fi un driver special GiveIO.sys, care permite aplicației care o rulează să lucreze liber cu orice porturi. Acest șofer a scris Dale Roberts Dumnezeu știe când, dar nu și-a pierdut relevanța până astăzi.



Vă voi spune pe scurt cum funcționează: la începutul programului nostru, pentru a comunica cu porturile, trebuie să contactați șoferul GiveIO.sys. În același timp, va seta bitmap-ul de sistem al hărții de permisiuni (I/O Permission Map) pentru aplicația noastră la astfel de valori încât să i se permită accesul direct la orice porturi. Harta permisiunilor I/O- Acest componentă Sisteme de protecție I/O Windows NT. Este o matrice de biți, fiecare bit corespunde unui port I/O. Dacă bitul = 1, atunci accesul la port este închis, dacă este 0, atunci este deschis. Pentru orice aplicație de utilizator, toți biții sunt setați la 1 și, în consecință, nu putem interfera direct cu funcționarea portului. GiveIO.sys „intră” cu nerăbdare în această matrice și îl setează la 0 peste tot - adică. obținem posibilitatea de a accesa orice port din aplicație.



Mai întâi, descărcați arhiva cu driverul și fișierul de instalare:


Acum trebuie să ne înregistrăm și să instalăm driverul pe sistem. Pentru a face acest lucru, trebuie să faceți o serie de operațiuni. Mai întâi, copiați fișierul driverului GIVEIO.sysîn folderul C:\Windows\system32\drivers\ dacă, desigur, sistemul dumneavoastră este instalat pe disc CU:\și nu ați schimbat calea de instalare Windows.

Clic da. Veți primi un mesaj care indică faptul că informațiile au fost introduse cu succes în registru. Puteți verifica acest lucru. În programul editor de registry regedit.exeîn ramură HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio puteți vedea următoarele:

Pentru ca modificările pe care le facem să intre în vigoare obligatoriu Este necesară REPORNIREA COMPUTERULUI.


Este timpul să trecem la programare. În codul programului nostru Port.exe(vezi) vom face câteva modificări care îi vor permite să acceseze porturi nu numai în Windows 9x ca înainte, ci și în Windows NT. Codul final va arăta astfel:

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

Toate. Compilăm și rulăm. Faceți clic pe 1-0: totul ar trebui să funcționeze. Dacă apare un mesaj Eroare! Nu se poate deschide driverul! Apăsați orice tastă pentru a ieși..., aceasta înseamnă că instalarea driverului nu a reușit și trebuie să-l reinstalați din nou.

Mulțumită giveio.sys Următoarele scripturi de asamblare vor funcționa, de asemenea, cu succes:

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

© Dmitri Ivanov
2005-2006

Nou pe site

>

Cel mai popular