Hem Fleråriga blommor Drivrutin för att arbeta med lpt-port. Portar (COM och LPT). Installera en drivrutin för att arbeta med en LPT-port

Drivrutin för att arbeta med lpt-port. Portar (COM och LPT). Installera en drivrutin för att arbeta med en LPT-port

Cooltek har lanserat ytterligare en ny produkt på marknaden – ett mellantornshölje som heter GT-04. Modellen kombinerar exceptionella egenskaper som funktionalitet, ergonomi, snygg design och ett attraktivt pris (59,99 euro). Chassit är färdigt i helsvart med ljusa orange/gröna accenter på frontpanelen. Det finns också ett par korgar för 5,25-tums optiska enheter, samt ett fack för en 3,5-tums enhet.

Cooltek GT-04 (Orange/Grön) väska är utrustad med ett sidofönster som ger en vy över systemkomponenterna. ...

Kingston Technology, en ledande PC-minnestillverkare med en lång historia av marknadsframgångar, har tillkännagivit lanseringen av nya minnesmoduler för att fira 10-årsjubileet för HyperX-produktlinjen. En anmärkningsvärd egenskap hos de nya produkterna är den svarta tryckt kretskort, som används i HyperX- och HyperX Beast-familjen, samt närvaron av en unik värmespridare som avsevärt förbättrar värmeavledningen.

HyperX Beast-serien med svart PCB, en del av Predator-serien, kännetecknas av enorm kapacitet och maximala driftfrekvenser. I detaljhandeln, moduler...

Exklusivt för fans av att montera ett system från snövita komponenter, har CORSAIR-organisationen lagt till mekanismer i denna färg till den välkända CORSAIR RMx-serien av nätaggregat. Förutom själva källans kropp, vit färg fått helt modulära kablar, och närvaron av ett litet antal svarta komponenter ger ett moderiktigt utseende till de nya mekanismerna, vilket betonar kontrast.

Alla varianter av CORSAIR RMx White-serien har en högkvalitativ elementbas (inklusive användningen av rent japanska högtemperaturkondensatorer...

Detta problem möter alla som försöker ansluta enheter till LPT-porten. Så snart du säger till programmet "använd LPT", kommer du att få ett felmeddelande - det återspeglas i skärmdumpen till höger. Så låt oss försöka ta reda på det och fixa det.

Jag stötte på det när jag lade till ett styrkort med 1-LPT- och 2-COM-portar. Det fanns ett definitivt behov av detta - att ansluta bandavkodaren RU-005A. Detta kommer att diskuteras i nästa artikel. Under tiden skulle jag vilja få en korrekt fungerande LPT -port i Win -Test under Windows -7 (64 bitar).

Moderna datorer har inte haft någon parallellport på ganska länge. Alternativt kan du installera en extra kontroller i den. Bli inte rädd av det här ordet, det finns inget skrämmande i det. Anledningen till att ovanstående fel uppstår är enkel - drivrutinen och DriverLINX-biblioteket (DLPortIO.sys + DLPortIO.dll) finns inte för Windows-versioner för x86-64-arkitektur (AMD64, Intel64). Utvecklaren Scientific Software Tools Inc slutade stödja drivrutinen, överförde den till ett annat företag, och de slutade bara vid 32-bitarsversionen. Microsoft rycker på axlarna och skickar den till tillverkaren. Ändå finns det ett bra kit - det här är InpOut32 (hwinterface.sys+inpout32.dll), och till och med 64-bitarsversionen av InpOutx64 med hwinterfacex64.sys-drivrutinen.

Låt oss gå från teori till praktisk implementering. I lager:

  • Win-Test version 4.10, uppdaterad till version Revision: 524 från 13 juli 2013.
  • Windows 7 Ultimate (64 bitar) med alla uppdateringar.
  • Intel Core i7-3770 (3,4 GHz) + PC3-10700 (667 MHz) 8x2=16 Gb + Asus P8Z77-V LX
  • Styrenhet * PCI COM/LPT (2+1)port WCH353 bulk

Installation av styrenheten

Styrenheten i sig är inget intressant i grunden och dess namn ger en nästan komplett idé - två COM- och en LPT-port, den är installerad i PCI. Enheten i sig är billig och kostar 360 rubel (cirka $12), tillverkad i Kina.

Förpackningen var OEM. Satsen innehåller två kablar med COM-portar på fästet och en skiva med förmodade drivrutiner. Jag installerade dem inte, jag visste redan i förväg att de inte skulle passa. Alla vägar ledde till tillverkarens hemsida. För säkerhets skull ger jag en länk och lägger upp samma drivrutin i arkivet.


Installationsproceduren för regulatorn orsakade inga problem - allt var ganska enkelt. Stäng av datorn, installera den i en ledig PCI-plats, slå på den, installera drivrutinen. Satsen innehåller ett installationsprogram. Dess gränssnitt är inte komplicerat och begripligt. För mig gick allt igenom automatisk upptäckt av korttypen och allt jag behövde göra var att klicka på Installera drivrutin. Installationsprocessen åtföljs av en rörlig stapel på gränssnittet, allt är väldigt tydligt.

Programmet låter dig tilldela om portar vid behov. Till exempel om det finns virtuella COM-portar. För att göra detta, efter installationen, klicka på Om och knappen Ändra portnamn.

Ovanstående skärmdumpar behöver inga speciella kommentarer, klicka så blir bilderna större. Allt är i dina händer - konfigurera de nya portarna som visas efter eget gottfinnande och för att passa dina behov.

Det sista beviset på att installationen lyckades bör vara närvaron av dessa enheter i Enhetshanteraren på datorn. Gå dit och kolla. I mitt fall hade moderkortet redan en integrerad COM-port (tja.. jag behöver det). Följaktligen blev listan över portar så här:

Det är möjligt att du kommer att behöva känna till adressen till den här porten och ange den korrekt i inställningarna för programmet där denna port kommer att användas. Som standard bör portadresserna vara följande:

LPT -1 - 378

LPT-2 - 278

LPT -3 - 3BC

I vårt fall kommer de att skilja sig från de vanliga värdena, eftersom Dessa portar är inte integrerade på moderkortet och sättet att kommunicera med dem är via PCI-bussen. I min version fungerade det D010(vi använder det första värdet). Därför, innan du installerar (köper) en sådan styrenhet, se om ditt program har möjlighet att ställa in andra I/O-intervall.

Men drivrutinerna inkluderar ett litet verktyg som låter dig tilldela sådana adresser (jag har inte hanterat det, det finns inget behov).

För cirka 10-15 år sedan var en parallellport ett ganska populärt gränssnitt för kommunikation mellan enheter. Idag tillverkare olika enheter ge företräde åt seriella gränssnitt. Men idag kan en LPT-port fortfarande hittas. Och vissa utvecklare skriver fortfarande program för det (eller stödjer de som skrevs under de parallella gränssnittens storhetstid). Men i datorer räcker nu en LPT-port mycket sällsynt. Det finns naturligtvis datorexpansionskort som implementerar LPT-gränssnittet. De är i grunden PCI-busskort. Tyvärr är inte all programvara som är skriven för integrerad moderkort LPT-portar, fungerar med LPT-PCI-kort.

En lösning på detta problem föreslås: en mjukvaruklass skriven under .NET och ett dynamiskt bibliotek som fungerar med LPT. Denna implementering har testats på 32- och 64-bitars Windows XP, Windows 7, 8 och 10, båda med inbyggda LPT-portar och implementerade som expansionskort på PCI- eller PCI-Express-bussen. Du kan ladda ner drivrutinen för LPT-porten från länken nedan efter artikeln.

1 Installation av drivrutiner för att arbeta med LPT-port

Det bifogade arkivet innehåller två mappar - för 32-bitars och 64-bitarsversioner av Windows. Det finns en fil i en av mapparna InstallDriver.exe. Kör först den här filen, den kommer att installera dynamiska bibliotek på systemet. Efter detta bör datorn startas om.

För att använda den föreslagna drivrutinen, filerna inpout32.dll Och inpoutx64.dll måste finnas i samma katalog som den körbara filen i ditt program.

2 Programklass för att använda bibliotek arbetar med LPT-port

Jag skrev en klass för .NET som använder dynamiska bibliotek inpout32.dll Och inpoutx64.dll och låter dig läsa data från parallellporten och skriva data till dess register.

De nämnda biblioteken är inte skrivna av mig. Jag erbjuder en bekväm inpackningsklass som förenklar arbetet med dessa bibliotek. Dessutom författaren till biblioteken i filen readme.txt rapporterar att dess drivrutin inte stöder PCI-enheter. Jag lyckades få det att fungera med både den integrerade parallellporten och LPT-porten, implementerade som ett expansionskort på PCI-Express-bussen. Dessutom fungerar porten perfekt på både moderna Windows10 x64 och äldre system.

Här är koden för LPT-klassen i VB.NET:

LPT-klasskod i VB.NET-språket(expanderar) Importerar System.Runtime.InteropServices """ """ Fungerar med en LPT-port. När den skapas upptäcker den närvaron av en drivrutin och väljer lämpligt bibliotek. """ 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" """ """ Parallellportregister. """ Public Enum Registrera som heltal """ """ SPP/EPP-dataregister. """ DATA = 0 """ """ SPP/EPP-statusregister. """ STATUS = DATA + 1 """ """ SPP/EPP-kontrollregister. """ KONTROLL = DATA + 2 """ """ EPP-adressregister. Läsning eller skrivning till det genererar en relaterad läs- eller skrivcykel för EPP-adressen. """ EPP_ADRESS = DATA + 3 """ """ EPP Data Register. Läs (skriv) genererar en tillhörande EPP data läs (skriv) cykel. """ EPP_DATA = DATA + 4 """ """ Aktiveringsregister för EPP-läge. """ """ """ Om bara blandat "ECP+EPP" eller "Extended" - troligen kommer du också att behöva skriva byte 0x80 till ECR-porten """ (ECR är ECP-lägesregistret, ECR=BASE_ADDR+0x402, BASE_ADDR är LPT basadress -port """ ECR = DATA + &H402 "TEST End Enum #End Region" /CONST #Region "DllImport" Private Shared Function IsInpOutDriverOpen() Som Byte End-funktion Private Shared Function IsInpOutDriverOpen_x64() Som UInt64 End Function Privat delad funktion Inp32(PortAddress Som UInt32) Som Byte End-funktion Private Shared Sub Out32(portAddress Som UInt32, data Som UInt32) End Sub Privat delad funktion Inp64(PortAddress Som UInt64) Som Byte End-funktion Private Shared Sub Out64(PortAddress Som UInt64, Data Som UInt64) End Sub #End Region "/DllImport #Region "CTOR" """ """ Kontrollerar om x86- eller x64-drivrutiner kan användas. Om inte, ger undantaget "drivrutin ej installerad". """ Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 As Boolean = CheckIsDriverX64() If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else Throw New SystemException("Drivrutinen är inte installerad för LPT." ) End If End Sub """ """ Portinitiering - inställning XXXX0100"b i kontrollregistret. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region "/CTOR #Region "PROPS" """ """ Om 64-bitarsversionen av drivrutinen används. """ Om drivrutinen inte är installerad returneras NULL. """ Offentlig delad skrivskyddad egendom används X64Driver som boolesk? Få Return _IsX64DriverUsed End Get End Property Private Shared ReadOnly _IsX64DriverUsed As Boolean? = Ingenting #End Region "/PROPS #Region "METHODS" """ """ Avgör om drivrutinen är 32-bitars. """ Privat delad funktion CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function """ """ Avgör om drivrutinen är 64-bitars. """ Privat delad funktion CheckIsDriverX64() As Boolean Prova Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult<>0) Catch ex As Exception Return False End Try End Function #End Region "/METHODS #Region "Read / Write LPT Port" """ """ Läser 1 byte data från det angivna LPT-portregistret. """ """ Portnummer. """ Hamnregister. 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 Returnera data End Funktion """ """ Skriver ett nummer till det angivna LPT-portregistret. """ """ Portadress. """ Hamnregister. """ Public Shared Sub Write(port As ULong, reg As Register, data As ULong) If IsX64DriverUsed Then Out64(port + CULng(reg), data) Else If (data)<= 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 """ """ Testar närvaron av en LPT-port på en given adress. """ """ Parallellportadress. Offentlig delad funktion CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Prova InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) "spara det aktuella värdet av dataregistret" Låt oss kontrollera: vad var skrevs lästes också ? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent And (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent And (&H55 = Read(lptAddress, Register.DATA) )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent Och (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) "återställ dataregistrets tidigare värde" Kontrollera närvaro av kontrollregister och data om porten inte detekteras (vid en enkelriktad port) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>0)AndAlso(data<>&HFF)) "Inte tom? => Porten är närvarande. Om (Inte portPresent) Då data = Read(lptAddress, Register.STATUS) portPresent = ((data<>0)AndAlso(data<>&HFF)) End If End If Catch ex As Exception Return False End Try Return portPresent End Function End Class "/LPT

LPT klasskod i C#:

LPT klasskod i C#(expanderar) med System; använder System.Diagnostics; använder System.Runtime.InteropServices; namnutrymme LPTIO ( /// Klass för att arbeta med en LPT-port. När den skapas bestämmer den närvaron av en drivrutin och dess bitkapacitet. allmänt förseglad klass LPT( private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Om 64-bitarsversionen av drivrutinen används. public static bool IsX64DriverUsed (get (retur LPT._IsX64DriverUsed;)) statisk LPT()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) throw new SystemException("Drivrutinen för LPT-porten är inte installerad."); LPT._IsX64DriverUsed = true; ) ) public LPT() ( ) privat statisk extern byte IsInpOutDriverOpen(); privat statisk extern ulong IsInpOutDriverOpen_x64(); privat statisk extern byte Inp32(uint PortAddress); privat statisk extern void Out32(uint portAddress, uint data); privat statisk extern byte Inp64(ulong PortAddress); privat statisk extern void Out64(ulong PortAddress, ulong Data); /// Bestämmer om drivrutinen är för 32-bitars Windows. privat statisk bool getIsDriverX86()( bool flagga; prova ( LPT.IsInpOutDriverOpen(); flagga = true; ) catch (Undantag ex) ( ProjectData.SetProjectError(ex); flagga = false; ProjectData.ClearProjectError(); ) returnera flagga; ) /// Avgör om Är drivrutinen för 64-bitars Windows? privat statisk bool getIsDriverX64()( bool flagga; prova ( flagga = Decimal.Compare(new Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flagga = false; ProjectData. ClearProjectError(); ) returflagga; ) /// Läser 1 byte data från LPT-porten. /// Portnummer. /// Hamnregister. offentlig statisk byte Läs (lång port, LPT.Register reg = LPT.Register.DATA)( returnera !LPT.IsX64DriverUsed ? LPT.Inp32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)))) : LPT.Inp64(Convert.ToUInt64(Decimal.Add(new) Decimal(port), ny Decimal((int) reg)))); ) /// Skriver ett nummer till LPT-porten. /// Portadress. /// Hamnregister. /// Nummer att spela in. På 32-bitars system får argumentet inte vara mer än maximalt värde för typ UInt32. offentlig statisk tomrum Skriv(ulong port, LPT.Register reg, ulong data)( if (LPT.IsX64DriverUsed) ( LPT.Out64(markerad (port + (ulong) (uint) reg), data); ) else ( if (data > (ulong) uint.MaxValue) throw new ArgumentException("Vid 32- på bitsystem måste argumentet vara 32-bitars (typ UInt32).", "data"); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)) ), kontrollerade ((uint) data)); ) ) /// LPT-portregister. offentlig uppräkning Register( DATA, STATUS, KONTROLL, ) ) )

3 Använder en .NET-klass för att arbeta med LPT-port

Om vi ​​tittar på listan över exporterade biblioteksfunktioner inpout32.dll med ett fantastiskt verktyg DLL Export Viewer från NirSoft kommer vi att se följande bild:

Detta är en lista över funktioner som vi kan använda. Faktum är att alla används i klassen LPT, men implementeringen är dold, och av de offentliga metoderna är endast två metoder och en egenskap tillgängliga för användaren (de diskuteras lite längre fram).

Under instansieringen kommer klassen själv att bestämma vilket bibliotek den ska använda - inpout32.dll eller inpoutx64.dll. Därför behöver användaren inte vidta någon åtgärd för att initiera eller bestämma det använda bitdjupet dll. Du kan omedelbart skriva eller läsa från LPT-porten. Ett "men": om drivrutinen inte är installerad kommer anrop av någon av de dynamiska biblioteksmetoderna att orsaka ett undantag, så jag rekommenderar att du använder block Försök fånga att fånga upp och hantera undantag.

Några exempel på användning av klassen LPT.

För att avgöra om 64-bitarsversionen av drivrutinen används (inpoutx64.dll om True) eller 32-bitar (inpout32.dll om False) (i själva verket behöver du inte veta detta, klassen använder exakt biblioteket det behövs, men plötsligt måste du av någon anledning ta reda på detta från ditt program):

Bool is64bitDriver = LPT.IsX64DriverUsed;

För att skriva numret "123" till LPT-portkontrollregistret, ring från din klass:

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

För att läsa en byte från LPT-portens dataregister och läsa statusregistret:

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

Här nuvarande Port - LPT-portadress. Dessutom, om du har en integrerad LPT-port, kommer dess adress troligen att vara det 378h. Och om du har en LPT-port på ett expansionskort, kommer adressen att vara annorlunda, till exempel, D100h eller C100h.

För att ta reda på LPT-portadressen, gå till Windows Device Manager, hitta avsnittet COM- och LPT-portar, välj den parallellport du använder och i egenskapsfönstret (genom att högerklicka på den) titta på vilka resurser den valda porten använder (du måste ta det första värdet från intervallet).


Till exempel i I detta fall portnummer måste användas C100.

Ladda ner bilagor:

  • Ladda ner drivrutin för LPT-porten (3281 nedladdningar)

Vi rekommenderar starkt att träffa honom. Där hittar du många nya vänner. Dessutom är det snabbast och effektivt sätt kontakta projektadministratörerna. Avsnittet Antivirusuppdateringar fortsätter att fungera - alltid uppdaterade gratisuppdateringar för Dr Web och NOD. Har du inte hunnit läsa något? Fullständigt innehåll Tickern hittar du på denna länk.

Arbeta med en LPT-port i Win NT/2000/XP

LPT-port (L ine P rin T er) är en parallell gränssnittsport som ursprungligen skapades för att ansluta en skrivare. BIOS ger stöd för LPT-porten, vilket är nödvändigt för att organisera utdata via Centronics-gränssnittet. Portadressutrymmet upptar intervallet &H378-&H37F

LPT-porten har 12 utgångs- och 5 ingångslinjer. Det här är ganska Ett stort antal linjer gör möjlig anslutning till hamnen av enkel utrustning, som kanske inte ens har en egen mikrokontroller. Därför används denna port, trots försvinnandet av skrivare med ett LPT-gränssnitt, aktivt för att ansluta enkla minneschipprogrammerare, JTAG-gränssnitt för att blinka (ersätter programvara) satellitmottagare, DVD-spelare och annan elektronisk utrustning. LPT-porten är också populär bland moddare, eftersom den låter dig ansluta LCD-skärmar till din dator utan att göra komplexa gränssnittskort.

Windows 2000/XP tillåter inte program att komma åt I/O-portar direkt. För att göra detta måste du använda en drivrutin som körs i KERNEL-läge (i operativsystemets kärnläge).

Att begränsa åtkomsten till I/O-portar för vanliga applikationsprogram (som körs i användarläge) gör operativsystemet mer stabilt. Även om, å andra sidan, ingen hindrar programmeraren från att skriva en drivrutin som kommer åt portarna.

Jag undrar för vad Intel-processor x86, kan du skriva en drivrutin som använder en av två i grunden olika tillvägagångssätt. Det första alternativet är att föraren själv kommer åt portarna, och applikationsprogrammet talar bara om för föraren vad den ska göra. Detta alternativ är vanligtvis standard och föredraget.

För att lösa problemet finns det fyra populära drivrutinsalternativ som tillåter ett applikationsprogram att komma åt I/O-portar: drivrutin DLPortIO, förare Användarport, förare GiveIO.sis, förare Port95nt.

Alla fyra alternativen är nästan likvärdiga.

Drivrutinen för DLPortIO

DLportIO - drivrutin för portåtkomst från paketet Drivrutinen LINX från Scientific Software Tools, Inc. (http://www.sstnet.com) i förkortad form (utan beskrivning och onödig dokumentation). För normal drift av underhållsprogram för LCD-indikatorer kan vi rekommendera detta drivrutinsalternativ.

Själva drivrutinen består av två komponenter:
. DLPortIO.dll - Win32 DLL tillhandahåller hårdvaru-I/O och
. DLPortIO.sys - drivrutin för WinNT, körs i OS-kärnläge (krävs inte för Win95/98)

I installationspaketet för drivrutiner finns det förutom dessa två komponenter också en Install.exe-fil som flyttar de två ovan nämnda till mappen Windows-drivrutiner och registrera dem i systemet.

Det finns inget mer att skriva om denna förare. Ingen installation krävs. Laddat ner, installerat, använd. Glöm inte att titta i slutet av artikeln och läsa om hur du säkerställer LPT-portens funktionalitet.

Installationen är enkel - kör filen Install.exe och installera. När installationen är klar, titta i mappen C:\Windows\System32\drivers och kontrollera om det finns två drivrutinsfiler (DLPortIO.sys och DLPortIO.dll). Om vi ​​ser att dessa filer inte har kopierats tar vi dem från installationspaketet och kopierar dem manuellt. Oroa dig inte, inget dåligt kommer att hända med din dator. Vi startar om datorn och arbetar med LPT-porten.

Om du plötsligt, som ett resultat av manipulationer med utrustningen, får ett meddelande från föraren så här: "dlportio.sys enhetsdrivrutin inte laddad. Port I/O kommer inte att ha någon effekt," få inte panik. Det här problemet är fixat så här:
. Starta regedit.
. Vi går till filialen i registret HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. Ändra värdet på parametern i mappen dlportio Start1 .
. Starta om datorn.

UserPort-drivrutin

Förare Användarportöppnar åtkomst till portar i Win NT/2000/XP för program. Denna version av LPT-portdrivrutinen används oftast av "tekniker" som arbetar med programmerare och JTAGs, eftersom drivrutinen har åtminstone några konfigurationsinställningar. Den kan också användas för att driva underhållsprogram för LCD-indikatorer.

Drivrutinsarkivet innehåller tre filer:
. UserPort.sys - drivrutin för WinNT, körs i OS-kärnläge,
. UserPort.exe är ett program för att konfigurera drivrutinen och
. UserPort.pdf - beskrivningsfil.

UserPort-installation:
. 1. Packa upp arkivet i en separat mapp.
. 2. Kopiera UserPort.sys-filen till C:\Windows\System32\drivers

UserPort-inställning:
. Kör UserPort.exe.
. En panel med 2 fönster kommer att dyka upp framför oss.

Det vänstra fönstret hänvisar till programmet som körs i ett DOS-fönster, det högra till fullskärm. Som standard innehåller de LPT-portnummer - alla kan tas bort med knappen "Ta bort". I båda fönstren måste du ange de nödvändiga portnumren som du planerar att använda.

För användning från drivrutinen med de flesta programmerare, JTAGs och displayserviceprogram, lägg till följande parametrar i den vänstra kolumnen:
378 , 379 Och 37A För LPT1
278 , 279 Och 27A För LPT2(Om LPT-portadressen omtilldelas i BIOS).

Låt mig förklara vad siffrorna betyder. 0x378- det här är portadressen.
. Adress 0x378 kallad grundläggande och används för att skriva och läsa data till och från hamnen, via databussen D0-D7.
. Adress 0x379 (grundläggande+1) skapad för läsa bitar status från en enhet ansluten till LPT-porten.
. Adress 0x37A (grundläggande+2) tjänar till bitinspelning kontroll av enheten som är ansluten till LPT-porten.

Lägg till så här:
0x378-0x378
0x37A-0x37A



Du måste lägga till portadresser till listan genom inmatningsfönstret och med knappen "Lägg till". Adress 0x379 oftast behövs det inte och kan utelämnas, eftersom det är avsett för läsa bitar status från en enhet som är ansluten till LPT-porten, och de flesta enheter (speciellt programmerare, JTAG och LCD-indikatorer) genererar inte statussignaler. Om så önskas kan du tvärtom ange hela utbudet av adresser som tilldelats av systemet för LPT-porten 0x378-0x37F.

Låt oss gå till Kontrollpanel, System, välj fliken Utrustning, Enhetshanteraren, gå till Portar (COM och LPT) och titta på egenskaperna för LPT-porten genom vilken du vill upprätta en anslutning. Öppna fliken Resurser i Egenskaper och titta på parametervärdet Ingångs-/utgångsintervall (I/O).. (Vanligtvis i Windows XP är det lika med 378 - 37F)

Efter att ha skapat listan med adresser måste du klicka på "Start"-knappen, drivrutinen startas och meddelandet visas:



Klicka sedan på knappen "Uppdatera", föraren kommer att registreras i systemet, sedan "Avsluta". Det finns naturligtvis ingen anledning att trycka på "Stopp"-knappen medan vi använder föraren.

Om systemet startar om när du klickar på knappen "Uppdatera" bör du försöka registrera drivrutinen i systemet med administratörsrättigheter eller försöka tillfälligt inaktivera brandväggen eller antivirusprogrammet, vilket kan blockera störningar i systemprocesser. Om något inte fungerar, läs UserPort.pdf

För att kontrollera om åtkomst till portarna har dykt upp kan du köra programmet "lpt-test.exe".

Efter att ha startat programmet visas ett fönster med följande innehåll:



Frånvaron av meddelandet "LPT-port testas (adress XXXh)" och raderna efter det indikerar att drivrutinen inte fungerar.

Detta program skickar helt enkelt olika nummer till Dx-dataregistret och Ux-kontrollregistret för LPT-porten och läser dem sedan. Statusregistret för LPT-port Sx är skrivskyddat. Numret och adressen till LPT-porten som testas visas på skärmen. Om porten är frisk bör inga meddelanden utfärdas för Dx- och Ux-registren.



LPT-TEST v1.03 1995-2003 Copyright (C) S.B.Alemanov. Moskva "BINAR".
Under testning bör inga kringutrustning anslutas till portarna.
Dx - reg. data (ut), Ux - reg. kontroll (ut), Sx - reg. status (inp).

LPT1-porten testas (adress 378h)
2:a kontakten (D0) - ingen "1"
3:e kontakten (D1) - ingen "1"
4:e kontakt (D2) - ingen "1"
5:e stift (D3) - ingen "1"
6:e stift (D4) - ingen "1"
7:e stift (D5) - ingen "1"
8:e stift (D6) - ingen "1"
9:e stift (D7) - ingen "1"
1:a kontakt (U0) - ingen "1"
14:e stift (U1) - ingen "1"
17:e stift (U3) - ingen "1"
1:a kontakt (U0) - ingen "0"
14:e stift (U1) - ingen "0"
17:e kontakt (U3) - ingen "0"
15:e kontakt (S3) - ingen "0"


Om Dx- eller Ux-registren är felaktiga, visas meddelandet "no 0" eller "no 1" och stiftnumret på LPT-kontakten indikeras (signalerna på detta stift kan ses med ett oscilloskop). Ingången till Sx-statusregistret kan vara antingen "0" eller "1", men vanligtvis, när inget är anslutet till LPT-porten, är alla ingångar i statusregistret "1". Uppkomsten av status "0" vid registrets ingång kan vara ett tecken på att ingången har brutits, om det tidigare alltid fanns en "1" där.
På vissa maskiner, om dataregistret eller kontrollregistret är felaktigt, visas inte åtkomst till LPT-porten alls. Uppenbarligen, när du slår på datorn, testar BIOS LPT-porten och, om den är felaktig, inaktiverar den den.

Om problem uppstår är det möjligt att vissa förare stör driften genom att regelbundet skicka pulser till LPT-porten (detta kan ses med ett oscilloskop). Du kan till exempel koppla från LPT-porten i skrivarinställningarna:
stäng av LPT1: Skrivarport
aktivera FIL: Skriv ut till fil

Efter att alla problem är lösta och testet är godkänt bör åtkomst till portarna visas och du kan köra ett program som använder LPT-porten. Annars fungerar inte enheten som är ansluten till porten på en sådan maskin.

GiveIO.sys drivrutinen

Redan 1996 genomförde den amerikanske programmeraren Dale Roberts en serie experiment, vars resultat var föraren GiveIO.sys. Fram till nu är den här drivrutinen ett av de populära verktygen som gör att ett applikationsprogram kan komma åt I/O-portar.

Drivrutinsförfattaren själv rekommenderar starkt att den här drivrutinen endast används för felsökningsändamål. Den slutliga versionen av applikationsprogrammet bör, istället för att komma åt själva I/O-portarna, anförtro denna uppgift till en drivrutin skriven speciellt för dessa ändamål. Föraren måste bete sig "korrekt" genom att kontrollera om enheten redan används av någon annan applikation.

Men om du är helt säker på att ingen använder de nödvändiga I/O-portarna förutom du (du har till exempel ingen skrivare ansluten till LPT), kan du säkert använda drivrutinen GiveIO.sys.

Installation av drivrutiner:

1. Ladda ner arkivet, packa upp och kopiera GiveIO.sys-filen till katalogen C:\Windows\System32\Drivers (förutsatt att ditt Windows är installerat i katalogen C:\Windows).
. 2. Kör filen install.reg. Följande meddelande kommer att visas på skärmen:


. 3. Vi svarar jakande. Ett meddelande kommer att visas som indikerar att informationen har matats in i registret. Om du vill kan du verifiera detta. Vi startar registerredigeraren regedit.exe och i filialen HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio Vi kontrollerar förekomsten av följande register:


. 4. Starta om datorn och kontrollera att programmen fungerar med hjälp av drivrutinen.

Förare GiveIO.sys människor använder det aktivt och dök upp med tiden andra alternativ för att installera den.

Till exempel - förare GiveIO.sys om det finns en fil med "hårdvaruinformation" GiveIO.inf kan installeras via appleten "Hårdvaruinstallation".




Vi kommer att visa drivrutinen för GiveIO.sys operativ system, så att hon tror på existensen av GiveIO-utrustning.

Ladda ner en uppsättning filer för detta alternativ för drivrutinsinstallation GiveIO.sys(giveio_sys_v2.rar - 78kb). Arkivet innehåller filerna GiveIO.sys och GiveIO.inf, samt detaljerade instruktioner installationsanvisningar med illustrationer.

Utöver alternativen för "manuell" drivrutinsinstallation har flera versioner av installationsprogrammet skrivits som utför installationen automatiskt.

Ladda ner en uppsättning filer för automatisk installation förare GiveIO.sys(giveio_sys_install.rar - 28kb). Arkivet innehåller filerna GiveIO.sys och instdrv.exe, samt filen remove-giveio.cmd, med vilken drivrutinen GiveIO.sys kan tas bort från systemet.

Drivrutinen för port95nt

Termen " förare Port95nt" kommer inte att vara helt korrekt här. Detta är i huvudsak samma drivrutin DLPortIO från paketet Drivrutinen LINX från Scientific Software Tools, Inc., endast i full version, med ett par porthanteringsverktyg, med en beskrivning och många exempel för programmerare. Den genomsnittliga användaren har ingen nytta av ytterligare komponenter, och drivrutinskomponenterna DLPortIO.sys och DLPortIO.dll är exakt desamma som i den förkortade versionen.

Jag nämnde Port95nt som en drivrutin av två anledningar. Den första är att komplettera listan med referenser till LPT-portdrivrutiner som finns på Internet.

Det andra skälet är att det i vissa fall kan vara problem med att installera en förkortad version av DLPortIO under WinXP. Vanligtvis, men inte ofta, händer detta i avskalade "författarbyggen" av WinXP. I det här fallet kan du ta full version installationsprogram (1,5 MB). Även om det enligt min mening kommer att gå snabbare att manuellt lägga DLPortIO.sys och DLPortIO.dll i önskad mapp än att bry sig om att välja ett installationsprogram som kan göra detta åt dig.

Ytterligare åtgärder

Förutom att installera en av de ovan nämnda drivrutinerna, för normal drift av LPT-porten under WinXP OS, måste du redigera registret med en REG-fil xp_stop_polling.reg(xp_stop_polling.rar - 0,48 kb)

Under WinXP är enheter som använder LPT-porten ibland instabila. Orsaken till sådana fel kan vara undersystemet Plug-and-Play (PnP) i Windows, som regelbundet efterfrågar LPT för att upptäcka anslutna enheter. Denna polling sker när systemet startar, men det kan också ske under drift. Tyvärr blockerar inte DLportIO.sys-drivrutinen och andra drivrutinsalternativ åtkomst till LPT från andra program när man arbetar med klientporten för denna drivrutin, och PnP-undersystemet är säker på att porten inte är upptagen, kommer åt den och stör driften av externa enheter. REG-filen används för att åtgärda problemet. xp_stop_polling.reg. Denna fil är skriven i registret Windows-nyckel, som förbjuder sådan polling medan systemet körs.

Förutom att installera drivrutinen och begränsa samtidig åtkomst till porten för program, för att säkerställa hårdvarukompatibilitet och normal drift av utrustning med LPT-porten, är det nödvändigt att ställa in korrekt adress Och portens driftläge("Normal", SPP eller EPP, men inte ECP).

Följande parametrar kan konfigureras via BIOS Setup:

Basadress, som kan vara 378h, 278h och 3BCh. Under initieringen kontrollerar BIOS förekomsten av portar efter adress i exakt denna ordning och tilldelar följaktligen de logiska namnen LPT1, LPT2, LPT3 till de upptäckta portarna. Adress 3BCh har en portadapter placerad på MDA- eller HGC-kortet (föregångare till moderna grafikkort). De flesta portar är konfigurerade för att adressera 378h som standard och kan växlas till 278h.

Den avbrottsbegäran som används, IRQ7 används vanligtvis för LPT1, IRQ5 för LPT2. I många skrivbordsprogram används inte skrivaravbrott, och denna knappa PC-resurs kan sparas. Men när man använder ECP (Fast Centronics) höghastighetslägen kan avbrottsdrift förbättra prestandan avsevärt och minska processorbelastningen.

Samtidigt kan ECP-läget inte användas med enheter som kräver snäva timings (programmerare och JTAG-gränssnitt).

Avslutningsvis lite om terminologi:

. SPP(Standard parallellport - standard parallellport). Ofta, för att förenkla förståelsen, betecknas det i BIOS med termen " Vanligt".
. EPP(Enhanced Parallel Port) - höghastighets dubbelriktat gränssnittsalternativ. Syftet med vissa signaler har ändrats, möjligheten att adressera flera logiska enheter och 8-bitars dataingång och en 16-byte hårdvaru-FIFO-buffert har införts. Maxhastighet utbyte - upp till 2 Mb/s.
. ECP(Enhanced Capability Port) - en intelligent version av EPP. Möjligheten att separera överförd information i kommandon och data, stöd för DMA och komprimering av överförda data med RLE-metoden (Run-Length Encoding) har introducerats.


Så låt oss överväga följande alternativ för att arbeta med I/O-portar i Windows NT. Detta "alternativ" kommer att vara en speciell drivrutin GiveIO.sys, vilket gör att programmet som kör det fritt kan arbeta med alla portar. Den här föraren skrev Dale Roberts Gud vet när, men det har inte förlorat sin relevans till denna dag.



Jag ska kort berätta hur det fungerar: i början av vårt program, för att kommunicera med portar, måste du kontakta föraren GiveIO.sys. Samtidigt kommer det att ställa in systembitmappen för behörighetskartan (I/O Permission Map) för vår applikation till sådana värden att den kommer att tillåtas direkt åtkomst till alla portar. I/O-tillståndskarta- Det här komponent Windows NT I/O-skyddssystem. Det är en bitarray där varje bit motsvarar en I/O-port. Om biten = 1 är åtkomsten till porten stängd, om 0 är den öppen. För alla användarapplikationer är alla bitar satta till 1, och därför kan vi inte direkt störa portens funktion. GiveIO.sys "bryter sig" fräckt in i denna array och ställer in den till 0 överallt - dvs. vi får möjlighet att komma åt vilken port som helst från applikationen.



Ladda först ner arkivet med drivrutinen och installationsfilen:


Nu måste vi registrera och installera drivrutinen på systemet. För att göra detta måste du göra ett antal operationer. Kopiera först drivrutinsfilen GIVEIO.sys till mappen C:\Windows\system32\drivers\ om, naturligtvis, ditt system är installerat på disken MED:\ och du ändrade inte Windows installationssökväg.

Klick Ja. Du kommer att få ett meddelande som indikerar att informationen har matats in i registret. Du kan verifiera detta. I registerredigeringsprogrammet regedit.exe i grenen HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio du kan se följande:

För att de ändringar vi gör ska träda i kraft obligatorisk EN OMSTART AV DATOR krävs.


Det är dags att börja programmera. I vår programkod Port.exe(se) vi kommer att göra några ändringar som gör det möjligt för den att komma åt portar inte bara i Windows 9x som tidigare, utan också i Windows NT. Den slutliga koden kommer att se ut så här:

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

Allt. Vi kompilerar och kör. Klicka 1-0: allt borde fungera. Om ett meddelande dyker upp Fel! Kan inte öppna drivrutinen! Tryck på valfri tangent för att avsluta..., betyder det att installationen av drivrutinen misslyckades och att du måste installera om den igen.

Tack vare giveio.sys Följande monteringsskript kommer också att fungera framgångsrikt:

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

© Dmitrij Ivanov
2005-2006

Nytt på sajten

>

Mest populär