В некоторых принтерах используется последовательный интерфейс 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 для принтеров применяется пока очень сдержанно.
8.3.1. Параллельные интерфейсы — Centronics, IEEE 1284, ИРПР
Параллельный интерфейс Centronics ориентирован на передачу потока байт данных к принтеру и прием сигналов состояния принтера. Этот интерфейс поддерживается всеми LPT-портами компьютеров. Его отечественным аналогом является интерфейс ИРПР-М . Понятие «Centronics» относится как к набору сигналов и протоколу взаимодействия, так и к 36-контактному разъему на принтерах. Назначение сигналов интерфейса приведено в табл. 8.3, а временные диаграммы обмена с принтером показаны на рис. 8.5.
Таблица 8.3. Сигналы интерфейса Centronics
Сигнал |
I/O¹ |
Контакт |
Назначение |
Strobe# |
I |
1 |
Строб данных. Данные фиксируются по низкому уровню сигнала |
Data [0:7] |
I |
2-9 |
Линии данных. Data 0 (контакт 2) — младший бит |
Ack# |
O |
10 |
Acknowledge — импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования запроса прерывания |
Busy |
O |
11 |
Занято. Прием данных возможен только при низком уровне сигнала |
PaperEnd |
O |
12 |
Высокий уровень сигнализирует о конце бумаги |
Select |
O |
13 |
Сигнализирует о включении принтера (обычно в принтере соединяется резистором с цепью + 5 В) |
Auto LF# |
I |
14 |
Автоматический перевод строки. При низком уровне принтер, получив символ CR (Carriage Return — возврат каретки), автоматически выполняет и функцию LF (Line Feed — перевод строки) |
Error# |
O |
32 |
Ошибка: конец бумаги, состояние OFF-Line или внутренняя ошибка принтера |
Init# |
I |
31 |
Инициализация: сброс в режим параметров умолчания, возврат к началу строки и страницы |
Select In# |
I |
36 |
Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса |
GND |
- |
19-30, 33 |
Общий провод интерфейса |
¹ I/O задает направление (вход или выход) применительно к принтеру.
Рис. 8.5. Передача данных по протоколу Centronics
Передача данных начинается с проверки готовности принтера — состояния линии Busy
. Строб данных может быть коротким — доли микросекунды, и порт заканчивает его формирование, не обращая внимания на сигнал Busy
. Во время строба данные должны быть действительными. Подтверждением приема байта (символа) является сигнал Ack#
, который вырабатывается после приема строба через неопределенное время (за это время принтер может выполнять какую-либо длительную операцию, например прогон бумаги). Импульс Ack#
является запросом принтера на прием следующего байта, его задействуют для формирования сигнала прерывания от порта принтера. Если прерывания не используются, то сигнал Ack#
игнорируется и весь обмен управляется парой сигналов Strobe#
и Busy
. Свое состояние принтер может сообщить порту по линиям Select
, Error#
, PaperEnd
— по ним можно определить, включен ли принтер, исправен ли он и есть ли бумага. Формированием импульса на линии Init#
принтер можно проинициализировать (при этом он очистит и весь свой буфер данных). Режимом автоматического перевода строки, как правило, не пользуются, и сигнал AutoLF#
имеет высокий уровень. Сигнал SelectIn#
позволяет логически отключать принтер от интерфейса.
Читать дальше