Интерфейс Centronics
Программирование параллельного порта
Исторически параллельный интерфейс был введен в персональный компьютер для подключения принтера (аббревиатура LPTрасшифровывается как Line Printer, т.е. построчный принтер). Однако впоследствии он стал использоваться для подключения других периферийных устройств (ПУ) – сканеров, дисководов типа Zip и ряда других.
Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, регламентирует различные режимы обмена данными, физический и электрический интерфейсы. Следующие режимы обмена данными получили наибольшее распространение:
- Compatibility Mode – однонаправленный вывод по протоколу Centronics, который полностью соответствует стандартному порту SPP (Standard Parallel Port).
- ЕРР (Enhanced Parallel Port) Mode – двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Режим эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей.
- ЕСР (Extended Capability Port) Mode – двунаправленный обмен с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding), использования FIFO-буферов и режима прямого доступа в память DMA. Управляющие сигналы интерфейса генерируются аппаратно.
Базовая разновидность порта SPP позволяет передавать данные только в одном направлении – от ПК, однако позднее был разработан ряд стандартов двунаправленной передачи данных EPP и ECP. К главным недостаткам LPT порта следует отнести невысокую скорость (100÷150 Кб/сек) и необходимость привлечения ресурсов микропроцессора при передаче данных.
Стандартный LPT порт имеет 8-битную шину данных, 5-битную шину сигналов состояния и 4-х битную шину управляющих сигналов. Порт асимметричен – 12 линий работают на вывод и только 5 на ввод. Понятие интерфейса Centronics относится к набору сигналов, протоколу обмена и разъему, устанавливаемому в принтерах. Назначение сигналов и контакты разъема ПУ, на который они выведены, приведены в табл. 96.
Табл. 96. Сигналы интерфейса Centronics.
Сигнал | Т | Конт. | Напр. | Назначение |
Strobe | IN | Строб данных. Передаваемые данные фиксируются по низкому уровню сигнала. | ||
D0 ... D7 | 2-9 | IN | Линии данных (D0 - младший бит). | |
Ack | OUT | Acknowledge – сигнал подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования прерывания. | ||
Busy | OUT | ПУ занято. Прием данных возможен только при низком уровне сигнала. | ||
PE | OUT | "1" сигнализирует о конце бумаги. | ||
Select | OUT | "1" сигнализирует о включении принтера. | ||
Auto LF | IN | Автоматический перевод строки Auto Feed Line. Если "0", то ПУ при получении символа CR (перевод каретки) выполняет функцию LF – перевод строки. | ||
Error | OUT | Ошибка ПУ (нет бумаги, нет тонера, внутренняя ошибка). | ||
Init | IN | Инициализация (переход к началу строки, сброс всех параметров на значения по умолчанию). | ||
Slct In | IN | Выбор принтера. При "1" ПУ не воспринимает сигналы интерфейса. | ||
GND | – | Общий провод. |
Столбец «T» определяет активный уровень сигнала: «1» – высокий активный уровень, «0» – низкий, столбец «Напр.» – направление передачи по отношению к принтеру: IN – вход, OUT – выход. Сигнал Auto LF практически не применяется, но его неправильное значение может приводить к ошибкам печати.
Обмен данными по интерфейсу Centronics можно описать с помощью временной диаграммы (рис. 46). Для передачи байта данных в ПУ вначале необходимо убедится, что уровень сигнала на линии BUSY равен 0, а уровень сигнала на линии ACK – единице. После этого следует установить код выводимого символа на линиях DATA.
Рис. 46. Временные диаграммы интерфейса Centronics.
Затем не ранее, чем через 0,5 мкс линию STROBE необходимо перевести в состояние логического нуля. При этом выводимый символ запишется во внутренний буфер ПУ. Сигнал STROBE необходимо удерживать в течение как минимум 0,5 мкс. После истечения интервала времени линию STROBE нужно вновь перевести в состояние логической единицы. После этого выходная линия принтера BUSY устанавливается в единицу, сигнализируя о том, что принтер занят обработкой полученного символа и временно не может принимать другие символы.
Когда ПУ полностью обработает выведенный байт данных, линия ACK перейдет в состояние 0. Приблизительно через 5 мкс. после этого линия BUSY также перейдет в состояние 0. Еще через 5 мкс линия ACK примет состояние 1. Теперь ПУ готово принять следующий байт данных.
Если в течение длительного времени (несколько секунд) источник не получает подтверждения ACK, то он принимает решение об ошибке «тайм-аут» устройства. Если после приема байта приемник не готов принимать данные, то он не снимает сигнал Busy. При программной реализации обмена желательно ограничить время ожидания снятия Busy (обычно 30÷45 сек), иначе возможно «зависание» программы.