Драйвер для роботи з LPT портом (інтегрованим або платою PCI)

Років 10-15 тому паралельний порт був досить потрібним інтерфейсом для зв'язку між пристроями. Сьогодні виробники різних пристроїввіддають перевагу послідовним інтерфейсам. Тим не менш, і сьогодні LPT порт все ще можна зустріти. А деякі розробники ще пишуть під нього програми (або підтримують написані за часів розквіту паралельних інтерфейсів). Але в комп'ютерах зараз LPT порт – досить велика рідкість. Існують, звісно, ​​плати розширення комп'ютера, які реалізують інтерфейс LPT. Вони в основному є плати на шині PCI. На жаль, далеко не весь софт, який був написаний для інтегрованих у материнську плату LPT порти будуть працювати з LPT-PCI-платами.

Пропонується вирішення цієї проблеми: програмний клас, написаний під .NET, та динамічну бібліотеку, яка працює з LPT. Дана реалізаціяперевірена на 32- та 64-розрядних Windows XP, Windows 7, 8 та 10 як із вбудованими LPT портами, так і реалізованими як плат розширення на шині PCI або PCI-Express. Завантажити драйвер для порту LPT можна за посиланням внизу після статті.

1 Встановлення драйверадля роботи з LPT портом

У архіві є дві папки - для 32-розрядної і для 64-розрядної версій Windows. В одній із папок лежить файл InstallDriver.exe. Спочатку запустіть цей файл, він установить динамічні бібліотеки у систему. Після цього комп'ютер слід перезавантажити.

Щоб використовувати пропонований драйвер, файли inpout32.dllі inpoutx64.dllповинні розташовуватися в одній директорії з виконуваним файломвашої програми.

2 Програмний клас використання бібліотекроботи з LPT портом

Мною був написаний клас для .NET, який використовує динамічні бібліотеки inpout32.dllі inpoutx64.dllі дозволяє зчитувати з паралельного порту та записувати у його регістри дані.

Згадані бібліотеки написано не мною. Я пропоную зручний клас-оболонку, що спрощує роботу з даними бібліотеками. Крім того, автор бібліотек у файлі readme.txtповідомляє, що його драйвер не підтримує PCI пристрої. Мені вдалося його запустити для роботи як з інтегрованим паралельним портом, так і LPT портом, реалізованим у вигляді плати розширення на шині PCI-Express. Причому порт добре працює і на сучасній Windows10 x64, і на більш старих системах.

Ось код класу LPT мовою VB.NET:

Код класу LPT мовою VB.NET(розгортається) Imports System.Runtime.InteropServices """ """ Робота з портом LPT. Під час створення визначає наявність драйвера і вибирає відповідну бібліотеку. """ Public NotInheritable Class LPT #Region "CONST" Public Const DLL32 As String = "c:\temp\inpout32.dll" Public Const DLL64 As String = "c:\temp\inpoutx64.dll" Public Const DLL32DRV As String = "c: \temp\inpoutx32drv.dll" """ """ Реєстри паралельного порту. """ Public Enum Register As Integer """ """ Реєстр даних SPP/EPP. """ DATA = 0 """ """ Реєстр стану SPP/EPP. """ STATUS = DATA + 1 """ Реєстр керування SPP/EPP. CONTROL = DATA + 2 """ """ Реєстр адреси EPP. Читання або запис до нього генерує пов'язаний цикл читання або запису адреси EPP. """ EPP_ADDRESS = DATA + 3 """ """ Регістр даних EPP. Читання (запис) генерує пов'язаний цикл читання (запису) даних EPP. """ EPP_DATA = DATA + 4 """ """ Реєстр активації режиму EPP. """ """ """ Якщо тільки змішаний "ECP+EPP" або "Extended" - швидше за все потрібно ще виконати запис у порт ECR байта 0x80 """ (ECR - це регістр ECP-режиму, ECR=BASE_ADDR+0x402, BASE_ADDR - базова адреса LPT-порту """ ECR = DATA + & H402 "TEST End Enum #End Region "/CONST #Region "DllImport" Private Shared Function IsInpOutDriverOpen() As Byte End Function Private Shared Function IsInpOutDriverOpen_x64() As UInt64 End Function Private Shared Function Inp32(PortAddress As UInt32) As Byte End Function Private Shared Sub Out32(portAddress As UInt32, data As UInt32) End Sub Private Shared Function Inp64(PortAddress As UInt64) As Byte End Function Private Shared Sub Out64(PortAddress As UInt64, Data As UInt64) End Sub #End Region "/DllImport #Region "CTOR" """ """ Перевіряє можливість використання x86 або x64 драйвера. У разі неможливості викидає виняток "драйвер не встановлений". """ Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 As Boolean = CheckIsDriverX64() If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else End Sub """ Ініціалізація порту - виставлення XXXX0100b в регістрі контролю. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region "/CTOR #Region "PROPS" """ """ Чи використовується 64-розрядна версія драйвера. """ Якщо драйвер не встановлено, повертається NULL. """ Public Shared ReadOnly Property IsX64DriverUsed As Boolean? Get Return _IsX64DriverUsed End Get End Property Private Shared ReadOnly _IsX64DriverUsed As Boolean? = Nothing #End Region "/PROPS #Region "METHODS" """ """ Визначає, чи є драйвер 32-розрядним. """ Private Shared Function CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function """ """ Визначає, чи є драйвер 64-розрядним. """ Private Shared Function CheckIsDriverX64() As Boolean Try 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" """ """ Читає із заданого регістру LPT порту 1 байт даних. """ """ Номер порту. """ Реєстр порту. Public Shared Function Read(port As ULong, Optional reg As Register = Register.DATA) As Byte Dim data As Byte = 0 If IsX64DriverUsed Then data = Inp64(CULng(port + reg)) Else data = Inp32(CUInt(port + reg )) End If Return data End Function """ """ Записує в заданий регістр LPT порту число. """ """ Адреса порту. """ Реєстр порту. """ Public Shared Sub Write(Port As ULong, Reg As Register, Data As ULong) If IsX64DriverUsed Then Out64(Port + CULng(reg), 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 """ """ Тестує наявність LPT порту за заданою адресою. """ """ Адреса паралельного порту. Public Shared Function CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Try InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) "зберігаємо поточне значення регістру даних" ? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent And (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent And (&H55 = Read )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) "відновлюємо колишнє значення регістру даних "Перевіримо наявність даних, якщо порт не виявлений (у разі односпрямованого порту) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>0) AndAlso (data<>&HFF)) "Не порожнє значення? => Порт присутній. If (Not portPresent) Then 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 мовою C#:

Код класу LPT мовою C#(розгортається) using System; використовуючи System.Diagnostics; використовуючи System.Runtime.InteropServices; namespace LPTIO ( /// Клас для роботи LPT портом. Під час створення визначає наявність драйвера та його розрядність. public sealed class LPT( private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Чи використовується 64-розрядна версія драйвера. public static bool IsX64PT4 ; ) ) static LPT()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) throw new SystemException("Драйвер для LPT порту не встановлений."); LPT._IsX64Drivers; ) public LPT() ( ) private static extern byte IsInpOutDriverOpen(); private static extern ulong IsInpOutDriverOpen_x64(); private static extern byte Inp32(uint PortAddress); private static extern void Out32(uint portAddress, uint data); private static extern byte Inp64(ulong PortAddress); private static extern void Out64(ulong PortAddress, ulong Data); /// Визначає, чи є драйвер для 32-розрядної версії Windows. private static bool getIsDriverX86()( bool flag; try ( LPT.IsInpOutDriverOpen(); flag = true; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); ) return flag; ) /// Визначає, є драйвер для 64-розрядної версії Windows. private static 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(); ) return flag; ) /// Читає з LPT порту 1 байт даних. /// Номер порту. /// Реєстр порту. public static byte Read(Ulong port, LPT.Register reg = LPT.Register.DATA)( return !LPT.IsX64DriverUsed ? ) Decimal(port), new Decimal((int) reg))));) /// Записує в порт LPT число. /// Адреса порту. /// Реєстр порту. /// Число запису. У 32-розрядних системах аргумент має бути не більше, ніж максимальне значеннядля типу UInt32. public static void Write(ulong port, LPT.Register reg, ulong data)( if (LPT.IsX64DriverUsed) ( LPT.Out64(checked (port + (ulong) (uint) reg), data); ) else ( if (data > (ulong) uint.MaxValue) throw new ArgumentException("У 32- розрядних системах аргумент повинен бути 32-розрядним (тип UInt32).", "data"); ((uint) data)); ) ) /// Реєстри порту LPT. public enum Register( DATA, STATUS, CONTROL, ) ) )

3 Застосування класудля роботи з LPT портом

Якщо ми подивимося на список експортованих функцій бібліотеки inpout32.dllза допомогою чудового інструменту DLL Export Viewerвід NirSoft, то побачимо наступну картину:

Це список функцій, які можна використовувати. Фактично всі вони використовуються у класі LPT, але реалізація прихована, і з публічних методів користувачеві доступні лише два методи та одна властивість (вони розглядаються трохи далі).

При інстанцію клас сам визначить, бібліотеку якої розрядності йому використовувати - inpout32.dllабо inpoutx64.dll. Тому від користувача не вимагається жодних дій щодо ініціалізації або визначення розрядності використовуваної dll. Ви можете одразу записувати або читати з LPT порту. Одне "Але": якщо драйвер не встановлений, звернення до будь-якого з методів динамічної бібліотекивикличе виняток, тому рекомендую використовувати блоки Try…Catchдля перехоплення та обробки винятків.

Декілька прикладів використання класу LPT.

Для визначення, чи використовується 64-розрядна версія драйвера (inpoutx64.dll при True) або 32-розрядна (inpout32.dll при False) (насправді це знати не обов'язково, клас використовує саме ту бібліотеку, яка потрібна, але раптом вам для чогось знадобиться це дізнатися зі своєї програми):

Bool is64bitDriver = LPT.IsX64DriverUsed;

Для запису числа "123" у регістр контролю LPT порту викличте зі свого класу:

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

Для читання одного байта з регістру даних LPT порту та читання регістру статусу:

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

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

Щоб дізнатися адресу LPT порту, зайдіть у диспетчер пристроїв Windows, знайдіть розділ Порти COMта LPT, виберіть паралельний порт, що використовується, і у вікні властивостей (клацнувши по ньому правою кнопкою миші) подивіться, які ресурси використовує вибраний порт (необхідно брати перше значення з діапазону).


Наприклад, в даному випадкунеобхідно використовувати номер порту C100.

Завантажити вкладення:

  • Завантажити драйвер для LPT порту (2643 Завантажень)

Дуже радимо з ним познайомитись. Там ви знайдете багато нових друзів. Крім того, це найбільш швидкий і дієвий спосібзв'язатись з адміністраторами проекту. Продовжує працювати розділ Оновлення антивірусів – завжди актуальні безкоштовні оновлення для Dr Web та NOD. Чи не встигли щось прочитати? Повний зміст рядка , що біжить , можна знайти за цим посиланням .

Робота з LPT-портом у Win NT/2000/XP

LPT-порт (L ine P rin T er) - порт паралельного інтерфейсу, що спочатку створювався для підключення принтера. BIOS забезпечує підтримку LPT-порту, необхідну організації виведення по інтерфейсу Centronics. Адресний простір порту займає діапазон H378-H37F

LPT-порт має 12 вихідних та 5 вхідних ліній. Таке досить велика кількістьліній робить можливим підключеннядо порту нескладної апаратури, можливо навіть не має мікроконтролера. Тому цей порт, незважаючи на зникнення принтерів з LPT-інтерфейсом, активно використовується для підключення простих програматорів мікросхем пам'яті, JTAG-інтерфейсів для перепрошивки (заміни програмного забезпечення) супутникових ресиверов, DVD-плеєрів та інший електронної техніки. Популярний LPT-порт і моддерів, оскільки дозволяє підключити до комп'ютера LCD-дисплеї без виготовлення складних плат-інтерфейсів.

Windows 2000/XP не дозволяє програмам звертатися до портів введення-виведення безпосередньо. Для цього необхідно використовувати драйвер, що працює в KERNEL-mode (в режимі ядра операційної системи).

Обмеження доступу до портів вводу-виводу для звичайних прикладних програм (працюючих в режимі користувача) дозволяє зробити операційну систему більш стабільною. Хоча, з іншого боку, ніхто не заважає програмісту написати драйвер, що звертається до портів.

Цікаво, що для процесора Intel x86 можна написати драйвер, який використовує один із двох принципово різних підходів. Перший варіант – драйвер сам звертається до портів, а прикладна програма лише вказує драйверу, що робити. Цей варіант у загальному випадку є стандартним та кращим.

Для вирішення проблеми існують чотири популярні варіанти драйверів, що дозволяють прикладній програмі звертатися до портів вводу-виводу: драйвер DLPortIO, драйвер UserPort, драйвер GiveIO.sis, драйвер Port95nt.

Усі чотири варіанти практично рівноцінні.

Драйвер DLPortIO

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

Власне драйвер складається з двох складових:
. DLPortIO.dll - Win32 DLL, що забезпечує апаратні функції вводу/виводу та
. DLPortIO.sys - драйвер для WinNT, що працює в режимі ядра ОС (не потрібний для Win95/98)

В інсталяційному пакеті драйвера, крім цих двох компонентів, є ще файл Install.exe, що переміщує два вищезгадані в папку драйверів Windowsта реєструючий їх у системі.

Більше писати про цей драйвер і нема чого. Налаштування не потрібне. Завантажили, встановили, користуємось. Не забуваймо заглянути в кінець статті і почитати забезпечення працездатності LPT-порту.

Установка елементарна – запускаємо файл Install.exe, встановлюємо. Після закінчення установки заглядаємо в папку C: Windows System32drivers і перевіряємо наявність двох файлів драйвера (DLPortIO.sys і DLPortIO.dll). Якщо бачимо, що ці файли так і не скопіювалися, беремо їх із інсталяційного пакета та копіюємо вручну. Не хвилюйтеся, з комп'ютером нічого поганого не станеться. Перевантажуємо комп'ютер та працюємо з LPT-портом.

Якщо раптом, в результаті маніпуляцій з обладнанням, ви отримаєте від драйвера повідомлення такого плану: не варто панікувати. Виправляється ця проблема так:
. Запускаємо regedit.
. Заходимо у реєстрі у гілку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. У папці dlportio змінюємо значення параметра Startна 1 .
. Перезавантажуємо комп'ютер.

Драйвер UserPort

Драйвер UserPortвідкриває доступ до портів Win NT/2000/XP для програм. Цим варіантом драйвера LPT-порту найчастіше користуються "технарі", що працюють з програматорами та JTAG", оскільки драйвер має хоч якісь конфігуруючі налаштування. Для роботи програм обслуговування LCD-індикаторів його також можна використовувати.

В архіві драйвера є три файли:
. UserPort.sys - драйвер для WinNT, що працює в режимі ядра ОС,
. UserPort.exe - програма для налаштування драйвера та
. UserPort.pdf – файл опису.

Установка UserPort:
. 1. Розпакуйте архів в окрему папку.
. 2. Скопіюйте файл UserPort.sys у C:\Windows\System32\drivers

Налаштування UserPort:
. Запустіть UserPort.exe.
. Перед нами з'явиться панель з двома віконцями.

Ліве віконце відноситься до роботи програми в вікні ДОС, праве на повному екрані. За замовчуванням у них прописані номери портів LPT - їх можна видалити за допомогою кнопки "Remove". В обидва вікна потрібно вписати потрібні номерипортів, які планується використати.

Для використання з драйвера з більшістю програматорів, JTAG"ів та програм обслуговування дисплеїв, додайте в ліву колонкутакі параметри:
378 , 379 і 37Aдля LPT1
278 , 279 і 27Aдля LPT2(Якщо в BIOS'і перезначено адресу LPT-порту).

Поясню, що означають цифри. 0x378- Це адреса порту.
. Адреса 0x378називається базовимі служить для запису та читання данихв порт та з порту, по шині даних D0-D7.
. Адреса 0x379 (базовий+1)призначений для читання бітівстану із пристрою, підключеного до LPT-порту.
. Адреса 0x37A (базовий+2)служить для запису бітівкерування пристрою, підключеного до LPT-порту.

Додаємо так:
0x378-0x378
0x37A-0x37A



Додавати адреси порту до списку потрібно через вікно введення та за допомогою кнопки "Add". Адреса 0x379найчастіше не потрібний і його можна не вписувати, оскільки він призначений для читання бітівстану з пристрою, підключеного до LPT-порту, а більшість пристроїв (програматори, JTAG" та LCD-індикатори тим більше) сигнали стану не формують. При бажанні можна навпаки вписати весь діапазон адрес, відведених системою під LPT-порт 0x378-0x37F.

Заходимо в Панель управління, Система , вибираємо закладку Устаткування , Диспетчер пристроїв, заходимо в Порти (COM і LPT) і дивимося властивості LPT порту, яким ви хочете встановити з'єднання. У Властивості відкриваємо закладку Ресурси і дивимося значення параметра Діапазон введення/виводу (I/O). (Зазвичай у Windows XP воно одно 378 - 37F)

Після формування списку адрес, потрібно натиснути кнопку "Start", драйвер буде запущено та з'явиться повідомлення:



Потім натиснути кнопку "Update", драйвер буде зареєстрований у системі, потім "Exit". Зрозуміло, кнопку "Stop", поки ми користуємося драйвером, не потрібно натискати.

Якщо при натисканні кнопки "Update" система йде в перезавантаження, потрібно пробувати запускати реєстрацію драйвера в системі з правами адміністратора або спробувати тимчасово відключити файрвол або антивірус, які можуть блокувати втручання в системні процеси. Якщо щось вийшло, читайте UserPort.pdf

Для перевірки, чи з'явився доступ до портів, можна запустити програму "lpt-test.exe".

Після старту програми з'явиться вікно з таким змістом:



Відсутність повідомлення "Тестується порт LPT (Адреса XXXh)" і наступних рядків свідчить про те, що драйвер не працює.

Ця програма просто посилає регістр даних Dx і регістр управління Ux порту LPT різні числаа потім їх же зчитує. Реєстр статусу Sx порту LPT лише зчитується. На екран виводиться номер та адреса тестованого порту LPT. Якщо порт справний, то для регістрів Dx та Ux не повинно видаватися жодних повідомлень.



LPT-TEST v1.03 1995-2003 Copyright (C) С.Б.Алеманов. Москва "БІНАР".
Під час тестування до портів не повинно бути підключено периферійні пристрої.
Dx – реєстр. даних (out), Ux – реєстр. управління (out), Sx – рег. статусу (inp).

Тестується порт LPT1 (Адреса 378h)
2-й контакт (D0) - ні "1"
3-й контакт (D1) - ні "1"
4-й контакт (D2) - ні "1"
5-й контакт (D3) - ні "1"
6-й контакт (D4) - ні "1"
7-й контакт (D5) - ні "1"
8-й контакт (D6) - ні "1"
9-й контакт (D7) - ні "1"
1-й контакт (U0) - ні "1"
14-й контакт (U1) - ні "1"
17-й контакт (U3) - ні "1"
1-й контакт (U0) - ні "0"
14-й контакт (U1) - ні "0"
17-й контакт (U3) - ні "0"
15-й контакт (S3) - ні "0"


Якщо регістри Dx або Ux несправні, то виводиться повідомлення "Ні 0" або "Ні 1" і вказується номер контакту на LPT-роз'єм (сигнали на цьому контакті можна подивитися осцилографом). На вході регістру статусу Sx може бути як "0" і "1", але зазвичай, коли до порту LPT нічого не підключено, на всіх входах регістру статусу є "1". Поява ж на вході регістру статусу "0" може бути ознакою того, що вхід пробитий, якщо раніше там завжди була "1".
На деяких машинах, якщо регістр даних або регістр управління несправні, доступ до LPT-порту взагалі не з'являється. Очевидно, BIOS при включенні комп'ютера тестує порт LPT і, якщо він несправний, відключає його.

Якщо виникають проблеми, можливо роботі заважають якісь драйвера, періодично посилаючи імпульси в порт LPT (це можна побачити осцилографом). Наприклад, можна відключити порт LPT у налаштуваннях принтера:
вимкнути LPT1: Порт принтера
увімкнути FILE: Друкувати у файл

Після того, як всі проблеми усунуті і тест пройдено, повинен з'явитися доступ до портів і можна запускати програму, яка використовує порт LPT. В іншому випадку пристрій, підключений до порту на такій машині, не працюватиме.

Драйвер GiveIO.sys

У далекому 1996 американський програміст Дейл Робертс, провів серію експериментів, результатом яких став драйвер GiveIO.sys. Досі драйвер залишається одним з популярних інструментів, що дозволяють прикладній програмі звертатися до портів вводу-виводу.

Сам автор драйвера настійно рекомендує використовувати цей драйвер тільки з метою налагодження. Остаточна версія прикладної програми повинна замість самостійного звернення до портів вводу-виводу доручити цю справу драйверу, написаному спеціально для цих цілей. Драйвер повинен поводитися "коректно", перевіряючи, чи не використовується вже пристрій якимось іншим додатком.

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

Встановлення драйвера:

1. Завантажте архів, розпакуйте та скопіюйте файл GiveIO.sys у каталог C:\Windows\System32\Drivers (маю на увазі, що ваша Windows встановлена ​​в каталог C:\Windows) .
. 2. Запустіть файл install.reg. На екрані з'явиться таке повідомлення:


. 3. Відповідаємо ствердно. При цьому з'явиться повідомлення про успішне внесення інформації до Реєстру. За бажання, можна переконатися у цьому. Запускаємо редактор реєстру regedit.exe та у гілки HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveioперевіряємо наявність наступних записів:


. 4. Перевантажуємо комп'ютер і перевіряємо роботу програм, які користуються драйвером.

Драйвером GiveIO.sysнарод активно користується, і, згодом, з'явилися і інші варіанти його встановлення.

Наприклад – драйвер GiveIO.sysза наявності файлу з "інформацією про обладнання" GiveIO.infможна встановити через аплет "Встановлення обладнання".




Драйвер GiveIO.sys ми покажемо операційній системіщоб вона повірила в існування обладнання "GiveIO".

Завантажити комплект файлів для такого варіанту встановлення драйвера GiveIO.sys(giveio_sys_v2.rar – 78kb). Архів містить файли GiveIO.sys і GiveIO.inf, а також докладну інструкціювстановлення з ілюстраціями.

Крім варіантів "ручної" установки драйвера, написано кілька варіантів інсталятора, що виконує інсталяцію в автоматичному режимі.

Завантажити комплект файлів для автоматичної установкидрайвера GiveIO.sys(giveio_sys_install.rar – 28kb). Архів містить файли GiveIO.sys і instdrv.exe, а також файл remove-giveio.cmd, за допомогою якого драйвер GiveIO.sysможна видалити із системи.

Драйвер Port95nt

Термін " драйвер Port95nt" тут буде не зовсім коректний. По суті, це той самий драйвер DLPortIOз пакета DriverLINXвід Scientific Software Tools, Inc, тільки в повному варіанті, з парою утиліт управління портом, з описом та безліччю прикладів для програмістів. Пересічному користувачеві ніякої користі від додаткових компонентівні, а компоненти драйвера DLPortIO.sys та DLPortIO.dll абсолютно такі ж, як і в скороченій версії.

Згадав про Port95nt, як про драйвера, з двох причин. Перша - для повноти переліку згадок про драйвери LPT-порту, що зустрічаються в інтернеті.

Друга причина - у деяких випадках можуть бути проблеми зі встановленням скороченої версії DLPortIO під WinXP. Зазвичай, але нечасто це відбувається в урізаних "авторських" збірках WinXP. У такому разі можна взяти повну версіюінсталятора (1.5МБ). Хоча, на мою думку, швидше вдасться вручну покласти в потрібну папку DLPortIO.sys та DLPortIO.dll, ніж морочитися з підбором інсталятора, який зможе це зробити за вас.

Додаткові заходи

Крім установки одного з вищезгаданих драйверів, для нормальної роботи порту LPT під ОС WinXP необхідно зробити редагування за допомогою REG-файлу xp_stop_polling.reg(xp_stop_polling.rar - 0,48kb)

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

Крім установки драйвера та обмеження одночасного доступу до порту для програм, для забезпечення апаратної сумісності та нормальної роботи обладнання з LPT-портом, необхідно в BIOS виставити правильна адреса і режим роботи порту("Normal", SPP або ЕРР, але не ECP).

Конфігурування через BIOS Setup підлягають наступним параметрам:

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

Лінія запиту переривання, що використовується, для LPT1 зазвичай використовується IRQ7, для LPT2 - IRQ5. Багато "настільних" застосуваннях переривання від принтера не використовуються, і цей дефіцитний ресурс PC можна заощадити. Однак при використанні швидкісних режимів ЄСР (Fast Centronics) робота з переривань може помітно підвищити продуктивність та знизити завантаження процесора.

У той же час, режим ЕСР не можна використовувати з пристроями, які потребують жорстких таймінгів (програматорів та JTAG-інтерфейсів).

На завершення трохи про термінологію:

. SPP(Standard Parallel Port – стандартний паралельний порт). Нерідко, для спрощення розуміння, в BIOS "е позначається терміном " Normal".
. EPP(Enhanced Parallel Port – розширений паралельний порт) – швидкісний двонаправлений варіант інтерфейсу. Змінено призначення деяких сигналів, введено можливість адресації кількох логічних пристроїв та 8-розрядного введення даних, 16-байтовий апаратний FIFO-буфер. максимальна швидкістьобміну – до 2 Мб/с.
. ECP(Enhanced Capability Port – порт з розширеними можливостями) – інтелектуальний варіант EPP. Введено можливість поділу переданої інформаціїна команди та дані, підтримка DMA та стиснення переданих даних методом RLE(Run-Length Encoding - кодування повторюваних серій).

Всі, хто хоч раз намагався зібрати самостійно ПК або прикупити одне з комплектуючих, стикалися з портами. Паралельний чи послідовний? Чотирьохконтактний чи роз'єм на 16 пін? Виведення через порт чи пам'ять? Всі ці питання виникають у міру вивчення цієї теми та вибору потрібного кабелю.

Порт

Що таке порт? Це спеціальний роз'єм у ПК, який працює як сполучна ланка різного роду пристроїв із системою комп'ютера. Порти умовно синоні розніманням, які необхідні роботи периферійних девайсів, відокремлених від архітектури ПК. Наприклад, у протиставлення слід зазначити, що мережевий роз'єм, чи місце підключення чіпа і ОЗУ, портом називається.

Частина портів може підтримувати гаряче підключення і відключення, деякі потребують попередньо відключити систему, а потім підключати порт.

Апаратний порт представлений цілою низкою типів. Так, сюди відносять паралельний інтерфейс, послідовний, USB, PATA/SATA, PS/2 та четвірку сучасних відеоінтерфейсів: Display Port, HDMI, VGA, DVI.

Паралельний

Йтиметься про один із цих типів інтерфейсу. Паралельний був створений для ПК як сполучна ланка периферійного пристроюта комп'ютера. Якщо мова йдепро обчислювальної техніки, цей тип фізично реалізує паралельне з'єднання, що цілком логічно.

Часто можна почути вираз "паралельний порт принтера", і це недарма. Тип інтерфейсу отримав імена принтерного порту і порту Centronics відразу після свого народження.

початок

Така назва і справді вийшла неспроста. Інтерфейс розробила компанія Centronics, яка у 1970 році випустила принтер із ним. Над портом працювали в компанії "Говард" та "Робінсон". Ніхто не планував створювати новий типчи робити революційне відкриття. Все трапилося де-факто, а паралельний порт став галузевим стандартом.

На той момент існувало багато різноманітних кабелів, які використовували виробники Наприклад, популярним був DC-3, 36, 25 та 50-контактний роз'єм.

Розвиток

Розвиток принтерного порту швидко підхопили. Компанії одна за одною почали реалізовувати свої версії. Почали з'являтися плоскі варіанти на велику кількість пінів. Dataproducts працювала з інтерфейсом, розробивши DC-37, який належав до хоста, і 50-контактний порт, що підключається до принтера.

Dataproducts створила відразу кілька варіантів. Паралельне з'єднання можна було продати на коротких відстанях до 15 метрів, а для довгого з'єднання - до 150 метрів. Прослужив цей інтерфейс довго. Аж до 1990-х років багато виробників використовували його як опцію.

Американська компанія IBMтакож вирішила зробити внесок у створення паралельного порту комп'ютера. У момент виходу її першого персонального комп'ютераможна було ознайомитись із модифікацією Centronics. Цікаво, що для багатьох користувачів одразу поставили умову. Лише перероблені принтери від Epson, які отримали логотип IBM, могли функціонувати з цим інтерфейсом.

Компанія попрацювала над стандартизацією кабелю формату DB25F. Після цього виробники принтерів почали реалізовувати стандарт у своїх моделях. На початку 90-х популярний порт Centronics стали змінювати на IEEE 1284.

Різновид

Так новинка узвичаїлася і обзавелася своїми шанувальниками. IEEE 1284 має ще одну назву – LPT. Паралельний порт обзавівся міжнародною стандартизацією і так само служить для з'єднання периферійних девайсів.

Як і попередній варіант, його частіше використовують для активації принтера, сканера та різного зовнішнього обладнання. На відміну від попередньої модифікації стало реальним створювати зв'язок двох ПК, активації механізмів телеуправління.

Основою для IEEE 1284 став порт Centronics та його різноманітні варіації.

Порівняння

Як уже згадувалося раніше, інтерфейс Centronics був створений однойменною компанією та широко застосовувався для ПК фірми IBM. Завдяки цьому роз'єму можна було підключати друкувальні апарати. Він довго вважався основним, хоча офіційно таким не був.

Спочатку його створили для односпрямованої передачі, тому він ідеально підходив для принтерів. Коли почали працювати над дуплексними модифікаціями, було вирішено офіційно закріпити один із новоявлених стандартів. Так виник EEE 1284.

Різновид

Що ж собою являє цей паралельний порт? З боку комп'ютера він представлений роз'ємом на 25 контактів у два ряди формату DB-25-female. Відразу слід зазначити, що це так звана «мама», а ось є аналогічний роз'єм - «тато», який раніше застосовувався в ПК як COM-порт.

Периферійне обладнання частіше обзаводиться 36-піновим мікророз'ємом у вигляді стрічки, тому кабель з одного боку має 25 контактів DB-25-male та підключається до ПК, а на іншій – 36 пінів IEEE 1284-B. Іноді цей варіант замінює MiniCentronics – порт, який представлений кабелем AC на 36 пінів.

Серед усіх є і CC-кабелі, з обох боків яких є MiniCentronics. Це дуже рідкісна модифікація, розрахована на пристрої стандартом IEEE 1284-ІІ.

Оскільки перед нами стандарт, він має деякі вимоги, які потрібно дотримуватися. Наприклад, довжина кабелю може бути більше трьох метрів. Сама будова представлена ​​крученими парами в загальному або індивідуальному екрані. Рідко трапляються стрічкові версії.

Якщо придивитися до старих моделей сканерів, тут також зустрічався порт DB-25-male замість IEEE 1284-B. Цікаво, що подібні пристроїмали додатковий роз'єм DB-25-female, щоб була можливість приєднати принтер. Так сканер передавав інформацію через два інтерфейси.

Фізична реалізація

Основний порт Centronics, як згадувалося раніше, був представлений односпрямованим паралельним портом. Кабель реалізував основні характеристики. Так, було 8 сигнальних ліній для переміщення, строби та лінія стану пристрою.

Очевидно, що односпрямований інтерфейс дозволяв передавати матеріали в один бік від ПК до обладнання. Незважаючи на це, технологія була дещо ширшою. Було п'ять зворотних ліній, які здійснювали контроль стану апарату Швидкість, з якою можна було передавати інформацію, коливалася і піднімалася до 1,2 Мбіт/с.

Розширення

Усі первісні модифікації пізніше об'єдналися та були стандартизовані. Сама дія уніфікації закінчилася тим, що було зареєстровано стандарт IEEE-1284. Але це не вирішило питання повної відповідності. Новинка все ж таки відрізнялася від раніше створених спеціалізованих розширень.

Найвідомішими стали розробки Hewlett-Packard. Поряд із Centronics з'явився порт Bitronics. Він отримав двосторонню технологію, переміщував дані у два напрямки та потрібен був для збору інформації за станом принтера.

Bitronics працював із протоколом мультиплексованої шини HP. Технологія давала можливість використовувати «ланцюжок»: підключати до роз'єму LPT кілька девайсів. Щоб реалізувати це завдання, було створено кілька стандартів, хоч і тут сумісності досягти не вдалося.

Тому якщо ви зустрічали застарілі пристрої Hewlett-Packard, які некоректно працюють - це не дивно. Вся проблема саме в портах та реалізації.

Можливості

Паралельний інтерфейс можна використовувати у кількох режимах. Наприклад, SPP – це стандартна реалізація одностороннього порту, який сумісний із Centronics. Nibble Mode – це режим двонаправленої передачі даних. Він працює завдяки керуючим лініям. Свого часу був єдиним варіантом, завдяки якому Centronics передавав двонаправлену інформацію.

Byte Mode – ще один варіант двосторонньої синхронізації, який не став популярним, але все одно використовувався з деякими контролерами. EPP – режим роботи від провідних виробників Intel, Xircom та Zenith Data Systems, також займався двосторонньою передачею інформації зі швидкістю 2 Мбайт/с.

І останній режим- ЄСР. Над ним працювали компанії Microsoftта Hewlett-Packard. З'явилося апаратне стискування файлів, буфер, робота в прямому доступі до пам'яті.

Застосування

Не секрет, що зараз більшість принтерів підключаються за рахунок USB-кабелів. Перш ніж з'явився цей варіант, роз'єм був єдиним варіантом. Але, крім цього, існував і в різних периферійних девайсах.

Зараз важко говорити, що ж з'явилося раніше й насамперед, але відомими стали електронні ключі, які захищали програмне забезпечення від копіювання. Також цей порт перейшов у розпорядження накопичувачів та сканерів. А це, у свою чергу, дало поштовх до створення роз'ємів з паралельним з'єднанням для модемів. звукових карт, веб-камер, геймпадів та ін.

Слідом почали розробляти адаптери для стандарту SCSI у парі з паралельним типом. Відомі і перехідники для EPROM та апаратних контролерів.

Сучасне використання

Паралельний інтерфейс став менш популярним. Його замінили кабелі USB, а для мережного з'єднання- Ethernet. Багато виробників вважають паралельний типрознімань застарілим. Тому він масово починає пропадати з інтерфейсних панелей комп'ютерів та ноутбуків. Microsoft просить розробників утримуватися від цього типу портів. А для тих, хто все ж таки не готовий відмовитися від такого варіанту, є адаптер «паралельний порт USB».

Різниця

Часто порівнюють послідовні та паралельні порти. У системах від IBM, крім паралельного інтерфейсу, були послідовні та інтегровані, для клавіатури. Послідовний порт часто служив для підключення високошвидкісних комунікаційних девайсів, які працювали за форматом RS-232. Тут йдеться про модеми та подібні пристрої.

Послідовний порт було легше реалізувати для техніки, яка вимагала передачу невеликого обсягу даних. Сюди можна зарахувати і звичайну комп'ютерну мишу.

Помилка

Про паралельному інтерфейсілюди часто дізнаються від самої системи. Іноді виникають проблеми, які змушують користувача попітніти, щоб виправити їх. Так, дехто міг помітити збій «Драйвер паралельного порту». Зазвичай ця помилка з'являється в журналі системи та позначена червоним хрестиком.

Зараз така проблема все рідше зустрічається в системі. Може виникати при запуску Parport, коли відсутній паралельний порт на платі. У цьому випадку можна відправитися до реєстру та в розділі Parport знайти рядок «Start». Тут необхідно змінити значення «2» на «4».

Висновки

Паралельний порт зараз уже відходить у минуле. Над ним працювали ще в минулому столітті, а вже в нашому змогли замінити більш зручні роз'єми. Ті варіанти, які залишилися без зміни, змогли придбати адаптери. Так стало реальним придбати контролер паралельного порту PCI, заміну USB та інших популярних інтерфейсів.

В інтернеті багато способів самостійно зробити той чи інший кабель. Але, чесно кажучи, варіанти не зовсім безпечні та викликають сумніви. Краще, якщо раптом знадобився паралельний порт для пристрою, пошукати в магазинах. Він хоч і не випускається, але все одно залишився у продажу. А самостійно збираючи ПК, краще уважно придивитися до інтерфейсної панелі душі, щоб пізніше не зіткнутися з неприємностями.