ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.06.2021
Просмотров: 163
Скачиваний: 1
Тема 9. Периферийные устройства
Лекция 18. Периферийные устройства.
1. Устройства шины PCI.
2. Интерфейсы принтеров и плоттеров
1. Устройства шины PCI
Для программистов интерес в первую очередь представляют функции PCI BIOS, поскольку они позволяют получить доступ к информации об адресном пространстве и пространстве ввода-вывода подключенных к шине PCI устройств.
Интерфейс PCI BIOS обеспечивает аппаратно-независимый метод управления устройствами PCI (а также AGP) в любых возможных режимах работы архитектуры х86 (включая реальный, защищенный 6-разрядный, защищенный 32-разрядный режимы и режим с линейным адресным пространством). Основное назначение функций PCI BIOS – работа с конфигурационным пространством и генерация специальных циклов шины PCI.
Общий вид конфигурационного пространства устройства PCI показан на рис. 1.
Рис. 1. Конфигурационное пространство устройства PCI
Конфигурационное пространство содержит три области:
заголовок, не зависящий от типа устройства;
область, определяемая устройством (значением Header Type);
область, определяемая пользователем.
С точки зрения программиста важными являются первые две из перечисленных областей, а область пользователя фактически доступна лишь разработчикам устройства, поскольку детальное описание этой области есть только у них и посторонним обычно не предоставляется. Впрочем, чтобы извлечь какую-то полезную информацию из полей, содержащих базовые адреса, также необходимо располагать документацией на устройство: каждый изготовитель трактует их по-своему. Для наглядности достаточно сравнить между собой распределение базовых адресов в видеоконтроллерах 3Dfx и Matrox.
Если программисту требуется выполнять с устройством PCI только типовые операции, то ему совершенно не обязательно разрабатывать полноценный драйвер для устройства — для решения некоторых типовых задач достаточно той документации, которую фирмы-изготовители предоставляют через Интернет в режиме свободного доступа. На практике интерес представляют следующие поля конфигурационного пространства:
Vendor ID — код фирмы-изготовителя устройства;
Device ID — код устройства;
Class Code — код класса устройства;
Base Address Registers — регистры базовых адресов;
Interrupt Line — номер выделенного устройству прерывания IRQ.
Код изготовителя, код устройства и код класса применяются в про: цессе поиска заданного устройства. Если необходимо найти конкретное устройство, то поиск выполняется по кодам устройства и его изготовителя (см. вышеупомянутые описания контроллеров Matrox и 3Dfx); если требуется обнаружить все устройства определенного типа, то используется код класса. После того как искомое устройство обнаружено, при помощи регистров базовых адресов можно определить выделенные ему области в адресном пространстве памяти и пространстве ввода-вывода. Наибольший интерес, однако, представляет регистр Interrupt Line, позволяющий выяснить, какая линия IRQ была выделена устройству процедурой РпР BIOS в процессе начальной загрузки компьютера — в некоторых случаях это единственный документированный способ определения номера прерывания.
Функции PCI BIOS
Поскольку конфигурационное пространство не имеет привязки к какой-либо определенной области адресного пространства компьютера, доступ к нему связан с определенными трудностями. С целью упрощения работы с устройствами PCI в BIOS персональных компьютеров были внесены специальные дополнительные функции. Доступ к функциям PCI BIOS при 16-разрядном вызове выполняется через функцию Blh прерывания lAh. Для 32-разрядных вызовов используется 32-разрядная точка входа защищенного режима. Функции PCI BIOS используют регистры процессора для передачи аргументов и получения результатов. При успешном выполнении функции флаг переноса CF сбрасывается в 0, в случае неудачи — устанавливается в 1.
2. Интерфейсы принтеров и плоттеров
Современные принтеры, печатающие графические изображения (в том числе и текст в графическом режиме) с высоким разрешением, требуют высокоскоростной передачи данных по внешнему интерфейсу. Большинство принтеров имеют традиционный параллельный интерфейс Centronics или более производительный IEEE 1284, что позволяет достигать скоростей передачи 0,15-2 Мбайт/с, в зависимости от производительности компьютера и выбранного режима передачи. Эти же интерфейсы используются и в плоттерах.
Для подключения принтера с параллельным интерфейсом используется LPT-порт в различных модификациях, от традиционного SPP-порта до теперь уже стандартного и эффективного IEEE 1284.
Поначалу все принтеры с параллельным интерфейсом обязательно поддерживали протокол Centronics, а более «продвинутые» вдобавок могли работать и в режиме ЕСР, поддерживая согласование режимов по IEEE 1284. Их инсталляционные программы старались установить драйверы «продвинутых» режимов, если того позволяла ОС и возможности LPT-порта. Теперь ситуация изменилась, и появились принтеры с параллельным интерфейсом, не поддерживающие Centronics. При инсталляции они требуют подключения по «двунаправленному интерфейсу» IEEE 1284 (обычно режим ЕСР), и через LPT-порт в режиме SPP они работать отказываются. С такими принтерами в среде MS DOS без специальных драйверов работать невозможно.
В некоторых принтерах используется последовательный интерфейс RS-232C, RS-422 или «токовая петля», но здесь теоретический предел скорости около 11 Кбайт/с (115 Кбит/с), а практически она едва достигает 1 Кбайт/с (9600 бит/с). Эти принтеры можно подключать к СОМ-порту непосредственно или через адаптер — преобразователь уровня сигналов.
В последнее время стали чаще применять шину USB, однако этот переход не так уж безоблачен: шина USB поддерживается не всеми ОС. Старые приложения (ведь не всегда есть необходимость и возможность перехода на новые), работающие с принтером через функции BIOS Int 17h или непосредственно с регистрами LPT-порта, например для приглашения к подаче бланков, не могут работать с принтером USB даже в среде ОС, поддерживающих USB в полном объеме. Что касается скорости передачи данных, то у USB 1.0 со скоростью 12 Мбит/с скорость передачи данных отнюдь не достигает 1,5 Мбайт/с (12:8) хотя бы из-за накладных расходов шины. В USB 2.0, которая сейчас выходит на рынок, пиковая скорость может достигать 50 Кбайт/с (скорость в шине — 480 Мбит/с), что для принтера пока что более чем достаточно. Однако для этого и принтер, и компьютер должны поддерживать USB 2.0, и между ними не должно быть старых (USB 1.0) хабов.
Принтеры могут иметь интерфейс SCSI (редкий вариант), а также подключаться не к компьютеру, а к локальной сети по интерфейсу Ethernet (10 или 100 Мбит/с). Такое подключение удобно для принтеров коллективного пользования, и при грамотно построенной сети оно не доставляет забот пользователям. Шина Fire Wire для принтеров применяется пока очень сдержанно.
Параллельные интерфейсы — Centronics, IEEE 1284, ИPПP
Параллельный интерфейс Centronics ориентирован на передачу потока байт данных к принтеру и прием сигналов состояния принтера. Этот интерфейс поддерживается всеми LPT-портами компьютеров. Его отечественным аналогом является интерфейс ИPПP -М. Понятие «Centronics» относится как к набору сигналов и протоколу взаимодействия, так и к 36-контактному разъему на принтерах. Назначение сигналов интерфейса приведено в табл. 1, а временные диаграммы обмена с принтером показаны на рис. 2.
Таблица 1.
Сигналы интерфейса Centronics
Рис. 2. Передача данных по протоколу Centronics
Передача данных начинается с проверки готовности принтера — состояния линии Busy. Строб данных может быть коротким — доли микросекунды, и порт заканчивает его формирование, не обращая внимания на сигнал Busy. Во время строба данные должны быть действительными. Подтверждением приема байта (символа) является сигнал Ack#, который вырабатывается после приема строба через неопределенное время (за это время принтер может выполнять какую-либо длительную операцию, например прогон бумаги). Импульс Ack# является запросом принтера на прием следующего байта, его задействуют для формирования сигнала прерывания от порта принтера. Если прерывания не используются, то сигнал Ack# игнорируется и весь обмен управляется парой сигналов Strobe# и Busy. Свое состояние принтер может сообщить порту по линиям Select, Error#, PaperEnd — по ним можно определить, включен ли принтер, исправен ли он и есть ли бумага. Формированием импульса на линии Init# принтер можно проинициализировать (при этом он очистит и весь свой буфер данных). Режимом автоматического перевода строки, как правило, не пользуются, и сигнал AutoLF# имеет высокий уровень. Сигнал Selectln# позволяет логически отключать принтер от интерфейса.
Через параллельный порт (LPT) протокол Centronics может быть реализован чисто программно, используя стандартный режим порта (SPP), достигая скорости передачи до 150 Кбайт/с при полной загрузке процессора. Благодаря «продвинутым» режимам порта протокол может быть реализован и аппаратно (Fast Centronics), при этом скорость до 2 Мбайт/с достигается при меньшей загрузке процессора.
Большинство современных принтеров с параллельным интерфейсом поддерживают и стандарт IEEE 1284, в котором оптимальным режимом передачи является ЕСР.
Для подключения принтера требуется кабель Centronics, пригодный для любых режимов параллельного интерфейса. Простейший вариант кабеля — 18-проводный с неперевитыми проводами — может использоваться для работы в режиме SPP. При длине более 2 м желательно, чтобы хотя бы линии Strobe* и Busy были перевиты с отдельными общими проводами. Для скоростных режимов (Fast Centronics, ЕСР) такой кабель может оказаться непригодным — возможны нерегулярные ошибки передачи, возникающие лишь при определенных последовательностях передаваемых кодов. Встречаются кабели Centronics, у которых отсутствует связь контакта 17 разъема PC с контактом 36 разъема принтера. При попытке подключения таким кабелем принтера, работающего в стандарте 1284, появится сообщение о необходимости применения «двунаправленного кабеля». Принтер не может сообщить системе о поддержке расширенных режимов, на что рассчитывает драйвер принтера. Другое проявление отсутствующей связи — «зависание» принтера по окончании печати задания из Windows. Эту связь можно организовать подпайкой дополнительного провода или же просто заменить кабель.
Идеальным вариантом являются кабели, в которых все сигнальные линии перевиты с общими проводами и заключены в общий экран — то, что требует IEEE 1248. Такие кабели гарантированно работают на скоростях до 2 Мбайт/с при длине до 10 м.
В табл. 2 приводится распайка кабеля подключения принтера с разъемом XI типа А (DB25-P) со стороны PC и Х2 типа В (Centronics-III или типа С (миниатюрный) со стороны принтера. Использование общих проводов (GND) зависит от качества кабеля. В простейшем случае (18-проводный кабель) все сигналы GND объединяются в один провод. Качественные кабели требуют отдельного обратного провода для каждой сигнальной линии, однако в разъемах типа А и В для этого недостаточно контактов (в табл. 2 в скобках указаны номера контактов разъема PC типа А, которым соответствуют обратные провода). В разъеме типа С обратный провод (GND) имеется для каждой сигнальной цепи; сигнальным контактам 1-17 этого разъема соответствуют контакты GND 19-35.
Таблица 2.
Кабель подключения принтера
Ряд отечественных (и стран бывшего СЭВ) принтеров имеет интерфейс ИPПP (IFSP в документации на принтеры ROBOTRON). Он является близким родственником интерфейса Centronics. Интерфейс ИPNP может быть программно реализован через обычный LPT-порт, но для устранения перегрузки выходных линий согласующие резисторы из принтера желательно удалить. Порт, перегруженный по выходу, может преподносить всякого рода сюрпризы (естественно, неприятные и трудно диагностируемые).
Последовательные интерфейсы
Из последовательных интерфейсов в принтерах чаще всего используется RS-232C для подключения к СОМ-порту. Встречаются принтеры с последовательными интерфейсами «токовая петля» или RS-422, которые подключаются к СОМ-порту через специальные переходники. Принтеры работают всегда по асинхронному протоколу передачи и, как правило, позволяют настраивать конфигурацию последовательного интерфейса. Задается частота передачи, формат посылки (число информационных, старт- и стоп-битов, контроль паритета) и протокол управления потоком: программный XON/XOFF или аппаратный RTS/CTS. Подключение принтеров и плоттеров к СОМ-порту требует применения кабеля, соответствующего выбранному протоколу, схемы кабелей приведены на рис. 3 и 4. Аппаратный протокол предпочтительнее — стандартный драйвер СОМ-порта пользуется именно им. Естественно, параметры интерфейса принтера должны соответствовать параметрам, заданным для задействованного СОМ-порта. Порт конфигурируется, например, DOS-командой MODE. Заметим, что при печати средствами DOS (командами COPY или PRINT) прерывания от порта не используются.
Рис. 3. Кабель подключения принтера с протоколом RTS-CTS
Если принтер имеет интерфейс «токовая петля», то для него потребуется преобразователь сигналов, простейшая схема которого приведена на рис. 8.8. Здесь принтер подключается по токовой петле к СОМ-порту с аппаратным управлением потоком. Для получения двуполярного сигнала, требуемого для входных сигналов СОМ-порта, применяется питание от интерфейса.
Рис. 4. Кабель подключения принтера по протоколу XON/ XOFF
Рис. 5 Подключение принтера с интерфейсом «токовая петля 20 мА» к СОМ-порту
Системная поддержка принтера
Вывод на принтер через порт LPT в стандартном режиме (SPP) по интерфейсу Centronics имеет поддержку на уровне BIOS. Поддержка всех других режимов работы порта (Fast Centronics, ECP) осуществляется только дополнительными драйверами или средствами ОС. Сервисы BIOS Int 17h обеспечивают инициализацию, вывод байта данных и опрос состояния принтера. Перехват прерывания Int 17h является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсом ИPПP или необходимости перекодировки символов.
Печать содержимого экрана (Print Screen) поддерживается прерыванием BIOS Int 0 5 h. Обработчик этого прерывания посимвольно выводит содержимое видеопамяти (в текстовом режиме) на порт LPT1. Обработчик пользуется ячейкой 0050:0000 для отражения своего текущего состояния: 00 — неактивен, 01 — выполняется печать, FF — во время последнего вызова произошла ошибка ввода-вывода. Прерывание Int 05h вызывается обработчиком аппаратного прерывания от клавиатуры (Int 09h), когда обнаруживается нажатие клавиши PrintScreen (PrtSc).