Shtëpi Lule shumëvjeçare Drejtues për të punuar me portin lpt. Portet (COM dhe LPT). Instalimi i një drejtuesi për të punuar me një port LPT

Drejtues për të punuar me portin lpt. Portet (COM dhe LPT). Instalimi i një drejtuesi për të punuar me një port LPT

Cooltek ka lançuar një tjetër produkt të ri në treg – një kasë me kullë të mesme të quajtur GT-04. Modeli kombinon karakteristika të jashtëzakonshme si funksionaliteti, ergonomia, dizajni elegant dhe një çmim tërheqës (59,99 euro). Shasia është e përfunduar në të zezë me thekse të ndezura portokalli/jeshile në panelin e përparmë. Ka gjithashtu një palë shporta për disqet optike 5,25 inç, si dhe një ndarje për një makinë 3,5 inç.

Kutia Cooltek GT-04 (Portokalli/E gjelbër) është e pajisur me një dritare anësore që ofron një pamje të komponentëve të sistemit. ...

Kingston Technology, një prodhues lider i memories PC me një histori të gjatë suksesi në treg, ka njoftuar lëshimin e moduleve të reja të memories për të festuar 10 vjetorin e linjës së produkteve HyperX. Një tipar i dukshëm i produkteve të reja është e zeza bordi i qarkut të printuar, i përdorur në familjen HyperX dhe HyperX Beast, si dhe prania e një shpërndarësi unik të nxehtësisë që përmirëson ndjeshëm shpërndarjen e nxehtësisë.

Seria HyperX Beast me PCB të zezë, pjesë e linjës Predator, karakterizohet nga kapaciteti i madh dhe frekuencat maksimale të funksionimit. Në shitje me pakicë, modulet...

Ekskluzivisht për adhuruesit e montimit të një sistemi nga komponentë të bardhë borë, organizata CORSAIR ka shtuar mekanizma në këtë ngjyrë në serinë e mirënjohur të furnizimeve me energji CORSAIR RMx. Përveç trupit të vetë burimit, Ngjyra e bardhë mori kabllo plotësisht modulare, dhe prania e një numri të vogël përbërësish të zinj i jep një pamje në modë mekanizmave të rinj, duke theksuar kontrastin.

Të gjitha variantet e linjës CORSAIR RMx White kanë një bazë elementësh me cilësi të lartë (përfshirë përdorimin e kondensatorëve thjesht japonezë me temperaturë të lartë...

Ky problem haset nga të gjithë ata që përpiqen të lidhin ndonjë pajisje me portin LPT. Sapo t'i tregoni programit "përdor LPT", do të merrni një gabim - ai pasqyrohet në pamjen e ekranit në të djathtë. Pra, le të përpiqemi ta kuptojmë dhe ta rregullojmë.

E hasa kur shtova një bord kontrollues me porte 1-LPT dhe 2-COM. Kishte një nevojë definitive për këtë - lidhja e dekoderit të brezit RU-005A. Kjo do të diskutohet në artikullin vijues. Ndërkohë, do të doja të merrja një port LPT që funksionon siç duhet në Win -Test nën Windows -7 (64 bit).

Kompjuterët modernë nuk kanë pasur një port paralel për një kohë të gjatë. Përndryshe, mund të instaloni një kontrollues shtesë në të. Mos u tremb nga kjo fjalë, nuk ka asgjë të frikshme në të. Arsyeja pse ndodh gabimi i mësipërm është e thjeshtë - drejtuesi dhe biblioteka e DriverLINX (DLPortIO.sys + DLPortIO.dll) nuk ekziston për versionet e Windows për arkitekturën x86-64 (AMD64, Intel64). Zhvilluesi Scientific Software Tools Inc ndaloi mbështetjen e shoferit, duke e transferuar atë në një kompani tjetër, dhe ata ndaluan vetëm në versionin 32-bit. Microsoft ngre supet dhe ia dërgon prodhuesit. Sidoqoftë, ekziston një komplet i mirë - ky është InpOut32 (hwinterface.sys+inpout32.dll), madje edhe versioni 64-bit i InpOutx64 me drejtuesin hwinterfacex64.sys.

Le të kalojmë nga teoria në zbatimin praktik. Në magazinë:

  • Versioni Win-Test 4.10, i përditësuar për të lëshuar Rishikimin: 524 nga 13-Korrik-2013.
  • Windows 7 Ultimate (64 bit) me të gjitha përditësimet.
  • Intel Core i7-3770 (3.4 GHz) + PC3-10700 (667 MHz) 8x2=16 Gb + Asus P8Z77-V LX
  • Kontrolluesi * PCI COM/LPT (2+1) porta WCH353 me shumicë

Instalimi i kontrolluesit

Vetë kontrolluesi nuk është asgjë interesante në thelb dhe emri i tij jep një ide pothuajse të plotë - dy COM dhe një port LPT, ai është i instaluar në PCI. Vetë pajisja është e lirë dhe kushton 360 rubla (rreth 12 dollarë), e prodhuar në Kinë.

Paketimi ishte OEM. Kompleti përfshin dy kabllo me porte COM në kllapa dhe një disk me drejtues të supozuar. Unë nuk i instalova ato, e dija që më parë se nuk do të përshtateshin. Të gjitha rrugët të çonin në faqen e internetit të prodhuesit. Për çdo rast, po jap një lidhje dhe po postoj të njëjtin drejtues në arkiv.


Procedura e instalimit të kontrolluesit nuk shkaktoi ndonjë problem - gjithçka ishte mjaft e thjeshtë. Fikni kompjuterin, instaloni në një vend të lirë PCI, ndizni, instaloni drejtuesin. Kompleti përfshin një program instalues. Ndërfaqja e tij nuk është e komplikuar dhe e kuptueshme. Për mua, gjithçka kaloi përmes zbulimit automatik të llojit të kartës dhe gjithçka që duhej të bëja ishte të klikoja Instalo driver. Procesi i instalimit shoqërohet me një shirit lëvizës në ndërfaqe, gjithçka është shumë e qartë.

Programi ju lejon të ricaktoni portet nëse është e nevojshme. Për shembull, nëse ka porte virtuale COM. Për ta bërë këtë, pas instalimit, klikoni Rreth dhe butonin Modify Port Name.

Pamjet e mësipërme nuk kanë nevojë për komente të veçanta, klikoni dhe fotot do të bëhen më të mëdha. Gjithçka është në duart tuaja - konfiguroni portat e reja që shfaqen sipas gjykimit tuaj dhe për t'iu përshtatur nevojave tuaja.

Prova përfundimtare që instalimi ishte i suksesshëm duhet të jetë prania e këtyre pajisjeve në Device Manager në kompjuter. Shkoni atje dhe kontrolloni. Në rastin tim, motherboard tashmë kishte një port të integruar COM (mirë .. Më duhet). Prandaj, lista e porteve doli si kjo:

Është e mundur që do t'ju duhet të dini adresën e këtij porti dhe ta specifikoni saktë në cilësimet e programit ku do të përdoret ky port. Si parazgjedhje, adresat e portit duhet të jenë si më poshtë:

LPT -1 - 378

LPT-2 - 278

LPT -3 - 3BC

Në rastin tonë, ato do të ndryshojnë nga vlerat e zakonshme, sepse Këto porte nuk janë të integruara në motherboard dhe mënyra për të komunikuar me to është përmes autobusit PCI. Në versionin tim funksionoi D010(ne përdorim vlerën e parë). Prandaj, përpara se të instaloni (bleni) një kontrollues të tillë, shikoni nëse programi juaj ka aftësinë të vendosë intervale të tjera I/O.

Sidoqoftë, drejtuesit përfshijnë një mjet të vogël që ju lejon të ricaktoni adresa të tilla (Unë nuk jam marrë me të, nuk ka nevojë).

Rreth 10-15 vjet më parë, një port paralel ishte një ndërfaqe mjaft popullore për komunikimin midis pajisjeve. Sot prodhuesit pajisje të ndryshme jepni përparësi ndërfaqeve serike. Sidoqoftë, sot ende mund të gjendet një port LPT. Dhe disa zhvillues ende shkruajnë programe për të (ose mbështesin ato të shkruara gjatë lulëzimit të ndërfaqeve paralele). Por në kompjuterë tani mjafton një port LPT shumë e rrallë. Ka, sigurisht, kartat e zgjerimit të kompjuterit që zbatojnë ndërfaqen LPT. Ato janë në thelb bordet e autobusëve PCI. Fatkeqësisht, jo të gjithë programet që janë shkruar për të janë të integruar motherboard Portat LPT, do të punojnë me kartat LPT-PCI.

Një zgjidhje për këtë problem është propozuar: një klasë softuerësh e shkruar nën .NET dhe një bibliotekë dinamike që punon me LPT. Ky implementim është testuar në Windows XP 32 dhe 64-bit, Windows 7, 8 dhe 10, të dyja me porte LPT të integruara dhe zbatuar si karta zgjerimi në autobusin PCI ose PCI-Express. Ju mund të shkarkoni shoferin për portin LPT nga lidhja më poshtë pas artikullit.

1 Instalimi i shoferit për të punuar me portin LPT

Arkivi i bashkangjitur përmban dy dosje - për versionet 32-bit dhe 64-bit të Windows. Ekziston një skedar në një nga dosjet InstallDriver.exe. Fillimisht ekzekutoni këtë skedar, ai do të instalojë bibliotekat dinamike në sistem. Pas kësaj, kompjuteri duhet të riniset.

Për të përdorur drejtuesin e sugjeruar, skedarët inpout32.dll Dhe inpoutx64.dll duhet të vendoset në të njëjtin direktorium si skedari i ekzekutueshëm i programit tuaj.

2 Klasa e programit për përdorimin e bibliotekave duke punuar me portin LPT

Kam shkruar një klasë për .NET që përdor biblioteka dinamike inpout32.dll Dhe inpoutx64.dll dhe ju lejon të lexoni të dhëna nga porti paralel dhe të shkruani të dhëna në regjistrat e tij.

Bibliotekat e përmendura nuk janë shkruar nga unë. Unë ofroj një klasë të përshtatshme mbështjellëse që thjeshton punën me këto biblioteka. Përveç kësaj, autori i bibliotekave në dosje readme.txt raporton se drejtuesi i tij nuk mbështet pajisjet PCI. Arrita ta bëj që të funksionojë si me portin paralel të integruar ashtu edhe me portën LPT, të implementuar si një kartë zgjerimi në autobusin PCI-Express. Për më tepër, porti funksionon në mënyrë të përsosur si në sistemet moderne Windows10 x64 ashtu edhe në sistemet më të vjetra.

Këtu është kodi për klasën LPT në VB.NET:

Kodi i klasës LPT në gjuhën VB.NET(zgjerohet) Importet System.Runtime.InteropServices """ """ Punon me një port LPT. Kur krijohet, ai zbulon praninë e një drejtuesi dhe zgjedh bibliotekën e duhur. """ Klasa publike jo e trashëgueshme LPT #Rajoni "CONST" Const Publik DLL32 As String = "c:\temp\inpout32.dll" Publik Konst. \temp\inpoutx32drv.dll" """ """ Regjistrat e porteve paralele. """ Ndarja publike Regjistrohu si numër i plotë """ """ Regjistri i të dhënave SPP/EPP. """ TË DHËNAT = 0 """ """ Regjistri i statusit SPP/EPP. """ STATUSI = TË DHËNAT + 1 """ """ Regjistri i kontrollit SPP/EPP. """ KONTROLLI = TË DHËNAT + 2 """ """ Regjistri i adresave EPP. Leximi ose shkrimi në të gjeneron një cikël të lidhur leximi ose shkrimi të adresës EPP. """ EPP_ADDRESS = TË DHËNAT + 3 """ """ Regjistri i të dhënave EPP. Leximi (Shkruaj) gjeneron një cikël leximi (shkrimi) të të dhënave të EPP-së. """ EPP_DATA = TË DHËNAT + 4 """ """ Regjistri i aktivizimit të modalitetit EPP. """ """ """ Nëse përzihet vetëm "ECP+EPP" ose "Extended" - me shumë mundësi do t'ju duhet gjithashtu të shkruani bajt 0x80 në portën ECR """ (ECR është regjistri i modalitetit ECP, ECR=BASE_ADDR+0x402, BASE_ADDR është Adresa bazë LPT -porti """ ECR = TË DHËNAT + &H402 "Enum TEST Fund #End Region" /CONST #Rajon "DllImport" Funksioni i përbashkët privat IsInpOutDriverOpen() si funksion fundi i bajtit Funksioni i përbashkët privat IsInpOutDriverOpen_x64() As UInt64 Fund Funksioni i përbashkët privat Inp32 (PortAddress As UInt32) Si Funksioni i Fundit të Bajtit Sub Out32 Private Shared (portAdresa si UInt32, të dhënat si UInt32) Fund Sub Funksioni i përbashkët privat Inp64 (PortAddress As UInt64) Si Funksioni i Fundit të Bajtit Nën Out64 të përbashkët private (Adresa portuale si UInt64, të dhënat si UInt64) Fundi i nën #End Rajoni "/DllImport #Rajoni "CTOR" """ """ Kontrollon nëse mund të përdoren drejtuesit x86 ose x64. Nëse jo, hedh një përjashtim "shoferi nuk është i instaluar". """ Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 Si Boolean = CheckIsDriverX64() Nëse x64 Pastaj _IsX64DriverUsed = True ElseIf x86 Pastaj _IsX64DriverUsed = False Else Throw System nuk është instaluar Ex." ) Fund If Fund Sub """ """ Inicializimi i portit - vendosja e XXXX0100"b në regjistrin e kontrollit. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) Fund Sub #End Region "/CTOR #Region "PROPS" """ """ Nëse përdoret versioni 64-bit i drejtuesit. """ Nëse drejtuesi nuk është i instaluar, kthehet NULL. """ Prona publike e përbashkët vetëm për lexim Është X64DriverPërdoret si Boolean? Merr Kthim _IsX64DriverUsed Fund Get End Property Private Shared Only Reading _IsX64DriverUsed As Boolean? = Asgjë #Fund Rajoni "/PROPS #Rajoni "METODA" """ """ Përcakton nëse drejtuesi është 32-bit. """ Funksioni i përbashkët privat CheckIsDriverX86() Si Boolean Provo Dim res As Byte = IsInpOutDriverOpen() Ktheje Catch e vërtetë ex Si përjashtim Kthehu False Fund Provoni Funksionin Fund """ """ Përcakton nëse drejtuesi është 64-bit. """ Funksioni i përbashkët privat CheckIsDriverX64() Si Boolean Provoni Dim nRezultat si ULong = IsInpOutDriverOpen_x64() Kthimi (nRezultati<>0) Catch ex Si Exception Kthehu False Fund Provoni Funksionin Fund #End Region "/METHODS #Rajon "Lexo / Write LPT Port" """ """ Lexon 1 bajt të dhëna nga regjistri i specifikuar i portit LPT. """ """ Numri i portit. """ Regjistri portual. Funksioni i përbashkët publik Lexo (port si ULong, reg opsional si Regjistrohu = Regjistrohu. TË DHËNA) Si Bajt Të dhëna të zbehta si Byte = 0 Nëse IsX64DriverUsed Pastaj të dhënat = Inp64(CULng(port + reg)) Të dhëna të tjera = Inp32(CUInt(port + reg ) )) Fundi nëse kthen të dhënat Funksioni i Fundit """ """ Shkruan një numër në regjistrin e specifikuar të portit LPT. """ """ Adresa e portit. """ Regjistri portual. """ Nën-shkrimi i përbashkët publik (port si ULong, reg si regjistër, të dhënat si ULong) Nëse IsX64DriverUsed Pastaj Out64 (port + CULng (reg), të dhëna) Përndryshe nëse (të dhëna<= 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 """ """ Teston praninë e një porti LPT në një adresë të caktuar. """ """ Adresa e portit paralel. Funksioni publik i përbashkët CheckPortPresent(lptAddress As ULong) Si Boolean Dim portPransent Si Boolean = False Provoni InitLpt(lptAddress) Dim data Si ULong = Read(lptAddress, Register.DATA) "ruani vlerën aktuale të regjistrit të të dhënave" Le të kontrollojmë: çfarë ishte u lexua edhe i shkruar ? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent Dhe (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent Dhe (&H55 = Read(lptAddress, Register.DATA )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) "rivendos vlerën e mëparshme të regjistrit të të dhënave" Kontrollo prania e regjistrave të kontrollit dhe të dhënave nëse porti nuk zbulohet (në rastin e një porti njëdrejtues) Nëse (Not portPresent) Pastaj të dhënat = Read(lptAddress, Register.CONTROL) portPresent = ((të dhëna<>0)DheGjithashtu(të dhënat<>&HFF)) "Jo bosh? => Porta është e pranishme. Nëse (Jo portPresent) Pastaj të dhënat = Lexo(lptAddress, Register.STATUS) portPresent = ((të dhëna<>0)DheGjithashtu(të dhënat<>&HFF)) Fundi Nëse Fundi Nëse Catch ex Si Exception Kthehu Fundi i rremë Provoni Kthejeni portin Present Fund Funksioni Fund Klasa "/LPT

Kodi i klasës LPT në C#:

Kodi i klasës LPT në C#(zgjerohet) duke përdorur Sistemin; duke përdorur System.Diagnostics; duke përdorur System.Runtime.InteropServices; hapësira e emrave LPTIO ( /// Klasa për të punuar me një port LPT. Kur krijohet, ajo përcakton praninë e një drejtuesi dhe kapacitetin e tij bit. LPT e klasës së vulosur publike( string private const DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Nëse po përdoret versioni 64-bit i drejtuesit. bool publik statik IsX64DriverUsed (merr (ktheje LPT._IsX64DriverUsed;)) LPT statike ()( nëse (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) tjetër (nëse (!LPT.getIsDriverX64()) hidhni SystemException të ri ("Shoferi për portën LPT nuk është i instaluar."); LPT._IsX64DriverUsed = true; ) ) publik LPT() ( ) byte statike e jashtme private IsInpOutDriverOpen(); ekstern privat statik gjatë IsInpOutDriverOpen_x64(); byte e jashtme statike private Inp32 (uint PortAddress); private static extern void Out32 (uint portAddress, uint data); byte e jashtme statike private Inp64 (gjatë adresës së Portit); private static extern void Out64 (gjatë adresës së Portit, gjatë të dhënave); /// Përcakton nëse drejtuesi është për Windows 32-bit. bool private statike getIsDriverX86()( flamuri bool; provo ( LPT.IsInpOutDriverOpen(); flamur = i vërtetë; ) kap (Përjashtim ex) ( ProjectData.SetProjectError(ex); flamur = false; ProjectData.ClearProjectError(); ) kthim flamur;) /// Përcakton nëse A është shoferi për Windows 64-bit? bool private statike getIsDriverX64()( flamur bool; provo ( flamur = Dhjetor. Krahaso (New Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; ) kap (Exception ex) ( ProjectData.SetProjectError(ex); flamur = false; ProjectData. ClearProjectError(); ) flamuri i kthimit;) /// Lexon 1 bajt të dhëna nga porta LPT. /// Numri i portit. /// Regjistri portual. bajt publik statik Lexuar (port i gjatë, LPT.Regjistrohu reg = LPT.Register.DATA)( kthimi !LPT.IsX64DriverUsed ? LPT.Inp32(Convert.ToUInt32(Decimal.Add(New Decimal(port), new Decimal((int) reg)))) : LPT.Inp64(Convert.ToUInt64(Decimal.Ad) Dhjetor (port), i ri dhjetor ((int) reg)))); ) /// Shkruan një numër në portën LPT. /// Adresa e portit. /// Regjistri portual. /// Numri për regjistrim. Në sistemet 32-bit, argumenti duhet të jetë jo më shumë se vlera maksimale për llojin UInt32. Shkrimi publik statik i zbrazët (port i gjatë, LPT. Regjistro reg, të dhëna të gjata)( nëse (LPT.IsX64DriverUsed) ( LPT.Out64 (kontrolluar (port + (ulong) (uint) reg), të dhëna); ) tjetër ( if (data > (ulong) uint.MaxValue) hedh ArgumentException të ri ("Në 32- në sistemet bit, argumenti duhet të jetë 32-bit (lloji UInt32).", "të dhëna"); LPT.Out32(Convert.ToUInt32(Decimal.Add(New Decimal(port), new Decimal((int) reg)) ), të kontrolluara ((të dhëna të pakta))); ) ) /// Regjistrat e portave LPT. numër publik Regjistrohu( TË DHËNAT, STATUSI, KONTROLLI, ) ) )

3 Përdorimi i një klase .NET për të punuar me portin LPT

Nëse shikojmë listën e funksioneve të bibliotekës së eksportuar inpout32.dll me një mjet të madh Shikuesi i eksportit të DLL nga NirSoft, do të shohim foton e mëposhtme:

Kjo është një listë e funksioneve që ne mund të përdorim. Në fakt të gjitha ato përdoren në klasë LPT, por zbatimi është i fshehur, dhe nga metodat publike, vetëm dy metoda dhe një pronë janë në dispozicion të përdoruesit (diskutohen pak më tej).

Gjatë instancimit, vetë klasa do të përcaktojë se cilën bibliotekë duhet të përdorë - inpout32.dll ose inpoutx64.dll. Prandaj, përdoruesit nuk i kërkohet të ndërmarrë ndonjë veprim për të inicializuar ose përcaktuar thellësinë e bitit të përdorur dll. Ju mund të shkruani ose lexoni menjëherë nga porti LPT. Një "Por": nëse drejtuesi nuk është i instaluar, thirrja e ndonjë prej metodave dinamike të bibliotekës do të shkaktojë një përjashtim, kështu që unë rekomandoj përdorimin e blloqeve Provo...Kape për të kapur dhe trajtuar përjashtimet.

Disa shembuj të përdorimit të klasës LPT.

Për të përcaktuar nëse përdoret versioni 64-bit i drejtuesit (inpoutx64.dll nëse është i vërtetë) ose 32-bit (inpout32.dll nëse është i gabuar) (në fakt, nuk keni nevojë ta dini këtë, klasa përdor saktësisht bibliotekën kjo është e nevojshme, por papritmas ju për ndonjë arsye do t'ju duhet ta zbuloni këtë nga programi juaj):

Bool is64bitDriver = LPT.IsX64DriverUsed;

Për të shkruar numrin "123" në regjistrin e kontrollit të portit LPT, telefononi nga klasa juaj:

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

Për të lexuar një bajt nga regjistri i të dhënave të portit LPT dhe për të lexuar regjistrin e statusit:

Byte b = LPT.Read(currentPort, LPT.Register.DATA); byte s = LPT.Read(currentPort, LPT.Register.STATUS);

Këtu Porti aktual - Adresa e portit LPT. Për më tepër, nëse keni një port të integruar LPT, atëherë ka shumë të ngjarë që adresa e tij të jetë 378h. Dhe nëse keni një port LPT në një tabelë zgjerimi, atëherë adresa do të jetë e ndryshme, për shembull, D100h ose C100 orë.

Për të gjetur adresën e portit LPT, shkoni te Windows Device Manager, gjeni seksionin Portet COM dhe LPT, zgjidhni portin paralel që po përdorni dhe në dritaren e vetive (duke klikuar me të djathtën mbi të) shikoni se çfarë burimesh përdor porta e zgjedhur (duhet të merrni vlerën e parë nga diapazoni).


Për shembull, në në këtë rast duhet të përdoret numri i portit C100.

Shkarkoni bashkëngjitjet:

  • Shkarko shoferin për portin LPT (3281 shkarkime)

Ne rekomandojmë shumë takimin me të. Aty do të gjeni shumë miq të rinj. Përveç kësaj, është më i shpejti dhe mënyrë efektive kontaktoni administratorët e projektit. Seksioni i Përditësimeve Antivirus vazhdon të funksionojë - përditësime gjithmonë të përditësuara falas për Dr Web dhe NOD. Nuk kishit kohë për të lexuar diçka? Përmbajtja e plotë Tikeri mund të gjendet në këtë lidhje.

Puna me një port LPT në Win NT/2000/XP

Porta LPT (L ine P rin T er) është një port paralel i ndërfaqes që u krijua fillimisht për të lidhur një printer. BIOS ofron mbështetje për portën LPT, e cila është e nevojshme për të organizuar daljen përmes ndërfaqes Centronics. Hapësira e adresës së portit zë gamën &H378-&H37F

Porta LPT ka 12 linja dalëse dhe 5 linja hyrëse. Kjo është mjaft nje numer i madh i linjat e bën lidhje e mundshme në portin e pajisjeve të thjeshta, të cilat mund të mos kenë as mikrokontrolluesin e vet. Prandaj, kjo portë, megjithë zhdukjen e printerëve me një ndërfaqe LPT, përdoret në mënyrë aktive për të lidhur programues të thjeshtë të çipave memorie, ndërfaqe JTAG për ndezje (duke zëvendësuar software) marrës satelitor, DVD player dhe pajisje të tjera elektronike. Porti LPT është gjithashtu i popullarizuar në mesin e modifikuesve, pasi ju lejon të lidhni ekranet LCD me kompjuterin tuaj pa bërë borde ndërfaqe komplekse.

Windows 2000/XP nuk lejon që aplikacionet të kenë akses direkt në portet I/O. Për ta bërë këtë, duhet të përdorni një drejtues që funksionon në modalitetin KERNEL (në modalitetin e kernelit të sistemit operativ).

Kufizimi i aksesit në portat I/O për programet e zakonshme të aplikimit (që funksionojnë në modalitetin e përdoruesit) e bën sistemin operativ më të qëndrueshëm. Edhe pse, nga ana tjetër, askush nuk po e ndalon programuesin të shkruajë një drejtues që hyn në portet.

Pyes veten për çfarë procesor Intel x86, mund të shkruani një drejtues që përdor një nga dy në thelb qasje të ndryshme. Opsioni i parë është që vetë shoferi t'i qaset porteve dhe programi i aplikacionit i tregon shoferit vetëm se çfarë të bëjë. Ky opsion është përgjithësisht standard dhe i preferuar.

Për të zgjidhur problemin, ekzistojnë katër opsione të njohura të drejtuesit që lejojnë një program aplikacioni të hyjë në portet I/O: shoferi DLPortIO, shofer Porta e përdoruesit, shofer JepIO.sis, shofer Port95nt.

Të katër opsionet janë pothuajse ekuivalente.

Drejtues DLPortIO

DLportIO - drejtuesi i aksesit të portit nga paketa ShoferLINX nga Scientific Software Tools, Inc. (http://www.sstnet.com) në formë të shkurtuar (pa përshkrim dhe dokumentacion të panevojshëm). Për funksionimin normal të programeve të mirëmbajtjes për treguesit LCD, ne mund të rekomandojmë këtë opsion drejtuesi.

Vetë shoferi përbëhet nga dy komponentë:
. DLPortIO.dll - Win32 DLL ofron I/O harduer dhe
. DLPortIO.sys - drejtues për WinNT, që funksionon në modalitetin e kernelit OS (nuk kërkohet për Win95/98)

Në paketën e instalimit të shoferit, përveç këtyre dy komponentëve, ekziston edhe një skedar Install.exe që zhvendos dy të lartpërmendurat në dosje drejtuesit e Windows dhe regjistrimin e tyre në sistem.

Nuk ka asgjë më shumë për të shkruar për këtë shofer. Nuk kërkohet konfigurim. Shkarkuar, instaluar, përdorur. Mos harroni të shikoni në fund të artikullit dhe të lexoni për sigurimin e funksionalitetit të portit LPT.

Instalimi është i thjeshtë - ekzekutoni skedarin Install.exe dhe instaloni. Pasi të përfundojë instalimi, shikoni në dosjen C:\Windows\System32\drivers dhe kontrolloni për praninë e dy skedarëve të drejtuesve (DLPortIO.sys dhe DLPortIO.dll). Nëse shohim që këta skedarë nuk janë kopjuar, i marrim nga paketa e instalimit dhe i kopjojmë manualisht. Mos u shqetësoni, asgjë e keqe nuk do të ndodhë me kompjuterin tuaj. Rinisim kompjuterin dhe punojmë me portën LPT.

Nëse papritur, si rezultat i manipulimeve me pajisjen, merrni një mesazh nga drejtuesi si ky: "Driferi i pajisjes dlportio.sys nuk është i ngarkuar. Porta I/O nuk do të ketë efekt", mos u frikësoni. Ky problem zgjidhet si kjo:
. Nis regedit.
. Shkojmë në degën në regjistër HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. Në dosjen dlportio, ndryshoni vlerën e parametrit Filloni1 .
. Rinisni kompjuterin.

Shofer UserPort

Shofer Porta e përdoruesit hap aksesin në portet në Win NT/2000/XP për programet. Ky version i drejtuesit të portit LPT përdoret më shpesh nga "teknikët" që punojnë me programues dhe JTAG, pasi drejtuesi ka të paktën disa cilësime konfigurimi. Mund të përdoret gjithashtu për të përdorur programet e mirëmbajtjes për treguesit LCD.

Arkivi i shoferit përmban tre skedarë:
. UserPort.sys - shofer për WinNT, që funksionon në modalitetin e kernelit OS,
. UserPort.exe është një program për konfigurimin e drejtuesit dhe
. UserPort.pdf - skedari i përshkrimit.

Instalimi i UserPort:
. 1. Shpaketoni arkivin në një dosje të veçantë.
. 2. Kopjo skedarin UserPort.sys te C:\Windows\System32\drivers

Cilësimi i UserPort:
. Ekzekutoni UserPort.exe.
. Një panel me 2 dritare do të shfaqet para nesh.

Dritarja e majtë i referohet programit që funksionon në një dritare DOS, e djathta në ekran i plotë. Si parazgjedhje, ato përmbajnë numra portash LPT - të gjithë mund të hiqen duke përdorur butonin "Hiq". Në të dyja dritaret duhet të futni numrat e kërkuar të portit që planifikoni të përdorni.

Për përdorim nga drejtuesi me shumicën e programuesve, JTAG-ve dhe programeve të shërbimit të ekranit, shtoni parametrat e mëposhtëm në kolonën e majtë:
378 , 379 Dhe 37A Për LPT1
278 , 279 Dhe 27A Për LPT2(Nëse adresa e portit LPT ricaktohet në BIOS).

Më lejoni të shpjegoj se çfarë kuptimi kanë numrat. 0x378- kjo është adresa e portit.
. Adresë 0x378 thirrur bazë dhe përdoret për të shkruar dhe lexuar të dhëna në dhe nga porti, nëpërmjet autobusit të të dhënave D0-D7.
. Adresë 0x379 (bazë+1) krijuar për lexoni copa statusi nga një pajisje e lidhur me portën LPT.
. Adresë 0x37A (bazë+2) shërben për regjistrim bit kontrolli i pajisjes së lidhur me portën LPT.

Shtojeni si kjo:
0x378-0x378
0x37A-0x37A



Ju duhet të shtoni adresat e porteve në listë përmes dritares së hyrjes dhe duke përdorur butonin "Shto". Adresë 0x379 më shpesh nuk është e nevojshme dhe mund të hiqet, pasi është menduar për lexoni copa statusi nga një pajisje e lidhur me portën LPT dhe shumica e pajisjeve (programuesit, JTAG-të dhe treguesit LCD, veçanërisht) nuk gjenerojnë sinjale statusi. Nëse dëshironi, përkundrazi, mund të futni të gjithë gamën e adresave të ndara nga sistemi për portin LPT 0x378-0x37F.

Shkojmë Paneli i kontrollit, Sistemi, zgjidhni skedën Pajisje, Menaxheri i pajisjes, shkoni te Ports (COM dhe LPT) dhe shikoni vetitë e portit LPT përmes të cilit dëshironi të krijoni një lidhje. Në "Properties", hapni skedën "Resources" dhe shikoni vlerën e parametrit Gama hyrëse/dalëse (I/O).. (Zakonisht në Windows XP është 378 - 37F)

Pas gjenerimit të listës së adresave, duhet të klikoni në butonin "Start", shoferi do të hapet dhe do të shfaqet mesazhi:



Pastaj klikoni në butonin "Përditëso", shoferi do të regjistrohet në sistem, pastaj "Dalja". Natyrisht, nuk ka nevojë të shtypim butonin "Stop" kur jemi duke përdorur shoferin.

Nëse sistemi rindizet kur klikoni butonin "Përditëso", duhet të përpiqeni të regjistroni drejtuesin në sistem me të drejtat e administratorit ose të përpiqeni të çaktivizoni përkohësisht murin e zjarrit ose antivirusin, gjë që mund të bllokojë ndërhyrjen në proceset e sistemit. Nëse diçka nuk funksionon, lexoni UserPort.pdf

Për të kontrolluar nëse është shfaqur qasja në porte, mund ta ekzekutoni programin "lpt-test.exe".

Pas fillimit të programit, do të shfaqet një dritare me përmbajtjen e mëposhtme:



Mungesa e mesazhit "Porta LPT po testohet (Adresa XXXh)" dhe linjat pas saj tregojnë se drejtuesi nuk po punon.

Ky program thjesht dërgon numra të ndryshëm në regjistrin e të dhënave Dx dhe regjistrin e kontrollit Ux të portit LPT, dhe më pas i lexon ato. Regjistri i statusit të portit LPT Sx lexohet vetëm. Numri dhe adresa e portit LPT që po testohet shfaqet në ekran. Nëse porti është i shëndetshëm, atëherë nuk duhet të lëshohen mesazhe për regjistrat Dx dhe Ux.



LPT-TEST v1.03 1995-2003 E drejta e autorit (C) S.B.Alemanov. Moska "BINAR".
Gjatë testimit, asnjë pajisje periferike nuk duhet të lidhet me portet.
Dx - reg. të dhëna (jashtë), Ux - reg. kontroll (jashtë), Sx - reg. statusi (inp).

Porta LPT1 po testohet (Adresa 378h)
Kontakti i dytë (D0) - jo "1"
Kontakti i tretë (D1) - jo "1"
Kontakti i 4-të (D2) - jo "1"
kunja e 5-të (D3) - jo "1"
kunja e 6-të (D4) - jo "1"
Kunja e 7-të (D5) - jo "1"
kunja e 8-të (D6) - jo "1"
kunja e 9-të (D7) - jo "1"
Kontakti i parë (U0) - jo "1"
Kunja e 14-të (U1) - jo "1"
Kunja e 17-të (U3) - jo "1"
Kontakti i parë (U0) - jo "0"
Kunja e 14-të (U1) - jo "0"
Kontakti i 17-të (U3) - jo "0"
Kontakti i 15-të (S3) - jo "0"


Nëse regjistrat Dx ose Ux janë të gabuar, atëherë shfaqet mesazhi "jo 0" ose "jo 1" dhe tregohet numri i pinit në lidhësin LPT (sinjalet në këtë kunj mund të shihen me një oshiloskop). Hyrja e regjistrit të statusit Sx mund të jetë ose "0" ose "1", por zakonisht, kur asgjë nuk është e lidhur me portën LPT, të gjitha hyrjet e regjistrit të statusit janë "1". Shfaqja e statusit "0" në hyrjen e regjistrit mund të jetë një shenjë se hyrja është prishur, nëse më parë kishte gjithmonë një "1" atje.
Në disa makina, nëse regjistri i të dhënave ose regjistri i kontrollit është i gabuar, atëherë qasja në portin LPT nuk shfaqet fare. Me sa duket, kur ndizni kompjuterin, BIOS teston portin LPT dhe, nëse është i gabuar, e çaktivizon atë.

Nëse shfaqen probleme, është e mundur që disa drejtues të ndërhyjnë në funksionim duke dërguar periodikisht pulse në portin LPT (kjo mund të shihet me një oshiloskop). Për shembull, mund të shkëputeni nga porta LPT në cilësimet e printerit:
fik LPT1: Porta e printerit
aktivizo FILE: Printo në skedar

Pasi të zgjidhen të gjitha problemet dhe të ketë kaluar testi, duhet të shfaqet qasja në porte dhe mund të ekzekutoni një program që përdor portën LPT. Përndryshe, pajisja e lidhur me portin në një makinë të tillë nuk do të funksionojë.

Driver GiveIO.sys

Në vitin 1996, programuesi amerikan Dale Roberts kreu një seri eksperimentesh, rezultati i të cilave ishte shoferi GiveIO.sys. Deri më tani, ky drejtues mbetet një nga mjetet e njohura që lejon një program aplikacioni të hyjë në portet I/O.

Vetë autori i shoferit rekomandon fuqimisht përdorimin e këtij drejtuesi vetëm për qëllime korrigjimi. Versioni përfundimtar i programit të aplikacionit, në vend që të aksesojë vetë portat I/O, duhet t'ia besojë këtë detyrë një drejtuesi të shkruar posaçërisht për këto qëllime. Drejtuesi duhet të sillet "korrekt" duke kontrolluar nëse pajisja është tashmë në përdorim nga ndonjë aplikacion tjetër.

Megjithatë, nëse jeni absolutisht i sigurt se askush nuk përdor portat e kërkuara hyrëse/dalëse përveç jush (për shembull, nuk keni një printer të lidhur me LPT), mund të përdorni me siguri drejtuesin GiveIO.sys.

Instalimi i shoferit:

1. Shkarkoni arkivin, shpaketoni dhe kopjoni skedarin GiveIO.sys në drejtorinë C:\Windows\System32\Drivers (duke supozuar që Windows-i juaj është i instaluar në direktorinë C:\Windows).
. 2. Ekzekutoni skedarin install.reg. Mesazhi i mëposhtëm do të shfaqet në ekran:


. 3. Përgjigjemi pozitivisht. Do të shfaqet një mesazh që tregon se informacioni është futur me sukses në regjistër. Nëse dëshironi, mund ta verifikoni këtë. Ne hapim redaktorin e regjistrit regedit.exe dhe në degë HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio Ne kontrollojmë për praninë e të dhënave të mëposhtme:


. 4. Rinisni kompjuterin dhe kontrolloni funksionimin e programeve duke përdorur drejtuesin.

Shofer GiveIO.sys njerëzit e përdorin atë në mënyrë aktive dhe, me kalimin e kohës, u shfaqën opsione të tjera për instalimin e tij.

Për shembull - shofer GiveIO.sys nëse ka një skedar me "informacion harduerik" GiveIO.inf mund të instalohet përmes apletit "Instalimi i harduerit".




Ne do të tregojmë drejtuesin GiveIO.sys sistemi operativ, në mënyrë që ajo të besojë në ekzistencën e pajisjeve GiveIO.

Shkarkoni një grup skedarësh për këtë opsion instalimi të drejtuesit GiveIO.sys(giveio_sys_v2.rar - 78kb). Arkivi përmban skedarët GiveIO.sys dhe GiveIO.inf, si dhe udhëzime të hollësishme udhëzimet e instalimit me ilustrime.

Përveç opsioneve për instalimin "manual" të drejtuesit, janë shkruar disa versione të instaluesit që kryejnë instalimin automatikisht.

Shkarkoni një grup skedarësh për instalim automatik shoferët GiveIO.sys(giveio_sys_install.rar - 28kb). Arkivi përmban skedarët GiveIO.sys dhe instdrv.exe, si dhe skedarin remove-giveio.cmd, me të cilin drejtuesi GiveIO.sys mund të hiqet nga sistemi.

Shoferi Port95nt

Termi " shofer Port95nt" nuk do të jetë plotësisht i saktë këtu. Në thelb, ky është i njëjti drejtues DLPortIO nga paketa ShoferLINX nga Scientific Software Tools, Inc., vetëm në versionin e plotë, me disa programe të menaxhimit të portit, me një përshkrim dhe shumë shembuj për programuesit. Përdoruesi mesatar nuk ka asnjë përfitim nga komponentët shtesë, dhe komponentët e drejtuesit DLPortIO.sys dhe DLPortIO.dll janë saktësisht të njëjta si në versionin e shkurtuar.

E përmenda Port95nt si shofer për dy arsye. E para është të plotësoni listën e referencave për drejtuesit e portit LPT që gjenden në internet.

Arsyeja e dytë është se në disa raste mund të ketë probleme me instalimin e një versioni të shkurtuar të DLPortIO nën WinXP. Zakonisht, por jo shpesh, kjo ndodh në versionet e zhveshura të "autorit" të WinXP. Në këtë rast, ju mund të merrni versioni i plotë instaluesi (1.5 MB). Megjithëse, për mendimin tim, do të jetë më e shpejtë të vendosni manualisht DLPortIO.sys dhe DLPortIO.dll në dosjen e dëshiruar sesa të shqetësoheni me zgjedhjen e një instaluesi që mund ta bëjë këtë për ju.

Masat shtesë

Përveç instalimit të një prej drejtuesve të lartpërmendur, për funksionimin normal të portit LPT nën WinXP OS, duhet të redaktoni regjistrin duke përdorur një skedar REG xp_stop_polling.reg(xp_stop_polling.rar - 0,48 kb)

Nën WinXP, pajisjet që përdorin portën LPT janë ndonjëherë të paqëndrueshme. Shkaku i dështimeve të tilla mund të jetë nënsistemi Plug-and-Play (PnP) në Windows, i cili anketon periodikisht LPT-në për të zbuluar pajisjet e lidhura. Ky sondazh ndodh kur sistemi niset, por mund të ndodhë edhe gjatë funksionimit. Fatkeqësisht, drejtuesi DLportIO.sys dhe opsionet e tjera të drejtuesit nuk bllokojnë hyrjen në LPT nga programet e tjera kur punoni me portën e klientit të këtij drejtuesi, dhe nënsistemi PnP është i sigurt që porti nuk është i zënë, e qaset atë dhe ndërpret funksionimin e pajisje të jashtme. Skedari REG përdoret për të zgjidhur problemin. xp_stop_polling.reg. Ky skedar është i shkruar në regjistër Çelësi i Windows, i cili ndalon një votim të tillë ndërsa sistemi është në punë.

Përveç instalimit të drejtuesit dhe kufizimit të aksesit të njëkohshëm në portë për programet, për të siguruar përputhshmërinë e harduerit dhe funksionimin normal të pajisjeve me portën LPT, është e nevojshme të vendosni adresën e saktë Dhe mënyra e funksionimit të portit("Normal", SPP ose PPE, por jo ECP).

Parametrat e mëposhtëm mund të konfigurohen nëpërmjet BIOS Setup:

Adresa bazë, e cila mund të jetë 378h, 278h dhe 3BCh. Gjatë inicializimit, BIOS kontrollon praninë e porteve sipas adresës pikërisht në këtë renditje dhe, në përputhje me rrethanat, cakton emrat logjikë LPT1, LPT2, LPT3 në portat e zbuluara. Adresa 3BCh ka një përshtatës porti të vendosur në bordin MDA ose HGC (paraardhësit e kartave video moderne). Shumica e porteve janë konfiguruar për të adresuar 378h si parazgjedhje dhe mund të kalohen në 278h.

Linja e kërkesës për ndërprerje e përdorur, IRQ7 përdoret zakonisht për LPT1, IRQ5 për LPT2. Në shumë aplikacione desktopi, ndërprerjet e printerit nuk përdoren dhe ky burim i pakët i kompjuterit mund të ruhet. Megjithatë, kur përdorni mënyrat me shpejtësi të lartë ECP (Fast Centronics), funksionimi i ndërprerjes mund të përmirësojë ndjeshëm performancën dhe të zvogëlojë ngarkesën e procesorit.

Në të njëjtën kohë, modaliteti ECP nuk mund të përdoret me pajisjet që kërkojnë kohë të ngushta (programuesit dhe ndërfaqet JTAG).

Si përfundim, pak për terminologjinë:

. SPP(Standard Parallel Port - standard paralel port). Shpesh, për të thjeshtuar të kuptuarit, në BIOS shënohet me termin " Normale".
. PPE(Portë paralele e përmirësuar) - opsioni i ndërfaqes dydrejtimëshe me shpejtësi të lartë. Qëllimi i disa sinjaleve është ndryshuar, aftësia për të adresuar pajisje të shumta logjike dhe hyrje të të dhënave 8-bit, si dhe një tampon FIFO harduerik 16-byte është prezantuar. Shpejtesi maksimale shkëmbim - deri në 2 Mb/s.
. ECP(Enhanced Capability Port) - një version inteligjent i EPP. Është prezantuar aftësia për të ndarë informacionin e transmetuar në komanda dhe të dhëna, mbështetje për DMA dhe kompresim të të dhënave të transmetuara duke përdorur metodën RLE (Run-Length Encoding).


Pra, le të shqyrtojmë opsionin e mëposhtëm për të punuar me portet I/O në Windows NT. Ky "opsion" do të jetë një shofer i veçantë GiveIO.sys, i cili lejon aplikacionin që e drejton të punojë lirshëm me çdo port. Ky shofer ka shkruar Dale Roberts Zoti e di kur, por nuk e ka humbur rëndësinë e saj deri më sot.



Unë do t'ju tregoj shkurtimisht se si funksionon: në fillim të programit tonë, për të komunikuar me portet, duhet të kontaktoni shoferin GiveIO.sys. Në të njëjtën kohë, ai do të vendosë bitmap-në e sistemit të hartës së lejeve (Harta e lejeve I/O) për aplikacionin tonë në vlera të tilla që do t'i lejohet aksesi i drejtpërdrejtë në çdo portë. Harta e lejeve I/O- Kjo komponent Sistemet e mbrojtjes së Windows NT I/O. Është një grup bit, secili bit i të cilit korrespondon me një port I/O. Nëse biti = 1, atëherë qasja në port është e mbyllur, nëse 0, atëherë është e hapur. Për çdo aplikacion përdoruesi, të gjithë bitet janë vendosur në 1, dhe rrjedhimisht ne nuk mund të ndërhyjmë drejtpërdrejt në funksionimin e portit. GiveIO.sys me paturpësi "depërton" në këtë grup dhe e vendos atë në 0 kudo - d.m.th. ne marrim mundësinë për të hyrë në çdo port nga aplikacioni.



Së pari, shkarkoni arkivin me drejtuesin dhe skedarin e instalimit:


Tani duhet të regjistrohemi dhe të instalojmë drejtuesin në sistem. Për ta bërë këtë, duhet të kryeni një sërë operacionesh. Së pari, kopjoni skedarin e shoferit GIVEIO.sys në dosjen C:\Windows\system32\drivers\ nëse, sigurisht, sistemi juaj është i instaluar në disk ME:\ dhe nuk e keni ndryshuar rrugën e instalimit të Windows.

Klikoni po. Do të merrni një mesazh që tregon se informacioni është futur me sukses në regjistër. Ju mund ta verifikoni këtë. Në programin e redaktorit të regjistrit regedit.exe në degë HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio ju mund të shihni sa vijon:

Në mënyrë që ndryshimet që bëjmë të hyjnë në fuqi të detyrueshme Kërkohet një rifillim i KOMPJUTERIT.


Është koha për t'u marrë me programimin. Në kodin tonë të programit Port.exe(shih) ne do të bëjmë disa ndryshime që do ta lejojnë atë të aksesojë portet jo vetëm në Windows 9x si më parë, por edhe në Windows NT. Kodi përfundimtar do të duket si ky:

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

Të gjitha. Ne përpilojmë dhe ekzekutojmë. Kliko 1-0: gjithçka duhet të funksionojë. Nëse shfaqet një mesazh Gabim! Nuk mund të hapet shoferi! Shtypni ndonjë çelës për të dalë..., kjo do të thotë se instalimi i shoferit ishte i pasuksesshëm dhe duhet ta riinstaloni përsëri.

Falë giveio.sys Skriptet e mëposhtme të asamblesë do të funksionojnë gjithashtu me sukses:

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

© Dmitry Ivanov
2005-2006

E re në faqe

>

Më popullorja