Лабораторная работа на тему "параллельные и последовательные порты и их особенности работы". Последовательные и параллельные порты ввода-вывода

28. Параллельный и последовательный порты.
Параллельный и последовательный порты используются не только для
подключения принтера и модема, для которых были в свое время
разработаны. Простота исполнения и отработанный протокол приемапередачи данных сделали их незаменимыми для подключения к ПЭВМ
различных низкоскоростных устройств, применяющихся в промышленности
и научных исследованиях.
Параллельный порт (интерфейс Centronics).
Основным назначением интерфейса Centronics (аналог - ИРПР-М)
является подключение к компьютеру принтеров различных типов.
Поэтому распределение контактов разъема, назначение сигналов,
программные средства управления интерфейсом ориентированы именно на
это использование.
В то же время с помощью данного интерфейса можно подключать к
компьютеру и другие специально разработанные внешние устройства.
Скорость обмена по интерфейсу Centronics – 129-200 кБ/с.
Стандартный параллельный порт предназначен только для
односторонней передачи информации от ПЭВМ к принтеру.
Усовершенствованный порт ЕРР (Enhanced Parallel Port) является
двунаправленным, позволяет подключать до 64-х устройств и обеспечивает
скорость передачи данных с использованием ПДП до 2 мБ/с.
Расширенный порт ECP (Extended Capability Port) позволяет подключить
до 128 устройств и поддерживает режим компрессии (сжатия) данных.

Схема контроллера параллельного порта i8255A.
А1
А2
IOR
IOW
RESET
A7, A15
Устройство
управления
А
БР Канал данных В
В
БР Канал данных С
С
Внешнее устройство
Буфер
управления
БР Канал данных А
Внутренняя шина данных
Системная шина
Буфер данных
Сигналы управления
Контроллер параллельного обмена представляет собой 3-хканальный
байтовый интерфейс и позволяет организовать обмен данными в трех
режимах:
Режим 0 – синхронный однонаправленный ввод/вывод (4 порта А, В, С1, С2).
Режим 1 – асинхронный однонаправленный ввод/вывод (2 порта А и В).
Режим 2 – асинхронный двунаправленный ввод/вывод (1 порт А).
Программирование режимов работы каналов контроллера
осуществляется передачей в буфер управления соответствующего кода.

Сигналы Centronics имеют следующее назначение:
D0...D7 - 8-разрядная шина данных для передачи из компьютера в принтер.
-STROBE - сигнал стробирования (сопровождения) данных.
-АСК - сигнал подтверждения принятия данных и готовности принтера.
BUSY - сигнал занятости принтера обработкой полученных данных и
неготовности принять следующие данные.
-AUTO FD - сигнал автоматического перевода строки (каретки).
РЕ - сигнал конца бумаги (режим ожидания).
SLCT - сигнал готовности приемника (принтера).
-SLCT IN - сигнал принтеру о том, что последует передача данных.
-ERROR - сигнал ошибки принтера.
-INIT - сигнал инициализации (сброса) принтера и очистки буфера печати.
Контакт разъема компьютера
Цепь
I/O
Контакт разъема принтера
1
-STROBE
О
1
2 … 9
DO … D7
О
2 … 9
10
-АСК
I
10
11
BUSY
I
11
12
РЕ
I
12
13
SLCT
I
13
14
-AUTOFD
О
14
15
-ERROR
I
32
16
-INIT
О
31
17
-SLCT IN
О
36
18...25
GND
-
16, 17, 19...30, 33

Формирование и прием сигналов интерфейса Centronics производится
путем записи и чтения выделенных для него портов ввода/вывода.
В компьютере может использоваться три порта Centronics:
LPT1 (порт 378h, IRQ5), LPT2 (порт 278h, IRQ7) и LPT3 (порт 3ВСh).
Базовый адрес порта используется для передачи принтеру байта данных.
Установленные на линиях данные можно считать из этого же порта в ПЭВМ.
Временная диаграмма цикла передачи данных по интерфейсу Centronics.
D0 … D7
>500
- STROBE
BUSY
- ACK
>500
>500
наносекунд
>2500 наносекунд
Перед началом передачи данных контролируется снятие сигналов BUSY
и ASK. Затем данные выставляются на шину и формируется сигнал STROB.
За это время принтер должен успеть принять данные и выставить сигнал
BUSY, а затем и ASK.
Максимальная длина соединительного кабеля – 1,8 метра.
В настоящее время стандарты параллельного порта ЕРР и ЕСР
включены в стандарт IEEE 1284 с добавлением еще двух режимов обмена
данными: байтового и полубайтового.

Последовательный порт (Интерфейс RS232C).
Интерфейс RS-232C предназначен для подключения к компьютеру
стандартных внешних устройств (принтера, сканера, модема, мыши и т.д.),
а также для связи компьютеров между собой.
Основными преимуществами использования RS-232C по сравнению с
Centronics являются возможность передачи на значительно большие
расстояния и гораздо более простой соединительный кабель.
В то же время работать с ним несколько сложнее: данные в RS-232C
передаются в последовательном коде побайтно, а каждый байт обрамляется
стартовым и стоповыми битами.
Формат передаваемых данных последовательного порта:
отсутствие передачи
«1»
«0»
Стартовый бит
8 бит
данных
стоповые биты
бит четности
Данные могут передаваться как в одну (полудуплексный режим), так и в
обе стороны (дуплексный режим).
Обмен по интерфейсу RS-232C осуществляется по специально
выделенным для этого последовательным портам:
СОМ1 (адреса 3F8h...3FFh, прерывание IRQ4),
COM2 (адреса 2F8h...2FFh, прерывание IRQ3),
COM3 (адреса 3E8h...3EFh, прерывание IRQ10),
COM4 (адреса 2E8h...2EFh, прерывание IRQ11).

Схема контроллера последовательного порта i8250.
мультиплексор демультиплексор
Буфер
1
управления
Буфер
2
управления
Буфер
3
управления
Буфер
4
управления
Буфер
5
управления
Буфер
6
управления
RESET
IRQ
Устройство управления
Битовый
счетчик
Схема кодирования –
декодирования пакета
Генератор
синхросигнала
ТхD
RxD
CLK
Внешнее устройство
Системная шина
Буфер данных
Сигналы управления
В состав ПЭВМ могут входить до четырех последовательных портов,
работающих в стандарте RS-232С (отечественный аналог - стык С2).
Каждое из устройств RS-232С представляет собой самостоятельный
контроллер i8250, оснащенный 25- или 9- штырьковым разъемом.
Контроллер порта RS-232С является полностью программируемым
Устройством.
Ему можно задать следующие параметры обмена: количество битов
данных и стоп-битов, вид четности и скорость обмена в бодах (бит/с).

Назначение сигналов обращений:
FG - защитное заземление (экран).
-TxD - данные, передаваемые компьютером в последовательном коде.
-RxD - данные, принимаемые компьютером в последовательном коде.
RTS - сигнал запроса передачи. Активен во все время передачи.
CTS - сигнал сброса (очистки) для передачи. Активен во все время
передачи. Говорит о готовности приемника.
DSR - готовность данных. Используется для задания режима модема.
SG - сигнальное заземление, нулевой провод.
DCD - обнаружение несущей данных (принимаемого сигнала).
DTR - готовность выходных данных.
RI - индикатор вызова. Говорит о приеме модемом сигнала вызова по
телефонной сети.
Компьютер обычно имеет
9-контактный (DB9P) или
25-контактный (DB25P)
разъем для подключения
интерфейса RS-232C.
Назначение контактов
разъема приведено в
таблице
сигнал
25-контактный разъем
9-контактный разъем
I/O
FG
1
-
-
-TxD
2
3
О
-RxD
3
2
I
RTS
4
7
О
CTS
5
8
I
DSR
6
6
I
SG
7
5
-
DCD
8
1
I
DTR
20
4
О
RI
22
9
I

Конкретные форматы обращений по этим портам можно найти в
описаниях микросхем контроллеров последовательного обмена UART
(Universal Asynchronous Receiver/ Transmitter), например, для i8250.
Наиболее часто используются трех- или четырехпроводная связь (для
двунаправленной передачи).
Для двухпроводной линии связи в случае только передачи из
компьютера во внешнее устройство используются сигналы SG и TxD.
Все 10 сигналов интерфейса задействуются только при соединении
компьютера с модемом.
компьютер
Схема 4-х проводной
линии связи для
интерфейса RS232C
TxD
RxD
RTS
CTS
DSR
DCD
DTR
RI
SG
FG
внешнее устройство
TxD
RxD
RTS
CTS
DSR
DCD
DTR
RI
SG
FG
Примечание: тактовые частоты приемника и передатчика должны быть
одинаковыми (расхождение – не более 10%) для этого скорость передатчика
(ПЭВМ) может выбираться из ряда: 150, 300, 600, 1200, … 57600, 115200 бит/с.

29.Подсистема ввода-вывода.
Назначение, структура и задачи BIOS.
BIOS (Basic Input Output System) – часть программного обеспечения
ПЭВМ, содержащая управление адаптерами внешних устройств, экранными
операциями, тестирование, а затем начальную загрузку OS.
BOIS обеспечивает стандартный интерфейс, поддерживающий переносимость OS для ПЭВМ с совместимыми процессорами.
BOIS состоит из основных компонент:
1. POST– процедуры проверки системных устройств и их ресурсов.
2. ROM-Scan – программа сканирования ОЗУ.
3. SETAP-программный интерфейс просмотра и корректировки констант.
4. Константы BIOS в CMOS, таблица 256-ти символов ASCII 8х8.
Все адреса констант документированы и должны сохраняться в
последующих версиях BIOS для данной системной платы.
Компоненты BOIS записаны в специальной ПЗУ на системной плате
объемом 64 кБ и обычно рассматриваются, как неотъемлемая часть ПЭВМ,
встраиваемая в адресное пространство ОЗУ с адреса F000:0000.
Основной принцип организации системы ввода/вывода:
ЦПУ и ОЗУ образуют ядро ПЭВМ, а различные периферийные
устройства, к которым можно отнести любое другое устройство, которое не
входит в состав ядра ПЭВМ, сопрягаются с ядром системы с помощью
интерфейсов (совокупности шин, сигналов, электрических схем, протоколов
передачи данных и команд), входящих в состав ядра OS для организации
обмена информацией.

Структура подсистемы POST.
Состояние процессора после включения питания предопределено –
EFLAGS = 00000002h; EIP = 0000FFF0h; CS = 0F000h; PE(CR0) = 0.
по этому адресу находится команда JMP перехода на процедуру POST (Power
On Self Test) самотестирования и инициализации базовых устройств ПЭВМ:
Ввод константы инициализации в порт устройства n
Чтение байта статуса устройства n
Статус устройства n
соответствует данным CMOS
нет
Подача звукового сигнала,
вывод признака ошибки
инициализации устройства n
да
……….
Аварийное завершение
процедуры POST
Процедура сканирования
(верификации) оперативной памяти
Есть ошибки сканирования
нет
да
вывод признака
ошибки
сканирования
оперативной памяти
Передача управления на начало кода загрузки операционной системы

Основные функции подсистемы POST.
Процедуры POST служат для пуска самотестирования устройств на
системной плате, сравнения их статуса с данными CMOS и инициализации:
- каналы системного интервального таймера (слышен гудок),
- контроллер прерываний,
- контроллер прямого доступа,
- контроллер клавиатуры (загораются индикаторы на клавиатуре),
- контроллер памяти и т.д.,
затем инициализируются процедуры самотестирования устройств, имеющих
собственную BIOS:
- видеоконтроллер (на мониторе появляется первое сообщение),
- контроллеры дисковых накопителей (появляется сообщение),
- контроллер USB (клавиатура или мышь USB становятся активными)
- звуковой адаптер,
- сетевой адаптер и т.д.
Выполняется сканирование оперативной памяти (отображается на мониторе)
После успешного завершения процедур тестирования осуществляется
поиск boot-устройств, содержащих в буфере данных байт 80h (1000000), т.е.
неисполняемую команду, используемую в данном контексте POST для
подтверждения активности устройства загрузки OS.
Приоритет загрузочных устройств определяется в SETUP CMOS.
При выполнении POST могут генерироваться сообщения об ошибках.
Описания кодов ошибок можно найти по адресу: www.earthweb.com
или http://burks.bton.ac.uk/burks/pcinfo/hardware/bios_sg/bios_sg.htm

Доступ к переменным и константам BIOS.
Осуществляется через меню SETUP BIOS, доступное в начальные
моменты загрузки BIOS с помощью клавиш, указанных в сообщениях.
Меню SETUP состоит из основных разделов:
1. Стандартные переменные: дата, время, параметры ОЗУ и накопителей.
2. Дополнительные переменные и установленные модули программного
обеспечения BIOS для тестирования аппаратных средств, устройств ядра
ПЭВМ и ближайшего окружения.
3. Параметры остальных устройств, интегрированных в состав системной
(материнской) платы ПЭВМ и варианты распределения ресурсов (слотов
расширений шин, прерываний и каналов прямого доступа).
Здесь же определяется порядок опроса периферийных устройств,
которые могут содержать загрузочные модули операционных систем.
4. Параметры интерфейсов устройств, подключаемых к системной плате,
определяющих варианты энергосбережения.
5. Размеры констант, определяющих параметры центрального процессора
(частота, напряжение энергопитания ядра центрального процессора и ОЗУ), а
также их предельные величины для сигнализации или отключения.
6. Набор параметров BIOS, загружаемый по умолчанию (в случае ошибок
ручного набора параметров пользователем).
7. Ввод пароля для входа в редактор переменных – SETUP BIOS.
8. Ввод пароля для продолжения загрузки BIOS и выполнения POSTпроцедур после включения ПЭВМ (пользовательский пароль).
Значение паролей может быть снято системным обнулением BIOS.

Карта ввода / вывода.
0000 – 00FF – 256 8-разрядных портов предназначены для устройств,
расположенных на системной (материнской) плате ПЭВМ,
0100 – 03FF – 768 8-разрядных портов отведены для контроллеров
периферийных устройств, подключаемых к шинам системной платы ПЭВМ.
Внутренние устройства
Периферийные устройства
Диапазон Наименование устройства Диапазон
000 - 01F
Контроллер ПДП №1
Наименование устройства
3B0 – 3DF VGA
020 – 03F Контроллер ПКП №1
378 – 37B LPT 1
040 – 05F Интервальный таймер
37C – 37F LPT 2
060 – 06F Контроллер клавиатуры
278 – 27B LPT 3
070 – 07F Часы CMOS и константы
3F0 – 3F7 FDD
Диагностический регистр
3F8 – 3FF COM №1
081 – 08F Контроллер страниц ПДП
2F8 – 2FF COM №2
0A0 – 0BF Контроллер ПКП №2
3E8 – 3EF COM №3
0C0 – 0DF Контроллер ПДП №2
2E8 – 2EF COM №4
080
F000 – FFFF – 4096 дополнительных 8-разрядных портов, отведенных
для различных виртуальных устройств, подключаемых к внешним шинам
(USB, mini USB, SCSI, eSATA, HDD IDE ATA/ATAPI, PCI Express и т.д.).

Функции BIOS при работе с портами
Для прямого обращения ЦПУ к портам ввода/вывода в системе команд
предусмотрено всего 2 команды: IN и OUT.
Но сам процесс обмена данными с периферийными устройствами сложен
и должен учитывать ширину порта (порядок опроса нескольких 8-ми
разрядных портов) и протокол обмена, определяющий порядок оценки
готовности этих устройств к обмену данными по той или иной шине, а также
свойства самой шины.
По этой причине в OS Windows прямой доступ к портам ограничен. Ввод
прямых обращений к портам в приложениях может вызвать зависание
программы или ее аварийное завершение из-за превышения привилегий.
Для этой цели в составе ядра OS имеется большой набор типовых
обработчиков – функций BIOS, связанных с тем или иным общепользовательским прерыванием.
Поскольку количество прерываний ограничено, то обычно прерывание
имеет несколько функций, а отдельные функции и подфункций BIOS:
функции прерывания 10h – работа с портами видеоконтроллера VGA
функции прерывания 13h – работа с дисковыми системами и DMA
функции прерывания 14h – работа с последовательным портом СОМ
функции прерывания 15h – работа с манипулятором мышь
функции прерывания 16h – работа с клавиатурой
функции прерывания 17h – работа с параллельным портом LPT
функции прерывания 1Ah – работа с таймером, времязадающие функции
функции прерывания 80h – работа со звуковым процессором

30. Система Plug & Play автоопределения устройств ПЭВМ.
Основные принципы построения системы PnP были сформулированы и
частично внедрены в 1974-м году для шины МСА (Micro Channel Architecture).
Основные принципы построения системы PnP:
1. Ресурсы ядра ПЭВМ (порты доступа и их разрядность, номера прерываний, адресное пространство ОЗУ для обмена информацией, каналы прямого
доступа) не являются жестко распределенными, а присваиваются по
требованию.
2. Каждое периферийное (по отношению к ядру системы) устройство имеет
описание набора требований в своем BIOS.
3. В составе BIOS PnP имеется программа – системный конфигуратор,
которая присваивает номера периферийным устройствам, составляет
паспорта (описания) этих устройств и выделяет необходимые ресурсы, с
учетом недопущения конфликтов, при необходимости производит
оптимизацию (перераспределение) ресурсов.
Паспорта устройств сохраняются в реестре.
4. После загрузки операционной системы для периферийных устройств
загружаются соответствующие системные драйвера. Осуществляется
повторная проверка безконфликтной работы устройств.
5. При отключении периферийного устройства или подключения нового
операционная система автоматически перераспределяет освободившиеся
ресурсы, определяет параметры нового устройства, проверяет его и
предоставляет необходимые ресурсы без перезагрузки OS (на лету).

PnP- спецификация архитектуры аппаратных средств ПЭВМ, используемая соответствующими операционными системами для их конфигурирования и исключения конфликтов устройств между собой.
Основной компонент – все оборудование, подключаемое к шинам, содержит энергонезависимые регистры POS (Programmable Option Select), где хранится конфигурация устройства и требуемые ресурсы.
Дополнительный компонент – файлы OS описания устройств, драйверов
к ним и требуемых ресурсов (ini –файлы или реестр OS).
Программы BIOS PnP, бесконфликтно распределяющие ресурсы.
Обычная загрузка системы:
пуск
POST
Поиск Boot OS
Загрузка OS
Загрузка BIOS PnP:
пуск
Определение PnP
нет
да
Конфигурирование
устойств
POST
Проверка
устройств
Поиск Boot OS
Чтение
POS
чтение
ini
Загрузка OS

Распределение ресурсов ПЭВМ между устройствами.
Для реализации принципов построения системы PnP, учитывая, что в
составе архитектуры ПЭВМ встречается достаточно много устаревших
устройств с жестко закрепленными за ними системными ресурсами, которые
изменять нецелесообразно (контроллер клавиатуры, системный интервальный таймер, контроллеры ПДП и т.д.), в реальной системе PnP используется
следующий порядок распределения ресурсов:
1. При проверке POST определяются устройства «не PnP».
2. Устройствам «не PnP» ресурсы выделяются в первую очередь согласно
спецификационных требований, т.к. эти устройства неперенастраиваемые.
3. При обнаружении конфликтов BIOS PnP генерирует уведомление о
необходимости устранения конфликтов вручную.
4. Затем осуществляется итерационное конфигурирование устройств PnP.
5. Используются методы изоляции устройств друг от друга (присваивается
идентификатор и серийный номер), после этого устройству присваивается
дескриптор (Handle).
Присвоение идентификатора связано с используемой устройством шины
и осуществляется специальной программой из состава OS – энумера-тором
шины, которая является новым типом драйвера контроллера шины.
Номера идентификаторов являются уникальными для каждого устройства и
неизменными для каждой последующей перезагрузки OS, например, PnP
0000 – контроллер прерываний АТ, PnP 0100 – системный интервальный
таймер, PnР 0C04 – матсопроцессор, PnP 0А03 – контроллер шины PCI и т.д.

Подсистема ввода/вывода ПЭВМ и ядро OS решает следующие задачи:
1. Реализация вычислительной системы переменной конфигурации.
2. Параллельная работа программ в памяти и процедур ввода/вывода.
3. Упрощение процедур ввода/вывода, обеспечения их программной
независимости от конфигурации конкретного периферийного устройства.
4. Обеспечение автоматического распознавания ядром ЭВМ периферийных
устройств, многообразия их состояний (готовности, отсутствия носителя,
ошибок чтения/записи и т.д.).
5. Интеллектуализация интерфейса, налаживание диалога между ядром и
периферийными устройствами.
6. Переносимость и независимость OS от аппаратной платформы и ядра
ПЭВМ.
Пути решения этих задач:
1. Модульность - новые периферийные устройства не вызывают
существенных изменений архитектуры и вписываются в существующее
адресное пространство, каналы и порты доступа.
2. Унификация по формату передаваемых данных и команд вне зависимости от используемых внутренних машинных языков микроопераций.
3. Унифицированный интерфейс по разрядности шины, набору линий
сигналов управления и протоколам обмена.
4. Унифицированные по адресному пространству, доступному ядру ПЭВМ, и
каналам доступа к нему со стороны центрального процессора для операций
ввода/вывода информации в пределах этого адресного пространства,.

Современная система PnP состоит из следующих компонентов:
1. BIOS стандарта PnP.
Уведомления – сообщение пользователю об обнаружении нового
устройства
Конфигурирование – изоляция устройства до присвоения ID.
Поддержка данных- информация завершения POST на специальной RAM.
2. Система драйверов-энумераторов шины PCI.
Контроллер шины получает информацию из RAM об устройстве или из
реестра для устройств «не PnP» и присваивает уникальный номер Vendor_ID.
3. Дерево аппаратных средств и реестр.
Ветвь в реестре OS под названием «HKEY_LOKAL_MACHINE\HARDWARE»,
которая состоит из типов аппаратных устройств.
4. Windows 95 и выше (или другая OS PnP).
Фирма Intel предлагает спецификацию PnP всем разработчикам OS.
5. Драйверы устройств PnP.
Спецификация PnP предполагает не только наличие доступной для BIOS
информации об устройстве в RAM этого устройства, но и динамически подгружаемый драйвер этого устройства. Существует интерфейс прикладного
программирования (API) для создания таких драйверов для новых устройств
стандарта PnP. Загрузка таких драйверов должна регистрироваться диспетчером конфигурации и отвечать за выделенные ресурсы (сдавать их при
выгрузке).

6. Арбитр ресурсов (служба OS PnP).
Основные функции:
- Обновление реестра, помещая туда новейшую информацию о выделении
ресурсов на стадии загрузки,
- Переназначение ресурсов «на лету» любым устройства PnP, конфигурация
которых изменилась.
Арбитр ресурсов работает в контакте с диспетчером конфигурации,
который в любой момент может запросить у арбитра ресурсов освобождения ресурса с последующим предоставлением его другому устройству.
7. Диспетчер конфигурации (служба OS PnP).
Отвечает за процесс конфигурирования всей системы в целом.
Диспетчер конфигурации непосредственно взаимодействует, как с BIOS,
так и с реестром, координируя процесс конфигурирования в ходе событий:
- когда BIOS отправляет ему список устройств «не PnP» на системной плате
при загрузке, которые имеют жестко закрепленные за ними ресурсы,
- когда он получает извещение об изменении конфигурации от BIOS или от
энумераторов шин, которую он использует для идентификации всех
устройств на конкретной шине, а также требования каждого устройства о
выделении ресурсов. Эта информация заносится в реестр.
8. Пользовательский интерфейс (API).
Основное требование для пользовательских приложений, запускаемых
в OS PnP – они не должны иметь явных обращений к ресурсам устройств
(портам ввода/вывода, прерываниям или дискам) необходимо заменять эти
обращения формальными обращениями к соответствующим устройствам.

Конфигурационное адресное пространство шины PCI
Одним из главных усовершенствований шины PCI по сравнению с другими
архитектурами ввода-вывода стал её конфигурационный механизм.
В дополнение к типичным адресным пространствам памяти и вводавывода в PCI вводится конфигурационное адресное пространство.
Оно состоит из 256 байт, которые можно адресовать, зная номер шины PCI,
номер устройства и номер функции в устройстве.
Первые 64 байта из 256 стандартизированы, а остальные регистры могут
быть использованы по усмотрению изготовителя устройства.
Регистры Vendor ID и Device ID идентифицируют устройство и обычно
называются PCI ID.
Шестнадцатиразрядный регистр Vendor ID выдаётся организацией PCI-SIG.
Но только при уплате членского взноса в организацию.
Шестнадцатиразрядный регистр Device ID назначается изготовителем
устройства.
Существует проект создания базы данных всех известных значений
регистров Vendor ID и Device ID.
Аналогичное решение существует и для универсальной последовательной
шины USB.
Сообщество разработчиков шины – организация USB-IF также ведет
регистрацию всех значений регистров Vendor ID для USB.
Чтобы стать членом USB-IF, нужно платить по 4000$ членских взносов
ежегодно. Тогда вам бесплатно выделят двухбайтовый VID (Vendor_ID).

void f_DeviceDescriptor(void) //
Дескриптор драйвера устройства USB

Как писать драйвер USB-устройства PnP ?
автор Глазков Игорь
Статья в 7 частей
Опубликовано: 13 Марта 2013 года
http://npf-wist.com/
ООО «НПФ Вист» Украина
Учебный комплект STK0001
на базе микроконтроллера
фирмы «Microchip»
280 гривен (35$)
В данный комплект входит:
1. Устройство (модель), которое программируется, как USB-устройство.
2. Программатор, с помощью которого разрабатываемая программа (ее
бинарный код) зашивается в устройство (модель).
3. Кабель – переходник USB-COM – порт при его отсутствии в ВАШЕМ
компьютере. Этот порт нужен для просмотра данных, получаемых
программируемым USB-устройством.
4. Брошюра с подробным описанием последовательных шагов для
получения связки: “USB-устройство – драйвер - программа обращения к
устройству”.
5. CD-диск с дополнительным программным обеспечением.

31. Общие сведения об операционных системах.
Общие понятия об операционной системе.
Чтобы полностью овладеть всеми возможностями своего компьютера,
необходимо знать и понимать его операционную систему.
Назначение операционной системы заключается в обеспечении удобства
управления компьютером.
Любая операционная система, в полном смысле этого термина, является
первой и наиболее важной программой любого компьютера. Как правило,
она является и наиболее сложной, используемой только для управления
самим компьютером.
Основная часть работы операционной системы заключается в
выполнении огромного количества рутинных операций контроля, проверки
достоверности, вычисления значений физических адресов и т.д. и т.п. и
предназначена, чтобы скрыть от пользователей большое количество
сложных и ненужных им деталей процесса управления аппаратной частью.
Как правило, операционная система состоит из нескольких частей:
Первая часть - это система BIOS в ПЗУ ПЭВМ.
Вторая часть - главная загрузочная запись.
Третья часть – аппаратный загрузчик операционной системы.
Четвертая часть – сканер и конфигуратор аппаратных средств ПЭВМ.
Пятая часть – ядро операционной системы и командный монитор.
Шестая часть – файлы конфигурации ini или реестр OS.
Седьмая часть – Диспетчеры объектов и устройств.
Восьмая часть – драйверы устройств.

Архитектура операционной системы Windows NT/2000/XP/7/8.
Приложение
POSIX
Подсистема
POSIX
Приложение
Win32
Подсистема
Win32
Приложение
OS/2
Подсистема
OS/2
Процесс
регистрации
в системе
Подсистемы рабочей
среды
Подсистема
защиты
Уровни сервисов OS
Пользовательский режим
Режим ядра
Диспетчер
энергопитания
Средство
локального
вызова
процедур
Диспетчер
механизмов
Plug & Play
Диспетчер
виртуальной
памяти
Диспетчер
процессов
Справочный
монитор
защиты
Диспетчер
объектов
Системные сервисы (службы модуля EXEcutive)
Диспетчер
ввода/вывода
Файловые системы
Диспетчер КЭШа
Драйверы устройств
Ядро OS
Слой абстрагирования от оборудования HAL
Аппаратная часть
Сетевые драйверы

Пояснения к архитектуре операционной системы.
Пользовательский режим.
Большая часть приложений, запускаемых пользователем, работает в
пользовательском режиме. Все эти приложения обладают ограниченным
доступом к операционной системе, благодаря чему при возникновении
неполадок в программе приложения ядро ОС остается надежно защищенным
и продолжает нормально функционировать.
Пользовательское приложение работает в рамках изолированного
адресного пространства, предоставляемого операционной системой.
При обращении к аппаратным устройствам (принтеру) службами ядра
(диспетчером ввода/вывода) запускается соответствующий драйвер.
Службы Windows (например, Task Scheduler, Messenger, Alerter и др.)
работают в пользовательском режиме в специальном пользовательском
контексте безопасности индивидуального рабочего окружения каждой
конкретной прикладной задачи.
Режим ядра.
Процессы, работающие в этом режиме, обладают наивысшим уровнем
привилегий. Они работают в одном и том же адресном пространстве и могут
напрямую обращаться к оборудованию компьютера, включая такие важные
устройства, как центральный процессор или видеоадаптер.
В этом же режиме функционируют драйверы устройств, все системные
диспетчеры, модуль Microkernel, все службы модуля EXEcutive, а также
системные сервисы уровня абстракции оборудования HAL (Hardware
Abstraction Layer).

Модуль EXEcuteve.
Так обозначаются в Windows NT/2000/XP программные компоненты,
работающие в режиме ядра.
Эти компоненты включают в себя жизненно-важные службы ОС такие,
как управление памятью, вводом/выводом, системой безопасности,
механизмами взаимодействия процессов, кэшированием, а также системой
управления объектами.
Модуль EXEcutive загружается в процессе начальной загрузки ОС и
является частью файла Ntoskrnl.exe.
Модуль Microkernel.
Управляет переключением процессора между выполнением разных
потоков, а также обрабатывает системные прерывания и исключения.
Этот модуль синхронизирует работу нескольких процессоров на
многопроцессорных аппаратных платформах.
В отличие от остального кода ОС этот модуль никогда не перемещается
в виртуальную память, т.к. его компоненты должны иметь фиксированные
физические адреса.
Модуль Microkernel также является частью файла Ntoskrnl.exe.
Уровень абстракции оборудования HAL (Hardware Abstraction Layer).
Позволяет ОС работать на аппаратных платформах различной
конфигурации и количества процессоров, не требуя ее перекомпилирования.
Обычно HAL разрабатывается производителем аппаратной платфориы.
Модуль HAL находится в файле hal.dll и загружается в процессе
начальной загрузки ОС.

Процессы и потоки.
Процесс – это программа, которую можно запустить в рабочей среде ОС.
Каждый процесс обладает своим адресным пространством, одним или
несколькими программными потоками, а также идентификатором
безопасности SID (Security ID), соответствующим учетной записи в контексте
безопасности которой этот процесс функционирует.
Поток – это составляющая часть процесса (что-то вроде процесса
внутри процесса), т.е. программный код, выполнением которого занят
процессор.
В любой момент времени один процессор может выполнять только один
программный поток. Переключение процессора между выполнением
нескольких программных потоков осуществляется средствами ОС.
Каждый процесс может включать в себя несколько программных
потоков. Например, работая в программе Explorer, можно открыть новое
окно, для управления этим окном создается новый поток. Это означает, что в
системе существует только один экземпляр процесса Windows Explorer, но в
рамках этого процесса работает одновременно несколько программных
потоков.
Симметричная многопроцессорная архитектура и наращиваемость ОС.
ОС Windows NT/2000/XP обладают встроенной поддержкой многопроцессорных систем SMP (Symmetric Multiprocessing). Это означает, что если в
системе установлено больше одного процессора, то поток, требующий
выполнения, будет выполняться первым освободившимся процессором.
Переключение процессоров между потоками осуществит модуль Microkernel.

Службы и приложения пользовательского режима.
В пользовательском режиме работают процессы 3-х типов с различным
уровнем привилегий.
1. Системные процессы. Это процессы управляющие рабочей средой
пользовательского режима: Winlogon (подключение пользователей к
системе), Service Controller (сервис подключения служб), Session Manager
(диспетчер сеанса). Эти процессы запускаются модулем Ntoskrnl.exe в
процессе начальной загрузки и используют учетную запись LocalSystem.
2. Службы Windows. Службы (Alerter, Computer Browser и др.)
запускаются процессом Service Controller (файл services.exe) для прикладной
задачи. Эти службы функционируют, как отдельные потоки в рамках
процесса services.exe и не отображаются диспетчером задач в качестве
отдельных процессов.
Большинство служб не использует контекст безопасности LocalSystem.
3. Пользовательские прикладные программы. Т.е. прикладные
программы запускаемые пользователем в пользовательском режиме.
Каждая такая программа функционирует в рамках своего собственного
виртуального адресного пространства.
Процесс ассоциируется с подсистемой рабочего окружения environment
subsystem, который принимает от него вызовы, адресуемые API (Application
Program Interface) и преобразует их в команды, адресованные модулю
EXEcutive.
Для поддержки DOS служит подсистема времени исполнения Сsrss.exe,
которая запускается автоматически при формировании вызова.

Порядок загрузки операционной системы.
Загрузка любой операционной системы после завершения операций
инициализации аппаратных средств предусматривает следующие этапы:
- инициализация загрузчика OS (Boot loader process),
- выбор операционной системы (если предусмотрен выбор),
- повторное сканирование аппаратных средств,
- загрузка ядра OS и его инициализация.
После завершения POST BIOS передает управление на первое внешнее
устройство (согласно установленному приоритету), имеющее в буфере
данных байт 80h. Считывание следующего байта из этого порта активирует
программу аппаратной загрузки OS: т.е. будет выполнена процедура,
записанная в начале раздела MBR, которая позволит найти адрес первого
активного раздела в таблице разделов (по значению байта 80h), и загрузит
следующую за ним команду в табличной записи JMP(xx) на исполнение.
Адрес команды JMP является адресом аппаратного загрузчика NTLDR
(для операционной системы Windows NT/2000/XP), IBMBIO.COM (для DOS) или
аналогичной программы для других OS (например UNIX, Linux и т.д.).
NTLDR загрузит режим плоского 32-хразрядного адресного пространства
и запустит минифайловую систему, совместимую с FAT16, FAT32 и NTFS.
Затем читает Boot.ini в корневом каталоге и предлагает выбор OS к загрузке.
После выбора Windows XP выполняет программу Ntdetect.com, чтобы
собрать информацию о всех физических устройствах, подключенных к ЦП.
Затем NTLDR загружает в ОЗУ и запускает ядро операционной системы –
программу Ntoskrnl.exe, которая принимает данные сканирования.

Файлы, необходимые для успешного запуска ОС Windows XP.
Процедура запуска системы закончится неудачей, если хотя бы один из
указанных ниже файлов не будет найден или окажется поврежденным.
Наименование файла
Расположение файла
NTLDR
Корневой каталог Windows
Boot.ini
Корневой каталог Windows
Bootsect.dos (для выбора ОС)
Корневой каталог Windows
Ntdetect.com
Корневой каталог Windows
Ntbootdd.sys (только для SCSI)
Корневой каталог Windows
Ntoskrnl.exe
%SystemRoot%\System32
Hal.dll
%SystemRoot%\System32
Улей реестра \system
%SystemRoot%\System32\Config
драйверы устройств
%SystemRoot%\System32\Drivers
Файл Bootsect.dos содержит копию первого сектора раздела
альтернативной ОС (в данном случае DOS), аналогично можно построить
загрузчики для ОС UNIX и Linux, а затем отредактировать файл Boot.ini:
С:\ BOOTSECT.UNX=“UNIX”
С:\ BOOTSECT.LNX=“Linux”

Дальнейшее развитие архитектуры операционных систем.
Загрузочная запись ДОС версии 1.00 имеет одно незначительное отличие
от всех остальных версий: вместо имени Роберта О"Рира – разработчика
первой версии ДОС, которую он сделал по прототипу (Key DOS) за 2 месяца,
во всех последующих версиях стоит название фирмы - "Майкрософт".
В настоящее время разработка новой версии ОС занимает 6-10 лет и в ее
реализации участвует коллектив 200-300 человек.
Фирма Microsoft стала практически монополистом на рынке ОС ПЭВМ. Из
альтернативных ОС для ПЭВМ можно указать лишь Unix и Linux.
Основное совершенствование, которое реализовано в настоящее время
– для многоядерных процессоров нового поколения архитектуры Itanium
создан новый интерфейс между ОС и встроенным программным
обеспечением аппаратных платформ – EFI (Extensible Firmware Interface),
который предназначен для замены системы POST. Сейчас UEFI.
Для этой системы фирмой Microsoft разработан новый загрузчик для
операционной системы Windows, вошедший в состав ОС Windows 7/8,
bootmgr вместо NTLDR, файлы Boot.ini и Ntdetect.com также исключены из
системы, т.к. информация, которая хранилась там, находится в BOOT, а все
аппаратное окружение полностью соответствует спецификации ACPI.
Для изоляции MBR, ВООТ и загрузчика от неосторожных действий
пользователя создается изолированный системный раздел на жестком диске
размером 100 Мбайт.
Соответствующим образом откорректирован реестр Windows.

За многолетнюю историю развития персональных компьютеров параллельный порт (parallel port), который часто называют принтерным портом (printer port) остается самым быстрым и надежным способом подключения к РС принтера и других устройств. Параллельная передача восьми битов данных и автоматическое управление потоком данных с помощью сигналов квитирования (handshaking) делают ненужными внешние схемы для декодирования данных и управляющих сигналов. Широкое применение параллельных портов объясняются их простотой и высокой производительностью. Более того, параллельный порт позволяет вводить до девяти битов и выводить до 12 битов одновременно, требуя минимальных внешних схем для реализации многих простых задач.

Стандартный параллельный порт (SPP)

Стандартный параллельный порт (Standard Parallel Port - SPP ) представлен на задней стенке компьютера 25-контактным разъемом D-типа с отверстиями. Обычно кабель для этого разъема имеет на втором конце 34-контактный разъем, предназначенный для подключения к принтеру. Именно параллельный порт РС часто называется принтерным портом (printer port). На рисунке показаны разъемы и кабель для подключения принтера. Слева находится разъем со штырьками, предназначенный для параллельного порта РС, а справа - разъем для принтера.

В компьютере на разъем выведено четыре линии управления (CONTROL ), пять линий состояния (STATUS ) и восемь линий данных (DATA ). Приведенные группы сигналов доступны через соответствующие регистры, которые часто тоже называются портами . Оставшиеся восемь контактов заземлены.

Более новые параллельные порты определены стандартом IEEE 1284, который был опубликован в 1994 г. Этом стандарт определяет пять режимов работы:

    1. Режим совместимости (Compatibility Mode).
    2. Режим тетрад (Nibble Mode).
    3. Режим байтов (Byte Mode).
    4. Режим улучшенного параллельного порта (Enhanced Parallel Port - EPP ).
    5. Режим порта с расширенными возможностями (Extended Capabilities Port - ECP ).

Цель стандарта заключалось в том, чтобы разработать новые драйверы и устройства, совместимые друг с другом и обратно совместимые со стандартным параллельным портом (Standard Parallel Port - SPP ). Для режимов совместимости, тетрад и байтов используются стандартные схемы, имеющиеся на оригинальных картах параллельного порта, а для режимов ЕРР и ЕСР требуются дополнительные схемы, которые работают быстрее, но все же обратно совместимы со стандартным параллельным портом.

В режиме совместимости, или режиме Centronics , как его обычно называют, можно передавать данные только в прямом направлении, т.е. выводить данные, с типичной скоростью около 50 КБ/с, но возможна и большая скорость до 150 КБ/с. Для ввода данных необходимо перейти в режим тетрад или байтов. Режим тетрад позволяет вводить тетрады (4 бита) из устройства в РС. Режим байтов использует двунаправленные средства (имеющиеся только на некоторых картах) для ввода байтов (8 битов).

Порты ЕРР и ЕСР используют дополнительные схемы для управления и генерирования квитирования. Для вывода байта в принтер в режиме совместимости программа должна выполнить следующие действия:

  1. Записать байт в порт данных.
  2. Проверить, не занят ли принтер. Если принтер занят, он не воспринимает никаких данных, поэтому все записываемые в него данные теряются.
  3. Выдать сигнал строба Strobe (контакт 1) с низким уровнем. Он показывает принтеру, что на линиях данных (контакты 2-9) имеются достоверные данные.
  4. Установить высокий уровень строба, подождав примерно 5 мкс после формирования низкого уровня (на этапе 3).

Программное управление выводом ограничивает скорость стандартного параллельного порта. Более совершенные порты ЕРР и ЕСР решают эту проблему, позволяя схемно проверять занятость принтера и генерировать строб и/или подходящие сигналы квитирования. Благодаря этому необходимо выполнить только одну команду вывода, что повышает скорость работы. Новые порты могут выводить данные со скоростью 1-2 МБ/с. Кроме того, порт ЕСР использует каналы прямого доступа к памяти (Direct Memory Access - DMA ) и буферы FIFO (First In - First Out), поэтому данные можно передавать без применения команд вывода.

Аппаратные средства

В следующей таблице приведена разводка 25-контактного разъема D-типа компьютера и 34-контактного разъема Centronics, который обычно имеется на принтерах. Однако стандарт IEEE 1284 определяет три разных разъема для использования с параллельным портом. Первый разъем 1284 Type A - это обычный 25-контактный разъем D-типа. Второй 36-контактный разъем 1284 Type B является разъемом Centronics. Третий разъем IEEE 1284 Type C представляет собой 36-контактный разъем, похожий на разъем Centronics, но меньше по размерам. Он имеет лучший фиксатор, лучшие электрические параметры и к нему проще подключать кабель. Два дополнительных сигнала можно использовать для проверки включенного состояния устройства. Этот разъем признан перспективным для применения в новых разработках.

# контакта
(D-25)
# контакта (Centronics) Сигнал SPP Направление Регистр Аппаратно
инвертирован
1 1 nStrobe Вход/Выход Управления Да
2 2 Данные 0 Выход Данных
3 3 Данные 1 Выход Данных
4 4 Данные 2 Выход Данных
5 5 Данные 3 Выход Данных
6 6 Данные 4 Выход Данных
7 7 Данные 5 Выход Данных
8 8 Данные 6 Выход Данных
9 9 Данные 7 Выход Данных
10 10 nAck Вход Состояния
11 11 Busy Вход Состояния Да
12 12 Paper-Out / Paper-End Вход Состояния
13 13 Select Вход Состояния
14 14 nAuto-Linefeed Вход/Выход Управления Да
15 32 nError / nFault Вход Состояния
16 31 nInitialize Вход/Выход Управления
17 36 nSelect-Printer / nSelect-In Вход/Выход Управления Да
18 - 25 19-30 Земля Земля

Буква n перед названием сигнала означает сигнал с низким уровнем активности, например nError . Если в принтере возникла ошибка, на этой линии будет низкий уровень. Обычно на ней действует высокий уровень, показывая правильное функционирование принтера. Слова "Аппаратно инвертирован" означают, что сигнал инвертируется схемами параллельного порта. Здесь примером служит линия Busy . Если на этой линии действует напряжение +5 В (логическая 1) и производится считывание регистра состояния, то этот уровень возвращается как 0 в бите 7 регистра состояния.

Сигналы параллельного порта представлены обычными ТТЛ-уровнями. Большинство параллельных портов реализовано на основе специализированной микросхемы, которая отводит (Sink) и отдает (Source) ток около 12 мА. Однако в справочных данных могут встретиться и другие значения, например Sink/Source 6 мА, Source 12 мА/Sink 20 мА, Sink 16 мА/Source 4 мА.

Линии данных представляет собой настоящие проводники, по которым информация передается от компьютера в устройство (и от устройства в компьютер в новых портах). Для уменьшения влияния помех каждая линия данных имеет соответствующую земляную линию. Эти земляные линии обеспечивают также общий электрический эталон между компьютером и устройством. Остальные линии параллельно порта отведены для управления и квитирования (handshaking).

Чтобы обеспечить нахождение принтера в известном начальном состоянии, выдаваемый компьютером сигнал nInitialize переводит принтер в такое состояние, в котором он находится после включения питания. Таким образом, инициализация принтера сигналом nInitialize эквивалентна выключению принтера и последующему включению.

Сигнал на линии Select сообщает компьютеру о том, что периферийное устройство находится в онлайновом режиме (online) и готово принимать данные. Компьютер не посылает данные, если на линии Select имеется сигнал с низким уровнем. Обычно состояние этого сигнала соответствует индикатору "on-line" на принтере.

Когда компьютер сформировал на линиях данных сигналы достоверных данных, устройству необходимо сообщить о готовности данных. Именно для этого предназначен импульсный сигнал строба nStrobe, который должен заставить устройство воспринять байт данных и сохранить его в буфере для последующей обработки.

Для достижения высокой скорости передачи данных принтеру необходим конкретный метод координации передач. Компьютер должен ожидать между байтами до тех пор, пока принтер не будет готов к возобновлению приема новых байтов. Принтеры используют сигнал занятости Busy для задержки компьютера до тех пор, пока принтер не будет в состоянии готовности к приему следующего байта. Принтер формирует высокий уровень сигнала Busy в ответ на получение сигнала nStrobe и этот уровень сохраняется до тех пор, пока не подготовится к приему следующего байта. Отметим, что сигнал Busy может задержать компьютер на любой временной интервал, если возникла серьезная ошибка, например замятие бумаги. Когда же принтер обработал байт, он должен запросить у ожидающего компьютера следующий байт. Принтер снимает сигнал Busy и выдает короткий импульс подтверждения nAck. Таким образом с помощью сигналов nStrobe, Busy и nAck осуществляется управление (квитирование) передачей данных в параллельном порту.

В некоторых принтерах управляющий символ возврата каретки (Carriage Return - CR) автоматически транспортирует бумагу на следующую строку, а в других просто возвращает каретку в начало текущей строки без транспорта бумаги. Во многих принтерах любой из этих вариантов можно установить переключателем, но можно управлять этим и с помощью сигнала nAuto-LineFeed. Низкий уровень этого сигнала заставляет принтер автоматически производить транспорт бумаги на одну строку при получении управляющего символа CR.

Линия nSelect-Printer позволяет компьютеру дистанционно переводить периферийное устройство в онлайновый или офлайновый режим. Большинство параллельных портов поддерживают на этой линии низкий уровень, чтобы устройство автоматически воспринимало данные. Сигнал высокого уровня на этой линии запрещает работу устройства. Сигнал nError от периферийного устройства сообщает компьютеру о возникшей проблеме, препятствующей печати, но не конкретизирует ее. Ошибку может вызвать множество причин, детали которых зависят от периферийного устройства. Обычно в сигнал nError "собираются" такие ситуации, как отсутствие бумаги (эту причину конкретизирует сигнал Paper Out), нахождение принтера в офлайновом режиме (offline mode) или внутренние сбои схем принтера.

Интерфейс Centronics

Centronics - это старый стандарт (его часто называют интерфейсом и протоколом) на передачу данных из компьютера (хоста - host) в принтер. Квитирование этого стандарта используется в большинстве принтеров и обычно реализуется программно. На рисунке показана упрощенная диаграмма протокола Centronics.

Сначала на контакты 2-9 параллельного порта выдаются данные. Затем хост проверяет занятость принтера, т.е. на линии Busy должен действовать низкий уровень. После этого программа выдает строб, ожидает минимум 1 мкс и снимает строб. Данные обычно считываются устройством по нарастающему фронту строба. Принтер показывает свою занятость обработкой данных по линии Busy. Когда принтер воспринял данные, он подтверждает байт отрицательным импульсом длительностью около 5 мкс на линии nAck.

Часто для экономии времени хост игнорирует сигнал на линии nAck. При рассмотрении порта с расширенными возможностями ЕСР будет показана реализация быстрого режима Centronics (Fast Centronics Mode), в котором квитирование осуществляется схемно. Программист должен только записать байт данных в порт ввода-вывода. Схемы проверяют занятость принтера и формируют строб. Отметим, что в этом режиме линию nAck не контролируется.

Адреса портов

Параллельный порт имеет три общепринятых базовых адреса, которые приведены в следующей таблице. Базовый адрес 3BCh был вначале введен для параллельных портов на первых видеокартах. После того, как параллельные порты были вынесены с видеокарт, этот адрес исчез. Впоследствии он появился как вариант для параллельных портов, интегрированных в материнские платы, где конфигурацию можно изменять с помощью BIOS. Имени LPT1 обычно присваивается базовый адрес 378h, а LPT2 - адрес 278h. Однако далее показано, что это не всегда соблюдается. Адреса 378h и 278h почти всегда используются для параллельных портов, но могут изменяться в разных РС.

При включении компьютера BIOS определяет число имеющихся портов и присваивает им имена LPT1, LPT2 и LPT3. Вначале BIOS обращается по адресу 3BCh. Если там обнаруживается параллельный порт, ему присваивается имя LPT1, а затем проверяется адрес 378h. Если там обнаруживается параллельный порт, ему присваивается следующее свободное имя. Им будет LPT1, если по адресу 3BCh не найдена карта, или LPT2, если карта была найдена. Аналогично проверяется порт по адресу 278h. В результате можно иметь LPT2 по адресу 378h, а не ожидаемому адресу 278h.

Ситуацию усложняет то, что некоторые производители карт параллельного порта устанавливают перемычки, которые позволяют настроить порт на LPT1, LPT2, LPT3. Какой же теперь адрес у LPT1? В большинстве карт LPT1 находится по адресу 378h, а LPT2 - по адресу 278h, но некоторые используют 3BCh как LPT1, 378h как LPT1 и 278h как LPT2.

Для интерфейса с портом вместо имени часто используется базовый адрес, а не имена LPT1 и др. Таблица адресов портов находится в области данных BIOS. Когда BIOS назначает адреса принтерным устройствам, он сохраняет адреса в конкретных ячейках памяти и их там можно найти. Примечание * : В новых BIOS адрес 0000:040E из области данных BIOS может использоваться как расширенная область данных BIOS (Extended BIOS Data Area).

Программные регистры (порты) стандартного параллельного порта

Порт данных

Смещение Название Read/Write Биты Назначение
База + 0 Порт данных Write (* ) Бит 7 - 0 Данные 7 - 0

Примечание * : Если порт является двунаправленным, то допускается выполнение операций Read (ввод) и Write (вывод).

Базовый адрес, обычно называемый портом данных или регистром данных , просто используется для вывода данных на линии данных (контакты 2-9) параллельного порта. Обычно этот регистр допускает только запись (Write). При считывании из порта вводится последний переданный байт. В случае двунаправленного порта (см. далее) по этому адресу находятся принятые данные.

Порт состояния

Порт состояния допускает только считывание, поэтому все записываемые в него данные игнорируются. Порт имеет пять входных линий (контакты 10, 11, 12, 13 и 15), бит запроса прерывания IRQ и два зарезервированных бита. Бит 7 (Busy) является входным сигналом с низким уровнем активности, т.е. если бит 7 содержит 0, то на контакте 11 имеется напряжение +5 В. Так же действует бит 2 (nIRQ) - если бит содержит 1, то прерывания не возникло.

Порт управления

Порт управления (базовый адрес + 2) был предназначен только для записи. При подключении к параллельному порту принтера используются четыре сигнала управления: строб Strobe (бит 0), автоматический перевод строки Auto Linefeed (бит 1), инициализации Reset (бит 2) и выбора принтера Select Printer (бит 3). Все эти сигналы кроме Reset инвертированы.

Принтер не выдает сигнал для инициализации компьютера и не сообщает компьютеру использовать автоматический перевод строки. Однако приведенные ранее четыре выхода можно использовать для ввода. Если компьютер вывел на контакт высокий уровень (+5 В), а устройство хочет сделать его низким, порт закорачивается, вызывая конфликт. Поэтому эти выходы выполнены по схеме "открытый коллектор". Они имеют два состояния: низкий уровень (0 В) и высокоимпедансное состояние (разомкнутая цепь).

Обычно карта принтера имеет внутренние "вытягивающие" (pull-up) резисторы, но они есть не на всех картах. Некоторые карты имеют просто выходы типа открытый коллектор, а другие - обычные пушпульные (totem) выходы. Чтобы устройство правильно работало с максимально большим числом принтерных портов, можно использовать внешний резистор. Если уже есть внутренний резистор, то внешний резистор действует параллельно ему, а в случае пушпульного выхода - как нагрузка.

Величина внешнего резистора обычно составляет 4.7 кОм. Не рекомендуется применять меньший резистор с учетом того, что на карте может быть внутренний резистор. В высокоимпедансном состоянии контакт параллельного порта имеет высокий уровень +5 В. В этом состоянии внешнее устройство может установить низкий уровень и заставить порт управления считать другое значение. Благодаря этому четыре контакта порта управления можно использовать для двунаправленной передачи данных. Однако для считывания данных через порт управления необходимо установить его на xxxx0100, чтобы все контакты имели +5 В и устройство могло установить низкий уровень (землю - логический 0).

Биты 4 и 5 предназначены для внутреннего управления. Бит 4 разрешает запрос прерывания IRQ (см. далее), а бит 5 разрешает двунаправленный порт, т.е. можно вводить 8 битов по линиям DATA 0-7. Этот режим возможет, если только его поддерживает карта. Биты 6 и 7 зарезервированы, любая запись в эти биты игнорируется.

Двунаправленные порты

Следующая схема показывает упрощенное представление регистра данных параллельного порта. Оригинальные платы параллельного порта реализованы на логике семейства 74LS. Сейчас применяются специализированные микросхемы, но принципы работы остались теми же.

Недвунаправленные порты выпускаются с сигналом разрешения выхода nOE микросхемы 74LS374, постоянно подключенным к земле, поэтому порт данных выполняет только вывод. При считывании из регистра данных данные берутся из схемы 74LS374, которая также подключена к контактам данных. Если запретить схему 74LS374, можно получить двунаправленный порт.

В двунаправленных портах бит 5 регистра управления соединяется с входом разрешением выхода nOE схемы 74LS374, так что выходные драйверы можно запретить (выключить). В этом случае можно без конфликтов считывать данные с контактов данных параллельного порта.

Бит 5 регистра управления разрешает или запрещает двунаправленную работу параллельного порта. Он действует только для истинно двунаправленных портов. Когда этот бит становлен в 1, контакты 2-9 переводятся в высокоимпедансное состояние. В этом состоянии можно вводить данные на эти линии и считывать их порта данных (базовый адрес). Записываемые в порт данные сохраняются, но не доступны на контактах данных. Для выключения двунаправленного режима бит 5 порта управления нужно сбросить в 0.

Однако не все порты действуют одинаково. Некоторые порты могут потребовать установки бита 6 порта управления для разрешения двунаправленного режима, а бита 5 - для запрещения его. Различные производители реализуют свои двунаправленные порты по-разному. Если необходимо использовать двунаправленный порт для ввода данных, следует вначале с помощью логического пробника или мультиметра убедиться в том, что порт является двунаправленным.

Использование параллельного порта для ввода восьми бит

Если параллельный порт не поддерживает двунаправленного режима, все же можно осуществить ввод до девяти бит. Для этого можно использовать пять входных линий порта состояния и четыре входные линии (открытый коллектор) порта управления в соответствии со следующей схемой.

Входы параллельного порта выбраны так, чтобы упростить подключения. Сигнал Busy является старшим битом 7 порта состояния, а затем идут сигналы Ack, Paper Out и Select порта состояния, образуя старшую тетраду. Черточки показывают, какие входы аппаратно инвертируются, т.е. +5 В считывается как логический 0, а 0 В - как логическая 1. Порт состояния имеет только один инвертированный вход.

Младшая тетрада считывается из порта управления (Select Printer, Init, Auto Linefeed, Strobe). Здесь использованы инверторы с открытым коллектором. При этом могут потребоваться "вытягивающие" (pull-up) резисторы 4.7 кОм.

Режим тетрад

Режим тетрад (nibble mode) является предпочтительным способом ввода восьми битов данных без перевода порта в инверсный режим и использования линий данных. Этот режим реализуется наиболее просто. Для поочередного считывания тетрад применяется мультиплексор (счетверенный 2:1). Объединение тетрад в байт осуществляется программно. Конечно, этот способ несколько медленнее предыдущих. Здесь для считывания одного байта требуется несколько команд ввода-вывода и необходима внешняя микросхема.

Мультиплексор 74LS157 работает очень просто, как четыре переключателя. Когда вход A/B = 0 (низкий), выбираются входы А, т.е. вход 1А передается на выход 1Y, вход 2A на выход 2Y и т.д. Когда вход A/B = 1 (высокий), выбираются входы В. Выходы Y подключаются к порту состояния параллельного порта так, чтобы они оказались старшей тетрадой регистра состояния. Хотя такое подключение и необязательно, но при этом несколько упрощается программа.

Использование прерывания IRQ параллельного порта

Запрос прерывания параллельного порта не используется для печати под DOS. Прерывания хороши для устройств, момент активизации которых неизвестен, например датчика высокой температуры. В этом случае эффективнее работать по прерыванию, чем периодически программно опрашивать датчик. Кроме того, прерывания особенно важны для мультизадачной операционной системы.

Обычно запросом прерывания параллельного порта служит линия IRQ 5 или IRQ 7, но может быть и другая. Возможно, что прерывания на карте полностью запрещены, если она применяется только для печати. Прерывания параллельного порта можно разрешать и запрещать с помощью бита 4 регистра управления - разрешение IRQ через линию Ack (Enable IRQ Via Ack Line). Разрешенное прерывание возникает при переходе от низкого уровня к высокому (нарастающий фронт) сигнала nAck. Однако некоторые карты запускают прерывание по переходу от высокого уровня к низкому.

Режимы параллельного порта в BIOS

Сейчас большинство параллельных портов является многорежимными портами. Обычно они программно конфигурируются на один из нескольких режимов с помощью процедур BIOS. Типичные режимы:

    Режим принтера (Printer Mode), иногда называемый режимом Default или Normal
    Стандартный и двунаправленный режим (SPP)
    Режим EPP1.7 и SPP
    Режим EPP1.9 и SPP
    Режим ECP
    Режим ECP и EPP1.7
    Режим ECP и EPP1.9

Режим принтера является наиболее простым режимом - он соответствует только выводу стандартного параллельного порта. В нем отсутствуют средства двунаправленной работы, поэтому бит 5 порта управления не действует. Стандартный и двунаправленный режим (SPP) является двунаправленным режимом. В этом режиме бит 5 порта управления изменяет направление порта, поэтому можно считать вводимое значение по линиям данных.

Режим EPP1.7 и SPP представляет собой комбинацию режимов EPP 1.7 (Enhanced Parallel Port) и SPP. В этом режиме работы обеспечивается доступ к регистрам SPP (регистры данных, состояния и управления), а также доступ к регистрам EPP. В этом же режиме можно изменять направление порта с помощью бита 5 регистра управления. Первая версия EPP 1.7 может не иметь бита таймаута (Timeout).

Режим EPP1.9 и SPP аналогичен предыдущему, но теперь используется EPP Версия 1.9. Здесь по-прежнему предоставляется доступ к регистрам SPP, включая бит 5 порта управления. Но этом режим отличается от режима EPP1.7 и SPP тем, что можно обращаться к биту таймаута (Timeout) порта EPP.

Режим ECP предоставляет порт с расширенными возможностями (Extended Capabilities Port. Режим этого порта можно затем установить с помощью расширенного регистра управления (Extended Control Register - ECR) порта ECP. Однако в этом режиме из BIOS режим EPP (100) будет недоступен.

Режим ECP и EPP1.7 и режим ECP и EPP1.9 предоставляет порт с расширенными возможностями ECP, как и в предыдущем режиме. Однако режим EPP в регистре ECR порта ECP теперь доступен. В режиме ECP и EPP1.7 в вашем распоряжении порт EPP1.7, а в режиме ECP и EPP1.9 - порт EPP1.9.

Рассмотренные режимы конфигурируются через BIOS. Пользователь может реконфигурировать своей программой, но этого делать не рекомендуется . Программные регистры по адресам 2FAh, 3F0h, 3F1h предназначены для обращения только из BIOS. Для этих регистров конфигурирования нет установленного стандарта, поэтому использующая их прикладная программа становится плохо переносимой (portable).

Гораздо лучше выбрать из BIOS режим ECP и EPP1.7 или режим ECP и EPP1.9 , а затем с помощью расширенного регистра управления порта ECP установить режим параллельного порта. В режиме EPP1.7 было несколько проблем, связанных с формированием стробов данных и адреса для запуска цикла независимо от состояний ожидания, поэтому сейчас этот режим не применяется. Лучше всего установить параллельный порт на режим ECP и EPP1.9.

Режимы параллельного порта и расширенный регистр управления порта ECP

Ранее показано, что рекомендуется установить параллельный порт на режим ECP и EPP1.9 , а затем использовать расширенный регистр управления порта ECP для выбора различных режимов работы. Регистры порта ECP стандартизованы компании Microsoft.

Биты Функция
7:5
000 Стандартный режим
001 Режим байтов
010
011 Режим ECP FIFO
100 Режим EPP
101 Зарезервирована
110 Режим теста FIFO
111 Режим конфигурирования
4 Бит прерывания ECP
3 Бит разрешения DMA
2 Служебный бит ECP
1 FIFO заполнен (Full)
0 FIFO пуст (Empty)

При установке режима ECP доступен новый набор регистров по адресу База + 400h. Подробное рассмотрение из приведено в материале по порту ECP, а здесь необходим нам только расширенный регистр управления по адресу База + 402h. Формат этого регистра приведен в таблице слева. Отметим, что регистры ECP недоступны для порта с базовым адресом 3BCh.

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

Режимы работы

Стандартный режим
Режим байтов
Режим FIFO параллельного порта
Режим ECP FIFO
Режим EPP/Зарезервирован Согласно Extended Capabilities Port Protocol and ISA Interface Standard
Зарезервирован Пока зарезервирован. - Согласно
Режим теста FIFO
Режим конфигурирования

Если режим ECP установлен в BIOS или карта перемычкой конфигурирована на ECP, то рекомендуется до использования инициализировать порт ECP на предопределенное состояние. При использовании SPP прежде всего нужно установить порт на стандартный режим. Нельзя полагать, что порт будет уже находиться в стандартном (SPP) режиме.

В некоторых режимах регистры SPP могут исчезать или не работать правильно. При использовании SPP необходимо установить регистр ECR на стандартный режим.

Улучшенный параллельный порт (EPP)

Улучшенный параллельный порт (Enhanced Parallel Port - ЕРР ) разработан компаниями Intel, Xircom и Zenith Data Systems. Порты ЕРР были вначале определены в стандарте EPP 1.7, а затем включены в стандарт IEEE 1284 (1994 г.). Порт EPP имеет два стандарта EPP 1.7 и EPP 1.9. Между ними есть отличия, которые могут повлиять на работу устройств (см. далее). Скорость передачи данных составляет от от 500 КБ/с до 2 МБ/с. Она достигается тем, что квитирование, стробирование и другие операции формируются схемами порта, а не программно, как в интерфейсе Centronics.

Любители обычно используют порт ЕРР чаще, чем порт с расширенными возможностями (Extended Capabilities Port - ЕСР). Порт ЕРР отличается от порта ЕСР тем, что порт ЕРР генерирует и управляет всеми передачами в/из периферийного устройства. С другой стороны, порт ЕСР требует, чтобы периферийное устройство подтверждало обратный канал и управляло квитированием. Этого трудно достичь обычными простыми схемами и требуется специализированный контроллер или ECP Peripheral Chip.

Аппаратные средства

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

Контакт Сигнал SPP Сигнал EPP Вход/Выход Функция
1 Строб Write Выход Низкий уровень на этой линии показывает Write, а высокий уровень - Read
2-9 Данные 0-7 Данные 0-7 Вход/Выход Двунаправленная шина данных.
10 Ack Interrupt Вход Линия прерывания. Прерывание возникает по положительному (нарастающему) фронту.
11 Busy Wait Вход Используется для квитирования. Цикл EPP можно начинать при низком уровне, а заканчивается он при высоком уровне.
12 Paper Out / End Резервный Вход
13 Select Резервный Вход Резервный - не используется в квитировании EPP.
14 Auto Linefeed Data Strobe Выход При низком уровне показывает передачу данных.
15 Error / Fault Резервный Вход Резервный - не используется в квитировании EPP.
16 Initialize Reset Выход Сброс с низким уровнем активности.
17 Select Printer Address Strobe Выход При низком уровне показывает передачу адреса.
18-25 Земля Земля GND Земля

Сигналы Paper Out, Select и Error не определены в квитировании EPP и соответствующие линии пользователь может использовать по своему усмотрению. Состояния этих линий можно определить в любой момент времени, считывая регистр состояния. К сожалению, резервные выходы отсутствуют, что может вызвать определенные трудности.

Квитирование порта EPP

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

Цикл EPP записи данных

1. Программа записывает в регистр данных EPP (База + 4).
2. Формируется низкий уровень nWrite, показывая операцию записи.
3. Данные помещаются на линии данных 0-7.
4. Выдается строб nData Strobe, если Wait имеет низкий уровень (можно начать цикл).

6. Снимается строб nData Strobe.
7. Цикл записи данных EPP заканчивается.

Цикл EPP записи адреса

1. Программа записывает адрес в регистр адреса EPP (База + 3).
2. Формируется низкий уровень сигнала Write, показывающий операцию записи.
3. Адрес помещается на линии данных 0-7.
4. Выдается строб Address Strobe, если Wait имеет низкий уровень (можно начать цикл).
5. Компьютер ожидает подтверждения - высокого уровня на nWait (можно закончить цикл).
6. Снимается строб nAddress Strobe.
7. Цикл записи адреса EPP заканчивается.

Цикл EPP считывания данных

1. Программа считывает регистр данных EPP (База + 4).
2. Выдается строб nData Strobe, если Wait имеет низкий уровень (можно начать цикл).


5. Снимается строб nData Strobe.
6. Цикл считывания данных EPP заканчивается.

Цикл EPP считывания адреса

1. Программа считывает регистр адреса EPP (База + 3).
2. Выдается строб nAddr Strobe, если Wait имеет низкий уровень (можно начать цикл).
3. Компьютер ожидает подтверждения - высокого уровня на nWait.
4. Данные считываются с контактов параллельного порта.
5. Снимается строб nAddr Strobe.
6. Цикл считывания адреса EPP заканчивается.

Примечание При реализации квитирования EPP 1.7 (до IEEE 1284) стробы данных и адреса можно выдавать для запуска цикла независимо от от состояния Wait. В стандарте EPP 1.9 цикл запускается только при низком уровне Wait. Оба стандарта EPP 1.7 и EPP 1.9 требуют высокого уровня Wait для прекращения цикла.

Программные регистры порта EPP

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

Как видно, первые три адреса точно такие же, как у регистров порта SPP и функционируют они аналогично. Следовательно, при использовании порта ЕРР можно выводить данные по адресу Базе + 0 точно так же, как в SPP. При подключении принтера и использовании режима совместимости необходимо проверять, занят ли порт, а затем выдавать и снимать строб, используя порты управления и состояния, а затем ожидать подтверждения Ack.

При необходимости взаимодействовать с ЕРР-совместимым устройством нужно просто загрузить передаваемые данные в регистр данных ЕРР по адресу База + 4 и карта сформирует все требуемые сигналы квитирования. Аналогично, при необходимости выдать в устройство адрес следует применять регистр адреса ЕРР по адресу База + 3.

Регистры адреса и данных ЕРР допускают считывание и запись, поэтому для считывания данных из устройства можно использовать эти же регистры. Однако принтерная карта EPP должна инициировать цикл считывания, так как оба строба nData Strobe и nAddress Strobe являются выходами. Устройство может сигнализировать запрос считывания с помощью прерывания и заставить процедуру обслуживания прерывания (Interrupt Service Routine - ISR) выполнить операцию считывания.

Порт состояния имеет одну небольшую модификацию. Бит 0, который зарезервирован в наборе регистров порта SPP, теперь стал битом таймаута (Timeout) порта EPP. Этот бит устанавливается, когда возникает таймаут порта ЕРР. Это происходит, когда сигнал на линии nWait не снимается через примерно 10 мкс (в зависимости от порта) после выдачи сигналов IOW или IOR. Линии сигналов IOW и IOR записи и считывания ввода-вывода имеются в шине ISA.

Режим ЕРР очень сильно зависит от временной диаграммы (timing) шины ISA. Когда выполняется цикл считывания, порт должен предпринять соответствующее квитирование Read/Write и вернуть данные в этом цикле шины ISA. Конечно, этого не происходит в одном цикле ISA, поэтому порт использует сигнал готовности IOCHRDY (I/O Channel Ready) на шине ISA для введения состояний ожидания до завершения цикла. Теперь что произойдет, если запускается Read или Write порта ЕРР, а периферийное устройство не подключено?. Порт никогда не получит подтверждения (nWait) и будет сохранять запросы состояний ожидания, а компьютер блокируется. Поэтому в порту ЕРР поддерживается таймер (watchdog), который настроен примерно на 10 мкс.

Три регистра с адресами База + 5, База + 6 и База + 7 можно использовать для 16- и 32-битовых операций считывания и записи, если порт поддерживает их. Это может сократить число операций ввода-вывода. Параллельный порт может одновременно передавать только восемь битов, поэтому записываемое в параллельный 32- или 16-битовое слово разбивается на байты и передается по восьми линиям данных порта.

Особенности программирования порта EPP

Порт ЕРР имеет только два основных регистра и флажок таймаута. Что же приходится настраивать? До того, как запустить любые циклы порта ЕРР считыванием и записью в порты данных и адреса ЕРР, порт должен быть правильно конфигурирован. В холостом состоянии ЕРР должен иметь свои линии nAddress Strobe, nData Strobe, nWrite и nReset пассивными (высокий уровень). Некоторые порты требуют такой установки перед запуском любого цикла ЕРР. Поэтому первая задача - вручную инициализировать эти линии с помощью регистров порта SPP. Для этого нужно записать в порт управления код XXXX0100.

На некоторых картах, если параллельный порт переведен в инверсный режим, невозможно выполнить цикл записи ЕРР. Поэтому до использования порта ЕРР рекомендуется перевести его в прямой режим. Сброс бита 5 в регистре управления должен привести к правильной работе.

Бит таймаута (Timeout) порта EPP мы уже обсуждали. Когда этот бит установлен, порт может функционировать неправильно. Поэтому рекомендуется всегда считать FFh в цикле адреса или данных. Этот бит должен сбрасываться для надежной работы и должен постоянно контролироваться.

Порт с расширенными возможностями (ECP)

Режим расширенных возможностей разработан фирмами Hewlett-Packard и Microsoft для реализации в качестве Extended Capabilities Port Protocol and ISA Interface Standard . Этот протокол использует дополнительные схемы для генерирования сигналов квитирования так же, как в режиме ЕРР, и работает с большей скоростью, чем порт ЕРР. Однако этот режим лучше работает под Windows, так как может использовать для передачи данных каналы прямого доступа к памяти (Direct Memory Access - DMA). В нем также применяется буфер FIFO для принимаемых и передаваемых данных.

Еще одна возможность ЕСР - сжатие данных в реальном времени. Алгоритм кодирования длинами отрезков (Run Length Encoding - RLE) обеспечивает коэффициент сжатия до 64:1. Это удобно для сканеров и принтеров, в которых значительная часть данных представлена повторяющимися цепочками.

Порт ЕСР поддерживает метод адресации канала (channel addressing). Он не предназначен для использования в устройствах шлейфной цепочки (daisy chain), но позволяет адресовать несколько устройств внутри одного устройства. Примером служат многие современные факс-машины, которые содержат параллельный порт для интерфейса с компьютером. Факс-машину можно разбить на отдельные устройства, например сканер, модем/факс и принтер, причем каждый компонент можно адресовать отдельно, даже если другие устройства не могут воспринимать данные по причине заполненных буферов.

Аппаратные средства

Несмотря на то, что принтерные порты ЕСР используют такой же разъем D25, как и стандартный параллельный порт (SPP), порт ЕСР назначает другие функции контактам (как и порт ЕРР). Поэтому в интерфейсе порта ЕСР применяется и другой метод квитирования.

Порт ЕСР обратно совместим с портами SPP и EPP. При работе в режиме SPP отдельные линии функционируют так же, как в порту SPP, и называются Strobe, Auto Linefeed, Init, Busy и т.д. При работе в режиме ЕРР линии выполняют функции в соответствии с методом, описанном в протоколе порта ЕРР, и используется другой метод квитирования. Когда порт работает в режиме ЕСР, линии определяются следующим образом.

Контакт Сигнал SPP Сигнал ECP Вход/Выход Функция
1 Strobe HostCLK Выход Низкий уровень на этой линии показывает, что в хосте имеются достоверные данные. При снятии этого сигнала положительный фронт синхронизации должен использоваться для фиксации данных в устройстве.
2-9 Данные 0-7 Данные 0-7 Вход/Выход Двунаправленная шина данных.
10 Ack PeriphCLK Вход Низкий уровень на этой линии показывает, что устройство имеет достоверные данные. Когда этот сигнал снимается, положительный фронт синхронизации должен использоваться для фиксации данных в хосте.
11 Busy PeriphAck Вход В инверсном направлении высокий уровень показывает цикл данных, а низкий уровень - цикл команды. В прямом направлении действует как PeriphAck.
12 Paper Out / End nAckReverse Вход Низким уровнем устройство подтверждает запрос инверсии (Reverse Request).
13 Select X-Flag Вход Флажок расширяемости (Extensibility Flag).
14 Auto Linefeed Host Ack Выход В прямом направлении высокий уровень показывает цикл данных, а низкий уровень - цикл команды. В инверсном направлении действует как HostAck.
15 Error / Fault PeriphRequest Вход Установленный устройством низкий уровень показывает доступность инверсных данных.
16 Initialize nReverseRequest Выход Низкий уровень показывает передачу данных в инверсном направлении.
17 Select Printer 1284 Active Выход Высокий уровень показывает работу хоста в режиме 1284 Transfer Mode. Низкий уровень прекращает этот режим.
18-25 Земля Земля GND Земля

Сигналы на линиях HostAck и PeriphAck показывают, находятся ли на шине данных 0-7 данные или команда. При наличии на этих линиях высокого уровня на шине данных (контакты 2-9) находятся данные. Если реализуется цикл команды, то на соответствующей линии будет низкий уровень; если, например, хост выдает команду, то на линии HostAck будет низкий уровень, а если устройство выдает команду, то на линии PeriphAck будет низкий уровень.

Цикл команды может быть одним из двух - счетчиком RLE или адресом, что определяется битом 7 линий данных (контакт 9). Если бит 7 содержит 0, то остальные данные (биты 0-6) являются счетчиком длины RLE, который применяется в алгоритме сжатия. Но если бит 7 содержит 1, то данные в битах 0-6 являются адресом канала. При отсутствии одного бита номер может быть только значением от 0 до 127.

Квитирование порта ECP

Квитирование порта ЕСР отличается от квитирования порта SPP. Наиболее очевидное отличие состоит в том, что порт ЕСР в любой момент времени может передавать данные в любом направлении, а для этого требуется дополнительная сигнализация. Далее рассмотрено квитирование порта ЕСР для прямого (forward) и инверсного (reverse) направлений.

Прямой цикл данных ECP


2. Затем хост показывает цикл данных, выдавая низкий уровень сигнала HostAck.

4. Периферийное устройство выдает свое подтверждение достоверных данных, выдавая сигнал PeriphAck.
5. Хост выдает высокий уровень сигнала HostClk. Положительный фронт используется для фиксации данных в периферийном устройстве.
6. Периферийное устройство выдает подтверждение байта, снимая сигнал PeriphAck.

Прямой цикл команды ECP

1. Хост помещает данные на линии данных.
2. Затем хост показывает цикл команды, снимая HostAck.
3. Хост показывает достоверность данных, формируя низкий уровень сигнала HostClk.
4. Периферийное устройство выдает подтверждение достоверных данных, формируя сигнал PeriphAck.
5. Хост снимает сигнал HostClk высоким уровнем. Положительный фронт используется для фиксации данных в периферийном устройстве.
6. Устройство выдает подтверждение байта, снимая сигнал PeriphAck.

Инверсный цикл данных ECP




4. Затем устройство выбирает цикл данных, формируя высокий уровень сигнала PeriphAck.




Инверсный цикл команды ECP

1. Хост устанавливает низкий уровень сигнала nReverseRequest для запроса инверсного канала.
2. Периферийное устройство подтверждает запрос инверсного канала, выдавая низкий уровень сигнала nAckReverse.
3. Устройство помещает данные на линии данных.
4. Затем устройство выбирает цикл команды, формируя низкий уровень сигнала PeriphAck.
5. Устройство показывает достоверные данные низким уровнем сигнала PeriphClk.
6. Хост выдает свое подтверждение достоверных данных высоким уровнем сигнала HostAck.
7. Устройство устанавливает высокий уровень сигнала PeriphClk. Положительный фронт используется для фиксации данных в хосте.
8. Хост выдает свое подтверждение байта, формируя низкий уровень сигнала HostAck.

Сравнение квитирования портов EСP и SPP

Квитирование порта SPP состоит всего из пяти этапов:

  1. Записать байт в порт данных.
  2. Проверить занятость принтера. Если принтер занят, он не будет воспринимать никаких данных, поэтому все записываемые данные теряются.
  3. Сформировать низкий уровень сигнала Strob (контакт 1). Он сообщает принтеру о наличии правильных данных на линиях данных (контакты 2-9).
  4. Примерно через 5 мкс сформировать высокий уровень сигнала Strobe.
  5. Проверить подтверждение Ack от устройства.

С другой стороны, квитирование порта ЕСР требует больше этапов. Поэтому кажется, что порт ЕСР будет работать медленнее порта SPP. Однако это не так, поскольку управление всеми этапами квитирования реализовано схемно. Если бы квитирование реализовалось программно, оно было бы значительно медленнее квитирования порта SPP.

Кодирование RLE

Ранее вкратце говорилось, что протокол порта ЕСР включает в себя простой алгоритм сжатия кодирования длинами отрезков (Run Length Encoding - RLE ). Он обеспечивает максимальный коэффициент сжатия до 64:1 и работает, посылая повторяющиеся байты как счетчики отрезков и одну копию байта. Счетчик отрезка определяет, сколько раз должен быть повторен последующий байт.

Если, например, передается цепочка из 25 букв "А", то первым должен быть передан байт счетчика отрезка, равный 24, а затем байт "A". Принимающее устройство при приеме счетчика длины отрезка (Run Length Count), должно расширить (повторить) следующий байт число раз, определяемое счетчиком.

Байт счетчика длины отрезка должен отличаться от других байтов в тракте данных. Он посылается как команда в порт адреса FIFO (Address FIFO Port). Байты, посылаемые в этот регистр, могут быть счетчиком длины отрезка или адресом. Они различаются старшим битом 7. Если бит 7 содержит 1, то остальные семь битов (0-6) являются адресом канала. Если бит 7 сброшен в 0, то младшие семь битов являются счетчиком длины отрезка. В этом случае адреса каналов и счетчики длин отрезков ограничены семью битами (значения от 0 до 127).

Программные регистры порта ECP

В следующей таблице приведены регистры порта ЕСР. Первые три регистра совпадают с регистрами порта SPP. Отметим, однако, появление бита разрешения двунаправленного порта (бит 5 порта управления). Этот бит показывает текущее направление порта ЕСР и влияет на биты FIFOpFull FIFOpEmpty в регистре ECR (см. далее).

Адрес Название порта Read/Write
База + 0 Порт данных (SPP) Write
Адрес ECP FIFO (режим ECP) Read/Write
База + 1 Порт состояния (все режимы) Read/Write
База + 2 Порт управления (все режимы) Read/Write
База + 400h Данные FIFO (параллельный порт режима FIFO) Read/Write
Данные FIFO (режим ECP) Read/Write
Проверка FIFO (режим Test) Read/Write
Регистр конфигурирования A (режим конфигурирования) Read/Write
База + 401h Регистр конфигурирования В (режим конфигурирования) Read/Write
База + 402h Расширенный регистр управления (используется всеми режимами) Read/Write

Расширенный регистр управления (ECR)

Бит Функция
7:5 Выбирают текущий режим работы
000 Стандартный режим
001 Режим байтов
010 Режим FIFO параллельного порта
011 Режим ECP FIFO
100 Режим EPP
101 Зарезервированы
110 Режим проверки FIFO
111 Режим конфигурирования
4 Бит прерывания ECP
3 Бит разрешения DMA
2 Служебный бит ECP
1 FIFO Full
0 FIFO Empty

Наиболее важным регистром порта ЕСР является расширенный регистр управления (Extended Control Register - ECR ), поэтому рассмотрим вначале его работу. Этот регистр определяет, в каком режиме будет работать порт ЕСР, а также задает состояние буфера FIFO. Функции этого регистра приведены в следующей таблице.

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

Стандартный режим Установка этого режима заставляет порт ECP действовать как стандартный параллельный порт без возможности двунаправленной работы.
Режим байтов Действует как SPP в двунаправленном режиме. Бит 5 переводит порт в инверсный режим.
Режим FIFO параллельного порта В этом режиме все данные, записываемые в FIFO данных, будут передаваться в периферийное устройство с использованием квитирования SPP. Необходимое квитирование реализуется схемно. Этот режим удобен для не-ECP устройств, например принтеров. Предоставляются некоторые возможности ECP, например буферы FIFO и схемное генерирование квитирования, но с квитированием SPP, а не с квитированием ECP.
Режим ECP FIFO Стандартный режим для порта ECP. В этом режиме используется квитирование ECP. - Когда режим ECP установлен через BIOS и регистр ECR устанавливается на режим ECP FIFO Mode (011), регистры SPP могут исчезнуть.
Режим EPP/Зарезервирован Разрешается режим EPP, если он доступен. Под BIOS, если установлен режим ECP, то более чем вероятно, этот режим не является опцией. Но если BIOS установлен на режим ECP и EPP1.x, то будет разрешен EPP 1.x. - Согласно Extended Capabilities Port Protocol and ISA Interface Standard этот режим определяется поставщиком.
Зарезервирован Пока зарезервирован. - Согласно Extended Capabilities Port Protocol and ISA Interface Standard этот режим определяется поставщиком.
Режим теста FIFO В этом режиме все данные, записываемые в регистр Test FIFO, будут помещаться в FIFO, а любые данные, считываемые из регистра Test FIFO, будут считываться из буфера FIFO. Биты состояния FIFO Full/Empty будут отражать их истинное значение, поэтому в этом режиме можно определить некоторые характеристики FIFO, например его глубину.
Режим конфигурирования В этом режиме становятся доступными два регистра конфигурирования cnfgA и cnfgB по их адресам.

Как показано ранее, когда порт установлен на работу в стандартном режиме, он действует как порт SPP без двунаправленных передач данных. Если требуется двунаправленная передача, нужно установить режим байтов. Режимы FIFO параллельного порта и ECP FIFO используют схемы для генерирования необходимых сигналов квитирования. Единственное различие между ними состоит в том, что режим FIFO параллельного порта использует квитирование порта SPP и может быть использован для работы с SPP-принтером. Режим ECP FIFO использует квитирование порта ЕСР.

Режим проверки FIFO можно использовать для тестирования емкости буферов FIFO, а также проверки правильности их функционирования. В этом режиме любой байт, который записывается в регистр TEST FIFO (База + 400h), помещается в буфер FIFO, а любой байт, считываемый из этого регистра, берется из буфера FIFO. Это можно использовать вместе с битами FIFO Full и FIFO Empty расширенного регистра управления ECR для определения емкости буфера FIFO. Глубина FIFO обычно составляет около 16 байтов.

Другие биты регистра ECR также играют важную роль в работе порта ЕСР. Бит прерывания (бит 4) разрешает использование прерываний, а бит разрешения DMA (бит 3) разрешает применять прямой доступ к памяти. Служебный бит ЕСР (бит 2) показывает, инициирован ли запрос прерывания. Если он есть, этот бит будет установлен. Сброс этого бита осуществляется по-разному в разных микросхемах. Некоторые требуют сбросить бит, т.е. записать в него 0, а другие сбрасывают при считывании из регистра.

Бит FIFO Full (бит 1) и FIFO Empty (бит 0) показывают состояние буфера FIFO. Эти биты зависят от направления, поэтому нужно учитывать бит 5 регистра управления. Если бит 0 (FIFO Empty) установлен, то буфер FIFO пустой, а если установлен бит 1, то буфер FIFO полный. Если же ни один из этих битов не установлен, то в FIFO имеются данные, но буфер пока не заполнен. Эти биты можно использовать в режиме проверки FIFO для определения емкости буфера FIFO.

Регистр конфигурирования А (cnfgA)

Регистр конфигурирования А (cnfgA) представляет собой один из двух регистров конфигурирования порта ЕСР. Регистры конфигурирования доступны только в режиме конфигурирования. Адрес регистра cnfgA равен База + 400h. Формат регистра cnfgA приведен в следующей таблице.

Бит Функция
7 1 Прерывания запускаются уровнем
0 Прерывания запускаются фронтом
6:4 00h Воспринимает слова шириной макс. 16 битов
01h Воспринимает слова шириной макс. 8 битов
02h Воспринимает слова шириной макс. 32 бита
03h:07h Зарезервированы для расширения
3 Зарезервирован
2 Восстановление хоста: Байт конвейера/передатчика включен в FIFO?
0 В прямом направлении один байт в конвейере передатчика не влияет на FIFO Full.
1 В прямом направлении один байт в конвейере передатчика учитывается как часть FIFO Full.
1:0 Восстановление хоста: Непереданные байты оставлены в FIFO
00 Полное слово
01 1 достоверный байт
10 2 два достоверных байта
11 3 достоверных байта

Регистр конфигурирования А можно считать для получения дополнительной информации о ЕСР. Бит 7 показывает, генерирует ли карта прерывания уровнем или фронтом. Это зависит от типа используемой картой шины. Биты 6:4 показывают ширину шин внутри карты. Некоторые карты используют только 8-битовый тракт данных, а другие - 16- или 32-битовые. Для получения максимальной эффективности от карты программа должна считать состояние этих битов, чтобы определить максимальный размер слова, выводимого в порт.

Три младших бита применяются для восстановления хоста (Host Recovery). Чтобы произвести восстановление при появлении ошибки, программа должна знать, сколько байтов передано, определяя, остались ли байты в FIFO. Некоторые реализации могут учитывать ожидающий передачи байт в регистре передатчика как часть состояния FIFO Full, а другие не учитывают. Бит 2 определяет ту или иную ситуацию.

Еще одна проблема связана с тем, что выход параллельных портов имеет ширину только восемь битов, а программа может использовать команды 16- или 32-битового ввода-вывода. В этом случае может быть послана часть слова порта. Поэтому биты 0 и 1 показывают число достоверных байтов, оставшихся в FIFO, и их можно передать повторно.

Регистр конфигурирования В (cnfgВ)

Регистр конфигурирования В, как и регистр конфигурирования А, доступен только в режиме конфигурирования. Его адрес в этом режиме равен База + 401h. Формат регистра cnfgB приведен в следующей таблице.

Бит Функция
7 1 Сжимать выводимые данные по алгоритму RLE
0 Не сжимать данные
6 Состояние прерывания - показывает текущее состояние контакта IRQ
5:3 Выбирает или отображает состояние линии запроса прерывания IRQ
000 Прерывание выбрано с помощью перемычки
001 IRQ 7
010 IRQ 9
011 IRQ 10
100 IRQ 11
101 IRQ 14
110 IRQ 15
111 IRQ 5
2:0 Выбирает или отображает состояние канала DMA, используемого картой принтера
000 Использует 8-битовый канал DMA, выбранный перемычкой
001 Канал 1 DMA
010 Канал 2 DMA
011 Канал 3 DMA
100 Использует 16-битовый канал DMA, выбранный перемычкой
101 Канал 5 DMA
110 Канал 6 DMA
111 Канал 7 DMA

Регистр конфигурирования В (cnfgB) может быть комбинацией доступа считывания-записи. Некоторые порты конфигурируются программно с установкой ресурсов IRQ и DMA из регистра. Другие конфигурируются через BIOS или с помощью перемычек на карте, поэтому из регистра можно только считывать.

Бит 7 определяет, производить или нет сжатие выводимых данных по алгоритму RLE: 1 - хост сжимает данные перед передачей, 0 - данные передаются в устройство сырыми (несжатыми). Бит 6 возвращает состояние контакта IRQ. Его можно использовать для диагностики конфликтов, так как он будет показывать не только состояние IRQ параллельного порта, но и другого устройства, использующего данную линию IRQ.

Биты 5:3 показывают состояние присваивания порту линии IRQ, а биты 2:0 - состояние присваивания порту канала DMA. Как говорилось ранее, эти поля можно считывать и записывать. Для исчезающих плат с перемычками эти биты просто показывают ресурсы как "Jumpered" или правильные номера линий. Конечно, в этом случае их можно только считывать.

Порты ввода - вывода. Устройства параллельного и последовательного ввода - вывода

Порт ввода-вывода

Канал передачи данных между устройством и микропроцессором. Порт представляется в микропроцессоре как один или несколько адресов памяти, из которых можно прочитать или в которые можно записать данные.

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

Разъем ввода/вывода для подключения устройств параллельного интерфейса. Большинство принтеров подключаются к параллельному порту.

Последовательный порт

Порт компьютера для организации побайтной асинхронной связи. Последовательный порт называется также коммуникационным или COM – портом.

Асинхронная связь

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

Параллельный порт (LPT)

(25 – контактный разъем). Предназначен для подключения принтера, сканера, а также – внешних устройств для хранения и траспортировки информации (накопителей). До недавнего времени отличался сравнительно высокой скоростью передачи данных (около 2 Мбайт/с). Как правило, LPT – разъем на задней стенке компьютера единственный.

Последовательные порты (COM) (9 – и 25 – контактный разъем) отличаются куда меньшей скоростью (около 112 кбайт/с). Потому и выпадала на их долю поддержка всяческих «неспешных» устройств – например, мыши или модема. Первоначально COM – портов на компьютере было четыре, однако со временем их осталось лишь два. Мышь предпочла последовательному порту свой собственный разъем PS/2, разделив его с клавиатурой, а на долю COM – порта осталась лишь поддержка медлительного модема. Со временем и модем эмигрирует к новому порту USB – тогда COM – порт окончательно и бесповоротно уйдет в прошлое.

В свое время мышь и клавиатура подключались к разным разъемам: мышь по соседству с модемом на COM – порте, а клавиатура имела свой собственный, ни на что не похожий разъем. PS/2 – порт впервые появился на массовых материнских платах в 1998 году. Подключить к нему что – то кроме мыши и клавиатуры не получится.

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

Эту новинку, успешно дебютирующую в 2000 году, называли одной из самых значительных новаций десятилетия. Одним из главных плюсов USB является то, что на один USB – порт можно подключить 127 устройств (в отличие от старых портов: к каждому можно было подключить только одно устройство). Все USB – устройства могут подключаться к компьютеру «по цепочке» - в том случае, если у каждого «звена» имеется свой USB – порт или USB – хаб на несколько портов одновременно. Единственное правило, которое следует соблюдать при работе с USB – первыми в цепочке должны быть самые производительные устройства: принтер, сканер, колонки, накопители. А в самом конце - медленные клавиатура и мышь.

Еще одно важное качество USB – этот интерфейс позволяет подключать к компьютеру любые устройства без перезагрузки системы.

Скорость первой модификации USB (а именно к этому стандарту относятся все устройства, выпущенные до конца 2000 года) составляет около 12 Мбайт/с (на деле ряд подключенных к USB устройств работает с куда меньшей скоростью – до 1,5 Мбайт/с). Новая спецификация шины USB 2.0, принятая в апреле 2000 года, планировала увеличить скорость передачи данных до 60 Мбайт/с, однако новые устройства, поддерживающие такую скорость обмена, вышли на рынок только в конце года. USB 2.0 совместима с устройствами USB старого формата, но работать они будут с прежней скоростью.

Инфракрасный порт

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

Одним из самых старых портов компьютера является LPT-порт или параллельный порт. И хотя LPT-порт сейчас можно увидеть далеко не на всякой материнской плате, тем не менее, читателям, возможно, интересно было бы узнать, что он из себя представляет.

Прежде всего, разберемся с названием порта. Возможно, далеко не все знают, что обозначает аббревиатура LPT. На самом деле, LPT – это сокращение от словосочетания Line Print Terminal (построчный принтерный терминал). Таким образом, становится понятным, что LPT-порт предназначался, прежде всего, для подключения принтеров. Именно поэтому порт LPT имеет и еще одно название – порт принтера. Хотя теоретически могут подключаться к LPT и другие устройства.

LPT-порт имеет давнюю историю. Он был разработан фирмой Centronics (поэтому данный порт часто называют также портом Centronics), производившей матричные принтеры еще до начала эпохи персоналок, в начале 1970-х. А в начале 1980-х LPT-порт стал использоваться фирмой IBM в своих компьютерах и на какое-то время стал стандартным портом для подключения высокоскоростных (на то время) устройств.

Внешний вид параллельного порта на задней панели компьютера

Интерфейс LPT существовал в нескольких редакциях. В оригинальной версии LPT-порт был однонаправленным, то есть мог передавать данные лишь в одном направлении – к периферийному устройству. Разумеется, такая ситуация не устраивала пользователей, поскольку существовали принтеры, которые требовали передачи данных в обоих направлениях. Поэтому впоследствии интерфейс LPT несколько раз был усовершенствован, пока не был разработан его международный стандарт IEEE 1284. В соответствии с этим стандартом интерфейс параллельного порта поддерживал несколько режимов работы и был также совместим со старыми стандартами. Кроме того, интерфейс в своей конечной редакции поддерживал относительно высокие скорости передачи данных – до 5 Мб/с.

Принцип работы параллельного порта

Порт LPT называется параллельным потому, что в подключаемом к нему кабеле данные передаются параллельно, то есть, одновременно по нескольким проводникам. Этим свойством параллельный порт отличается от другого порта компьютера –последовательного порта COM.

Проводников, передающих сами данные, в кабеле Centronics насчитывается 8. Кроме того, в кабеле присутствует несколько линий, по которым передаются управляющие сигналы.

Хотя параллельный порт большей частью используется для подключения принтеров, тем не менее, существовали и другие его применения. Во-первых, при помощи порта LPT можно напрямую соединить два компьютера – посредством специального кабеля Interlink. До широкого распространения сетевых карт Ethernet подобное соединение, хоть и не обеспечивавшее пользователю большую скорость передачи данных, зачастую было, тем не менее, единственным способом связать два компьютера. Существуют также электронные ключи, предназначенные для подключения к порту LPT.

Кабель для передачи данных между компьютерами - Interlink

Как и в случае многих других устройств на материнской плате, режимы работы параллельного порта часто можно настроить через BIOS Setup. Как правило, для этого используются такие опции BIOS, как Parallel Port, Parallel Port IRQ, Parallel Port DMA и т.п.

Разъем параллельного порта на материнской плате и кабель Centronics

Разъем порта LPT обычно располагается непосредственно материнской плате, хотя до середины 1990-x гг. он обычно присутствовал на вставляемой в слот расширения так называемой мультикарте, на которой были также расположены другие порты компьютера. Выход порта представляет собой 25-контактный разъем типа «розетка», который называется разъемом DB25.

ISA мультикарта с LPT(DB25 - «мама») и игровым портом на борту.

Для подключения к принтеру используется специальный кабель ­­– кабель Centronics. Один конец (вилка) кабеля Centronics подключается к порту, другой (также вилка) – к специальному разъему принтера. Последний разъем имеет 36 контактов. Следовательно, особенностью кабеля Centronics является то, что он имеет разные разъемы с обеих сторон.

Внешний вид кабеля Centronics.

Хотя часто разъем кабеля для материнской платы называется разъемом Centronics, тем не менее, строго говоря, разъемом Centronics называется лишь 36-контактный разъем для подключения к принтеру, а не к материнской плате. Разъем кабеля для подключения к порту называется разъемом Amphenolstacker, от названия разработавшей его американской фирмы Amphenol, производящей разъемы.

Особенности работы параллельного порта

Благодаря тому, что LPT-порт поддерживает параллельную передачу данных, в первых ПК этот порт считался одним из самых скоростных портов компьютера. Передача данных по нескольким линиям во многом сближает интерфейс LPT по архитектуре с компьютерными шинами. Тем не менее, это обстоятельство накладывает и ограничение на длину кабеля, которая из-за возникающих в кабеле помех не может превышать 5 м.

Максимальное напряжение, использующееся в сигнальных линиях порта, составляет +5 В. Для простой передачи данных требуется всего лишь десять сигнальных линий – это 8 линий собственно данных, линия строб-сигнала, то есть, сигнала о готовности порта к передаче данных, и линия занятости. Остальные линии используются для совместимости со стандартом Centronics.

LPT-порт типа «мама» с нумерацией контактов.

Назначение выводов разъема параллельного порта DB25:

  • 1 – Data strobe (Строб-сигнал)
  • 2-9 – Данные, биты 0-7
  • 10 – Acknowledge (Подтверждение от принтера)
  • 11 – Busy (Занят)
  • 12 – Paper Out (Кончилась бумага)
  • 13 – Select (Принтер активен)
  • 14 – Auto Feed (Автоматическая подача)
  • 15 – Error (Ошибка)
  • 16 – Init (Инициализация принтера)
  • 17 – Select Input (Выбор устройства)
  • 18-25 – Земля

Заключение

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

Порт называется «последовательным», так как информация через него передаётся по одному биту , последовательно бит за битом (в отличие от параллельного порта). Несмотря на то, что некоторые интерфейсы компьютера (например, Ethernet , FireWire и USB) тоже используют последовательный способ обмена информацией, название «последовательный порт» закрепилось за портом стандарта RS-232 .

Назначение

Наиболее часто для последовательного порта персональных компьютеров используется стандарт RS-232C. Ранее последовательный порт использовался для подключения терминала, позже для модема или мыши . Сейчас он используется для соединения с , для связи с аппаратными средствами разработки встраиваемых вычислительных систем , спутниковыми ресиверами, кассовыми аппаратами, программаторами, с приборами систем безопасности объектов, а также с многими прочими устройствами.

С помощью COM-порта можно соединить два компьютера, используя так называемый «нуль-модемный кабель» (см. ниже). Использовался со времен MS-DOS для передачи файлов с одного компьютера на другой, в UNIX для терминального доступа к другой машине, а в Windows (даже современной) - для отладчика уровня ядра.

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

Видео по теме

Разъёмы

На материнских платах ведущих производителей (например, Intel) или готовых системах (например, IBM , Hewlett-Packard , Fujitsu Siemens Computers) для последовательного порта принято условное обозначение COM или RS-232.

Варианты разъёма COM-порта типа DE-9

Наиболее часто используются стандартизированные в 1969 году D-образные разъёмы: 9- и 25-контактные, (DB-9 и DB-25 соответственно). Раньше использовались также DA-31 и круглые восьмиконтактные DIN-8. Максимальная скорость передачи в обычном исполнении порта составляет 115 200 бод .

Актуальность

Существуют стандарты на эмуляцию последовательного порта над USB и над Bluetooth (эта технология в значительной степени и проектировалась как «беспроводной последовательный порт»).

Тем не менее программная эмуляция данного порта широко используется и сегодня. Так, например, практически все мобильные телефоны эмулируют внутри себя классический COM-порт и модем для реализации тетеринга - доступа компьютера в Интернет через GPRS/EDGE/3G/4G оборудование телефона. При этом для физического подключения к компьютеру используется USB , Bluetooth или Wi-Fi .

Также программная эмуляция данного порта предоставляется «гостям» виртуальных машин VMWare и Microsoft Hyper-V , основная цель при этом - подключение отладчика уровня ядра Windows к «гостю».

В виде UART , отличающегося уровнями напряжения и отсутствием дополнительных сигналов, присутствует практически во всех микроконтроллерах, кроме самых-самых маленьких, SoC, платах разработчиков, а также присутствует на платах большей части устройств, хотя разъём и не выведен на корпус. Такая популярность связана с простотой этого интерфейса, как с физической точки зрения, так и с легкостью доступа к порту со стороны ПО по сравнению с другими интерфейсами.

Аппаратура

Разъем имеет контакты:

DTR (Data Terminal Ready - готовность к приёму данных) - выход на компьютере, вход на модеме. Означает готовность компьютера к работе с модемом. Сброс этой линии вызывает почти полную перезагрузку модема в первоначальное состояние, в том числе бросание трубки (некоторые управляющие регистры выживают после такого сброса). В UNIX это происходит в случае, если все приложения закрыли файлы на драйвере последовательного порта. Мышь использует этот провод для получения питания.

DSR (Data Set Ready - готовность к передаче данных) - вход на компьютере, выход на модеме. Означает готовность модема. Если эта линия находится в нуле - то в ряде ОС становится невозможно открыть порт как файл.

RxD (Receive Data - приём данных) - вход на компьютере, выход на модеме. Поток данных, входящий в компьютер.

TxD (Transmit Data - передача данных) - выход на компьютере, вход на модеме. Поток данных, исходящих из компьютера.

CTS (Clear to Send - готовность передачи) - вход на компьютере, выход на модеме. Компьютер обязан приостановить передачу данных, пока этот провод не будет выставлен в единицу. Используется в аппаратном протоколе управления потоком для предотвращения переполнения в модеме.

RTS (Request to Send - запрос на передачу) - выход на компьютере, вход на модеме. Модем обязан приостановить передачу данных, пока этот провод не будет выставлен в единицу. Используется в аппаратном протоколе управления потоком для предотвращения переполнения в оборудовании и драйвере.

DCD (Carrier Detect - наличие несущей) - вход на компьютере, выход на модеме. Взводится модемом в единицу после установления соединения с модемом с той стороны, сбрасывается в ноль при разрыве связи. Аппаратура компьютера может издавать прерывание при наступлении такого события.

RI (Ring Indicator - сигнал вызова) - вход на компьютере, выход на модеме. Взводится модемом в единицу после обнаружения вызывного сигнала телефонного звонка. Аппаратура компьютера может издавать прерывание при наступлении такого события.

SG (Signal Ground - сигнальная земля) - общий сигнальный провод порта, не является общей землёй , как правило, изолирован от корпуса ЭВМ или модема.

В нуль-модемном кабеле используются две перекрещенные пары: TXD/RXD и RTS/CTS.

Исходно в IBM PC и IBM PC/XT аппаратура порта была построена на микросхеме UART 8250 фирмы National Semiconductor, затем микросхема была заменена на 16450, программно совместимой с предыдущими, но позволявшей использовать скорости вплоть до 115200 бит в секунду, затем появилась микросхема 16550, содержавшая двунаправленный FIFO буфер данных для снижения нагрузки на контроллер прерываний. В настоящее время включена в SuperIO микросхему на материнской плате вместе с рядом иных устройств.

Программный доступ к СОМ-порту

UNIX

COM-порты в операционной системе Unix (Linux) - это файлы символьных устройств. Обычно эти файлы располагаются в каталоге /dev и называются

  • ttyS0 , ttyS1 , ttyS2 и т. д. в Linux
  • ttyd0 , ttyd1 , ttyd2 и т. д. (или ttyu0 , ttyu1 , ttyu2 и т. д. начиная с версии 8.0) в FreeBSD
  • ttya , ttyb , ttyc и т. д. в Solaris
  • ttyf1 , ttyf2 , ttyf3 и т. д. в IRIX
  • tty1p0 , tty2p0 , tty3p0 и т. д. в HP-UX
  • tty01 , tty02 , tty03 и т. д. в Digital Unix
  • ser1 , ser2 , ser3 и т. д. в QNX

Для программного доступа к СОМ-порту необходимо открыть на чтение/запись соответствующий файл и сделать вызовы специальных функций tcgetattr (для того, чтобы узнать текущие настройки) и tcsetattr (чтобы установить новые настройки). Также может потребоваться сделать вызовы ioctl с определенными параметрами. После этого при записи в файл данные будут отправляться через порт, а при чтении программа будет получать уже принятые данные из буфера СОМ-порта.

Устройства с именами «ttyxx» используются как серверные, то есть приложение, открывшее данное устройство, обычно ожидает входящего звонка от модема. Классическим таким приложением, используемым по умолчанию, является getty , которая ожидает входящего звонка, далее настраивает COM-порт в соответствии с файлами конфигурации, выводит туда "login: ", принимает имя пользователя и запускает как потомка команду «login ИмяПользователя», со стандартным вводом и выводом, перенаправленными в COM-порт. Эта команда в свою очередь запрашивает и проверяет пароль, и в случае успеха запускает (не как потомка, а вместо себя вызовом execve в том же процессе) default user shell, прописанный в файле /etc/passwd.

Эта технология исторически возникла в 1970-е годы, когда под ОС UNIX использовались компьютеры вроде PDP-11 (в СССР серия называлась СМ ЭВМ) или VAX , позволяющие подключение многих терминалов для работы многих пользователей. Терминалы - а значит, и весь интерфейс пользователя - при этом подключались через последовательные порты, с возможностью подключения вместо терминала модема и дальнейшего дозвона на компьютер по телефону. До сих пор в UNIX-подобных ОС существует терминальный стек, и обычно 3 реализации терминалов - последовательный порт, консоль текстового режима экрана+клавиатура, и «обратная петля» в один из открытых файлов управляющего приложения (так реализованы telnetd, sshd и xterm).

Клиентские устройства последовательного порта, предназначенные для совершения звонков вовне, в многих UNIX (не во всех) называются cuaxx.

Так как последовательный порт в UNIX доступен только через терминальный стек, он может быть управляющим терминалом для процессов и групп (посылать SIGHUP при разрыве связи от модема и SIGINT при нажатии Ctrl-C), на уровне ядра поддерживать редактирование последней введенной строки клавишами стрелочек, и т. д. Для отключения этой возможности с целью превращения устройства в «трубу» для потока байт необходимы вызовы ioctl.

Windows

С последовательными портами в Win32 работают как с файлами. Для открытия порта используется функция CreateFile. Портов может быть много, поэтому они обозначаются как COM1, COM2 и т. д. по порядку обнаружения драйверов соответствующих устройств. Первые 9 портов доступны в том числе как именованные каналы для передачи данных (доступны по именам «COM1», «COM2», …), такой метод доступа считается устаревшим. Рекомендуется ко всем портам обращаться как к файлам (по именам «\\.\COM1», «\\.\COM2»,… «\\.\COMx»).