Driver voor het werken met een LPT-poort (geïntegreerd of in de vorm van een PCI-kaart)

Ongeveer 10-15 jaar geleden was een parallelle poort een redelijk populaire interface voor communicatie tussen apparaten. Tegenwoordig fabrikanten verschillende apparaten geef de voorkeur aan seriële interfaces. Tegenwoordig is er echter nog steeds een LPT-poort te vinden. En sommige ontwikkelaars schrijven er nog steeds programma's voor (of ondersteunen programma's die zijn geschreven tijdens de hoogtijdagen van parallelle interfaces). Maar in computers is een LPT-poort tegenwoordig nogal een zeldzaamheid. Er zijn natuurlijk computeruitbreidingskaarten die de LPT-interface implementeren. Het zijn in principe boards gebaseerd op PCI-bus. Helaas is niet alle software waarvoor geschreven is geïntegreerd moederbord LPT-poorten, werken met LPT-PCI-kaarten.

Er wordt een oplossing voor dit probleem voorgesteld: een softwareklasse geschreven onder .NET en een dynamische bibliotheek die met LPT werkt. Deze implementatie getest op 32- en 64-bit Windows XP, Windows 7, 8 en 10, beide met ingebouwde LPT-poorten, en geïmplementeerd in de vorm van uitbreidingskaarten op de PCI- of PCI-Express-bus. U kunt de driver voor de LPT-poort downloaden via de onderstaande link na het artikel.

1 Installatie van stuurprogramma voor het werken met LPT-poort

Het bijgevoegde archief bevat twee mappen: voor 32-bits en 64-bits versies van Windows. Er bevindt zich een bestand in een van de mappen InstalleerDriver.exe. Voer eerst dit bestand uit. Het zal dynamische bibliotheken op het systeem installeren. Hierna moet de computer opnieuw worden opgestart.

Om het voorgestelde stuurprogramma te gebruiken, moeten de files invoer32.dll En invoerx64.dll moet zich in dezelfde directory bevinden als uitvoerbaar bestand jouw programma.

2 Programmaklasse voor het gebruik van bibliotheken werken met LPT-poort

Ik heb een klasse voor .NET geschreven die gebruikmaakt van dynamische bibliotheken invoer32.dll En invoerx64.dll en stelt u in staat gegevens van de parallelle poort te lezen en gegevens naar de registers te schrijven.

De genoemde bibliotheken zijn niet door mij geschreven. Ik bied een handige wrapper-klasse aan die het werken met deze bibliotheken vereenvoudigt. Daarnaast de auteur van de bibliotheken in het bestand leesmij.txt meldt dat de driver dit niet ondersteunt PCI-apparaten. Het is mij gelukt om het werkend te krijgen met zowel de geïntegreerde parallelle poort als de LPT-poort, geïmplementeerd als uitbreidingskaart PCI-Express-bus. Bovendien werkt de poort perfect op zowel moderne Windows10 x64 als oudere systemen.

Hier is de code voor de LPT-klasse in VB.NET:

LPT-klassecode in VB.NET-taal(breidt uit) Importeert System.Runtime.InteropServices """ """Werkt met een LPT-poort. Wanneer deze is aangemaakt, detecteert deze de aanwezigheid van een stuurprogramma en selecteert de juiste bibliotheek. """ Openbare, niet-overneembare klasse LPT #Regio "CONST" Openbare Const DLL32 As String = "c:\temp\inpout32.dll" Openbare Const DLL64 As String = "c:\temp\inpoutx64.dll" Openbare Const DLL32DRV As String = "c: \temp\inpoutx32drv.dll" """ """ Registers voor parallelle poorten. """ Openbaar Enum-register als geheel getal """ """ SPP/EPP-gegevensregister. """ GEGEVENS = 0 """ """ SPP/EPP-statusregister. """ STATUS = GEGEVENS + 1 """ """SPP/EPP-controleregister. """ CONTROLE = GEGEVENS + 2 """ """ EPP-adresregister. Lezen of schrijven ernaar genereert een gerelateerde lees- of schrijfcyclus van het EPP-adres. """ EPP_ADDRESS = GEGEVENS + 3 """ """ EPP-gegevensregister. Lezen (schrijven) genereert een bijbehorende lees- (schrijf)cyclus voor EPP-gegevens. """ EPP_DATA = GEGEVENS + 4 """ """ EPP-modus activeringsregister. """ """ """ Als het alleen "ECP+EPP" of "Extended" is, zult u hoogstwaarschijnlijk ook byte 0x80 naar de ECR-poort moeten schrijven """ (ECR is een ECP-modusregister, ECR=BASE_ADDR+0x402, BASE_ADDR - basis adres LPT-poort """ ECR = DATA + &H402 "TEST End Enum #End Region" /CONST #Region "DllImport" Privé gedeelde functie IsInpOutDriverOpen() als byte-eindfunctie Privé gedeelde functie IsInpOutDriverOpen_x64() als UInt64-eindfunctie Privé gedeelde functie Inp32 (poortadres als UInt32) als byte-eindfunctie Private Shared Sub Out32 (poortadres als UInt32, data als UInt32) End Sub Privé gedeelde functie Inp64 (poortadres als UInt64) als byte-eindfunctie Privé gedeelde sub Out64 (poortadres als UInt64, gegevens als UInt64) End Sub #End Regio "/DllImport #Region "CTOR" """ """ Controleert of x86- of x64-stuurprogramma's kunnen worden gebruikt. Als dit niet het geval is, genereert dit de uitzondering "stuurprogramma niet geïnstalleerd". """ 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("Het stuurprogramma voor de LPT-poort is niet geïnstalleerd." ) Einde Als Einde Sub """ """ Poortinitialisatie - instelling XXXX0100"b in het besturingsregister.""" Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Regio "/CTOR #Region "PROPS" """ Openbaar gedeeld, alleen-lezen eigenschap Wordt X64Driver gebruikt als Boolean? Get Return _IsX64DriverUsed End Get End Property Privé Gedeeld ReadOnly _IsX64DriverUsed As Boolean? = Niets #Eindregio "/PROPS #Regio "METHODEN" """""" Bepaalt of het stuurprogramma 32-bits is. """ Privé gedeelde functie CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function """""" Bepaalt of het stuurprogramma 64-bit is. """<>Privé gedeelde functie CheckIsDriverX64() As Boolean Probeer Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult 0) Catch ex As Exception Return False End Try End Functie #End Regio "/METHODS #Region "Lezen/schrijven LPT-poort" """ """ """ Leest 1 byte aan gegevens uit het opgegeven LPT-poortregister. """ """ Poortnummer. Haven register. Openbare gedeelde functie Lezen (poort As ULong, Optioneel 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 retourneert gegevens Eindfunctie """ """ """ Schrijft een nummer naar het opgegeven LPT-poortregister. """ """ Poortnummer. """ Havenadres.<= 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 """ Openbaar gedeeld sub schrijven (poort As ULong, reg As Register, data As ULong) If IsX64DriverUsed Then Out64 (poort + CULng (reg), data) Else If (data """ """ Test de aanwezigheid van een LPT-poort op een bepaald adres. """ Adres parallelle poort.<>Openbare gedeelde functie CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Try InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) "sla de huidige waarde van het dataregister op" Laten we eens kijken: wat was geschreven werd ook gelezen?<>Schrijven(lptAddress, Register.DATA, &H0) portPresent = portPresent And (&H0 = Lezen(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent And (&H55 = Lezen(lptAddress, Register.DATA )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) "herstel de vorige waarde van het dataregister" Controleer de aanwezigheid van controleregisters en gegevens als de poort niet wordt gedetecteerd (in het geval van een unidirectionele poort) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>Openbare gedeelde functie CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Try InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) "sla de huidige waarde van het dataregister op" Laten we eens kijken: wat was geschreven werd ook gelezen?<>&HFF)) End If End If Catch ex As Exception Return False End Try Return portPresent End Function End Class "/LPT

LPT-klassecode in C#:

LPT-klassecode in C#(breidt uit) met behulp van Systeem; met behulp van System.Diagnostics; met behulp van System.Runtime.InteropServices; namespace LPTIO ( /// Klasse voor het werken met een LPT-poort. Wanneer deze wordt aangemaakt, bepaalt deze de aanwezigheid van een stuurprogramma en de bitcapaciteit ervan. openbare verzegelde klasse LPT( private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Of de 64-bits versie van het stuurprogramma wordt gebruikt. public static bool IsX64DriverUsed ( get ( retourneer LPT._IsX64DriverUsed ; ) ) statische LPT()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) throw new SystemException("Het stuurprogramma voor de LPT-poort is niet geïnstalleerd."); LPT._IsX64DriverUsed = true; ) publieke LPT() ( ) private statische externe byte IsInpOutDriverOpen(); privé statisch extern ulong IsInpOutDriverOpen_x64(); privé statische externe byte Inp32 (uint PortAddress); privé statische externe leegte Out32 (uint portAddress, uint-gegevens); privé statische externe byte Inp64 (ulong PortAddress); private statische externe leegte Out64 (ulong PortAddress, ulong Data); /// """ Leest 1 byte aan gegevens uit het opgegeven LPT-poortregister. """ /// Poortnummer. /// Bepaalt of het stuurprogramma voor 32-bits Windows is. privé statische bool getIsDriverX86() ( bool flag; try ( LPT.IsInpOutDriverOpen(); flag = true; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); ) return flag; ) /// Bepaalt of Is het stuurprogramma voor 64-bit Windows? /// """ Schrijft een nummer naar het opgegeven LPT-poortregister. """ /// Poortnummer. /// privé statische bool getIsDriverX64() ( bool flag; try ( flag = Decimal.Compare(new Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData. ClearProjectError(); retourvlag; Leest 1 byte aan gegevens van de LPT-poort. openbare statische byte Read (ulong-poort, LPT.Register reg = LPT.Register.DATA)( if (LPT.IsX64DriverUsed) ( LPT.Out64(aangevinkt (poort + (ulong) (uint) reg), data);) else ( if (data > (ulong) uint.MaxValue) throw new ArgumentException("At 32- op bitsystemen moet het argument 32-bits zijn (type UInt32).", "data"); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)) ), gecontroleerd ((uint) data)); LPT-poortregisters. openbaar enum Register(GEGEVENS, STATUS, CONTROLE, ) ) )

3 Een .NET-klasse gebruiken voor het werken met LPT-poort

Als we naar de lijst met geëxporteerde bibliotheekfuncties kijken invoer32.dll met een geweldig hulpmiddel DLL-exportviewer van NirSoft zien we de volgende afbeelding:

Dit is een lijst met functies die we kunnen gebruiken. In feite worden ze allemaal in de klas gebruikt LPT, maar de implementatie is verborgen, en van de publieke methoden zijn slechts twee methoden en één eigenschap beschikbaar voor de gebruiker (ze worden iets verder besproken).

Tijdens instantiatie zal de klasse zelf bepalen welke bibliotheek hij moet gebruiken - invoer32.dll of invoerx64.dll. Daarom hoeft de gebruiker geen enkele actie te ondernemen om de gebruikte bitdiepte te initialiseren of te bepalen dll. U kunt direct schrijven of lezen vanaf de LPT-poort. Eén “Maar”: als het stuurprogramma niet is geïnstalleerd, gebruik dan een van de methoden dynamische bibliotheek zal een uitzondering genereren, dus ik raad aan om blokken te gebruiken Probeer...vang uitzonderingen op te vangen en af ​​te handelen.

Enkele voorbeelden van het gebruik van de klasse LPT.

Om te bepalen of de 64-bits versie van het stuurprogramma wordt gebruikt (inpoutx64.dll indien True) of 32-bits (inpout32.dll indien False) (in feite hoeft u dit niet te weten, de klasse gebruikt precies de bibliotheek dat is nodig, maar plotseling moet je dit om de een of andere reden uit je programma halen):

Bool is64bitDriver = LPT.IsX64DriverUsed;

Om het nummer "123" naar het LPT-poortcontroleregister te schrijven, belt u vanuit uw klas:

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

Om één byte uit het LPT-poortgegevensregister te lezen en het statusregister te lezen:

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

Hier huidige poort - LPT-poortadres. Als u bovendien een geïntegreerde LPT-poort heeft, zal het adres hoogstwaarschijnlijk dat zijn 378u. En als u een LPT-poort op een uitbreidingskaart heeft, zal het adres bijvoorbeeld anders zijn: D100u of C100u.

Ga naar de manager om het LPT-poortadres te achterhalen Windows-apparaten, zoek de sectie COM-poorten en LPT, selecteer de parallelle poort die u gebruikt en kijk in het eigenschappenvenster (door er met de rechtermuisknop op te klikken) welke bronnen de geselecteerde poort gebruikt (u moet de eerste waarde uit het bereik nemen).


Bijvoorbeeld, binnen in dit geval poortnummer moet worden gebruikt C100.

Bijlagen downloaden:

  • Download driver voor LPT-poort (2643 downloads)

Wij raden u ten zeerste aan om hem te ontmoeten. Daar zul je veel nieuwe vrienden vinden. Bovendien is het de snelste en effectieve manier Neem contact op met de projectbeheerders. De sectie Antivirusupdates blijft werken - altijd up-to-date gratis updates voor Dr Web en NOD. Geen tijd gehad om iets te lezen? De volledige inhoud van de ticker vindt u via deze link.

Werken met een LPT-poort in Win NT/2000/XP

LPT-poort (L ine P rin T er) is een parallelle interfacepoort die oorspronkelijk is gemaakt om een ​​printer aan te sluiten. Het BIOS biedt ondersteuning voor de LPT-poort, die nodig is om de uitvoer via de Centronics-interface te organiseren. De poortadresruimte beslaat het bereik &H378-&H37F

De LPT-poort heeft 12 uitgangs- en 5 ingangslijnen. Dit is behoorlijk groot aantal lijnen maakt mogelijke verbinding naar de haven van eenvoudige apparatuur, die misschien niet eens over een eigen microcontroller beschikt. Daarom wordt deze poort, ondanks het verdwijnen van printers met een LPT-interface, actief gebruikt om eenvoudige geheugenchipprogrammeurs aan te sluiten, JTAG-interfaces voor flashen (ter vervanging van software) satellietontvangers, dvd-spelers en andere elektronische technologie. De LPT-poort is ook populair onder modders, omdat je hiermee LCD-schermen op je computer kunt aansluiten zonder complexe interfacekaarten te maken.

Windows 2000/XP staat niet toe dat toepassingen rechtstreeks toegang krijgen tot I/O-poorten. Om dit te doen, moet u een stuurprogramma gebruiken dat in de KERNEL-modus draait (in de kernelmodus van het besturingssysteem).

Het beperken van de toegang tot I/O-poorten voor algemene applicatieprogramma's (die in de gebruikersmodus draaien) maakt het besturingssysteem stabieler. Hoewel aan de andere kant niemand de programmeur ervan weerhoudt een stuurprogramma te schrijven dat toegang heeft tot de poorten.

Ik vraag me af waarvoor Intel-processor x86 kun je een driver schrijven met behulp van twee fundamenteel verschillende benaderingen. De eerste optie is dat de driver zelf toegang krijgt tot de poorten en dat het applicatieprogramma de driver alleen vertelt wat hij moet doen. Deze optie is over het algemeen standaard en heeft de voorkeur.

Om dit probleem op te lossen zijn er vier populaire driveropties waarmee een toepassingsprogramma toegang kan krijgen tot I/O-poorten: driver DLPortIO, bestuurder Gebruikerspoort, bestuurder GeefIO.sis, bestuurder Poort95nt.

Alle vier de opties zijn vrijwel gelijkwaardig.

DLPortIO-stuurprogramma

DLportIO - stuurprogramma voor poorttoegang uit het pakket BestuurderLINX van Scientific Software Tools, Inc. (http://www.sstnet.com) in verkorte vorm (zonder beschrijving en onnodige documentatie). Voor normale werking Specifiek kunnen onderhoudsprogramma's voor LCD-indicatoren worden aanbevolen deze driveroptie.

De driver zelf bestaat uit twee componenten:
. DLPortIO.dll - Win32 DLL die hardware-I/O en
. DLPortIO.sys - stuurprogramma voor WinNT, uitgevoerd in OS-kernelmodus (niet vereist voor Win95/98)

In het driverinstallatiepakket bevindt zich naast deze twee componenten ook een Install.exe-bestand dat de twee bovengenoemde naar de map verplaatst Windows-stuurprogramma's en registreer ze in het systeem.

Er valt niets meer over deze bestuurder te schrijven. Geen installatie vereist. Gedownload, geïnstalleerd, gebruik. Vergeet niet naar het einde van het artikel te kijken en te lezen hoe u de functionaliteit van de LPT-poort kunt garanderen.

De installatie is eenvoudig: voer het bestand Install.exe uit en installeer het. Zodra de installatie is voltooid, kijkt u in de map C:\Windows\System32\drivers en controleert u of er twee stuurprogrammabestanden aanwezig zijn (DLPortIO.sys en DLPortIO.dll). Als we zien dat deze bestanden niet zijn gekopieerd, halen we ze uit het installatiepakket en kopiëren ze handmatig. Maak je geen zorgen, er zal niets ergs met je computer gebeuren. We herstarten de computer en werken met de LPT-poort.

Als u plotseling, als gevolg van manipulaties met de apparatuur, een bericht ontvangt van het stuurprogramma zoals dit: "dlportio.sys-apparaatstuurprogramma niet geladen Port I/O heeft geen effect", raak niet in paniek. Dit probleem wordt als volgt opgelost:
. Start regedit.
. We gaan naar het filiaal in het register HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. Wijzig de waarde van de parameter in de map dlportio Begin op 1 .
. Start de computer opnieuw op.

UserPort-stuurprogramma

Bestuurder Gebruikerspoort opent toegang tot poorten in Win NT/2000/XP voor programma's. Deze versie van het LPT-poortstuurprogramma wordt het vaakst gebruikt door "technici" die met programmeurs en JTAG's werken, omdat het stuurprogramma op zijn minst enkele configuratie-instellingen heeft. Het kan ook worden gebruikt om onderhoudsprogramma's voor LCD-indicatoren uit te voeren.

Het driverarchief bevat drie bestanden:
. UserPort.sys - stuurprogramma voor WinNT, uitgevoerd in OS-kernelmodus,
. UserPort.exe is een programma voor het configureren van de driver en
. UserPort.pdf - beschrijvingsbestand.

UserPort-installatie:
. 1. Pak het archief uit in een aparte map.
. 2. Kopieer het bestand UserPort.sys naar C:\Windows\System32\drivers

UserPort-instelling:
. Voer UserPort.exe uit.
. Voor ons verschijnt een paneel met 2 vensters.

Het linkervenster verwijst naar het programma dat in een DOS-venster draait, het rechtervenster is op volledig scherm. Standaard bevatten ze LPT-poortnummers - ze kunnen allemaal worden verwijderd met de knop "Verwijderen". U moet in beide vensters inloggen vereiste nummers poorten die u wilt gebruiken.

Voor gebruik vanuit het stuurprogramma met de meeste programmeurs, JTAG's en displayserviceprogramma's, voeg toe aan linker kolom de volgende parameters:
378 , 379 En 37A Voor LPT1
278 , 279 En 27A Voor LPT2(Als het LPT-poortadres opnieuw wordt toegewezen in het BIOS).

Laat me uitleggen wat de cijfers betekenen. 0x378- dit is het poortadres.
. Adres 0x378 genaamd eenvoudig en wordt gebruikt voor schrijven en lezen gegevens van en naar de haven, via de databus D0-D7.
. Adres 0x379 (basis+1) bedoeld voor stukjes lezen status van een apparaat dat is aangesloten op de LPT-poort.
. Adres 0x37A (basis+2) dient voor beetje opname controle over het apparaat dat is aangesloten op de LPT-poort.

Voeg het als volgt toe:
0x378-0x378
0x37A-0x37A



U moet poortadressen aan de lijst toevoegen via het invoervenster en via de knop "Toevoegen". Adres 0x379 meestal is het niet nodig en kan het worden weggelaten, omdat het ervoor bedoeld is stukjes lezen status van een apparaat dat is aangesloten op de LPT-poort, en de meeste apparaten (vooral programmeurs, JTAG's en LCD-indicatoren) genereren geen statussignalen. Indien gewenst, kunt u daarentegen het volledige bereik van adressen invoeren die door het systeem zijn toegewezen de LPT-poort 0x378-0x37F.

Laten we naar gaan Configuratiescherm, Systeem, selecteer het tabblad Apparatuur, apparaatbeheer Ga naar Poorten (COM en LPT) en bekijk de eigenschappen van de LPT-poort waarmee je een verbinding tot stand wilt brengen. Open in Eigenschappen het tabblad Bronnen en bekijk de parameterwaarde Ingangs-/uitgangsbereik (I/O).. (Meestal is dit in Windows XP gelijk aan 378 - 37F)

Nadat u de lijst met adressen heeft gegenereerd, klikt u op de knop "Start", het stuurprogramma wordt gestart en het bericht verschijnt:



Klik vervolgens op de knop "Update", de bestuurder wordt in het systeem geregistreerd en vervolgens op "Afsluiten". Het is natuurlijk niet nodig om op de knop "Stop" te drukken terwijl we de driver gebruiken.

Als het systeem opnieuw opstart wanneer u op de knop "Bijwerken" klikt, moet u proberen de stuurprogrammaregistratie in het systeem te starten met beheerdersrechten of proberen de firewall of antivirus tijdelijk uit te schakelen, wat interventie in het systeem kan blokkeren systeem processen. Als iets niet werkt, lees dan UserPort.pdf

Om te controleren of er toegang tot de poorten is verschenen, kunt u het programma uitvoeren "lpt-test.exe".

Na het starten van het programma verschijnt er een venster met de volgende inhoud:



Het ontbreken van het bericht “LPT-poort wordt getest (adres XXXh)” en de regels die daarop volgen, geven aan dat het stuurprogramma niet werkt.

Dit programma verzendt eenvoudigweg naar het Dx-gegevensregister en het Ux-controleregister van de LPT-poort verschillende nummers en leest ze vervolgens. Het statusregister van de LPT-poort Sx is alleen-lezen. Het nummer en adres van de LPT-poort die wordt getest, worden op het scherm weergegeven. Als de poort in orde is, mogen er geen berichten worden uitgegeven voor de Dx- en Ux-registers.



LPT-TEST v1.03 1995-2003 Copyright (C) S.B.Alemanov. Moskou "BINAR".
Tijdens het testen mogen er geen randapparaten op de poorten worden aangesloten.
Dx-reg. gegevens (uit), Ux - reg. controle (uit), Sx - reg. status (inp).

LPT1-poort wordt getest (adres 378h)
2e contact (D0) - geen "1"
3e contact (D1) - geen "1"
4e contact (D2) - geen "1"
5e pin (D3) - geen "1"
6e pin (D4) - geen "1"
7e pin (D5) - geen "1"
8e pin (D6) - geen "1"
9e pin (D7) - geen "1"
1e contact (U0) - geen "1"
14e pin (U1) - geen "1"
17e pin (U3) - geen "1"
1e contact (U0) - geen "0"
14e pin (U1) - geen "0"
17e contact (U3) - geen "0"
15e contact (S3) - geen "0"


Als de Dx- of Ux-registers defect zijn, wordt de melding “no 0” of “no 1” weergegeven en wordt het pinnummer op de LPT-connector weergegeven (de signalen op deze pin kunnen worden bekeken met een oscilloscoop). De Sx-statusregisteringang kan een "0" of een "1" zijn, maar als er niets op de LPT-poort is aangesloten, hebben alle statusregisteringangen meestal een "1". Het verschijnen van de status “0” aan de ingang van het register kan een teken zijn dat de ingang is verbroken, als daar voorheen altijd een “1” stond.
Als op sommige machines het dataregister of het besturingsregister defect is, verschijnt de toegang tot de LPT-poort helemaal niet. Blijkbaar test het BIOS, wanneer u de computer aanzet, de LPT-poort en schakelt deze, als deze defect is, uit.

Als er zich problemen voordoen, is het mogelijk dat sommige stuurprogramma's de werking verstoren door periodiek pulsen naar de LPT-poort te sturen (dit is te zien met een oscilloscoop). U kunt bijvoorbeeld de verbinding met de LPT-poort verbreken in de printerinstellingen:
schakel LPT1: printerpoort uit
FILE inschakelen: Afdrukken naar bestand

Nadat alle problemen zijn opgelost en de test is geslaagd, zou toegang tot de poorten moeten verschijnen en kunt u een programma uitvoeren dat de LPT-poort gebruikt. Anders zal het apparaat dat op de poort van een dergelijke machine is aangesloten, niet werken.

GiveIO.sys-stuurprogramma

In 1996 voerde de Amerikaanse programmeur Dale Roberts een reeks experimenten uit, waarvan het resultaat de drijvende kracht was GiveIO.sys. Tot nu toe blijft dit stuurprogramma een van de populaire tools waarmee een applicatieprogramma toegang krijgt tot I/O-poorten.

De auteur van het stuurprogramma zelf raadt ten zeerste aan om dit stuurprogramma alleen voor foutopsporingsdoeleinden te gebruiken. De definitieve versie van het applicatieprogramma zou, in plaats van toegang te krijgen tot de I/O-poorten zelf, deze taak moeten toevertrouwen aan een stuurprogramma dat speciaal voor deze doeleinden is geschreven. De bestuurder moet zich "correct" gedragen door te controleren of het apparaat al door een andere applicatie wordt gebruikt.

Als u er echter absoluut zeker van bent dat niemand behalve u de vereiste I/O-poorten gebruikt (u hebt bijvoorbeeld geen printer aangesloten op de LPT), kunt u veilig het GiveIO.sys-stuurprogramma gebruiken.

Installatie van stuurprogramma:

1. Download het archief, pak het bestand GiveIO.sys uit en kopieer het naar de map C:\Windows\System32\Drivers (ervan uitgaande dat uw Windows in de map C:\Windows is geïnstalleerd).
. 2. Voer het install.reg-bestand uit. Het volgende bericht verschijnt op het scherm:


. 3. Wij antwoorden bevestigend. Er verschijnt een bericht dat aangeeft dat de informatie met succes in het register is ingevoerd. Als u wilt, kunt u dit verifiëren. We starten de register-editor regedit.exe en in de branche HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio controleer de beschikbaarheid volgende vermeldingen:


. 4. Start de computer opnieuw op en controleer de werking van programma's met behulp van het stuurprogramma.

Bestuurder GiveIO.sys mensen gebruiken het actief en verschenen na verloop van tijd andere opties om het te installeren.

Bijvoorbeeld - bestuurder GiveIO.sys of er een bestand is met "hardware-informatie" GeefIO.inf kan worden geïnstalleerd via de applet "Hardware-installatie".




We zullen het GiveIO.sys-stuurprogramma tonen besturingssysteem, zodat ze gelooft in het bestaan ​​van GiveIO-apparatuur.

Download een set bestanden voor deze driverinstallatieoptie GiveIO.sys(giveio_sys_v2.rar - 78kb). Het archief bevat de bestanden GiveIO.sys en GiveIO.inf, evenals gedetailleerde instructies installatie-instructies met illustraties.

Naast de opties voor “handmatige” driverinstallatie zijn er verschillende opties voor het installatieprogramma dat de installatie automatisch uitvoert.

Download een set bestanden voor automatische installatie chauffeurs GiveIO.sys(giveio_sys_install.rar - 28kb). Het archief bevat de bestanden GiveIO.sys en instdrv.exe, evenals het bestand remove-giveio.cmd, waarmee de driver GiveIO.sys kan uit het systeem worden verwijderd.

Port95nt-stuurprogramma

De term " bestuurder Port95nt" zal hier niet helemaal correct zijn. In wezen is dit dezelfde driver DLPortIO uit het pakket BestuurderLINX van Wetenschappelijke Software Tools, Inc., alleen binnen volledige versie, met een paar hulpprogramma's voor poortbeheer, met een beschrijving en veel voorbeelden voor programmeurs. Er is geen voordeel voor de gemiddelde gebruiker extra componenten nee, maar de drivercomponenten DLPortIO.sys en DLPortIO.dll zijn absoluut hetzelfde als in de verkorte versie.

Ik noemde Port95nt om twee redenen als driver. De eerste is het invullen van de lijst met verwijzingen naar LPT-poortstuurprogramma's die op internet te vinden zijn.

De tweede reden is dat er in sommige gevallen problemen kunnen optreden bij het installeren van een verkorte versie van DLPortIO onder WinXP. Meestal, maar niet vaak, gebeurt dit in uitgeklede "auteur"-builds van WinXP. In dit geval kunt u nemen volledige versie installatieprogramma (1,5 MB). Hoewel het naar mijn mening sneller zal zijn om DLPortIO.sys en DLPortIO.dll handmatig in de gewenste map te plaatsen dan de moeite te nemen een installatieprogramma te selecteren dat dit voor u kan doen.

Aanvullende maatregelen

Naast het installeren van een van de bovengenoemde stuurprogramma's, moet u voor normale werking van de LPT-poort onder WinXP OS het register bewerken met behulp van een REG-bestand xp_stop_polling.reg(xp_stop_polling.rar - 0,48 kb)

Onder WinXP zijn apparaten die de LPT-poort gebruiken soms instabiel. De oorzaak van dergelijke fouten kan het Plug-and-Play (PnP)-subsysteem in Windows zijn, dat periodiek de LPT ondervraagt ​​om aangesloten apparaten te detecteren. Deze polling vindt plaats wanneer het systeem opstart, maar kan ook tijdens het gebruik plaatsvinden. Helaas blokkeren het stuurprogramma DLportIO.sys en andere stuurprogrammaopties de toegang tot de LPT vanuit andere programma's niet wanneer met de clientpoort wordt gewerkt van deze bestuurder en het PnP-subsysteem weet zeker dat de poort niet bezet is, er toegang toe krijgt en het werk verstoort externe apparaten. Het REG-bestand wordt gebruikt om het probleem op te lossen. xp_stop_polling.reg. Dit bestand wordt in het register geschreven Windows-toets, wat dergelijke polling verbiedt terwijl het systeem actief is.

Naast het installeren van het stuurprogramma en het beperken van gelijktijdige toegang tot de poort voor programma's, om hardwarecompatibiliteit en normale werking van apparatuur met de LPT-poort te garanderen, is het noodzakelijk om in te stellen juiste adres En werkingsmodus van de poort(“Normaal”, SPP of EPP, maar niet ECP).

De volgende parameters kunnen via BIOS Setup worden geconfigureerd:

Basisadres, dit kan 378h, 278h en 3BCh zijn. Tijdens de initialisatie controleert het BIOS de aanwezigheid van poorten op adres in precies deze volgorde en wijst dienovereenkomstig de logische namen LPT1, LPT2, LPT3 toe aan de gedetecteerde poorten. Adres 3BCh heeft een poortadapter op het MDA- of HGC-bord (voorgangers moderne videokaarten). De meeste poorten zijn standaard geconfigureerd om 378 uur te adresseren en kunnen worden omgeschakeld naar 278 uur.

De gebruikte interruptverzoekregel, IRQ7 wordt meestal gebruikt voor LPT1, IRQ5 voor LPT2. In veel desktoptoepassingen worden printeronderbrekingen niet gebruikt en kan deze schaarse pc-bron worden bespaard. Wanneer u echter de hogesnelheidsmodi ECP (Fast Centronics) gebruikt, kan de onderbrekingswerking de prestaties aanzienlijk verbeteren en de processorbelasting verminderen.

Tegelijkertijd kan de ECP-modus niet worden gebruikt met apparaten die krappe timings vereisen (programmeurs en JTAG-interfaces).

Tot slot nog een beetje over terminologie:

. SPP(Standaard parallelle poort - standaard parallelle poort). Om het begrip te vereenvoudigen, wordt dit in het BIOS vaak aangeduid met de term " Normaal".
. EVP(Enhanced Parallel Port) - snelle bidirectionele interface-optie. Het doel van sommige signalen is gewijzigd, de mogelijkheid om meerdere logische apparaten te adresseren en 8-bits gegevensinvoer, en een hardware-FIFO-buffer van 16 bytes zijn geïntroduceerd. Maximale snelheid uitwisseling - tot 2 Mb/s.
. ECP(Enhanced Capability Port) - een intelligente versie van EPP. De mogelijkheid om te splitsen is toegevoegd doorgegeven informatie over opdrachten en gegevens, ondersteuning voor DMA en compressie van verzonden gegevens RLE-methode(Run-Length Encoding - codering van herhalende reeksen).

Iedereen die ooit heeft geprobeerd zelf een pc in elkaar te zetten of een van de componenten te kopen, is de kwestie van de poorten tegengekomen. Parallel of serieel? Vierpolige of 16-polige connector? Uitvoer via poort of geheugen? Al deze vragen komen naar voren als u dit onderwerp bestudeert en de juiste kabel selecteert.

Haven

Wat is een haven? Dit is een speciale connector in een pc die werkt als koppeling tussen verschillende soorten apparaten en het computersysteem. Poorten zijn voorwaardelijk synoniem met connectoren die nodig zijn voor de werking van randapparatuur die gescheiden is van de pc-architectuur. Het is bijvoorbeeld vermeldenswaard dat de netwerkconnector, of de plaats waar de chip en RAM worden aangesloten, geen poort wordt genoemd.

Sommige poorten ondersteunen hot-plugging en unplugging, voor andere moet u eerst het systeem uitschakelen en vervolgens de poort aansluiten.

De hardwarepoort is verkrijgbaar in verschillende typen. Dit omvat dus een parallelle interface, serieel, USB, PATA/SATA, PS/2 en vier moderne video-interfaces: Display Port, HDMI, VGA, DVI.

Parallel

We zullen het hebben over een van deze interfacetypen. Parallel is als koppeling voor pc gemaakt randapparaat en computer. Als waar we het over hebben O computertechnologie, dan implementeert dit type fysiek een parallelle verbinding, wat vrij logisch is.

Je hoort vaak de uitdrukking ‘parallelle printerpoort’, en dat is niet zonder reden. Het type van deze interface kreeg onmiddellijk na zijn geboorte de namen printerpoort en Centronics-poort.

Begin

Deze naam is eigenlijk met een reden ontstaan. De interface is ontwikkeld door Centronics, die er in 1970 een printer mee uitbracht. Aan de haven werd gewerkt door de bedrijven Howard en Robinson. Niemand was van plan iets te creëren nieuw type of een revolutionaire ontdekking doen. Alles gebeurde de facto en de parallelle poort werd een industriestandaard.

In die tijd waren het er veel verscheidenheid aan kabels, die door de fabrikanten werden gebruikt. DC-3-, 36-, 25- en 50-pins connectoren waren bijvoorbeeld populair.

Ontwikkeling

De ontwikkeling van de printerpoort werd snel opgepakt. De een na de ander begonnen bedrijven hun versies te implementeren. Er begonnen platte opties voor een groot aantal pinnen te verschijnen. Dataproducts werkte met de interface en ontwikkelde de DC-37, die de host was, en een 50-pins poort die op de printer werd aangesloten.

Dataproducts heeft meerdere mogelijkheden tegelijk gecreëerd. Parallelle verbindingen kunnen worden gerealiseerd over korte afstanden tot 15 meter, en voor lange verbindingen tot 150 meter. Deze interface duurde lang. Tot de jaren negentig gebruikten veel fabrikanten het als optie.

Amerikaans IBM-bedrijf Ook besloot ik een bijdrage te leveren aan het creëren van een parallelle computerpoort. Ten tijde van de eerste release persoonlijke computer het was mogelijk om vertrouwd te raken met de Centronics-modificatie. Het is interessant dat veel gebruikers onmiddellijk een voorwaarde kregen. Alleen opnieuw ontworpen Epson-printers met het IBM-logo konden met deze interface functioneren.

Het bedrijf heeft hard gewerkt om de DB25F-kabel te standaardiseren. Waarna printerfabrikanten de standaard in hun modellen begonnen te implementeren. En begin jaren negentig werd de populaire Centronics-poort gewijzigd in IEEE 1284.

Verscheidenheid

Dus de nieuwigheid werd in gebruik genomen en kreeg zijn fans. IEEE 1284 heeft een andere naam: LPT. De parallelle poort heeft internationale standaardisatie verworven en dient nog steeds voor het aansluiten van randapparatuur.

Net als de vorige optie wordt het vaker gebruikt om een ​​printer, scanner en diverse externe apparatuur te activeren. In tegenstelling tot de vorige wijziging werd het mogelijk om een ​​verbinding tussen twee pc's tot stand te brengen en telecontrolemechanismen te activeren.

De basis voor IEEE 1284 was de Centronics-poort en zijn verschillende varianten.

Vergelijking

Zoals eerder vermeld, is de Centronics-interface gemaakt door het gelijknamige bedrijf en werd deze veel gebruikt voor IBM-pc's. Dankzij deze connector was het mogelijk om drukmachines aan te sluiten. Het werd lange tijd als de belangrijkste beschouwd, hoewel het officieel niet zo was.

Het werd oorspronkelijk gemaakt voor unidirectionele informatieoverdracht, dus ideaal voor printers. Toen het werk aan duplexmodificaties begon, werd besloten een van de nieuw geslagen normen te formaliseren. Dit is hoe EEE 1284 werd geboren.

Verscheidenheid

Wat is deze parallelle poort? Aan de computerzijde wordt dit weergegeven door een 25-pins connector in twee rijen van het DB-25-vrouwelijke formaat. Er moet meteen worden opgemerkt dat dit de zogenaamde "vrouwelijke" connector is, maar er is een soortgelijke connector - "mannelijke", die eerder in pc's werd gebruikt als COM-poort.

Randapparatuur is vaak uitgerust met een 36-pins microconnector in de vorm van een lint, zodat de kabel aan de ene kant 25 DB-25-mannelijke pinnen heeft en wordt aangesloten op de pc, en aan de andere kant - 36 IEEE 1284-B-pinnen . Soms vervangt deze optie de MiniCentronics-poort, die wordt weergegeven door een 36-pins AC-kabel.

Onder hen zijn er ook CC-kabels, aan beide zijden bevindt zich een MiniCentronics. Dit is een zeer zeldzame wijziging die is ontworpen voor apparaten met IEEE-standaard 1284-II.

Omdat dit een standaard is, zijn er enkele vereisten waaraan moet worden voldaan. De kabellengte mag bijvoorbeeld niet meer dan drie meter bedragen. De structuur zelf wordt weergegeven door gedraaide paren in een gemeenschappelijk of individueel scherm. Tapeversies zijn zeldzaam.

Als je goed naar oudere scannermodellen kijkt, was er ook een DB-25-mannelijke poort, in plaats van IEEE 1284-B. Ik vraag me af wat soortgelijke apparaten had een extra DB-25-female connector om een ​​printer aan te kunnen sluiten. De scanner verzendt dus informatie via twee interfaces.

Fysieke implementatie

De belangrijkste Centronics-poort was, zoals eerder vermeld, een unidirectionele parallelle poort. De kabel implementeerde de belangrijkste kenmerken. Er waren dus 8 signaallijnen voor beweging, flitsers en een apparaatstatuslijn.

Uiteraard maakte de unidirectionele interface het mogelijk dat materialen in één richting van de pc naar de apparatuur konden worden overgebracht. Desondanks was de technologie iets breder. Er waren er vijf retourlijnen die de toestand van het apparaat bewaakte. De snelheid waarmee informatie kon worden verzonden fluctueerde en steeg tot 1,2 Mbit/s.

Extensies

Alle initiële wijzigingen werden later gecombineerd en gestandaardiseerd. Het eenwordingsproces zelf eindigde met de registratie van de IEEE-1284-standaard. Maar dit loste het probleem van volledige naleving niet op. Het nieuwe product was nog steeds anders dan eerder gemaakte gespecialiseerde extensies.

De bekendste waren de ontwikkelingen van Hewlett-Packard. Samen met Centronics verscheen er een port van Bitronics. Het ontving tweerichtingstechnologie, verplaatste gegevens in twee richtingen en was nodig om informatie te verzamelen over de status van de printer.

Bitronics werkte met het HP multiplexed busprotocol. De technologie maakte het mogelijk om een ​​‘keten’ te gebruiken: sluit meerdere apparaten aan op de LPT-connector. Om deze taak te realiseren zijn verschillende standaarden gemaakt, hoewel ook hier geen compatibiliteit werd bereikt.

Als u verouderde Hewlett-Packard-apparaten bent tegengekomen die niet correct werken, is dit dus niet verrassend. Het hele probleem zit in de havens en de implementatie.

Mogelijkheden

De parallelle interface kan in verschillende modi worden gebruikt. SPP is bijvoorbeeld een standaardimplementatie van een single-ended poort die compatibel is met Centronics. Nibble Mode is een bidirectionele gegevensoverdrachtmodus. Het werkt dankzij controlelijnen. Ooit was dit de enige optie waarmee Centronics informatie bidirectioneel verzond.

Byte Mode is een andere die niet populair werd, maar nog steeds bij sommige controllers werd gebruikt. EPP - werkingsmodus van masters fabrikanten Intel, Xircom en Zenith Data Systems, die zich ook bezighielden met tmet een snelheid van 2 MB/s.

EN laatste modus- ESR. Ze waren eraan bezig Microsoft en Hewlett-Packard. Er verschenen hardwarebestandscompressie, een buffer en werk in directe geheugentoegang.

Sollicitatie

Het is geen geheim dat de meeste printers nu zijn aangesloten via USB-kabels. Voordat deze optie verscheen, was de connector de enige optie. Maar daarnaast bestond het ook in verschillende randapparatuur.

Nu is het moeilijk te zeggen wat eerder en eerst verscheen, maar ze werden beroemd elektronische sleutels, die de software beschermde tegen kopiëren. Deze poort staat ook ter beschikking van schijven en scanners. En dit gaf op zijn beurt een impuls aan de creatie van parallelle connectoren voor modems, geluidskaarten, webcams, gamepads, enz.

Vervolgens begonnen ze adapters te ontwikkelen voor de SCSI-standaard gecombineerd met een parallel type. Ook zijn adapters voor EPROM en hardwarecontrollers bekend.

Modern gebruik

De parallelle interface is minder populair geworden. Het is vervangen door USB-kabels, en voor netwerkverbinding- Ethernet. Veel fabrikanten geloven parallelle soort aansluitingen zijn verouderd. Daarom begint het massaal te verdwijnen uit de interfacepanelen van computers en laptops. Microsoft vraagt ​​ontwikkelaars om dit type poort niet te gebruiken. En voor degenen die nog steeds niet klaar zijn om deze optie op te geven, is er een "parallelle USB-poort" -adapter.

Verschil

Vaak opeenvolgend en parallelle poorten. In systemen van IBM waren er naast een parallelle interface seriële en ingebouwde interfaces voor het toetsenbord. De seriële poort werd vaak gebruikt om snelle communicatieapparaten aan te sluiten die werkten met het RS-232-formaat. Hier hebben we het over modems en soortgelijke apparaten.

Een seriële poort was gemakkelijker te implementeren voor technologie waarvoor de overdracht van een kleine hoeveelheid gegevens nodig was. Dit omvat een gewone computermuis.

Fout

OVER parallelle interface mensen leren vaak van het systeem zelf. Soms doen zich problemen voor waarbij de gebruiker hard moet werken om deze op te lossen. Sommigen hebben dus misschien een fout in de “Parallel Port Driver” opgemerkt. Normaal gesproken verschijnt deze fout in het systeemlogboek en is gemarkeerd met een rood kruis.

Tegenwoordig komt een dergelijk probleem steeds minder vaak voor in het systeem. Kan optreden bij het uitvoeren van Parport als er geen parallelle poort op het bord is. In dit geval kunt u naar het register gaan en in de Parport-sectie de regel "Start" vinden. Hier moet u de waarde “2” wijzigen in “4”.

Conclusies

De parallelle poort behoort nu tot het verleden. Ze hebben er in de vorige eeuw aan gewerkt, maar in de onze konden ze het vervangen door handigere connectoren. De opties die onveranderd bleven, konden adapters aanschaffen. Zo werd het mogelijk om een ​​PCI parallelle poortcontroller aan te schaffen, een vervanging voor USB en andere populaire interfaces.

Er zijn veel manieren op internet om deze of gene kabel zelf te maken. Maar eerlijk gezegd zijn de opties niet geheel veilig en roepen ze twijfels op. Het is beter als je plotseling een parallelle poort voor een apparaat nodig hebt, kijk in de winkels. Hoewel het niet meer wordt geproduceerd, is het nog steeds te koop. En als u zelf een pc in elkaar zet, is het beter om het interfacepaneel van het moederbord goed te bekijken, om later niet in de problemen te komen.