Где находится порт lpt1. Учимся работать с LPT портом

Параллельный порт и РпР

Большинство современных периферийных устройств, подключаемых к LPT-nop-ту, поддерживает стандарт 1284 и функции РпР. Для поддержки этих функций компьютером с аппаратной точки зрения достаточно иметь контроллер интерфейса, соответствующий стандарту 1284. Если подключаемое устройство поддерживает РпР, оно по протоколу согласования режимов 1284 способно «договориться» с портом, представляющим «интересы» компьютера, о возможных режимах обмена. Далее, для работы РпР подключенное устройство должно сообщить операционной системе все необходимые сведения о себе. Как минимум это идентификаторы производителя, модели и набор поддерживаемых команд. Более развернутая информация об устройстве может содержать идентификатор класса, подробное описание и идентификатор устройства, с которым обеспечивается совместимость. В соответствии с принятой информацией для поддержки данного устройства операционная система может предпринять действия по установке требуемого программного обеспечения.

Устройства с поддержкой РпР распознаются ОС на этапе ее загрузки, если, конечно же, они подключены к порту интерфейсным кабелем и у них включено пита-ние. Если ОС Windows обнаруживает подключенное устройство РпР, отличающееся от того, что прописано в ее реестре для данного порта (или просто новое устройство), она пытается установить требуемые для устройства драйверы из ди­стрибутива ОС или из комплекта поставки нового устройства. Если Windows не желает замечать вновь подключенного устройства РпР, это может свидетельствовать о неисправности порта или кабеля. Система РпР не работает, если устройство под­ключается дешевым «не двунаправленным» кабелем, у которого отсутствует связь по линии Selectln# (контакт 17 порта LPT и контакт 36 разъема Centronics).

Обычно LPT-порт используют для подключения принтера (см. п. 8.3.1), однако этим его применение не исчерпывается.

Для связи двух компьютеров по параллельному интерфейсу применяются различные кабели в зависимости от режимов используемых портов. Самый простой и медленный - полубайтный режим, работающий на всех портах. Для этого режима в кабеле достаточно иметь 10 сигнальных и один общий провод. Распайка разъемов кабеля приведена в табл. 1.11. Связь двух PC данным кабелем поддерживается стандартным ПО типа Interlnk из MS-DOS или Norton Commander.

Высокоскоростная связь двух компьютеров может выполняться и в режиме ЕСР (режим ЕРР неудобен, поскольку требует синхронизации шинных циклов ввода-вывода двух компьютеров).

Подключение сканера к LPT-порту эффективно, только если порт обеспечивает хотя бы двунаправленный режим (Bi-Di), поскольку основной поток - ввод. Луч­ше использовать порт ЕСР, если этот режим поддерживается сканером (или ЕРР, что маловероятно).


Подключение внешних накопителей (Iomega Zip Drive, CD-ROM и др.), адаптеров ЛВС и других симметричных устройств ввода-вывода имеет свою специфику. В режиме SPP наряду с замедлением работы устройства заметна принципиальная асимметрия этого режима: чтение данных происходит в два раза медленнее, чем (весьма небыстрая) запись. Применение двунаправленного режима (Bi-Di или PS/2 Туре 1) устранит эту асимметрию - скорости сравняются. Только перейдя на ЕРР или ЕСР, можно получить нормальную скорость работы. В режиме ЕРР или ЕСР подключение к LPT-порту почти не уступает по скорости подключению через ISA-контроллер. Это справедливо и при подключении устройств со стандартным ин­терфейсом шин к LPT-портам через преобразователи интерфейсов (например, LPT - IDE, LPT - SCSI, LPT - PCMCIA). Заметим, что винчестер IDE, под­ключенный через адаптер к LPT-порту, для системы может быть представлен как устройство SCSI (это логичнее с программной точки зрения).

2. Последовательные интерфейсы

Последовательный интерфейс для передачи данных исполь­зует одну сигнальную линию, по которой информационные биты передаются друг за другом последовательно. Отсюда - название интерфейса и порта. Английские термины - Serial Interface и Serial Part (иногда их неправильно переводят как «серийные»). Последовательная передача позволяет сокра­тить количество сигнальных линий и увеличить дальность связи. Характерной особенностью является применение не-ТТЛ сигналов. В ряде последовательных интерфейсов при­меняется гальваническая развязка внешних (обычно вход­ных) сигналов от схемной земли устройства, что позволяет соединять устройства, находящиеся под разными потенциа­лами. Ниже будут рассмотрены интерфейсы RS-232C, RS-422А, RS-423A, RS-485, токовая петля, MIDI, а также СОМ-порт.

2.1. Способы последовательной передачи

Последовательная передача данных может осуществляться в асинхронном или синхронном режимах. При асинхронной пе­редаче каждому байту предшествует старт-бит, сигнализи­рующий приемнику о начале посылки, за которым следуют биты данных и, возможно, бит паритета (четности,). Завер­шает посылку стоп-бит, гарантирующий паузу между посыл­ками (рис. 2.1). Старт-бит следующего байта посылается в любой момент после стоп-бита, то есть между передачами воз­можны паузы произвольной длительности. Старт-бит, имею­щий всегда строго определенное значение (логический 0), обес­печивает простой механизм синхронизации приемника по сигналу от передатчика. Подразумевается, что приемник и передатчик работают на одной скорости обмена. Внутренний генератор синхронизации приемника использует счетчик-де­литель опорной частоты, обнуляемый в момент приема нача­ла старт-бита. Этот счетчик генерирует внутренние стробы, по которым приемник фиксирует последующие принимаемые

биты. В идеале стробы располагаются в середине битовых интервалов, что позволяет принимать данные и при незна­чительном рассогласовании скоростей приемника и пере­датчика. Очевидно, что при передаче 8 бит данных, одного контрольного и одного стоп-бита предельно допустимое рас­согласование скоростей, при котором данные будут распоз­наны верно, не может превышать 5%. С учетом фазовых ис­кажений и дискретности работы внутреннего счетчика синхронизации реально допустимо меньшее отклонение час­тот. Чем меньше коэффициент деления опорной частоты внут­реннего генератора (чем выше частота передачи), тем больше погрешность привязки стробов к середине битового интерва­ла, и требования к согласованности частот становятся более строгими. Чем выше частота передачи, тем больше влияние искажений фронтов на фазу принимаемого сигнала. Взаимо­действие этих факторов приводит к повышению требований к согласованности частот приемника и передатчика с ростом частоты обмена.

Формат асинхронной посылки позволяет выявлять возмож­ные ошибки передачи:

» Если принят перепад, сигнализирующий о начале посыл­ки, а по стробу старт-бита зафиксирован уровень логи­ческой единицы, старт-бит считается ложным и прием­ник снова переходит в состояние ожидания. Об этой ошибке приемник может и не сообщать.

« Если во время, отведенное под стоп-бит, обнаружен уро­вень логического нуля, фиксируется ошибка стоп-бита.

Если применяется контроль четности, то после посылки бит данных передается контрольный бит. Этот бит дополняет количество единичных бит данных до четного или нечетного в зависимости от принятого соглашения. Прием байта с неверным значением контрольного бита приводит к фиксации ошибки.

Контроль формата позволяет обнаруживать обрыв линии:

при этом принимаются логический нуль, который сначала трактуется как старт-бит, и нулевые биты данных, потом срабатывает контроль стоп-бита.

Для асинхронного режима принят ряд стандартных скоро­стей обмена: 50, 75, 110, 150,300,600,1200,2400,4800,9600, 19 200, 38 400, 57 600 и 115 200 бит/с. Иногда вместо еди­ницы измерения «бит/с» используют «бод» (baud), но при рассмотрении двоичных передаваемых сигналов это некор­ректно. В бодах принято измерять частоту изменения со­стояния линии, а при недвоичном способе кодирования (ши­роко применяемом в современных модемах) в канале связи скорости передачи бит (бит/с) и изменения сигнала (бод) могут отличаться в несколько раз (подробнее см. в прило­жении А).

Количество бит данных может составлять 5, 6, 7 или 8 (5- и 6-битные форматы распространены незначительно). Коли­чество стоп-бит может быть 1, 1,5 или 2 («полтора бита» означает только длительность стопового интервала).

Асинхронный обмен в PC реализуется с помощью СОМ-пор­та с использованием протокола RS-232C.

Синхронный режим передачи предполагает постоянную ак­тивность канала связи. Посылка начинается с синхробайта, за которым сразу же следует поток информационных бит. Если у передатчика нет данных для передачи, он заполняет паузу непрерывной посылкой байтов синхронизации. Оче­видно, что при передаче больших массивов данных наклад­ные расходы на синхронизацию в данном режиме будут ниже, чем в асинхронном. Однако в синхронном режиме необхо­дима внешняя синхронизация приемника с передатчиком, поскольку даже малое отклонение частот приведет к ис­кажению принимаемых данных. Внешняя синхронизация возможна либо с помощью отдельной линии для передачи сигнала синхронизации, либо с использованием самосинхронизирующего кодирования данных, при котором на сто­роне приемника из принятого сигнала могут быть выделены импульсы синхронизации. В любом случае синхронный ре­жим требует дорогих линий связи или оконечного оборудо­вания. Для PC существуют специальные платы - адаптеры SDLC (дорогие), поддерживающие синхронный режим об­мена. Они используются в основном для связи с большими машинами (mainframes) IBM и мало распространены. Из синхронных адаптеров в настоящее время применяются адап­теры интерфейса V.35.

На физическом уровне последовательный интерфейс имеет различные реализации, различающиеся способом передачи электрических сигналов. Существует ряд родственных меж­дународных стандартов: RS-232C, RS-423A, RS-422A и RS-485. На рис. 2.2 приведены схемы соединения приемни­ков и передатчиков, а также показаны ограничения на дли­ну линии (L) и максимальную скорость передачи данных (V).

Несимметричные линии интерфейсов RS-232C и RS-423A имеют самую низкую защищенность от синфазной помехи, хотя дифференциальный вход приемника RS-423A несколько смягчает ситуацию. Лучшие параметры имеет двухточеч­ный интерфейс RS-422A и его магистральный (шинный) аналог RS-485, работающие на симметричных линиях свя­зи. В них для передачи каждого сигнала используются диф­ференциальные сигналы с отдельной (витой) парой прово­дов.

В перечисленных стандартах сигнал представляется потен­циалом. Существуют последовательные интерфейсы, где информативен ток, протекающий по общей цепи передат­чик-приемник - «токовая петля» и MIDI. Для связи на ко­роткие расстояния приняты стандарты беспроводной инф­ракрасной связи. Наибольшее распространение в PC получил простейший из перечисленных - стандарт RS-232C, реализуемый СОМ-портами. В промышленной автоматике широко применяется RS-485, а также RS-422A, встречаю­щийся и в некоторых принтерах. Существуют преобразо­ватели сигналов для согласования этих родственных ин­терфейсов.

2.2. Интерфейс RS-232C

Интерфейс предназначен для подключения аппаратуры, передающей или принимающей данные (ООД - оконечное оборудование данных или АПД - аппаратура передачи дан­ных; DTE - Data Terminal Equipment), к оконечной аппарату­ре каналов данных (АКД; DCE - Data Communication Equipment). В роли АПД может выступать компьютер, прин­тер, плоттер и другое периферийное оборудование. В роли АКД обычно выступает модем. Конечной целью подключе­ния является соединение двух устройств АПД. Полная схе­ма соединения приведена на рис. 2.3. Интерфейс позволяет исключить канал удаленной связи вместе с парой устройств АПД, соединив устройства непосредственно с помощью нуль-модемного кабеля (рис. 2.4).

Стандарт описывает управляющие сигналы интерфейса, пе­ресылку данных, электрический интерфейс и типы разъе­мов. В стандарте предусмотрены асинхронный и синхрон­ный режимы обмена, но СОМ-порты поддерживают только асинхронный режим. Функционально RS-232C эквивалентен стандарту МККТТ V.24/ V.28 и стыку С2, но они имеют раз­личные названия сигналов.

2.2.1. Электрический интерфейс

Стандарт RS-232C использует несимметричные передатчи­ки и приемники - сигнал передается относительно общего провода - схемной земли (симметричные дифференциаль­ные сигналы используются в других интерфейсах - напри­мер, RS-422). Интерфейс НЕ ОБЕСПЕЧИВАЕТ ГАЛЬВАНИ­ЧЕСКОЙ РАЗВЯЗКИ устройств. Логической единице соответствует напряжение на входе приемника в диапазоне -12...-3 В. Для линий управляющих сигналов это состояние называется ON («включено»), для линий последовательных данных - MARK. Логическому нулю соответствует диапазон +3...+12 В. Для линий управляющих сигналов состояние называется OFF («выключено»), а для линий последователь­ных данных - SPACE. Диапазон -3...+3 В - зона нечувстви­тельности, обусловливающая гистерезис приемника: состоя­ние линии будет считаться измененным только после пересечения порога (рис. 2.5). Уровни сигналов на выходах передатчиков должны быть в диапазонах -12...-5 В и +5...+12 В для представления единицы и нуля соответствен­но. Разность потенциалов между схемными землями (SG) соединяемых устройств должна быть менее 2 В, при более высокой разности потенциалов возможно неверное воспри­ятие сигналов. Интерфейс предполагает наличие ЗАЩИТНОГО ЗАЗЕМЛЕ­НИЯ для соединяемых устройств, если они оба питаются от сети переменного тока и имеют сетевые фильтры.

Подключение и отключение интерфейсных кабелей устройств с автономным питанием должно производиться при отклю­ченном питании. Иначе разность невыровненных потенциа­лов устройств в момент коммутации может оказаться при­ложенной к выходным или входным (что опаснее) цепям интерфейса и вывести из строя микросхемы.

Для интерфейса RS-232C специально выпускаются буфер­ные микросхемы приемников (с гистерезисом и передатчи­ком двуполярного сигнала). При несоблюдении правил за­земления и коммутации они обычно являются первыми жертвами «пиротехнических» эффектов. Иногда их устанав­ливают в «кроватках», что облегчает замену. Цоколевка мик­росхем формирователей сигналов RS-232C приведена на рис. 2.6. Часто буферные схемы входят прямо в состав ин­терфейсных БИС. Это удешевляет изделие, экономит место на плате, но в случае аварии оборачивается крупными фи­нансовыми потерями. Вывести из строя интерфейсные мик­росхемы замыканием сигнальных цепей маловероятно: ток короткого замыкания передатчиков обычно не превосходит 20 мА.

Стандарт RS-232C регламентирует типы применяемых разъе­мов.

На аппаратуре АПД (в том числе на СОМ-портах) принято устанавливать вилки (male - «папа») DB-25P или более ком­пактный вариант - DB-9P. Девятиштырьковые разъемы не имеют контактов для дополнительных сигналов, необходи­мых для синхронного режима (в большинстве 25-штырько-вых разъемов эти контакты не используются).

На аппаратуре АКД (модемах) устанавливают розетки (female - «мама») DB-25Swm DB-9S.

Это правило предполагает, что разъемы АКД могут подклю­чаться к разъемам АПД непосредственно или через переход­ные «прямые» кабели с розеткой и вилкой, у которых кон­такты соединены «один в один». Переходные кабели могут являться и переходниками с 9- на 25-штырьковые разъемы (рис. 2.7).

Если аппаратура АПД соединяется без модемов, то разъемы устройств (вилки) соединяются между собой нуль-модемным кабелем (Zero-modem или Z-modem), имеющим на обоих кон­цах розетки, контакты которых соединяются перекрестно по одной из схем, приведенных на рис. 2.8.

Если на каком-либо устройстве АПД установлена розетка - это почти стопроцентный признак того, что к другому уст­ройству оно должно подключаться прямым кабелем, анало­гичным кабелю подключения модема. Розетка устанавли­вается обычно на тех устройствах, у которых удаленное подключение через модем не предусмотрено.

В табл. 2.1 приведено назначение контактов разъемов СОМ-портов (и любой другой аппаратуры АПД). Контакты разъема DB-25S определены стандартом EIA/TIA-232-E, разъем DB-9S описан стандартом EIA/ TIA-574. У модемов назва­ние цепей и контактов такое же, но роли сигналов (вход-выход) меняются на противоположные.

Подмножество сигналов RS-232C, относящихся к асинхрон­ному режиму, рассмотрим с точки зрения СОМ-порта PC. Следует помнить, что активному состоянию сигнала («вклю­чено») и логической единице передаваемых данных соответ­ствует отрицательный потенциал (ниже -3 В) сигнала ин­терфейса, а состоянию «выключено» и логическому нулю - положительный (выше +3 В). Назначение сигналов интер­фейса приведено в табл. 2.2.

1*- шлейф 8-битных мультикарт.

2*- шлейф 16-битных мультикарт и портов на системных платах. 3*- вариант шлейфа портов на системных платах. 4*- широкий шлейф к 25-контактному разъему.

2.2.2. Управление потоком данных

Для управления потоком данных (Flow Control) могут ис­пользоваться два варианта протокола - аппаратный и про­граммный. Иногда управление потоком путают с квитиро­ванием, но это разные методы достижения одной цели - согласования темпа передачи и приема. Квитирование (Handshaking) подразумевает посылку уведомления о полу­чении элемента, в то время как управление потокам предпо­лагает посылку уведомления о невозможности последующе­го приема данных.

Аппаратный протокол управления потоком RTS/CTS (Hardware Flow Control) использует сигнал CTS, который поз­воляет остановить передачу данных, если приемник не готов к их приему (рис. 2.9). Передатчик «выпускает» очередной байт только при включенной линии CTS. Байт, который уже начал передаваться, задержать сигналом CTS невозможно (это гарантирует целостность посылки). Аппаратный протокол обеспечивает самую быструю реакцию передатчика на состо­яние приемника. Микросхемы асинхронных приемопередат­чиков имеют не менее двух регистров в приемной части -

сдвигающий, для приема очередной посылки, и хранящий, из которого считывается принятый байт. Это позволяет реали­зовать обмен по аппаратному протоколу без потери данных.

Аппаратный протокол удобно использовать при подключе­нии принтеров и плоттеров, если они его поддерживают (рис. 2.10). При непосредственном (без модемов) соедине­нии двух компьютеров аппаратный протокол требует пере­крестного соединения линий RTS - CTS.

Если аппаратный протокол не используется, у передающего терминала должно быть обеспечено состояние «включено» на линии CTS перемычкой RTS - CTS. В противном случае передатчик будет «молчать».

Программный протокол управления потоком XON/XOFF пред­полагает наличие двунаправленного канала передачи данных. Работает протокол следующим образом: если устройство, принимающее данные, обнаруживает причины, по которым не может их дальше принимать, оно по обратному последо­вательному каналу посылает байт-символ XOFF (13h). Про­тивоположное устройство, приняв этот символ, приостанав­ливает передачу. Когда принимающее устройство снова становится готовым к приему данных, оно посылает символ

XON (llh), приняв который противоположное устройство возобновляет передачу. Время реакции передатчика на из­менение состояния приемника по сравнению с аппаратным протоколом увеличивается по крайней мере на время пере­дачи символа (XON или XOFF) плюс время реакции програм­мы передатчика на прием символа (рис. 2.11). Из этого сле­дует, что данные без потерь могут приниматься только приемником, имеющим дополнительный буфер принимае­мых данных и сигнализирующим о неготовности заблаго­временно (имея в буфере свободное место).

Преимущество программного протокола заключается в от­сутствии необходимости передачи управляющих сигналов интерфейса - минимальный кабель для двустороннего об­мена может иметь только 3 провода (см. рис. 2.8а). Недо­статком, кроме требования наличия буфера и большего вре­мени реакции (снижающего общую производительность канала из-за ожидания сигнала XON), является сложность реализации полнодуплексного режима обмена. В этом слу­чае из потока принимаемых данных должны выделяться (и обрабатываться) символы управления потоком, что ограни­чивает набор передаваемых символов. Минимальный вари­ант кабеля для подключения принтера (плоттера) с прото­колом XON/XOFF приведен на рис. 2.12.

Кроме этих двух распространенных стандартных протоко­лов, поддерживаемых и ПУ, и ОС, существуют и другие. Некоторые плоттеры с последовательным интерфейсом ис­пользуют программное управление, но посылают не стан­дартные символы XON/XOFF, а слова (ASCII-строки). Такой обмен на уровне системной поддержки протокола практи­чески не поддерживается (эти плоттеры непосредственно«разговаривают» с прикладной программой). Конечно, можно написать драйвер СОМ-порта (перехватчик INT 14h), но не­обходимость обработки в нем текстовых сообщений от уст­ройства вывода обычно не вызывает восторга у системного программиста. Кабель для подключения совпадает с приве­денным на рис. 2.12.

2.3. Интерфейс «токовая петля»

Распространенным вариантом последовательного интерфей­са является токовая петля. В ней электрическим сигналом является не уровень напряжения относительно общего про­вода, а ток в двухпроводной линии, соединяющей приемник и передатчик. Логической единице (состоянию «включено») соответствует протекание тока 20 мА, а логическому нулю - отсутствие тока. Такое представление сигналов для описан­ного формата асинхронной посылки позволяет обнаружить обрыв линии - приемник заметит отсутствие стоп-бита (об­рыв линии действует как постоянный логический нуль).

Токовая петля обычно предполагает гальваническую развяз­ку входных цепей приемника от схемы устройства. При этом источником тока в петле является передатчик (этот вариант называют активным передатчиком). Возможно и питание от приемника (активный приемник), при этом выходной ключ передатчика может быть также гальванически развязан с ос­тальной схемой передатчика. Существуют упрощенные ва­рианты без гальванической развязки, но это уже вырожден­ный случай интерфейса. Токовая петля с гальванической развязкой позволяет пере­давать сигналы на расстояния до нескольких километров. Расстояние определяется сопротивлением пары проводов и уровнем помех. Поскольку интерфейс требует пары прово­дов для каждого сигнала, обычно используют только два сиг­нала интерфейса. В случае двунаправленного обмена при­меняются только сигналы передаваемых и принимаемых данных, а для управления потоком используется программ­ный метод XON/XOFF. Если двунаправленный обмен не тре­буется, используют одну линию данных, а для управления потоком обратная линия задействуется для сигнала CTS (ап­паратный протокол) или встречной линии данных (про­граммный протокол).

Преобразовать сигналы RS-232C в токовую петлю можно с помощью несложной схемы (рис. 2.13). Здесь принтер под­ключается по токовой петле к СОМ-порту с аппаратным управлением потоком. Для получения двуполярного сигна­ла, требуемого для входных сигналов СОМ-порта, приме­няется питание от интерфейса.

При надлежащем ПО одной токовой петлей можно обеспечить двунаправленную полудуплексную связь двух устройств. При этом каждый приемник «слышит» как сигналы передатчика на противоположной стороне канала, так и сигналы своего передатчика. Они расцениваются коммуникационными паке­тами просто как эхо-сигнал. Для безошибочного приема пе­редатчики должны работать поочередно.

2.4. Интерфейс MIDI

Цифровой интерфейс музыкальных инструментов MIDI (Musical Instrument Digital Interface) является двунаправ­ленным последовательным асинхронным интерфейсом с ча­стотой передачи 31,25 Кбит/с. Этот интерфейс, разработан­ный в 1983 году, стал фактическим стандартом для сопряжения компьютеров, синтезаторов, записывающих и воспроизводящих устройств, микшеров, устройств специаль­ных эффектов и другой электромузыкальной техники.

В интерфейсе применяется таковая петля 10 мА (возможно 5 мА) с гальванической развязкой входной цепи. Это исклю­чает связь «схемных земель» соединяемых устройств через интерфейсный кабель, устраняя помехи, крайне нежелатель­ные для звуковой техники. Снижению интерференционных помех служит и выбор частоты передачи, которая совпадает с одним из значений частот квантования, принятых в циф­ровой звукозаписи.

Асинхронная посылка содержит старт-бит, 8 бит информации и 1 стоп-бит, контроль четности отсутствует. Старший бит посылки является признаком «команда/данные». Его нуле­вое значение указывает на наличие семи бит данных в млад­ших разрядах. При единичном значении биты содер­жат код команды, а биты - номер канала. Команды могут быть как адресованными конкретному каналу, так и широ­ковещательными безадресными. К последней группе отно­сятся команды старта, стопа и отметки времени, обеспечи­вающие синхронизацию устройств (система синхронизации MIDI Sync и МТС - MIDI Time Code).

Интерфейс определяет три типа портов: MIDI-In, MIDI-Out nMIDI-Thru.

Входной порт MIDI-In представляет собой вход интерфейса «токовая петля 10 мА», гальванически развязанного от при­емника оптроном с быстродействием не хуже 2 мкс. Устрой­ство отслеживает информационный поток на этом входе и реагирует на адресованные ему команды и данные.

Выходной порт MIDI-Out представляет собой выход источ­ника тока 10 мА, гальванически связанного со схемой уст- ройства. Ограничительные резисторы предохраняют выход­ные цепи от повреждения при замыкании на землю или ис­точник 5 В. На выход подается информационный поток от данного устройства. В потоке может содержаться и транс­лированный входной поток.

Транзитный порт MIDI-Thru (не обязателен) служит для ре­трансляции входного сигнала.

В качестве разъемов применяются 5-контактные разъемы DIN, распространенные в бытовой звуковой аппаратуре. На всех устройствах устанавливаются розетки, на кабелях - вилки. Все соединительные кабели MIDI унифицированы (рис. 2.14). Контакт 2 - экран кабеля - соединяется с общим проводом только на стороне передатчика (на разъемах MIDI-Out и MIDI-Thru).

В маркировке входов и выходов, указанной около разъемов, бывают разночтения. Одни производители пишут «In» или «Out» в соответствии с функцией разъема данного устрой­ства (и это) правильно), тогда любой кабель соединяет «In» и «Out». Другие считают, что подпись должна обозначать функ­цию подключаемого устройства. Тогда кабель будет соединять разъемы с обозначениями «In» - «In» и «Out» - «Out».

Интерфейс позволяет объединить группу до 16 устройств в локальную сеть. Топология должна подчиняться правилу:

вход MIDI-In одного устройства должен подключаться к выходу MIDI-Out или MIDI-Thru другого. При планирова­нии MIDI-сети необходимо руководствоваться информа­ционными потоками и связью устройств. Управляющие устройства - клавиатуры, секвенсоры (в режиме воспроиз- ведения), источники синхронизации - должны находиться перед управляемыми. Если устройства нуждаются в двуна­правленном обмене, они соединяются в кольцо. Возможно применение специальных мультиплексоров, позволяющих логически коммутировать несколько входных потоков в один выходной. Вырожденным случаем кольца является двуна­правленное соединение двух устройств. Несколько вариан­тов соединения приведено на рис. 2.15.

В PC MIDI-порт имеется на большинстве звуковых адапте­ров, его сигналы выведены на неиспользуемые контакты (12 и 15) разъема игрового адаптера. Для подключения устройств MIDI требуется переходной адаптер, реализующий интер­фейс «токовая петля». Переходной адаптер обычно встраи­вается в специальный кабель, схема которого приведена на рис. 2.16. Некоторые модели PC имеют встроенные адапте­ры и стандартные 5-штырьковые разъемы MIDI.

В PC для интерфейса MIDI применяются порты, совмести­мые с контроллером MPU-401 (Roland) в режиме UART. В пространстве ввода/вывода MPU-401 занимает два смеж­ных адреса MPU (обычно 330h) и MPU+1:

Порт DATA (адрес MPU+0) - запись и считывание байт, передаваемых и принимаемых по интерфейсу MIDI. Порт STATUS/COMMAND (адрес MPU+1) - чтение со­стояния / запись команд (запись - только для интеллек­туального режима). В байте состояния определены сле­дующие биты:

Бит 7 - DSR (Data Set Ready) - готовность (DSR-0) при­нятых данных для чтения. Бит устанавливается в «I», когда все принятые байты считаны из регистра данных.

Бит 6 - DRR (Data Read Ready) - готовность (DRR=0) UART к записи в регистр данных или команд. Условие готовности к записи не возникнет, если приемник имеет непрочитанный байт данных.

На некоторых системных платах применяются БИС контрол­леров интерфейсов, в которых UART, используемая для СОМ-порта, конфигурированием через BIOS SETUP может быть переведена в режим MIDI-порта.

Дмитрий Иванов, 21 Сентября 2009 Статья доработана и обновлена 23 Января 2012

За время существования этого сайта мне довольно часто задают один и тот же вопрос, который можно описать примерно следующим образом:



В итоге решил описать этот вопрос подробнее и написать статью. Да, действительно, сейчас стационарных PC с LPT портом нужно поискать (т.е. далеко не каждая "мать" сейчас идет в комплекте с LPT портом). Про ноутбуки вообще говорить не приходится. Современные модели LPT порт вообще не применяют. Только очень дорогие и специализированные машины, типа DELL, могут "похвастаться" наличием этого порта.

Также, сейчас в продаже можно свободно приобрести вот такие устройства, называемые LPT-USB переходниками.

Инстркуция гласит что этот прибор полностью совместим с различными принтерами, сканерами и т.д. Подключаем переходник к USB порту, устанавливаем драйвера. Смотрим диспетчер устройств. Скорее всего в ветке "Порты LPT/COM" ни чего не появилось (хотя бывают исключения). Скорее всего повится либо новая ветка со странным устройством с именем, например, LPT1USB либо в разделе USB устройств появится странная запись о "USB устройстве поддержки LPT принтеров" . Пробуем запустить какой-нибудь пример из статей выше. И ни тут то было - ни чего не работает. Пробуем адрес порта LPT1 - ни чего не работает. Пробуем адресс порта LPT2. К сожалению, такая модернизация адреса в запросах тоже ни к чему не приводит - светодиоды как не загорались так и не загораются.

Чтобы разобраться в чем тут дело давайте вернемся на время к обычному "родному железному" LPT порту - LPT1, который из материнской платы "торчит". Зайдем в диспетчер устройств, заглянем в свойства нашего порта. Там мы увидим вот такую картину. Отлично видно, что система прописала базовый адрес ввода-вывода 0x378 и запрос на прерывание номер 7. Все правильно.

Теперь погрузимся на уровень программирования. В примерах статей выше мы минуя систему защиты ввода-вывода легальными и нелегальными способами напрямую общались с реально существующим регистром ввода-вывода, которому присвоен адрес 0x378. Тут все понятно. Незабудем также о том, что Windows рекомендует работать с LPT портом используя вызовы API функций - OpenFile(), WriteFile(), ReadFile() . Приложения, которые используют LPT порт для обмена информацией по парралельному интерфейсу с внешними устройствами (принтер, например) так и делает. У него нет задачи установить на каком-либо бите регистра Data лигическую еденицу. Ему (приложению) нужно просто отправить пакет данных, а кто там будет какие линиии при этом "дергать" и считывать его не сильно интересует. Эти операции проводит системный драйвер LPT порта. Он подгружается в память при загрузке ОС. Когда мы вызываем функцию OpenFile("LPT1", ....) мы по сути дела обращаемся к драйверу порта, который имеет символическое имя LPT1. Драйвер делает кучу всякой работы - запрещает доступ к порту другим процессам, настраивает параметры протокола передачи данных, собственно реализует эту передачу, но в конечном итоге все это сводится к прямому управлению отдельными битами LPT порта на уровне ядра ОС.

А теперь попробуем поработать с нашим переходником USB-LPT. Начнем как не покажется странным, с API вызовов. Запускаем OpenFile("LPT1USB", ...) (смотря как этот переходник диспетчере устройств назовется, если вообще назовется). Что при этом происходит? Дело в том, что теперь мы будем работать не с драйвером LPT порта ОС а с драйвером этого переходника! Вот в чем фокус то! Он принимает пакет данных от нашего пользовательского приложения и в нужном формате через систмный драйвер USB отсылает этот пакет на USB контроллер, "ноги" которого торчат из внешней LPT розетки на проводе (ну это так, "грубое объяснение"). Видете, здесь нет ни какого намека на обращение к регистрам по адресам 0x378(0x278), т.к. их просто нет!

Поэтому, когда Вы патаетесь запускать примеры данного раздела и обращаться напрямую по адресам 0x378 (если этот "псевдо порт" назвался LPT1USB или что-то в этом духе), 0x278 (LPT2_...) и т.д. ни чего не происходит. Их просто нет! А вот программа котороая работает через API вызовы ни чего не заметит - вся низкоуровневая работа делается драйвером, а каким драйвером и куда пойдут пакеты данных (в реальный порт ввода-вывода или в USB хост-контроллер) - приложению неважно! Попробуйте открыть свойства "псевдопорта" в диспетчере устройств. Нет вкладки с ресурсами? Есть, но там каие-то неадекватные значения или вкладка деактивировнна? В том то и дело.



Почему 99%? Потомоу что есть самодельниые USB-LPT переходники, которые определяются Windows как полноценный порт LPT1 и ему присваивается вполне обыденный адрес 0x378. Обращения на прямую к пинам порта проходят успешно! Однако это очень нестандартная конструкция (в первую очередь драйвер, который занимается перехватом обращений по базовому адресау порта LPT1). Все это не очень надежно (обновление ОС - и конструкция теряет работоспосбность) и для использования рекомендовано быть может только с натяжкой.



Как ни покажется странным - решение ЕСТЬ. Вы всегда сможете добавить настоящий LPT порт в свой настольный компьютер или ноутбук. Во-первых, забудте сразу о переходниках с интерфейсом USB. Для решения этой задачи необходимо приробрести PCI-LPT переходник для настольного PC (необходимо наличие свободного PCI слота) или PCMCIA-LPT переходник для ноутбука (см. фото ниже).


В случае использования этих устройств ни каких проблем нет. Определяются они как настоящие "родные" LPT порты. Соответствующая запись будет добавлена в диспетчер устройств во вклдаку "LPT/COM порты" . Прямое обращение к пинам порта будет работать.

Доброго времени суток кодеры, и остальные маньяки компьютерной индустрии. Сегодня я расскажу тебе как можно управлять LPT портом и использовать его в своих целях. Так что запасайся сникерсами и терпением. В конце я покажу интересный пример его использования.

LPT порт имеет 25 контактов на которых может быть установлено 0 или +5В (0 или 1). Устанавливать значения можно программным путем или с помощью внешнего устройства. Давайте рассмотрим следующий рисунок который поможет нам в работе.
(Сразу признаюсь, рисунок не мой, он взят с сайта www.pcports.ru , где есть много информации на данную тему).

Как мы видим, выводы порта можно разделить на четыре группы. Восемь крастных выводов относятся к регистру Data . Чтобы к нему обращаться, надо знать его адресс: 378h - в 16-ричной системе или 888 - в 10-ричной. Биты этого регистра могут быть установлены (или сброшены) как программно, так и внешним устройством.
Выводы обозначенные черным цветом являются земляными. Все они соединены между собой и для наших целей мы можем использовать любой.
Зеленым цветом обозначены контакты, устанавливать значение которых можно только через внешнее устройство. То есть программно мы их изменить не можем. Мы можем только считывать их состояние. Они относятся к регистру Status , который имеет адрес 379h в 16-ричной или 889 в 10-ричной системе.
И регистр Control , выводы которого обозначены синим цветом. Он как и регистр Status однонаправленный, но тут его состояние изменять можно только программно.
Ну что, надо бы и на практике закрепить. Давай вспомним старый, добрый Ассемблер. Для работы с портами он предоставляем нам две команды: in и out . Команда in загружает данные в аккумулятор из порта устройства ввода/выводы. Пример:

n аккумулятор, порт.

В этом случае можно выводить из портов с адресами до 255. Нам этого недостаточно. Используя регистровую адресацию можно выводить из портов до 65536. Вот пример:

in аккумулятор, dx .

То есть адрес порта должен быть заранее помещен в регистр dx. Команда out наоборот - помещает в порт данные из аккумулятора. Пример: out dx , аккумулятор. Здесь также используется регистровая адресация, что бы можно было работать с портами, адреса которых до 65536. Теперь запускаем наш любимый Делфи, ставим на форму кнопку и по событию ее нажатия пишем следующий ассемблерный код (это называется ассемблерная вставка (примечание Soffrick"а - Inline assembler ) и она записывается между ключевыми словами asm и end ):
(этот пример не будет работать в Windows NT. Потом расскажу как это побороть)

procedure TForm1. Button1Click (Sender: TObject ) ; asm //обозначает, что дальше пойдет ассемблерный код mov dx, 888 //засылаем в регистр dx адрес нашего порта в 10-чной системе mov al, 00000001b //в аккумулятор засылаем "маску" в двоичной сис. out dx, al //выводим в порт (а точнее в регистр Data знач. 00000001 end ;

Теперь обьясню чего мы добились. Давай посмотрим на наш рисунок, а точнее на красные разьемы которые соответствуют битам от D0 до D7 регистра Data. А теперь угадай какой из них мы установили в 1. Правильно, бит D0, а следовательно и контакт №2 установлен в 1. А это значит, что на этом контакте сейчас находится +5 Вольт. Проверяется легко. Нужно взять светодиод и его "+" засунуть во второй контакт, а его "-" в 25-й (тоесть заземлить). Вот тут я должен тебя предупредить, что подключение к LPT порту всяких самодельных устройств (сделанных не грамотно) может обернутся выходом из строя материнской платы. Обычно длинный усик светодиода - это "+" (лучше проверить это с помощью батарейки). Наш светодиод должен загореться. Но вот не задача. Наша программа при нажатии на кнопку ругается. Дай угадаю, у тебя винда не 9х.

Дело в том, что ОС Windows NT (2000, XP) с целью обеспечения безопасности использования совместных аппаратных ресурсов компьютера, запрещает к ним прямой доступ из программ пользовательского режима. И чтобы обратиться к порту, необходимо все операции проводить через драйвер. Я предлагаю использовать библиотеку Inpout32.dll. Скачать ее можно здесь http://www.pcports.ru/files/inpout32.rar . Эта библиотека, при работе с NT, обращения к ней конвертирует в запросы к стандартному драйверу ОС, через который и идет обмен данными с портом. Узнать больше об этой библиотеке и ее авторе можно здесь: http://www.logix4u.net/inpout32.htm . Эта библиотека содержит две следующие функции которые нам пригодятся. Вот их описание:

Inp32(PortAdr: word): byte.

Ей передается адрес порта, а она возвращает значение которое в нем установлено. Внимание, значение передает в десятичной системе. Следующая функция:

Out32(PortAdr: word; Data: byte): byte.

Из описания видно что она тоже может возвращать какой то результат, но нам это не понадобится. Она отсылает в указанный порт указанное значение (тоже в 10-чной сис.). Снова открываем наш отчаянно закрытый после первой попытки Делфи и делаем следующее. Нам необходимо объявить функции из библиотеки. Для этого в нашем исходнике после перечня модулей и перед объявлением типов пишем следующее:
...

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; function Inp32(PortAdr: word ) : byte ; stdcall ; external "inpout32.dll" ; function Out32(PortAdr: word ; Data: byte ) : byte ; stdcall ; external "inpout32.dll" ; type TForm1 = class (TForm)

...
Здесь мы объявили две функции. Указали, что вызываться они будут стандартным способом (написав stdcall), а также мы указали, что процедура внешняя и находится в библиотеке (external "inpout32.dll").Кстати, эта библиотека должна находиться в папке вместе с исполняемым файлом. Далее кидаем на форму кнопку и по ее нажатию пишем:

Out32(888,1);

Компилируем, запускаем и о чудо, загорелся наш светодиод. А теперь давай вспомним "маску" (00000001) из предыдущего примера. Наша единица, которая передается во втором параметре в порт 888 (регистр Data) в 10-чной сис. равносильна 00000001 в 2-чной. То есть, если взять еще два светодиода, и "+" одного засунуть в 3-й контакт LPT порта, а "+" другого, например в пятый, а ихние минусы конечно заземлить подключив к 25-му выводу, то для того что бы их все зажечь, надо во втором параметре функции Out32 отправить на порт 11: Out32(888,11), потому что 11, в двоичной системе будет выглядеть так 00001011. Непонятно? Попробуй эти нолики и единички визуально наложить на рисунок, начиная с девятого контакта и до 2-го. Теперь не сложно догадаться, что на контактах 5,3 и 2 будет установлено напряжение +5В и наши светодиоды, которые мы туда засунули, будут гореть. Теперь мы можем сделать что-нибудь по интереснее, например мигалку. Используя таймер это не сложно сделать. Попробуй сам.

Ну вот вроде бы и все, что я хотел тебе рассказать сегодня. В следующей статье я расскажу как сделать так, что бы радиоуправляемая машинка управлялась не с пульта, а с клавиатуры. Удачной компиляции.

Written by: Kastor

Порт параллельного интерфейса был введен в PCдля подключения принтера -LPT-порт (Line PrinTer -построчный принтер).

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в пространстве ввода/вывода. Регистры порта адресуются от­носительно базового адреса порта, стандартными значениями которого являют­ся 386h, 378hи 278h. Порт имеетвнешнюю 8-битнуюшину дан­ных, 5-битнуюшину сигналовсостояния и 4-битнуюшину управляющих сиг­налов.

BIOSподдерживает до четырех LPT-портов (LPT1-LPT4) своим сервисом -прерыванием INT 17h,обеспечивающим через них связь с принтерами по интерфейсу Centronics.Этим сервисом BIOSосуществляет вывод символа, инициа­лизацию интерфейса и принтера, а также опрос состояния принтера.

Интерфейс Centronics

Понятие Centronicsотносится как к набору сигналов и протоколу взаимодейст­вия, так и к 36-контактному разъему, устанавливаемому на принтерах. Назна­чение сигналов приведено в табл. 1.

Таблица 1.

Сигналы интерфейса Centronics

Назначение

Строб данных. Данные фиксируются по низкому уровню сигнала

Линии данных. Data 0(контакт 2) -младший бит

Acknowledge -импульс подтверждения приема байта (запрос на прием сле­дующего). Может использоваться для формирования запроса прерывания

Занято. Прием данных возможен только при низком уровне сигнала

Высокий уровень сигнализирует о конце бумаги

Сигнализирует о включении принтера

Автоматический перевод строки.

Ошибка: конец бумаги, состояние OFF-Lineили внутренняя ошибка принтера

Инициализация

Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса

Общий провод интерфейса

Направление

(вход/выход) применительно к принтеру.

Интерфейс Centronicsподдерживается большинством принтеров с параллель­ным интерфейсом, его отечественным аналогом является интерфейсИРПР-М.

Традиционный lpt-порт

Традиционный порт SPP (Standard Parallel Port)является одно­направленным портом, на базе которого программно реализуется протокол обмена Centronics.Порт обеспечивает возможность вырабатывания запроса ап­паратного прерывания по импульсу на входе АСК#. Сигналы порта выводятся наразъем DB-25S (розетка), установленный непосредственно на плате адаптера (или системной плате) или соединяемый с ней плоским шлейфом. Название и назначение сигналов разъема порта (табл. 2)соответствуют интерфейсу Centronics.

Таблица 2.

Разъем стандартного LPT-порта

Контакт DB-25S

Провод шлейфа

Назначение

18, 20, 22, 24, 26

* I/Oзадает направление передачи (вход/выход) сигнала порта; 0/Iобозначает выходные линии, состояние которых считывается при чтении из соответствующих портов вывода.

**Символом «\» отмечены инвертированные сигналы (1в регистре соответствует низкому уров­ню линии).

***Вход Ack#соединен резистором (10кОм) с питанием +5В.

Стандартный порт имеет три 8-битных регистра, расположенных по сосед­ним адресам в пространстве ввода/вывода, начиная с базового адреса порта(BASE).

Data Register (DR) -регистр данных, адрес= BASE.Данные, записанные в этот порт,выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях.

Status Register (SR) -регистр состояния, представляющий собой5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7),адрес= BASE+1.БитSR.7инвертируется -низкому уровню сигнала соответствует единичное значе­нию бита в регистре, и наоборот.

Назначение бит регистра состояния (в скобках даны номера контактов разъема):

SR.7-Busy -инверсные отображения состояния линии Busy (11);

SR.6 -АСК (Acknowledge) -отображения состояния линии Ack# (10).

SR.5 -РЕ (Paper End) -отображения состояния линии Paper End (12).

SR.4-Select -отображения состояния линии Select (13).Единичное зна­чение соответствуетcигналу о включении принтера.

SR.3-Error -отображения состояния линии Error (15).

SR.2 - PIRQ -флаг прерывания по сигналу Ack#(только для порта PS/2). Бит обнуляется, если сигнал Ack#вызвал аппаратное прерывание. Единич­ное значение устанавливается по аппаратному сбросу и после чтения ре­гистра состояния.

SR -зарезервированы.

Control Register (CR) -регистр управления, адрес=ВА5Е+2. Как и регистр дан­ных, этот4-битный порт вывода допускает запись и чтение (биты 0-3),но его выходной буфер обычно имеет типоткрытый коллектор. Это позволяет более корректно использовать линии данного регистра как входные при программи­ровании их в высокий уровень. Биты О, 1, 3инвертируются -единичному зна­чению в регистре соответствует низкий уровень сигнала, и наоборот.

Назначение бит регистра управления:

CR -зарезервированы.

CR.5 - Direction -бит управления направлением передачи (только для портов PS/2).Запись единицы переводит порт данных в режим ввода.

CR.4 -ACKINTEN (Ack Interrupt Enable) -единичное значение разрешает пре­рывание по спаду сигнала на линии Ackff -сигнал запроса следующего байта.

CR.3 - Select In -единичное значение бита соответствует низкому уровню на выходе Selecting (17) -сигналу, разрешающему работу принтера по интерфейсу Centronics.

CR.2 - Init -нулевое значение бита соответствует низкому уровню на выходе Imt# (16) -сигнал аппаратного сброса принтера.

CR.1 - Auto LF -единичное значение бита соответствует низкому уров­ню на выходе Auto LF# (14) -сигналу на автоматический перевод строки(LF - Line Feed)по приему байта возврата каретки (CR - Carriage Return).

CR.O -Strobe -единичное значение бита соответствует низкому уровню на выходе Strobeff (1) -сигналу стробирования выходных данных.

Запрос аппаратного прерывания (обычно IRQ7или IRQ5)вырабатывается по отрицательному перепаду сигнала на выводе 10разъема интерфейса (АСК#) при установке CR.4=1. Прерывание вырабатывается, когда принтер подтвер­ждает прием предыдущего байта.

Процедура вывода байта по интерфейсу Centronicsчерез стандартный порт включает следующие шаги (в скобках приведено требуемое количество шинных операций процессора):

Вывод байта в регистр данных (1цикл IOWR#).

Ввод из регистра состояния и проверка готовности устройства (бит SR.7 - сигнал BUSY).

По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2цикла lOWRff).

Стандартный порт сильно асимметричен -при наличии 12линий (и бит), нормально работающих на вывод, на ввод работает только 5линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособенрежим полубайтного обмена - Nibble Mode.В этом режи­ме, называемым также и Hewlett Packard Bitronics,одновременно передаются 4бита данных, пятая линия используется для квитирования.

Весьма советуем с ним познакомиться. Там Вы найдете много новых друзей. Кроме того, это наиболее быстрый и действенный способ связаться с администраторами проекта. Продолжает работать раздел Обновления антивирусов - всегда актуальные бесплатные обновления для Dr Web и NOD. Не успели что-то прочитать? Полное содержание бегущей строки можно найти по этой ссылке .

Работа с LPT-портом в Win NT/2000/XP

LPT-порт (L ine P rinT 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\System32\drivers и проверяем наличие двух файлов драйвера (DLPortIO.sys и DLPortIO.dll). Если видим, что эти файлы так и не скопировались, берем их из установочного пакета и копируем вручную. Не переживайте, с компьютером ничего плохого не случится. Перегружаем компьютер и работаем с LPT-портом.

Если вдруг, в результате манипуляций с оборудованием, вы получите от драйвера сообщение такого плана: "dlportio.sys device driver not loaded. Port I/O will have no effect", не стоит паниковать. Исправляется эта проблема так:
. Запускаем 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.
. Перед нами появится панель с 2-мя окошками.

Левое окошко относится к работе программы в ДОС окне, правое на полном экране. По умолчанию в них прописаны номера портов 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 - кодирование повторяющихся серий).