Лабораторная работа ИНТЕРФЕЙСЫ М2


Лабораторная работа № 1
Исследование СОМ-портов (последовательной передачи данных)
Цель работы: изучить протокол организации обмена, аппаратную реализацию, исследовать режимы работы и особенности сопряжения устройств с СОМ-портами.
Назначение: последовательный или СОМ-порт предназначен для организации обмена информацией устройств, использующих последовательный способ передачи данных с персональным компьютером типа IBM РС. Порт последовательной передачи данных называют ещё портом RS-232С или асинхронным адаптером RS-232С. Компьютер IBM РС поддерживает интерфейс RS-232С не в полной мере, то есть разъём, обозначенный на корпусе компьютера как порт последовательной передачи данных, содержит некоторые из сигналов, входящих в интерфейс RS-232С и имеющих соответствующие этому стандарту уровни напряжения.
В настоящее время порт последовательной передачи данных используется довольно широко, в частности:
для подключения мыши;
для подключения графопостроителей, сканеров, принтеров, дигитайзеров;
для связи двух компьютеров с использованием специального кабеля;
для подключения модемов;
для подключения к сети персональных компьютеров.
Последовательный интерфейс
Последовательный интерфейс для передачи данных в одну сторону использует одну сигнальную линию, по которой информационные биты передаются друг за другом последовательно. Такой способ передачи и определяет название интерфейса и порта, его реализующего. Последовательная передача данных может осуществляться как в асинхронном, так и в синхронном режимах.
Формат асинхронной передачи представлен на рисунке 4.1.
Старт бит стоп
бит паритета бит

лог.0 возможно
0 начало
0 1 2 3 4 5 6 7 Р следующей передачи
лог.1
внутренние
стробы
Рисунок 4.1 Формат асинхронной передачи.
Старт-бит, имеющий всегда значение логического нуля, обеспечивает простой механизм синхронизации приёмника по сигналу от передатчика. По приёму старт-бита счётчик-делитель опорной частоты приёмника обнуляется и начинает генерировать строб импульсы, по которым фиксирует последующие принимаемые биты. Очевидно, допустимое рассогласование скоростей, при котором данные будут приняты верно при формате 8 бит данных, бита паритета и одного стоп-бита не может превышать 5%. Реально рассогласование частот должно быть ещё меньше. С повышением частоты передачи требования к согласованности частот передатчика и приёмника более строгие.
Формат асинхронной посылки позволяет выявлять возможные ошибки передачи:
нарушение паритета при неправильно принятом значении контрольного бита;
ошибка формата, если при обнаружении перепада, сигнализирующего о начале посылки по стробу стоп-бита, зафиксирован уровень логической единицы;
если во время, отведённое под стоп-биты, обнаружен уровень логического нуля (то же ошибка формата).
Контроль формата позволяет обнаруживать обрыв линии. При этом обычно принимается логический ноль, который сначала трактуется как старт-бит и нулевые биты данных, но потом срабатывает контроль стоп-бита.
Для асинхронного режима принят ряд стандартных скоростей обмена: 50, 75, 110, 150, 300 и далее с удвоением до 115200 бит/с. Количество стоп-бит может быть 1; 1,5; 2.
Асинхронный обмен в РС реализуется с помощью СОМ-порта с использованием протокола RS-232С.
Синхронный режим передачи предполагает постоянную активность канала связи. Посылка начинается с синхробайта, за которым вплотную следует поток информационных бит. Если из передатчика нет данных для передачи, он заполняет паузу непрерывной посылкой байтов синхронизации. Обязательна внешняя синхронизация приёмника с передатчиком, обычно с помощью отдельной линии для передачи сигнала синхронизации, либо с использованием самосинхронизирующего кодирования данных, при котором на приёмной стороне из принятого сигнала могут быть выделены и импульсы синхронизации. Из синхронных адаптеров в настоящее время чаще применяются адаптеры интерфейса V35.
Последовательный интерфейс на физическом уровне может иметь различные реализации, различающиеся способами передачи электрических сигналов. Существует ряд родственных международных стандартов: RS-232С, RS-423А, RS-422А и RS-485, которые отличаются схемами соединения передатчика с приёмником, длиной линии и максимальной скоростью передачи данных.
В РС наибольшее распространение получил простейший из этих – стандарт RS-232С: длина L 15 м, скорость передачи V = 20 Кбит/с (рисунок 4.2).


Рис 4.2. Схема соединения приёмника и передатчика RS-232С
Интерфейс RS-232С
Интерфейс RS-232С предназначен для подключения аппаратуры, передающей или принимающей данные (АПД или ООД – оконечное оборудование данных), к оконечной аппаратуре каналов данных (АКД). В роли АПД может выступать компьютер, принтер, плоттер и другое периферийное оборудование. Этой аппаратуре соответствует аббревиатура DTE – Data Terminal Equipment. В роли АКД обычно выступает модем, этой аппаратуре соответствует аббревиатура DCE – Data Communication Equipment. Конечная цель подключения – соединение двух устройств DTE, полная схема соединений приведена на рисунке 4.3.
ООД
А
(DTE)
RS-232C
RS-232C
ООД
Б
(DTE)
АКД
Б
(DCE)
АКД
А
(DCE)

Линия
Рис.4.3 Полная схема соединения по RS-232С
Интерфейс позволяет исключить канал удалённой связи вместе с парой устройств DCE (модемов), соединения устройства DTE с помощью нуль-модемного кабеля (рисунок 4.4).
ООД
А
(DTE)
ООД
Б
(DTE)
RS – 232С

нуль-модем
Рисунок 4.4 Соединение двух устройств нуль-модемным кабелем
Стандарт реализует электрическую, информационную и конструктивную совместимости.
Особенность электрической совместимости – стандарт RS-232 С использует несимметричные передатчики и приёмники – сигнал передаётся относительно общего провода – схемной земли; интерфейс не обеспечивает гальванической развязки устройств. Логической единице соответствует уровень напряжения на входе приёмника в диапазоне –12...-3В. Для линий управляющих сигналов это состояние называется ON («включено»), для линий последовательных данных называется MARK. Логическому нулю соответствует напряжение в диапазоне +3...+12В. Для линий управляющих сигналов это состояние называется OFF («выключено»), для линий последовательных данных называется SPACE. Зона между уровнями –3...+3В – это зона нечувствительности, обусловливающая гистерезис приёмника. Уровни сигналов на выходах передатчиков –12...-5В и +5...+12В. Интерфейс предполагает наличие защитного заземления для соединяемых устройств, если они оба питаются от сети переменного тока и имеют сетевые фильтры.
Подключение и отключение интерфейсных кабелей устройств с автономным питанием (например, мышь) должно производиться при отключении питания.
Для интерфейса RS-232С специально выпускаются буферные микросхемы приёмников и передатчиков двуполярного сигнала.
Конструктивная совместимость реализуется регламентируемым типом разъёмов: на аппаратуре DTE (в том числе и на СОМ-портах РС) принято устанавливать вилки DB25-Р или более компактный вариант – DB9-Р.
Девятиштырьковые разъёмы не имеют контактов для дополнительных сигналов, реализующих синхронный режим.
На аппаратуре DCE (модемах) устанавливают розетки DB25-S или DB9-S. Разъёмы DCE могут непосредственно подключаться к разъёмам DTE или через «прямые» переходные кабели с розеткой и вилкой. Существуют переходники с 9 на 25-штырьковые разъёмы.
DB9S DB9Р
DB25S DB25Р
TD 3 2 3 2 TD
RD 2 3 2 3 RD
DTR 4 20 4 20 DTR
DSR 6 6 6 6 DSR
RTS 7 4 7 4 RTS
CTS 8 5 8 5 CTS
DCD 1 8 1 8 DCD
RI 9 22 9 22 RI
SG 5 7 5 7 SG
Рисунок 4.5 Кабели подключения модемов.
Информационная совместимость реализуется назначением контактов разъёмов, управлением потоком передачи и скоростью обмена. В таблице 4.1 приведено назначение контактов разъёмов СОМ-портов (и любой другой аппаратуры DTE). Назначение контактов разъёмов DB25S определено стандартом EIA/TIA-232Е, разъём DB9S определён стандартом EIA/TIA-S74. У модемов (DCE) название цепей и назначение контактов, естественно, совпадает, но роли сигналов (вход-выход) меняются на противоположные.
Таблица 4.1. Разъёмы и сигналы интерфейса RS-232С.
Обозначение
цепи Контакт
разъёма Провод шлейфа выносного
разъёма РС Направление
RS-232C Стык2DB25S DB9S 1 2 3 4 I/O
PG
TD
RD
RTS
CTS
DSR
SG
DCD
DTR
RI 101
103
104
105
106
107
102
109
108/2
125 1
2
3
4
5
6
7
8
20
22 -
3
2
7
8
6
5
1
4
9 (10)
3
2
7
8
6
5
1
4
9 (10)
5
3
4
6
2
9
1
7
8 (10)
3
4
8
7
9
1
5
2
6 1
3
5
7
9
11
13
15
14
18 -
O
I
O
I
I
-
I
O
I
1 - шлейф 8-битных мультикарт;
2 - шлейф 16-битных мультикарт;
3 - вариант шлейфа портов на системных платах
4 - широкий шлейф к 25-контактному разъёму.
Подмножество сигналов RS-232С, относящихся к асинхронному режиму с точки зрения СОМ-порта РС приведены в таблице 4.2.

Таблица 4.2. Назначение сигналов интерфейса RS-232С
Сигнал Назначение
PG (Protect Ground) Защитная земля, соединяется с корпусом устройства и экраном кабеля
SG (Signal Ground) Сигнальная (схемная) земля, относительно которой действуют уровни сигналов
TD (Transmit Data) Последовательные данные – выход передатчика
RD (Receive Data) Последовательные данные – вход приёмника
RTS (Request To Send) Выход запроса передачи данных: состояние «включено» уведомляет модем о наличии у терминала данных для передачи. В полудуплексном режиме используется для управления направлением – состояние «включено»
CTS (Clear To Send) Вход разрешения терминалу передавать данные. Состояние «выключено» аппаратно запрещает передачу данных. Сигнал используется для аппаратного управления потоками данных.
DTR (Data Terminal Ready) Выход сигнала готовности терминала к обмену данными. Состояние «включено» поддерживает коммутируемый канал в состоянии соединения.
DSR Вход сигнала готовности от аппаратуры передачи данных (модем в рабочем режиме подключён к каналу и закончил действия по согласованию с аппаратурой на противоположном конце канала)
DCD (Data Carrier Detected) Вход сигнала обнаружения несущей удалённого модема
RI (Ring Indicator) Вход индикатора вызова (звонка). В коммутируемом канале этим сигналом модем сигнализирует о принятии вызова
Для управления потоком данных могут использоваться два варианта протокола – аппаратный и программный.
Аппаратный протокол управления потоком RTS/CTS использует сигнал CTS, который позволяет остановить передачу данных, если приёмник не готов к их приёму. Работу этого протокола иллюстрирует рисунок 4.6.
Формат данных

TD

CTS
неготовность
приёмника
Рисунок 4.6 Аппаратное управление потоком.
Программный протокол управления потоком XON/XOFF предполагает наличие двунаправленного канала передачи данных. Если устройство, принимающее данные, не может их принимать, оно по обратному каналу посылает байт-символ XOFF (13h). Противоположное устройство, приняв этот символ, приостанавливает передачу. Далее, когда принимающее устройство снова становится готовым к приёму данных, оно посылает символ XON (11h), приняв который противоположное устройство возобновляет передачу.
TD

RD

XOFF XON
неготовность
приёмника
программная реакция
передатчика на XON/XOFF
Рисунок 4.7 Программное управление потоком XON/XOFF.
Для исключения потерь данных приёмник должен иметь буфер принимаемых данных.
Описанные стандартные протоколы поддерживаются как устройствами, так и операционными системами. Некоторые плоттеры используют программное управление, посылая не символы XON/XOFF, а слова (ASCII-строки). Такие плоттеры рассчитаны на прямой диалог с прикладной программой.
Аппаратная реализация СОМ-портов
СОМ-порты ХТ/АТ базируются на микросхемах UART (Universal Asynchronus Receiver Transmitter) – универсальный асинхронный приёмопередатчик (УАПП). Эти микросхемы осуществляют преобразование параллельного кода в последовательный при передаче данных и обратное преобразование при приёме данных. Они формируют и обрабатывают управляющие сигналы интерфейса RS-232С (управление и состояние модема).
СОМ-порты ХТ/АТ используют микросхемы, совместимые на уровне регистров с UART i8250-8250/16450/16550А.
В компьютерах класса АТ применяют микросхемы UART следующих модификаций:
16450 – быстродействующая версия 8250. Эта микросхема обеспечивает минимум, требуемый ОС/2 для работы с СОМ-портами;
16550 – развитие 16450. Может использовать канал DMA для обмена данными. Имеет FIFO-буфер, но некорректность его работы не позволяет им воспользоваться;
16550А – имеет работающие 16-байтные FIFO-буферы приёма и передачи и возможность использования DMA. Обеспечивает обмен на скоростях 9600 бит/с и выше без потери данных. Большинство универсальных микросхем контроллеров портов ввода/вывода, входящих в чипсеты современных системных плат обеспечивают совместимость с этой микросхемой.
С программной точки зрения UART 16550А представляет набор регистров, доступ к которым определяется адресом (смещением адреса регистра относительно базового адреса порта) и значением бита DLAB (бита 7 регистра LCR – регистр управления линией – настройки параметров канала). В адресном пространстве микросхема занимает 8 смежных адресов. Список регистров и способы доступа к ним приведены в таблице 4.3.
Таблица 4.3. Регистры UART 16550А
Доступ Регистр Чтение/запись R/W
смещение DLAB имя название, назначение 0h 0 THR Transmit Holding Register – промежуточный регистр данных передатчика WO
0h 0 RBR Receiver Buffer Register –буферный регистр принимаемых данных RO
0h 1 DLL Divisor Latch LSB – регистр младшего байта делителя частоты R/W
1h 1 DLM Divisor Latch MSB – регистр старшего байта делителя частоты R/W
1h 0 IER Interrupt Enable Register – регистр разрешения прерывания R/W
2h X IIR Interrupt Identification Register – регистр идентификации прерываний и признака режима FIFO RO
2h X FCR FIFO Control Register – регистр управления FIFO WO
3h X LCR Line Control Register – регистр управления линией (настройка параметров канала) R/W
4h X MCR Modem Control Register – регистр управления модемом R/W
5h X LSR Line Status Register – регистр состояния линии R/W
6h X MSR Modem Status Register – регистр состояния модема R/W
7h X SCR Scratch Pad Register – рабочий регистр (8 бит) R/W
Некоторые биты допускают только чтение. Запись в регистр может привести к сбою протокола.
Рассмотрим использование регистров UART 16550А.
THR – данные, записанные в этот регистр будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS. Бит 0 передаётся и принимается первым. Если длина посылки менее 8 бит, старшие биты равны нулю (игнорируются).
RBR – заносятся данные, принятые входным сдвигающим регистром для последующего считывания процессором.DLL, DLM – регистры делителя частоты. Делитель определяет по формуле D=115200/V, где V – скорость передачи, бит/с. Входная частота синхронизации 1,8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.
IER – регистр разрешения прерывания. Единичное значение бита разрешает прерывание от соответствующего источника:
биты 7-4 = 0 – не используются
бит 3 – по изменению состояния модема (любой из линий CTS, DSR, RI, DCD) – ModIE
бит 2 – по обрыву/ошибке линии - RхLIE
бит 1 – по завершению передачи - ТхDEбит 0 – по приёму символа (в режиме FIFO – прерывание по тайм-ауту) – RxDIEIIR – регистр идентификации (только для чтения) прерываний и признака режима FIFO. Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по 4-х уровневой приоритетной системе. Порядок приоритетов (по убыванию): состояние линии, приём символа, освобождение регистра передатчика и состояние модема. При возникновении условий прерывания UART указывает на источник с высшим приоритетом до тех пор, пока он не будет сброшен соответствующей операцией. Только после этого будет выставлен запрос с указанием следующего источника:
биты 7:6 – признак режима FIFO:
11 – режим FIFO 16550A;
10 – режим FIFO 165550;
00 – обычный режим.
биты 5:4 – не используются;
бит 3 – прерывания по тайм-ауту (не в режиме FIFO);
биты 2:1 – причина прерывания с наивысшим приоритетом (не в режиме FIFO):
11 – ошибка/обрыв линии; сброс - чтением регистра состояния лини;
10 – принят символ; сброс – чтением данных;
01 – передан символ (регистр THR пуст); сброс – записью данных;
00 – изменение состояния модема; сброс – чтением регистра состояния модема.
бит 0 – признак необслуженного запроса прерывания:
1 – нет запроса 0 – есть запрос
В режиме FIFO причину прерывания идентифицируют биты (3:1):
011 – ошибка/обрыв линии; сброс – чтением регистра состояния линии;
010 - принят символ; сброс – чтением регистра данных приёмника;
110 – индикатор тайм-аута (за 4-х кратный интервал времени передачи символа не передано и не принято ни одного символа, хотя в буфере имеется, по крайней мере, один). Сброс – чтением регистра данных приёмника;
001 – регистр THR пуст; сброс – записью данных;
000 – изменение состояния модема (CTS, DSR, RI или DCD); сброс – чтением регистра MSR;
FCR – регистр управления FIFO (только для записи). Назначение бит:
биты 7:6 – ITL (Interrupt Trigger Level) – уровень заполнения FIFO – буфера, при котором вырабатывается прерывание:
00 – 1 байт;
01 – 4 байта;
10 – 8 байт;
11 – 14 байт;
биты 5:4 – зарезервированы;
бит 3 – разрешение операций DMA;
бит 2 сброс счётчика FIFO – передатчика (запись 1 – сбрасывает) сдвигающий регистр не сбрасывается;
бит 1 – то же, что и бит 2 для приёмника;
бит 0 – разрешение (1) режима FIFO для передатчика и приёмника;
LCR – регистр управления линией (настройка параметров канала):
бит 7 – DLAB (Divisor Latch Access Bit) – управление доступом к делителю частоты
бит 6 – формирование обрыва линии (посылка нулей при бит 6=1)
бит 5 – принудительное формирование бита паритета
0 – контрольный бит генерируется в соответствии с паритетом выводимого символа
1 – постоянное значение контрольного бита при чётности – нулевое, нечётности – единичное
бит 4 – выбор типа контроля
0 – нечётность, 1 – чётность
бит 3 – разрешение контрольного бита
1 – разрешение, 0 – запрещёнбит 2 – количество стоп-бит
0 – 1 стоп-бит, 1 – 2 стоп-бита
биты 1:0 – количество бит данных
00 – 5 бит, 01 – 6 бит,
10 – 7 бит, 11 – 8 бит
MCR – регистр управления модемом:
биты 7:5 – зарезервированы;
бит 4 – разрешение режима диагностики:
0 – нормальный режим;
1 – режим диагностики;
бит 3 – разрешение прерываний (с помощью внешнего входа OUT2):
0 – запрещены, 1 – разрешены
В диагностическом режиме поступает на вход MSR.7;
бит 2 – управление выходным сигналом 1 (не используется)
В диагностическом режиме поступает на вход MSR.6;
бит 1 – управление выходом RTS:
1 – активен (-V), 0 – пассивен (+V)
В диагностическом режиме поступает на вход MSR.5
LSR – регистр состояния приёмопередатчика:
бит 7 – ошибка принятых данных в режиме FIFO (буфер содержит хоть один символ принятый с ошибкой формата, паритета или обрывом). В не FIFO режиме всегда 0;
бит 6 – регистр передатчика пуст (нет данных для передачи ни в сдвиговом регистре, ни в буферных, THR или FIFO);
бит 5 – регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO – буфере передачи. Вызывает прерывание;
бит 4 – индикатор обрыва линии (вход приёмника находится в состоянии логического нуля не менее, чем время посылки символа);
бит 3 – ошибка кадра (неверный стоп-бит);
бит 2 – ошибка контрольного бита (паритета или фиксирования);
бит 1 – переполнение (потеря символа);
бит 0 – принятые данные готовы. Сброс – чтением приёмника.
Индикаторы ошибок – биты 4:1 – сбрасываются после чтения регистра LSR.
MSR – регистр состояния модема:
биты 7,6,5,4 – состояние линий DCD, RI, DSR, CTS соответственно;
биты 3,2,1,0 – изменение состояний линий DCD, RI, DSR, CTS соответственно. Признаки изменения сбрасываются по чтению регистра;
SCR – рабочий регистр (8 бит) предназначен для временного хранения данных. На работу UART влияния не оказывает.
В диагностическом режиме (при бите 4 = 1 регистра MCR) внутри UART организуется внутренняя «заглушка»:
выход передатчика переводится в состояние логической единицы;
вход приёмника отключается;
выход сдвигающего регистра передатчика логически сдвигается со входом приёмника;
входы DSR, CTS, RI и DCD отключаются от входных линий, на них внутренне подаются сигналы DTRC, RTSR, OUT1C, IE;
выходы управления модемом переводятся в пассивное состояние (логический ноль).
При этом передаваемые данные в последовательном виде немедленно принимаются, что позволяет проверить внутренний канал данных порта (включая сдвигающие регистры) и отработку прерываний, а также определить скорость работы UART.
Средства BIOS для работы с СОМ-портамиВ процессе начального тестирования POST BIOS проверяет наличие последовательных портов (регистров UART) по стандартным адресам (3F8h, 2F8h, 3E8h, 2E8h соответственно для СОМ1...СОМ4) и помещает базовые адреса обнаруженных портов в ячейки BIOS DATA AREA 0:0400, 0402, 0404, 0406. Эти ячейки хранят адреса портов с логическими именами СОМ1 – СОМ4. В ячейки 0:047С, 047D, 047Е, 047F заносятся константы, задающие выдержку тайм-аута для этих портов.
Обнаруженные порты инициируются обычно на скорость обмена 2400 бит/с, 7 бит данных с контролем на чётность, 1 стоп-бит. Управляющие сигналы интерфейса DTR и RTS переводятся в исходное состояние («выключено» - положительное напряжение).
Порты поддерживаются сервисом BIOS INT 14h, который обеспечивает следующие функции:
00h – инициализация (установка скорости обмена и формата посылок, заданных регистром AL, запрет источника прерываний). На сигналы DTR и RTS влияния не оказывает (после аппаратного сброса они пассивны);
01h – вывод символа из регистра AL (без аппаратных прерываний). Активируются сигналы DTR и RTS, и, дождавшись освобождения регистра THR, в него помещают вводимый символ. Если за заданное время регистр не освобождается, фиксируется ошибка тайм-аута и функция завершения;
02h – ввод символа (без аппаратных прерываний). Активируется только сигнал DTR (RTS переходит в пассивное состояние) и ожидается готовность принятых данных, принятый символ помещается в регистр AL. Если за заданное время данные не получены, функция завершается ошибкой тайм-аута;
03h – опрос состояния модема и линии (чтение регистров MSR и LSR). Эту гарантированно быструю функцию обычно вызывают перед функциями ввода/вывода во избежание риска ожидания тайм-аута.
При вызове INT14h номер функции задаётся в регистре АН, номер порта (0-3) – в регистре DX (0 – СОМ1, 1 – СОМ2,...). При возврате из функций 0,1 и 3 регистр АН содержит байт состояния линии (регистр LSR), AL – байт состояния модема (MSR). При возврате из функции 2 нулевое значение бита 7 регистра АН указывает на наличие принятого символа в регистре AL; ненулевое значение бита 7 указывает на ошибку приёма, которую можно уточнить функцией 3.
Байт состояния линии (регистр АН) имеет формат, который повторяет содержимое регистра LSR.
Байт состояния модема (регистр AL при возврате из функций 0, 1, 3) имеет формат, который повторяет содержимое регистра MSR.
При инициализации порта биты регистра AL имеют следующее назначение:
биты 7:5 – скорость обмена:
000 = 110 бит/с100 = 1200 бит/с001 = 150 бит/с101 = 2400 бит/с010 = 300 бит/с110 = 4800 бит/с011 = 600 бит/с111 = 9600 бит/сбиты 4:3 – контроль паритета:
01 – число единиц нечётное
11 – число единиц чётное
00 и 10 – без контроля
бит 2 – количество стоп-бит:
0 – 1 бит, 1 – 2 бита
биты 1:0 – длина посылки:
00 – 5 бит
01 – 6 бит
10 – 7 бит
11 – 8 бит
Режим работы порта может устанавливаться командой DOS MODE COMх с указанием параметров.
Стандартные функции библиотеки Си
Библиотеки трансляторов Borland С++ и Turbo C содержат две функции управления портами асинхронного последовательного адаптера – bioscom и _bios_serialcom. Эти функции управляют СОМ-портами компьютера через прерывания BIOS INT 0х14. Вследствие этого функции не могут работать со скоростями больше чем 9600 бит/с. Если необходимо использовать более высокие скорости необходимо непосредственное программирование портов асинхронного последовательного адаптера.
Таблица 4.4. Варианты индивидуальных заданий к лабораторной работе «Исследование порта последовательной передачи данных»
номер варианта Контрольный вопрос Регистр UART 16550А Функция BIOS Скорость обмена, бит/сКонтроль паритета Количество стоп-бит Длина посылки, бит
1
2
3
4
5 10
9
8
7
6 THR,RBR
DLL,DLM
IER
IIR
FCR 1,2
1,3
1,4
2,4
3,4 110
150
300
600
1200 Чет
Неч
Без
Неч
Чет 1,5
2
1
2
2 8
7
6
5
6
6
7
8
9
10 5
4
3
2
1 LCR
MCR
LSR
MSR
THR,RBR 2,4
1,4
1,3
1,2
3,4 2400
4800
9600
300
110 Без
Чет
Неч
Без
Чет 1
1
1
2
1,5 7
8
7
6
5
11
12
13
14
15 2
3
4
5
6 DLL,DLM
IER
IIR
FCR
LCR 1,3
1,2
3,4
2,4
1,4 600
150
4800
1200
9600 Неч
Без
Неч
Чет
Неч 1
2
2
1
2 6
7
8
8
5
16
17
18
19
20 7
8
9
10
1 MCR
LSR
MSR
LSR
MCR 3,4
1,4
1,2
1,3
2,4 2400
110
9600
4800
150 Без
Чет
Без
Неч
Чет 1
1,5
2
1
2 6
7
5
6
7
21
22
23
24
25 10
9
8
7
6 LCR
FCR
IIR
IER
DLL,DLM 1,4
1,3
1,2
2,4
3,4 300
2400
600
1200
9600 Неч
Без
Неч
Чет
Без 1
1
2
1
1 8
7
6
5
8

Порядок выполнения работы.
При домашней подготовке изучить формат передачи, назначение регистров UART, основные положения интерфейса RS-232С.
2. Составить программу и выполнить индивидуальное задание. В соответствии с индивидуальным заданием необходимо:
ответить письменно на заданный контрольный вопрос;
описать назначение заданного регистра UART 16550А, привести его структуру и пояснить назначение каждого бита;
составить программу реализующую заданный номер функции BIOS, используя прерывание INT14h. Значения функции: 1 - 00h, 2 – 01h, 3 – 02h, 4 – 03h;
при инициализации порта установить заданные параметры работы: скорость обмена бит/с, контроль паритета, количество стоп-бит, длина посылки, бит. Привести значение регистра АН и AL при возврате из прерывания INT 14h при реализации заданных функций BIOS.
3. Показать работу программы, реализующей заданные функции при работе с СОМ-портами.
Содержание отчёта.
Структурная схема компьютерной системы с СОМ-портами.
Привести системные параметры СОМ-порта, который исследуется в работе.
Листинг программы, реализующей заданные функции работы с СОМ-портом и результаты её работы.
Результаты выполнения индивидуального задания.
Контрольные вопросы.
Объясните формат асинхронной передачи, составьте структурную схему приёмника. Как и какие выявляются ошибки передачи?
Как реализуется синхронный режим обмена в RS-232С? Приведите структурную схему приёмника.
Перечислите основные параметры формата асинхронной передачи, приведите полную и нуль-модемную схему соединения по RS-232С.
Перечислите требования электрической и конструктивной совместимости, реализуемой в RS-232С.
Объясните условия и особенности реализации информационной совместимости интерфейса RS-232С.
Объясните аппаратный и программный протоколы управления потоком данных.
Объясните назначение и основные функции микросхемы UART. Приведите структурную схему UART.
Объясните назначение и типы регистров UART 16550А, приведите их адреса в пространстве ввода-вывода.
Объясните средства BIOS для работы с СОМ-портами, опишите основные функции.
Приведите стандартные функции библиотеки С++ для работы с СОМ-портами. Приведите системные средства, используемые СОМ-портами.
Литература.
Борзенко А.Е. IBM РС: устройство, ремонт, модернизация – 2-е изд. перераб. и доп. – М.: ТОО фирма «Компьютер-пресс», 1997 – 344с.; с. 249-256.
Гук М. Аппаратные средства IBM РС, второе издание – СПб.: Питер, 1997 – 288с., с. 121-126
Фролов А.В., Фролов Г.В. Модемы и факс-модемы. Программирование для MS-DOS и Windows – М.: «Диалог - МИФИ», 1995 – 284 c., с., 79-99, 113 - 115
Гук М. Аппаратные средства РС. Энциклопедия – СПб.: Питер Ком., 1998 – 816 с., с. 666 - 682, 688 - 692.
Лабораторная работа № 2
Исследование параллельного интерфейса (LPT-порта)
Цель работы: Изучить назначение, условия совместимости и исследовать режимы работы параллельного интерфейса в составе IBM PC совместимых компьютеров.
Назначение: Порт параллельного интнерфейса первоначально был введен в РС для работы (подключения) с принтером, отсюда и пошло название LPT порт ( Line Printer – построчный принтер). В настоящее время, LPT - порт используется и для других целей, например, подключения лазерных принтеров. Кроме того, функции адаптера порта расширены, и он может реализовывать и двусторонний обмен данными.
Стандартный (традиционный ) LPT-порт.
Традиционный порт SPP (Standart Parallel Port) является однонаправленным портом, на базе которого программно реализуется протокол обмена Centronics (назначение сигналов и временную диаграмму обмена, см. лабораторную работу « Исследование печатающих устройств »).
Стандартный порт имеет три 8-битовых регистра расположенных по соедним адресам в пространстве ввода /вывода, начиная с базового адреса порта (BASE) .
Регистр данных (Date Registr – DR), адрес = BASE. Данные записанные в этот порт, выводятся на выходные линии интерфейса. Если в порт записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы типа «открытый коллектор » подать какой – либо код, то этот код может быть считан из этого же регистра данных.
Регистр состояния (Status Rgistr- SR) , адрес = BASE+1.
Представляет собой порт ввода сигналов состояния принтера. Назначение бит регистра состояния
( в скобках указаны номера контактов разъема DB– 25 S ):
SR.7 – Busy – инверсное отображение состояния линии – Busy (11) : при низком уровне на линии устанавливается единичое значение бита- разрешение на вывод очередного байта;
SR.6 – АСК ( Acknowllolge) – отображение состояния линии Ack # 10.
SR.5 – РЕ (Paper End)- отображение состояния линии Paper End (12). Единичное значение соответствует высокому уровню линии- сигналу о конце бумаги в принтере;
SR.4- Select – отображение состояния линии Select (13) . Единичное значение соответствует высокому уровню линии- сигналу о включении принтера ;
SR.3- Eeror - отображение состояния линии Error (15). Нулевое значение соответствует низкому уровню линии- сигналу о любой ошибке принтера;
SR.2- PIRQ- флаг прерывания по сигналу Аск # ( только для порта PS/ 2) . Бит обнуляется, если сигнал Аск # вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния;
SR[1:0] – зарезервированы.
Control Registre (CR) – регистр управления, адрес = BASE+2. Как и регистр данных, этот порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип «открытый коллектор». Это позволяет более корректно использовать линии регистра как выходные
при программировании их в высокий уровень. Биты 0,1,3 инвертируются –единичному значению в регистре соответствует низкий уровень сигнала, и наоборот .
Назначение бит регистра управления:
CR [7:6] –зарезервированы;
CR5 - Direction –бит управления направление передачи (только портов PS/2).Запись «1» переводит порт данных в режим ввода. При чтениии состоянию бита не определено;
CR 4- ACKINTEN (Ack Interrupt Enable) – единичное значение разрешает прерывание по спаду сигнала на линии Ack # -сигнал запроса следующего байта ;CR 3 – Select In – единичное значение бита соответствует низкому уровню на выходе Select In # (17) – сигналу, разрешающему работу принтера по интерфейсу Centronics;
CR 2- Inits- нулевое значение бита соответствует низкому уровню на выходе Init # (16) – сигнал аппаратного сброса принтера.
CR 1- Auto LF – единичное значение бита соответствует низкому уровню на выходе Auto LF #( 14) – сигналу на автоматический перевод строки ( LF – Line Feed ) по приему байта возврата каретки ( СR – Carriage Return );
CR 0 – Stroble – единичное значение бита соответствует низкому уровню на выходе Stroble # (1) – сигналу стробирования выходных данных.
Запрос аппаратного прерывания (обычно IRQ5или IRQ7) вырабатывается по отрицательному перепаду Ack # (10) при установке CR.4 = 1. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 в. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. BIOS это прерывание не использует и его не обслуживает. В таблице 3.1 приведены разъемы стандартного LPT- порта, сигналы на них и направления передачи.
Таблица 3.1. Разъемы стандартного LPT-порта.
Контакт
DB- 25 S Провод
шлейфа Назначение
I/0 * Red. Bit ** Сигнал
1 1 0/I CR:0\ Strobe #
2 3 0(I) DR:0Data 0
3 5 0(I) DR:1 Data 1
4 7 0(I) DR:2 Data 2
5 9 0(I) DR:3 Data 3
6 11 0(I) DR:4 Data 4
7 13 0(I) DR:5 Data 5
8 15 0(I) DR:6 Data 6
9 17 0(I) DR:7 Data 7
10 19 I*** SR:6 Ack #
11 21 I SR:7\ Busy
12 23 I SR:5 Paper End
13 25 I SR:4 Select
14 2 0/I CR:1\ Auto LF #
15 4 I SR:3 Error #
16 6 0/I CR:2 Init #
17 8 0/I CR : 3\ Select In #
18-25 10,12,14,16 18,20,22,24,26 ----- ------
*-I/0 задает направление передачи (вход/выход) сигнала порта. I/0 обозначает выходные линии, состояние которых считывается при чтении из соответствующих портов вывода; 0 (І) – выходные линии, состояние которых может быть считано только при некоторых условиях ;** Символом \ отмечены инвертированные сигналы («1» соответствует низкому уровню линии);
*** Вход Ack # соединен регистером 10 к ОМ с питанием +5 В.
Недостатки стандартного порта:
для вывода одного байта требуется по меньшей мере 4-5 операций ввода/ вывода с регистрами порта;
невысокая скорость обмена при значительной загрузке процессора (скорость до 100-150 К байт/ с при полной загрузке процессора);
функциональная сложность использования в качестве порта ввода данных;
Стандартный порт сильно асимметричен при наличии 12 линий (и бит), работающих на вывод, на ввод работает только 5 линий состояния, что затрудняет реализацию симметричной двусторонней связи. Поэтому на всех стандартных портах работоспособен режим полубайтного обмена (ввода).

Функции BIOS для LPT- порта.
BIOS обеспечивает поддержку LPT- порта, необходимую для организации вывода по интерфейсу Centronics.
Программное прерывание BIOS INT 17h обеспечивает следующие функции поддержки LPT- порта:
00h-вывод символа из регистра AL по протоколу Centronics (без аппаратных прерываний).
Данные помещаются в выходной регистр (DR), и, дождавшись готовности принтера (снятия сигнала BUSY), формируется строб.
01h- инициализация интерфейса и принтера ( установка исходных уровней управляющих сигналов, формирование импульса Init #, запрет аппаратных прерываний и переключение на вывод двунаправленного интерфейса );
02h-опрос состояния принтера ( чтение регистра SR порта).
При вызове INT 17 h номер функции задается в регистре АН, номер порта в регистре DX (0-LPT1,1-LPT2…). При возврате после любой функции регистр АН содержит код состояния – биты регистра состояния SR [7:3] (биты 6 и 3 инвертированы) и флаг тайм-аута в бите 0.Флаг тайм –аута устанавливается при неудачной попытке вывода символа , если сигнал BUSY не снимается в течении времени, определяемого для данного порта содержимым ячеек 0: 478 , 479, 047 А,047В ВIOS DATA AREA. В этом случае согласно протоколу Centronics, строб данных не вырабатывается.
Расширения параллельного порта, стандарт IEEE 1284 –1994.
Недостатки стандартного порта частично устраняли новые типы портов, появившихся в компьютерах семейства PS/2- это в частности двунаправленный порт , порт с прямым доступом к памяти и другие .
Все расширения были обобщены и оформлены в виде стандарта на параллельный интерфейс IEEE 1284, принятый в 1994 году. Стандарт определяет термины SPP, EPP и ЕCP, определяет 5 режимов обмена данными, метод согласования режима, физический и электрический интерфейсы.
Согласно IЕEE1284, возможны следующие режимы обмена данными через параллельный порт:
-Contratibility Mode- однонаправленный ( вывод) по протоколу Centronics. Этот режим соответствует стандартному ( традиционному ) порту SPP.
-Nibble Mode – ввод байта в два цикла ( по 4 бита ) используя для приема линии состояния. Этот режим может использоваться на любых адаптерах;
- Byte Mode - ввод байта целиком , используя для приема линии данных . Этот режим используется на портах допускающих чтение выходных данных ( Bi – Directional или PS/2 Type 1)
- EPP (Enhanced Parallel Port Mode) – двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей;
- ECP ( Extended Capability Port) Mode – двунаправленный обмен данными с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding) и использования FIFO –буфера и DMA. Управляющие сигналы генерируются аппаратно. Эффективен для принтеров и сканеров.
В современных АТ-машинах с LPT-портом на системной плате режим порта –SPP, EPP, ECP или их комбинации задаются в BIOS Setup. Режим Compatibilitu Mode полностью соответствует стандартному порту SPP .
Требования и условия совместимости параллельного интерфейса IEEE 1284.
Стандарт IEEE 1284 определяет условия электрической конструктивной и инфор-мационной совместимости.
Электрическая совместимость определяет физические характеристики приемников и передатчиков сигналов.
К передатчикам предъявляются следующие требования:
уровни сигналов без нагрузки не должны выходить за пределы – 0.5….5.5 Вуровни сигналов при токе нагрузки 14 мА должны быть не ниже +2.4 В ,для высокого уровня (VоН) и не выше +0.4 В для низкого уровня ( VoL) на постоянном токе:
выходное сопротивления Ro, измеренное на разъеме , должно составлять 50 (+/-) 5 Ом на уровне VоН- VoL;
скорость нарастания ( спада) импульса 0.05 –0.4 В/c;
Требования к приемникам :допустимымы пиковые значения сигналов – 2.0 .. +7,0 В(выдерживаемые без разрушений и ошибок в работе );
- пороги срабатывания должны быть не выше 2.0 (V1H) и не ниже 0.8В (V1L) для высокого и низкого уровня ;
- приемник должен иметь гистерезис 0.2.-1.2 В (для триггера Шмидта ) ;
- входной ток микросхемы ( втекающий и вытекающий ) не должен превышать 20 мкА , входные линии соединяются с шиной питания +5 В резистором 1.2 кОм;
- входная емкость не должна превышать 50 пФ.
Конструктивная совместимость обеспечивается оговоренными типами разъемов . Стандарт определяет три типа разъемов . Тип А ( DB 25 ) и В (Centronics- 36) используются в традиционных кабелях подключения принтера , тип С – новый малогабаритный 36-контактный разъем.
Стандарт регламентирует свойства кабелей :
все сигнальные линии должны быть перевитыми с отдельными обратными (общими) проводами;
каждая пара должна иметь сопротивление 62 () 6 Ом в частотном диапазоне 4-16 Мгц;
уровень перекрестных помех между парами 10 % ;кабель должен иметь экран ( фольгу) , покрывающий не менее 85 % внешней поверхности, который на концах должен быть соединен с контактом разъема .
Кабели удовлетворяющие этим требованиям маркируются надписью «IEEE Std 1284 –1994 Compliant».Они могут иметь длину до 10 м. Обозначения типов кабелей приведены в табл 3.2
Таблица 3.2. Типы кабелей IEEE 1284-1994.
Тип Расшифровка Разъем 1 Разъем2АМАМ TypeА Malle –TypeА Male A (вилка) A (вилка)
AMAF TypeА Malle –TypeА Female A (вилка) A (розетка)
AB TypeA Malle –TypeB Plug-стан-дартный кабель к принтеру A (вилка) В
AC Type А Malle –TypeС Male-новый кабель к принтеру A (вилка) С
BC Type В Plug –Type C Plug В C
CC Type C Plug –Type C Plug С C
Информационная совместимость определяет режимы передачи данных, назначение контактов резъемов , типы сигналов и протоколы ( временные диаграммы) обмена.
Стандарт определяет пять режимов передачи данных из которых первый – Compatibility Mode полностью соответствует традиционному стандартному программно- управляемому выводу по протоколу Centronics. Остальные используются для расширения функциональных возможностей и повышения производительности интерфейса При описании режимов обмена фигурируют следующие понятия:
ХОСТ – компьютер , обладающий параллельным портом ;
ПУ- переферийное устройство , подключаемое к этому порту ( может быть и другой компьютер );
ПРЯМОЙ КАНАЛ – канал вывода от хоста к ПУ
Обратный канал – канал ввода данных в хост из ПУ.
Полубайтный режим ввода NIBBLE MODE.
Режим представляет общее решение задачи двунаправленного обмена, поскольку может работать на всех стандартных портах –SPP. Для передачи информации тетрадами (полубайтами) используется 5 линий состояния. Направление передачи ПУ- PC . Назначение сигналов приведено в таблице 3.3.
Таблица 3.3 Сигналы LPT –порта в полубайтном режиме обмена.
Контакт Сигнал SPP I/0 Использование сигнала при приеме данных в Nible Mode
14 AUTOFEED# 0 HOSTBusy- сигнал квитирования.Низкий уровень означает готовность к приему тетрады , высокий подтверждает прием тетрады.
17 SELECTIN# 0 Высокий уровень указывает на обмен
в режиме IEEE 1284 ( в режиме SPP уровень низкий)
10 АСК# I Ptr Clk .Низкий уровень означает действительность тетрады, переход в высокий – ответ на сигнал Host Busy
11 BUSY I Прием бита данных 3, затем бита 7
12 РЕ I Прием бита данных 2, затем бита 6
13 SELECT I Прием бита данных 1, затем ,бита 5
15 ERROR I Прием бита данных 0, затем бита 4
Ptr- в обозначениях сигналов означает передающее периферийное устройство .
Временная диаграмма приема байта в полубайтном режиме состоит из следующих фаз (рис.3.1) :Хост сигнализирует о готовности приема данных установкой низкого уровня на линии HOSTBusy;
ПУ в ответ помещает тетраду на входные линии состояния;
ПУ сигнализирует о действительности данных установкой низкого уровня на линии Prt Clk;
Хост устанавливает высокий уровень на линии HOSTBusy указывая на занятость приемом данных.
ПУ отвечает установкой высокого ровня на линии Ptr Clk;
Шаги 1-5 повторяются для второй тетрады.

1 2 3 4 5 6
Host Busy
Ptr Clk сигналы состояния биты[4:7]
биты [0:3]

Рисунок 3.1. Прием данных в Nibble Mode
Двунаправленный байтный режим Byte Mode.
Данный режим обеспечивает прием данных с использованием двунаправленног порта, у которого выходной буфер данных может отключаться установкой бита CR.5=1.Данный режим как и в стандартном полубайтном является программно-управляемым- все сигналы квитиро-ванияанализируются и устанавливаются программным драйвером.
Назначение сигналов порта приведено в таблице 3.4, временные диаграммы обмена на рис.3.2
Таблица 3.4. Сигналы LPT порта в байтном режиме обмена
Контакт Сигнал SPP Имя в Bute Mode I/0 Описание
1 STROBE # Host Clk0 Импульс (низкого уровня) подтвер-ждает прием байта каждого цикла
14 AUTOFEED# Host Busy 0 Сигнал квитирования.Низкий уровень
означает готовность хоста принят байт ,высокий уровень устанавливается по приему байта.
17 SELECT# 1284 Active 0 Высокий уровень указывает на обмен в режиме IEEE 1284 ( в режиме SPP уровень низкий)
16 INIT# INIT# 0 Не используется , установлен высокий
уровень
10 ACK# Prt ClkI Устанавливается в низкий уровень для индикации действительности данных на линиях DATA [7;0]. В низкий уровень устанавливается в ответ на сигнал Host Busy
11 Busy PrtBusyI Состояние занятости прямого канала
12 PE AckDataReg* I Устанавливается ПУ для указания на наличие обратного канала передачи*
13 SELECT Xflag* I Флаг расширяемости*
15 ERROR# DataAvail*# I Устанавливается ПУ для указания на наличие обратного канала передачи*
2-9 DATA[7:0] DATA[7:0] I/0 Двунаправленный (прямой и обратный)
канал данных
сигналы действуют в последовательности согласования

12 3 4 5
данные
Host BusyPrtClkData[0:7]HostClk
Рисунок 3.2. Прием данных в Byte Mode
Побайтный режим позволяет поднять скорость обратного канала до скорости прямого канала. Этот режим применяется в основном на малораспостраненных машинах PS/2.
Режим EPP
Протокол EPP (Ehanced Paraller Port-улучшенный параллельный порт) обеспечивает четыре типа циклов обмена.
цикл записи данных;
цикл чтения данных;
цикл записи адреса;
цикл чтения адреса;
Адресные циклы могут быть использованы для передачи адресной, канальной и управляющей информации.
Циклы обмена данными явно отличаются от адресных циклов применяемыми стробирующими сигналами. Назначение сигналов порта ЕРР и их связь с сигналами SPP приведены в таблице 3.5.
Таблица 3.5. Сигналы LPT-порта в режиме вода-вывода EPP.

Контакт Сигнал SPP Имя вEPP I/0 Описание
1 STROBE # WRITE# 0 Низкий уровень-признак цикла записи, высокий –чтения
14 AUTOFEED DATASTB# 0 Строб данных. Низкий уровень
устанавливаетсяв циклах передачи
данных
17 SELECTING ADDRSTB# 0 Сброс адреса . Низкий уровень устанавливается в адресных циклах
16 INIT# RESET# 0 Строб ПУ (низким уровенем)
10 ACK# INTR# I Прерывание от ПУ
11 BUSY WAIT# I Сигнал квитирования ,низкий уровень разрешает начало цикла (установку строба в низкий уровень), переход в высокий –разрешает завершение цикла
( снятие строба)
2-9 D [7:0] AD[7:0] I/0 Двунаправленная шина адрес/данные
12 PE AckDataReg* I Используется по усмотрению разработчика периферии
13 SELECT XfLag* I -------------------------
15 ERROR DataAvail# I -------------------------
*сигналы действуют в последовательности согласования.
EPP- порт имеет расширенный набор регистров. К трем регистрам стандартного порта (DR, СR, SR) добавлены следующие регистры:
регистр адреса EPP- Adress Port, доступен по записи и чтению , адрес = BASA+3.Чтение или запись в него генерирует связанный цикл чтения или записи адреса ЕРР,
регистр данных ЕРР – ЕРР Data Port, R/W, адрес=BASA+4,чтение (запись) генерирует связанный цикл чтения или записи данных ЕРР;
Not Defined, адрес= BASE +5…+7. В некоторых контролерах могут использоваться для 16-32 битных операций ввода/вывода.
В отличии от программно-управляемых режимов , описанных выше ,внешние сиганлы ЕРР-порта ( как информационные, так и сигналы квитирования) для каждого обмена формируется аппаратно по одной операции записи или чтения в регистр порта. На рис 3 приведена диаграмма цикла записи данных, иллюстрирующая внешний цикл обмена , вложенный в цикл записи системной шины процессора ( иногда эти циклы называют связанными ).Адресный цикл записи отличается от цикла данных только используемым стробом внешнего интерфейса.
действительные данные
ль
123456710 W#WRITE# DATAstrobe#WAIT#
Data [0:7]
Рисунок 3.3. Цикл записи данных ЕРР.
Цикл записи данных состоит из следующих фаз:
1-Программа выполняет цикл записи (IOW# ) в порт 4 (регистр ЕРР Data Port)
2-адаптер устанавливает сигнал Write # (низкий уровень),
3-при низком сигнале Wait # устанавливается фронт данных;
4- порт ждет подтверждения от ПУ ( перевода Wait в высокий уровень);
5-снимается строб данных – внешний ЕРР –цикл завершается
6-завершается процессорный цикл ввода/вывода.
7-ПУ устанавливает низкий уровень Waite # , указывая на возможность начала следующего цикла.
В адресном цикле чтения используется строб AddStrobe #, а сигнал WRITE # остается все время высоким.
Главная отличительная черта EPP- выполнение внешней передачи во время одного процессорного цикла ввода/вывода, что позволяет достич скоростей обмена (0.5- 2 Мбайт/c), ПУ подключенное к ЕРР –порту может работать на уровне производительности устройства, подключенного через слот ISA.
Важной чертой ЕРР является то, что обращение процессора к ПУ осуществляется в реальном времени – здесь нет никакой буферизации. Циклы чтения и записи могут чередоваться в произвольном порядке или идти блоками. Такой тип обмена наиболее пригоден для регистро-ориентированной периферии, или периферии, работающей в реальном времени: сетевых адаптеров, устройства сбора информации и управления, дисковых устройств и т.п.
Режим ЕСР
Протокол ЕСР (порт с расширенными возможностями) был предложен фирмами НР и MS как прогрессивный режим связи с периферией типа принтеров и сканеров. Как и ЕРР, данный протокол обеспечивает высокопроизводительный двунаправленный обмен данными Хоста с ПУ.
Протокол ЕСР в обоих направлениях обеспечивает два типа циклов:
цикл записи и чтения данных;
командные циклы записи и чтения.
Командные циклы подразделяются на два типа: передача канальных адресов и счетчика RLC (Run-Length Count).
В отличии от ЕРР вместе с протоколом ECP сразу появился и стандарт на программную (регистровую)модель реализации его адаптера . Этот документ определяет свойства реализации протокола, не заданные в ІЕЕЕ 1284:
компрессия данных хост-адаптером по методу RLE;
буферизация FIFO для прямого и обратного канала ;применения DMA и программного ввода/вывода.
Компрессия в реальном времени по методу RLE позволяет достичь коэффициента сжатия до 64:1. Компрессию можно использовать, если ее поддерживает и хост и ПУ.
Канальная адресация ЕСР применяется для адресации множества логических устройств, входящих в одно физическое . Например , в комбинированном устройстве факс/принтер/модем, подключаемом только к одному LPT –порту возмлжен одновременный прием факса и печати на принтере. Как и в других режимах, протокол ЕСР переопределяет сигнал SPP (табл 3.6).
Таблица 3.6. Сигналы LPT-порта в режиме ввода/вывода ECP.
Контакт Сигнал SPP Имя вEСP I/0 Описание
1 STROBE# HostClk0 Используется впаре с Periph
Ack для передачи в прямом
направлении (вывод)
14 AUTOFEED # HostAck0 Индицирует тип команда/ (дан-ные при передаче в прямом направлении . Используется
в паре с PeripClk для передачи в обратном направлении
17 SELECTIN # 1284 Active 0 Высокий уровень указывает на обмен в режиме IEEE 1284
16 INIT# Reverse Reguest# 0 Низкий уровень переключает канал на передачу в обратном направлении
10 Ack# PeriphClkI Используется в паре с HostAckдля передачи в обратном напра-влении
11 BUSY PeriphClkI Используется в паре с HostClk для передачи в обратном направлении .Инициирует тип команда/данные при передачи
в обратном направлении
12 PE AckReverSe# I Переводится в низкий уровень
как подтверждение сигналу ReverseReguest#
13 SELECT Xflag* I Флаг расширяемости
15 ERROR# PeriphReguest# I Устанавливается ПУ для указания на доступность (наличие) обратного канала передачи
2-9 DATA[0:7] DATA[0:7} I/0 Двунаправленный канал данных
Адаптер ЕСР тоже генерирует внешние протокольные сигналы квитирования аппаратно. но его работа существенно отличается от режима ЕРР . За циклом данных следует командный цикл . В командном цикле байт может содержать командный адрес или счетчик RLE. Отличительным признаком является бит 8 (старший): если он нулевой, то биты 1-7 содержат счетчик RLE (0-127), если он единичный –то канальный адрес . Временные диаграммы не содержат циклов системной шины процессора. В режиме ЕСР обмен с ПУ разбивается на два относительно независимых процесса, которые связаны через FIFO –буфер.
Обмен программного драйвера с FIFO-буфером может осуществляться как с использованием DMA, так и программным вводом-выводом. Обмен ПУ с буфером аппаратно выполняет адаптер ЕСР.
Поскольку передачи в ЕСР разделены FIFO –буферами, которые могут присутствовать на обеих сторонах интерфейса, данные считаются переданными, когда линия HostClk переходит в высокий уровень . В этот момент модифицируют счетчики переданных и принятых байт.
В отличии от ЕРР, в ЕСР смена направлений должна быть согласована: хост запрашивает реверс установкой Revers Reguest#, после чего он должен дождаться его подтверждения сигналом AckRevers#. Только после этого возможна передача данных в другом направлении. Поскольку предыдущий цикл мог выполняться пот прямому доступу, драйвер должен дождаться завершения прямого доступа или прервать его, выгрузить обратно буфер FIFO, определяя точное значение счетчика переданных байт, и только после этого запрашивать реверс.
Режимы и регистры ЕСР-порта
Режимы работы ЕСР задаются полем Mode регистра ECR (Extended Control Register –главный регистр управления ) ( биты [7:5]) (табл.3.7).

Таблица 3.7. Режимы ЕСР-порта
Режим Название Описание
000 SPP Mode Стандартный (традиционный ) режим
001 Bi-directional Mode Двунаправленный порт (типа 1 для PS/2)
010 Fast CentronicsОднонаправленный с FIFO и DMA
011 ECP Parallel Post mode ECP
100 EPP Parallel Post mode Перевод в режим ЕРР
101 (re serwed) -------------------------------------
100 Test Mode Тестирование работы FIFO и прерываний
111 Configuration mode Доступ к конфигурационным регистрам
Регистровая модель адаптера ЕСР (табл.3.8) использует свойства архитектуры стандартной шины и адаптеров ISA, согласно которой для дешифрации адреса портов ввода вывода использовались только 10 младших линий шины адреса. Старшие линии игнорируются, поэтому обращение по адресам, например, Port, Port+400h, Port+800h … , будут восприниматься как обращение к адресу Port, лежащему в диапазоне 0-3FFh. Современные РС и адаптеры декодируют большие количества адресных бит, поэтому обращения по адресам например 0X378h и 0X778h, будут адресованы двум различным регистрам. Помещение дополнительных регистров ECP «за спину» регистров стандартного порта не приведет к стеснению доступного адресного пространства ввод/вывода.
Таблица 3.8. Регистры ЕСР.
Смещение Имя R/W Режимы ЕСР Назначение
000 DR R/W 000-001 Data Registr000 ECPAFIO R/W 011 ECP Adres FIFO
001 SR R/W все Status Register
002 CR R/W все Control Register
400 SDFIFO R/W 010 Parallel PortData FIFO
400 ECPDFIFO R/W 011 ECPD Data FIFO
400 TFIFO R/W 110 TEST FIFO
400 CNFGA R 111 Configuration Register А
401 CNFGB R/W 111 Configuration Register В
402 ECR R/W все Extended Control Register
Каждому режиму ЕСР соответствуют и доступны свои функциональные регистры. Переключения режимов осуществляется записью в регистр ЕСР.
«Дежурными» режимами , включаемыми по умолчанию являются режимы 000 и 001 . Из этих режимов можно переключится в любой другой , но из старших режимов (010-111 ) переключение возможно только в 000 или 001
Режим 011 и является собственно режимом ЕСР, описанным выше. В этом режиме поток данных и команд , передаваемых в ПУ , помещается в FIFO – буфер через регистры ECPD FIFO и ECPAFIFO соответственны. Из FIFO они выводятся с соответствующим признаком цикла ( состояние линии HostAck). Принимаемый поток данных от ПУ извлекается из FIFO –буфера через регистр ECPDFIFO. При этом получение адреса в командном цикле от ПУ не предусматривается. Обмен с регистром ECPDFIFO может производиться и по каналу DMA.
Компрессия по методу RLE при передачи выполняется программно. Для передачи подряд более двух одинаковых байт данных в регистр ECPAFIFO записывается байт, у которого младшие 7 бит содержат счетчик RLС (значение RLС =127 соответствует 128 повторам), а старший бит нулевой .После этого в THCDFIFO записывается сам байт. Принимая эту пару байт ( командный байт и байт данных), ПУ осуществляет декомпрессию. При приема потока от ПУ адаптер ЕСР декомпрессию осуществляет аппаратно и в FIFO –буфер помещает уже декомпрессированные данные. Из этого описания работы компрессии вполне очевидно, что вывод данных с одновременным использованием компрессии и DMA невозможен.
Режим 110 (Test Mode) предназначен для тестирования взаимодействий механизмов FIFO и прерываний. В этом режиме данные могут передаваться в/из регистра TFIFO c помощью DMA или программным способом. При этом адаптер следит за состоянием буфера и по мере необходимости вырабатывает сигналы запроса прерывания. Таким образом программа может определить максимальную пропускную способность канала . Режим 111 предназначен для доступа к конфигурационным регистрам. Его выделение защищает адаптер и протокол от некорректных изменений конфигурации в процессе обмена.
Регистр EPC CNFA позволяет считать информацию об адаптере (идентификационный код в битах [7:4] . Регистр EPC CNFB предназначен для хранения информации, необходимой драйверу.
Регистр ECR является главным управляющим регистром ECP. Его биты имеют следующие назначения.

7 Задают режим ECP-ECPMode (табл 3.8)

6
5
ERRINTREN #- (Error Interupt Diseble) запрещает прерываниепо сигналу ERROR# (при нулевом значении бита по трицатель- 4перепаду на этой линии вырабатывается запрос прерывания).

3DMAEN- (DMA Enable) разрешает обмен по каналу DMA

2SERVICEINTR –(Servise Interrupt) запрещает сервисные пре-
рывания , которые вырабатываются по окончании цикла DMA
(если он разрешен), по порогу заполнения /опустошения FIFO-
1буфера (если не используется DMA) и по ошибке переполненияили переопустошения буфера.
FIFOFS-(FIFO Full Status)сигнализирует о заполнении буфера
( при FIFOFS=1 в буфере нет ни одного свободного байта)
0

FIFOЕS-(FIFO Empty Status) указывает на полное опустошение
буфера.Комбинация FIFOS =FIFOES=1 означает ошибку рабо-
ты с FIFO ( переполнение или опустошение).

Таблица 3.9. Варианты индивидуальных заданий к лабораторной работе « Исследования параллельного интерфейса.

№ варианта Функция BIOS Процедура
ввода/вывода Временная диаграмма* Описать режим Номер контрольноговопроса
1 00h по Centronics(SPP) Передача в режим ЕСР 111 3
2 01h в полубайтном режиме Прием в режим ЕСР 110 5
3 02h Прием в байтном режиме. Передача в режим ЕСР 100 1
4 00h Цикл записи данных
(EPP) по Centronics (SPP) 011 2
5 01h Цикл чтения данных
(ЕРР) в полубайтном режиме 010 10
6 02h Цикл записи адреса
(ЕРР) прием в байтном режиме 001 9
7 00h Цикл чтения адреса (ЕРР) Передача в режим ЕСР 000 4
8 01h Передача в режим ЕСР
Цикл записи данных
(EPP) 001 7
9 02h Прием в режим ЕСР Цикл чтения данных
(ЕРР) 010 9
10 00h Передача в режим ЕСР
цикл записи адреса
(ЕРР) 000 10
11 01h по Centronics(SPP) Прием в режим ЕСР 011 3
12 02h прием в полубайтном режиме Передача в режим ЕСР 100 5
13 00h прием в байтном режиме Цикл чтения адреса (ЕРР) 110 6
14 01h цикл записи данных (ЕРР) по Centronics (SPP) 111 3
15 02h цикл чтения данных (ЕРР) в полубайтном режиме 000 4
16 00h цикл записи адреса
(ЕРР) прием в байтном режиме 001 7
17 01h Цикл чтения адреса (ЕРР) по Centronics (SPP) 010 9
18 02h Передача в режиме ЕСР
Цикл записи данных
(EPP) 100 10
19 00h Прием в режим ЕСР цикл записи адреса
(ЕРР) 110 1
20 01h по Centronics(SPP) Передача в режим ЕСР 011 5
21 02h Прием в полубайтномрежиме Прием в режим ЕСР 110 8
22 00h Цикл записи адреса (ЕРР) по Centronics (SPP) 111 10
23 01h Цикл чтения адреса (ЕРР) прием в байтном режиме 001 9
24 02h Передача в режим ЕСР по Centronics (SPP) 100 1
25 00h Прием в байтном режиме цикл записи адреса
(ЕРР) 011 3
26 01h Прием в режиме ЕСР в полубайтном режиме 001 2
Порядок выполнения работы.
При домашней подготовке изучить устройство, условия совместимости, режимы и протоколы обмена через LPT-порт;
Выполнить индивидуальное задание по варианту:
по функции BIOS – составить программу и описать работу LPT – порта при выполнении заданной функции ;по процедуре ввода/вывода – описать механизм реализации , составить алгоритм словесный или графический по фазам реализации заданной процедуры ,
по временной диаграмме – составить временную диаграмму цикла обмена заданного режима и описать ее работу ;по заданному режиму –описать его особенности ;
по контрольному вопросу –ответить письменно на заданный вопрос.
Содержание отчета.
Результаты выполнения индивидуального домашнего задания
Структурная схема компьютерной системы с указанием LPT-портов
Системные средства, используемые LPT-портами
Листинг программы, реализующей заданные функции и результат ее работы
Контрольные вопросы.
1.В каком режиме осуществляется обмен информацией по интерфейсу Centronics?
2.Какие функции поддержки LPT-портов обеспечивает BIOS?
3.Назовите условия электрической соместимости стандарта IEEE 1284?
4.Какие режимы обмена данными через параллельный порт предусмотрены в IEEE 1284?
5.Перечислите режимы ECP- порта?
6.Какие регистры необходимы для реализации ЕСР-порта?
7.Опишите условия конструктивной и информационной совместимости стандарта
IEEE 1284.
8.Приведите формат управляющего регистра ЕСР и опишите назначение бит.
9.Какие регистры используются для реализации стандартного LPT – порта?
10.Приведите формат управляющего регистра SPP и опишите назначение бит.
Литература:
1.Борзенко А.Е. IBM PC: устройство, ремонт модернизация-2е издание, перераб. и доп.-М.ТОО
фирма « КомпьютерПресс», 1997 г.-344 с,с243-249.
2.Гук М. Аппаратные средства IBM PC , второе издание- СПб: Питер, 1997 -288с., с. 114-121
3.Гук М.Аппаратные средства РС. Энциклопедия –СПб: Питер Ком.,1998 -816с, с.631-654
Лабораторная работа №3
Исследование интерфейса клавиатуры.
Цель работы: изучить устройство принцип действия и исследовать режимы работы клавиатуры в составе IBM PC совместимых компьютеров.
Назначение: Клавиатура предназначена для ручного ввода информации и управления экраном.
Традиционная клавиатура PC представляет собой унифицированное устройство со стандартным разъемом и последовательным интерфейсом связи с системой платой. В качестве датчиков нажатия клавиш применяют механические контакты (открытые или герконовые), кнопки на основе токопроводящей резины, емкостные датчики и датчики на эффекте Холла. Типы клавишных датчиков влияют на надежность, долговечность и, конечно же, цену клавиатуры. Последние два типа являются самыми долговечными, поскольку в них исключены механические контактные системы. Независимо от типов применяемых датчиков нажатия клавиш, все они объединяются в матрицу. Клавиатура содержит внутренний контроллер, выполненный обычно на микросхеме из семейства MCS-48 фирмы Intel, осуществляющий сканирование матрицы клавиш, управление индикаторами, внутреннюю диагностику и связь с системной платой последовательным интерфейсом по линиям KB-Data и KB-Clock.
Современная клавиатура, применяемая в большинстве моделей AT и PS/2, это расширенная клавиатура (Enhanced) — 101/102 клавиши. Некоторые расширенные клавиатуры (например, «Microsoft Natural») имеют 104 или 105 клавиш, имеются и 122-клавишные модели.
Клавиши расширенной клавиатуры разделены на несколько групп:
основная клавиатура;
функциональная клавиатура;
цифровая клавиатура (Numeric Keypad), при выключенном индикаторе Num Lock (или включенном индикаторе Num Lock и нажатии клавиши Shift) используемая для управления курсором и экраном;
выделенные клавиши управления курсором и экраном, дублирующие эти функции цифровой клавиатуры;
клавиши управления питанием;
клавиши (кнопки) быстрого доступа к приложениям.
Дополнительные клавиши управления питанием и другими системными функциями появились сравнительно недавно. Эти клавиши, как правило, бледно-лилового цвета и расположенные около клавиш управления курсором и экраном, досаждают пользователям, привыкшим к обычной расширенной клавиатуре и работающим с ней не глядя. Кнопки быстрого доступа — это тоже нововведение в «фирменные» клавиатуры, это действительно кнопки, и с клавишами их не перепутаешь. Эти кнопки предназначены для быстрого вызова некоторых приложений и работы с ними, например, Интернет-браузера и медиаплейера.
Клавиатуры AT имеет двунаправленный интерфейс, что позволяет принимать команды от системной платы. Клавиатура PS/2 отличается от AT только исполнением разъема, при необходимости можно использовать переходник.
Внутренний контроллер клавиатуры способен определить факты нажатия и отпускания клавиш, при этом можно нажимать очередную клавишу, даже удерживая несколько ранее нажатых. При нажатии клавиши клавиатура передает идентифицирующий ее скан-код. При удержании клавиши в нажатом положении через некоторое время клавиатура начинает автоповтор передачи скан-кода нажатой клавиши. Задержка автоповтора (typematic delay) и скорость автоповтора (typematic rate) для клавиатур AT программируются. Расширенная клавиатура позволяет выбирать один из трех наборов скан-кодов.
Кроме традиционного стандартного исполнения существуют и другие варианты клавиатур. Малогабаритные клавиатуры портативных компьютеров интегрированы в общий корпус, но часто эти компьютеры имеют разъем для подключения обычной внешней клавиатуры, работать с которой все-таки удобнее. Некоторые производители оригинальных PC-совместимых компьютеров применяют собственные конструкции клавиатур, разъемов и даже интерфейса (например, Olivetty), что затрудняет их замену. Существует множество вариантов клавиатур по используемым датчикам, по ощущениям от нажатия и по расположению клавиш. Имеются разные эргономические варианты: клавиатуры, «разламывающиеся» на две половины, имеющие подкладки для рук и т. п. При большом объеме клавиатурного ввода на эти нюансы есть смысл обратить внимание, поскольку неправильное положение рук оператора может приводить и к профессиональным заболеваниям. По ощущению от нажатия различают клавиатуры с «кликом» и без него. «Клик» — это щелчок, раздающийся при срабатывании нажатой клавиши. Щелчок может быть акустическим и механическим, ощущаемым пальцами как преодоление некоторого предела упругости, после которого нажимаемая клавиша проваливается. В клавиатурах без клика срабатывание датчика почувствовать не удается и, если оператор не привык смотреть на экран, возможны пропуски символов или их ложные повторы. Конечно же, выбор клавиатуры — дело вкуса пользователя, но он определяется и финансовыми возможностями — цены клавиатур могут различаться на порядок.
Взаимодействие клавиатуры с ЭВМ, обмен информацией
Функционально-структурная схема клавиатуры
Клавиатура бывает по своему принципу кодировки клавиш кодирующей и не кодирующей.
Не кодирующая клавиатура содержит только клавиши, а все процессы с определением номера нажатой клавиши, определения ее кода осуществляет системный блок. Такая клавиатура представляет из себя матрицу 8х8 с расположением клавиш в точках пересечения строк и столбцов. При нажатии одной из таких клавиш контакт замыкается, передается сигнал о нажатии клавиши. Недостатки такой клавиатуры: 1) количество клавиш ограничено; 2) трудно совершить перекодировку. В настоящее такие клавиатуры не распространены.
Клавиатура IBM совместимых компьютеров является кодирующей, она представляет собой автономное устройство, реализующее ряд функций, которых в не кодирующей клавиатуре выполняет системный блок. Кодирующая клавиатура не требует взаимодействия с основными схемами ПК, число клавиш бывает неограниченным. ASCII кодировка позволяет представить 256 символов, однако наличие 101 клавиши позволяет образовать больше, чем 256 символов.
Блок-схема одного из вариантов клавиатуры представлена на рис.2.1
Клавиши образуют матрицу 8х16. После подачи питания от системного блока микропроцессор клавиатуры осуществляет постоянное сканирование, т.е. поочередный опрос всех элементов один за другим строк матрицы , с целью обнаружения момента нажатия клавиши.
Каждая клавиша подключена к пересечению строк и столбцов. Если ни одна клавиша не нажата, уровень напряжения на всех столбцах одинаковый. Состояние каждого столбца сохраняется в регистре столбцов. При нажатии какой-либо клавиши соответствующее пересечение строка-столбец закорачивается, и на данном столбце уровень напряжения изменяется. Процессор знает, какую строку он сканировал в данный момент и по номеру строки и столбца определяется номер нажатой клавиши.
Рис. 2.1 – Блок-схема клавиатуры
Подключение клавиатуры к компьютеру
Для подключения клавиатуры предназначен последовательный синхронный интерфейс, состоящий из двух обязательных сигналов KB-Data и KB-Clock. Обе линии на системной плате подсоединяются резисторами к шине +5 В. На обеих сторонах интерфейса выходные сигналы низкого уровня формируются выходами элементов с открытым коллектором (стоком), а состояние линий может быть прочитано через входные линии контроллеров. На некоторых старых системных платах имеется и дополнительный сигнал KB-Reset, сбрасывающий клавиатуру низким уровнем. Интерфейс клавиатуры AT двунаправленный: от клавиатуры передается информация о нажатии/отпускании клавиш, передача информации к клавиатуре используется для управления индикаторами ее состояния и программирования параметров (автоповтор, набор скан-кодов).
Контроллер интерфейса клавиатуры и его разъем всегда располагаются на системной плате. Конструктивно возможны два варианта разъема — обычная 5-контактная розетка DIN (вид ее со стороны задней панели и назначение контактов приведены на рис. 2.2, а) или малогабаритная розетка mini-DIN для клавиатуры PS/2 (рис.2.2, б). На этот же разъем через плавкий предохранитель поступает напряжение питания клавиатуры +5 В. Электрически и логически интерфейс клавиатуры PS/2 повторяет AT, поэтому для согласования типа разъема применяют специальные переходники. Предпочтительнее использовать переходники, выполненные в виде мягкого кабеля с разъемами. Монолитный переходник, особенно с АТ-клавиатуры на PS/ 2-разъем, хуже тем, что малейшее движение кабеля вызывает большой момент силы, выламывающей переходник из маленького гнезда PS/2.

Рис.2.2 Разъемы подключения клавиатур АТ и PS/2.
Назначение разьёмов типа DIN (Deutsohe Industrial Norm – немецкий промышленный стандарт).
контакт 1 – KB – Clock – синхросигнал;
контакт 2 – KB – Data – данные;
контакт 3 – KB – Reset или N/C – необязательный сигнал сброса клавиатуры;
контакт 4 – GND – земля;
контакт 5 – +5V – питание с системной платы.
С распространением шины USB появились клавиатуры и с этим интерфейсом, они имеют и встроенный хаб, например, для подключения мыши USB. Клавиатура USB питается от шины. Для клавиатуры USB требуется специальная поддержка со стороны BIOS, она имеется в современных системных платах. На таких платах в CMOS Setup появляется параметр включения поддержки традиционной клавиатуры (Legacy Keyboard Support).
Обмен информацией
Клавиатура состоит из набора переключателей, объединенных в матрицу. При нажатии клавиши процессор, установленный в самой клавиатуре, определяет координаты нажатой клавиши в матрице. Кроме того, процессор клавиатуры определяет продолжительность нажатия и может обработать даже одновременное нажатие нескольких клавиш. В клавиатуре установлен буфер емкостью 16 байт, в который заносятся данные при слишком быстрых или одновременных нажатиях. Затем эти данные в соответствующей последовательности передаются в систему.
Связь с системным блоком осуществляется через последовательный канал, данные по которому передаются по 11 бит, причем восемь из них собственно данные, а остальные — синхронизирующие и управляющие. Хотя это полноценный последовательный канал связи (данные передаются по одному проводнику), он не совместим со стандартным последовательным портом RS-232, который часто используется для подключения модемов.
В компьютерах типа AT последовательный интерфейс клавиатуры подключен к специальному контроллеру клавиатуры на системной плате. В качестве такого контроллера используется микросхема 8042 универсального интерфейса периферийных устройств (Universal Peripheral Interface — UPI). Этот микроконтроллер фактически является еще одним процессором со встроенными ROM емкостью 2 Кбайт и RAM на 128 байт.
В системах AT микроконтроллер, установленный в клавиатуре (типа 8048), пересылает данные в контроллер клавиатуры (типа 8042) на системной плате; возможна также передача данных в обратном направлении. Когда контроллер на системной плате принимает данные от клавиатуры, он выдает запрос по цепи IRQ 1 и передает данные главному процессору через порт ввода-вывода с адресом 60h. Играя роль посредника между клавиатурой и главным процессором, контроллер клавиатуры типа 8042 может также преобразовывать скан-коды и выполнять другие функции. Данные могут передаваться контроллеру 8042 через тот же порт 60h, после чего он пересылает их в клавиатуру. Кроме того, при необходимости передать команды или проверить состояние контроллера клавиатуры на системной плате может быть использован порт ввода-вывода с адресом 64h. Передача команд обычно сопровождается пересылкой данных в одном из направлений через порт 60h.
Клавиатура, подключенная к порту USB, работает практически так же, как и при подключении к традиционному порту DIN или mini-DIN. Микросхемы контроллера, установленные в клавиатуре, используются для получения и интерпретации данных перед тем, как они будут переданы через порт USB в систему. Некоторые микросхемы включают в себя логическую часть концентратора USB, что позволяет клавиатуре работать непосредственно в качестве концентратора USB. При получении данных от клавиатуры порт USB передает их на 8042-совместимый контроллер, который обрабатывает данные так же, как и любую другую информацию клавиатуры.
Описанный процесс осуществляется уже после загрузки Windows. Но что же происходит в том случае, если пользователю приходится использовать клавиатуру при работе в командной строке или при конфигурировании системной BIOS? Для работы с клавиатурой USB в режиме MS DOS необходимо осуществить поддержку технологии USB Legacy в базовой системе ввода-вывода. BIOS, поддерживающая USB Legacy, позволяет выполнить следующие задачи:
• конфигурирование главного контроллера;
• подключение клавиатуры и мыши USB;
• настройка планировщика главного контроллера;
• направление данных, вводимых с клавиатуры или мыши USB, на контроллер клавиатуры 8042.
Системы, поддерживающие USB Legacy, могут использовать базовую систему ввода-вывода для управления клавиатурой USB до загрузки операционной системы Windows 98/Me/2000. После загрузки системы драйвер главного контроллера USB берет управление клавиатурой на себя, отправляя команду StopBIOS подпрограмме BIOS, которая непосредственно "руководит" клавиатурой. При перезагрузке компьютера в режиме MS DOS главный контроллер USB отправляет команду StartBIOS для повторного запуска той же подпрограммы базовой системы ввода-вывода.
Клавиатура USB, начиная с того момента, как контроллер клавиатуры 8042 принимает отправленные сигналы, работает аналогично стандартным клавиатурам. При этом управление клавиатурой осуществляется на уровне BIOS (параметры BIOS, необходимые для работы с клавиатурой USB, должны быть корректно заданы). Как уже отмечалось, в некоторых случаях для обеспечения соответствующей поддержки клавиатуры USB может понадобиться обновленная версия BIOS. Кроме этого, используемые наборы микросхем системной логики должны поддерживать режим USB Legacy.
Контроллер интерфейса клавиатуры 8042/8242
Программируемый микроконтроллер интерфейса клавиатуры 8042, КВС (Key-Board Controller), является посредником между клавиатурой, подключенной к нему по вышеописанному последовательному интерфейсу, и центральным процессором, с которым он связан через параллельный интерфейс. В микроконтроллере постоянно исполняется внутренняя микропрограмма, реагирующая на сигналы интерфейса клавиатуры и команды, поступающие от процессора. Эта микропрограмма (КВС BIOS) хранится во внутреннем масочном ПЗУ контроллера; внешне она недоступна, и контроллер можно рассматривать как устройство с заданными свойствами. Поскольку логика работы контроллера реализована программой, его реакция на команды процессора и сигналы интерфейса относительно медленная — время отклика измеряется десятками микросекунд. Помимо сигналов управления клавиатурой через программно-управляемые и программно-читаемые линии внешних портов контроллера формируются сигналы управления вентилем Gate A20, аппаратного системного сброса, а также считываются сигналы от конфигурационных джамперов системной платы. Контроллер i8242, кроме интерфейса клавиатуры, поддерживает аналогичный интерфейс дополнительного устройства — PS/2-Mouse. При инициализации (по аппаратному сбросу) контроллер установится в режим PS/2 или AT, в зависимости от состояния определенного вывода микросхемы. В режиме AT контроллер не выполняет функций интерфейса мыши и игнорирует все команды, относящиеся к мыши. Режим выбирается включением соответствующего параметра CMOS Setup. Контроллер расположен в пространстве ввода-вывода CPU по адресам 60h (регистр данных) и 64h (регистр состояния и команд), назначение регистров приведено в табл.2.1. Из регистра данных считываются данные, принимаемые по интерфейсам от клавиатуры и мыши, а также данные, возвращаемые контроллером в ответ на адресованные ему команды. Запись в регистр данных обеспечивает подачу команд и данных, адресованных к клавиатуре и мыши, а также данных для команд, адресованных контроллеру. В регистр команд записываются команды, адресованные контроллеру. Режим работы контроллера (разрешение работы интерфейсов клавиатуры и мыши и прерываний от них, трансляция скан-кодов и другие параметры) задается командным байтом, посылаемым в контроллер по специальной команде. Перед любой записью в контроллер необходимо убедиться в его готовности. Признаком готовности/занятости контроллера является значение бита 1 регистра состояния (порт 064h).
Контроллер имеет два внешних порта, с помощью которых и реализуются последовательные интерфейсы, а также управление вентилем GateA20, сигналом сброса процессора и чтением сигналов от джамперов системной платы. Эти порты не имеют непосредственного отображения в пространстве адресов ввода-вывода PC, доступ к ним осуществляется через команды контроллера.
Таблица 2.1. Назначение регистров контроллера клавиатуры
Порт, R/W Назначение
060 RW Порт данных 8042
064 R Регистр состояния 8042 (R/O):
бит 7 — ошибка четности при последнем обмене с клавиатурой;
бит 6 — тайм-аут приемника/общий тайм-аут
бит 5 — тайм-аут передатчика/выходной буфер интерфейса мыши полон (Mouse_0BF);
бит 4: 0 — клавиатура на замке;
бит 3: 1 — последняя запись была командой, 0 — данными;
бит 2: системный флаг, устанавливается в 0 по включению питания, в 1 — программно (что означает состояние завершения системного сброса ResetOK);
бит 1:1— входной буфер контроллера полон, 0 — готовность к приему команды/данных;
бит 0: 1 — выходной буфер интерфейса клавиатуры полон (0BF)
064 W Регистр команд 8042
* Второе назначение бита относится к контроллеру 8242В, имеющему дополнительный интерфейс для подключения PS/2-Mouse.
Приняв посылку от клавиатуры, контроллер выполняет внутреннюю трансляцию скан-кода (если это не запрещено командным байтом) и устанавливает в регистре состояния 0BF=l, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). В ответ на это хост (программа CPU) должен считать данные (транслированный скан-код, префиксы и т. п.) из порта данных (60h). Трансляция обеспечивает программную совместимость клавиатур XT и AT (см. ниже) по чтению скан-кодов из порта 60h. При получении посылки от мыши контроллер не выполняет никаких преобразований и устанавливает в регистре состояния Mouse_0BF=l, что приводит к генерации запроса прерывания IRQ12 (если это не запрещено командным байтом). По этому сигналу данные от мыши должны быть считаны хостом из того же порта 60h. To же самое происходит и при программной записи байта в выходной буфер клавиатуры (код D2) или мыши (код D3h) с установкой соответствующих битов состояния и генерацией запросов IRQ1 или IRQ12.После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния 0BF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). После этого данные должны быть считаны из порта данных (по адресу 60h). Если команда возвращает несколько байтов данных, прерывание генерируется для каждого байта.
Контроллеры интерфейса клавиатуры различаются версиями встроенного ПО, из-за чего замена контроллера на другой с отличающейся версией ПО (КВС BIOS) может оказаться проблематичной — BIOS системной платы должна знать особенности контроллера клавиатуры.Скан-коды
Скан-коды передаются от клавиатуры в компьютер по фактам нажатия и отпускания клавиш. При нажатии клавиши передается ее скан-код — номер, идентифицирующий ее расположение на клавиатуре, некоторые клавиши передают цепочку кодов, начинающихся с префикса Е0 или Е1, за которыми следуют байты расширенного скан-кода. Современные клавиатуры могут работать в одном из 2-3 наборов (таблиц) скан-кодов, отличающихся назначением кодов и способами сообщения об отпускании клавиш.
Набор Set#1 соответствует первым клавиатурам XT и АТ-84. При отпускании клавиши клавиатура передает ее скан-код с инвертированным битом 7, что для клавиш, передающих одиночный скан-код, соответствует сложению с 80h. При отпускании клавиш, передающих цепочки скан-кодов, префиксы передаются без изменений, а в байтах расширенного скан-кода бит 7 инвертируется, причем эти модифицированные расширенные скан-коды передаются в порядке, обратном порядку передачи при нажатии. Принятый способ сигнализации отпускания не позволяет использовать скан-коды 60h, 61h, 5А, 6Е и большие, чем 79h: для них коды отпускания совпали бы с префиксами Е0 и Е1 и специальными ответами клавиатуры AT. Кроме того, недопустим код 00 — это значение используется в прикладном интерфейсе для сообщения об альтернативном способе набора кода.
Набор Set#2 появился в расширенных клавиатурах (101/102 и более клавиш). Здесь при отпускании передаются 2 байта: в первом содержится признак отпускания F0, во втором*— скан-код (не модифицированный). Для клавиш, генерирующих пару кодов (префикс и расширенный код), при отпускании сначала передается префикс (Е0 или Е1), затем признак F0, после чего передается расширенный скан-код. Если клавиша генерирует цепочку пар кодов при нажатии, то при отпускании каждая пара дает тройку кодов, причем порядок следования расширенных кодов обратный порядку их выдачи при нажатии.
Набор Set#3, отличающийся от первых двух, не прижился и практически не используется (он объявлен необязательным).
Клавиши управления курсором и экраном расширенных клавиатур вызывают посылку цепочек скан-кодов, зависящую от состояния клавиши Shift и индикатора Num Lock. Также меняются коды, генерируемые клавишами Print Screen, Pause и Numeric. Цепочка кодов клавиши Pause при нажатии не укладывается в данную схему, а при отпускании этой клавиши никаких кодов не генерируется.
Номер набора клавиатуре и ее контроллеру задается центральным процессором (команда F0), по включению питания у современных клавиатур должен устанавливаться набор 0. Контроллер 8042/8242 по умолчанию осуществляет трансляцию кодов, принимаемых клавиатурой, в набор Set#0, коды которого и доступны процессору при чтении из порта 60h. Записью командного байта в контроллер трансляцию можно и отменить, тогда будут доступны коды, принятые от клавиатуры, в их «натуральном» виде. Считыванием (из порта 060h) и интерпретацией скан-кодов занимается программа центрального процессора, выполняемая обработчиком прерывания IRQ1.
Автоповтор с точки зрения центрального процессора работает следующим образом. Если нажать клавишу, контроллер выработает прерывания и выдаст скан-код нажатия. Если клавишу удерживать нажатой, то через некоторое время задержки (Typematic delay) клавиатура начнет генерировать серию посылок скан-кода, и они будут вызывать серию прерываний IRQ1 с передачей этого кода до тех пор, пока не будет отпущена клавиша. Если, не отпуская одной клавиши, нажать другую, то автоповторы первой клавиши прекратятся, будет передан скан-код второй клавиши, и, если она тоже будет удержана, автоповтор начнется уже для ее скан-кода. Для клавиш и их комбинаций, вызывающих передачу цепочек скан-кодов, автоповтором передаются только последние пары байтов из этих цепочек.
Системная поддержка и программный интерфейс
Клавиатура имеет системную поддержку на уровне BIOS — обработку фактов нажатия и отпускания клавиш и обеспечение сервисов ввода символов с клавиатуры, а также управления ее параметрами (задержка и частота автоповтора) и индикаторами. Коды, принятые от клавиатуры ее контроллером, считываются и обрабатываются обработчиком аппаратного прерывания IRQ1 (вектор 09h). Результат обработки помещается в клавиатурный буфер, из которого по программному прерыванию Int 16h этот результат для дальнейшей обработки может быть извлечен значительно позже. Прикладной программе, для которой требуется нестандартное использование клавиатуры (например, в качестве музыкальной), придется самой заниматься обработкой аппаратного прерывания IRQ1, перехватывая вектор Int 9h. Перехват этого вектора также обеспечивает возможность вызова каких-либо функций резидентных программ по «горячим» клавишам.
При начальном тестировании процедура POST инициализирует клавиатуру (и ее контроллер) и запускает диагностический тест. Во время этого теста клавиатура мигнет всеми индикаторами, после чего может остаться включенным только индикатор Num Lock (зависит от установки в CMOS Setup). В случае обнаружения ошибки клавиатуры на консоль выводится сообщение с возможным указанием скан-кода залипшей клавиши и обычно предлагается нажать клавишу F1 для продолжения. То же самое произойдет, если тест не обнаружит клавиатуру (например, из-за вывалившегося разъема или перегоревшего предохранителя), но в этом случае только нажатия F1 будет уже недостаточно. Ошибку диагностики даст и подключение к компьютеру AT клавиатуры от XT, обратное «скрещивание» тоже не работоспособно. Чтобы начальная загрузка не останавливалась по ошибке (отсутствию) клавиатуры (POST будет дожидаться получения кода клавиши F1), тестирование клавиатуры может быть отменено специальным параметром CMOS Setup.
Русификация клавиатуры на «аппаратном» уровне сводится к нанесению на клавиши символов русских букв, а также некоторых спецсимволов и знаков препинания, которые в русской раскладке располагаются иначе, чем в английской (это связано с разным количеством букв в алфавитах). Более того, русская раскладка для DOS и Windows по знакам препинания также не сходятся. С этими неудобствами уже давно смирились, и сейчас подавляющее большинство русифицированных клавиатур имеет одинаково подписанные клавиши (чаще под DOS). На программном уровне русификация осуществляется загружаемым драйвером, который, как правило, замещает обработчик IRQ1 драйвера BIOS — перехватывает вектор прерывания Int 9h. Для работы в DOS драйвер загружается в виде резидентной программы, которая может содержать и русификатор дисплея. Для Windows русификация осуществляется выбором требуемого драйвера в меню при начальной установке или изменения параметров системы. Для переключения языка используются клавиши Ctrl, Alt, Shift (левые и правые) в различных сочетаниях, единого подхода нет (некоторые драйверы позволяют пользователю определить и собственную комбинацию клавиш).
Прерывания, вызванные приходом кодов нажатия и отпускания клавиш, обрабатывает BIOS Int 9h. Каждый принятый скан-код (или цепочка) обрабатывается с учетом состояния клавиатурных флагов. Результат обработки (как правило, ASCII-символ в младшем байте и скан-код в старшем) помещается в клавиатурный буфер, расположенный в ОЗУ. По приему каждого символа указатель головы буфера увеличивается. Буфер организован в виде кольца, после достижения конца области буфера указатель головы установится на начало области. В случае переполнения буфера (указатель головы «догнал» указатель хвоста) очередное слово не записывается и подается звуковой сигнал. Размер позволяет хранить описание шестнадцати фактов нажатий клавиш. Нажатие клавиш Ctrl, Shift, Alt и некоторых комбинаций в буфере не отмечается, но приводит к модификации бит ячеек флагов клавиатуры. Нажатие «системной» комбинации Ctrl+Alt+Del, клавиши PrintScreen (SysRq) и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры.
Для обслуживания клавиатуры используются ячейки ОЗУ из области данных BIOS (BIOS Data Area):
0:0417, 0:418 — флаги клавиатуры;
0:0419 — аккумулятор кода Alt-набора;
0:041А — указатель головы буфера (Buffer Head), 2 байта (модифицируется при помещении символа в буфер);
0:041C — указатель хвоста буфера (Buffer Tail), 2 байта (модифицируется при извлечении символа из буфера);
0:041E-0:042D — область кольцевого буфера (16 слов).
Обработчик аппаратного прерывания до обработки принятого скан-кода вызывает прерывание BIOS INT 15h с AH=4Fh, а в AL находится принятый скан-код. Стандартный обработчик Int 15h (4Fh),просто выполняет возврат с CF=0, но его можно заменить специальным обработчиком, который будет при необходимости подменять принятые скан-коды на какие-либо иные (оставляя их в AL), что должно отмечаться установкой CF=1. В старых версиях BIOS такой возможности перехвата не было, ее наличие можно определить вызовом Int 15h(C0h).
Для клавиатуры USB или иного устройства ввода, заменяющего клавиатуру в качестве консоли, прерывание Int 9h должно вызываться программно при обработке каждого клавиатурного события. Обработчик этого прерывания должен выполнять те же действия: скан-код пропускать через Int 15h (4Fh) и помещать в клавиатурный буфер, а также модифицировать флаги клавиатуры.
Программная поддержка клавиатуры
Для работы с клавиатурой используется аппаратное прерывание, средства BIOS, средства MS DOS, а так же клавиатурные функции библиотеке СИ фирмы Microsoft и других языков высокого уровня.
Клавиатура подключена к линии прерывания IRQ1. Этой линии соответствует прерывания INT 09h. Клавиатурное прерывание обслуживается модулями BIOS. Драйверы клавиатуры и резидентные программы могут организовывать дополнительную обработку прерывания INT 09h. Для этого может быть использована цепочка обработчиков прерывания.
Работа стандартного обработчика клавиатурного прерывания описана ранее. Отметим, что буфер клавиатуры имеет 32 байта и для машин ХТ расположен по адресу 0000:041Еh. В IBM AT расположение клавиатурного буфера задается содержимым двух слов памяти с адресами 0000:0480h(смещение адреса начала буфера) и 0000:482h(смещение конца буфера). Содержимое этих ячеек обычно 001Еh и 003Еh. Смещение задается относительно сегментного адреса 0040h. Поэтому расположение клавиатурного буфера в IBM AT соответствует его расположения в ХТ.
Клавиатурный буфер организован циклически, то есть при его переполнении самые старые значения будут потеряны. Две ячейки памяти, находящиеся в области данных ВIOS с адресами 0000:041Аh и 0000:041Сh, содержат соответствующие указатели на начало и конец буфера. Если значения этих указателей равны друг другу, значит буфер пуст. Указателями на начало, и конец клавиатурного буфера обычно управляют обработчики прерываний INT 09h и INT16h.
Обработчик прерывания INT 09h помимо управления содержимым буфера клавиатуры, отслеживает нажатие переключающих клавиш. Состояние этих клавиш записывается в область данных BIOS в два байта с адресами 0:0417h и 0:0418h( флаги клавиатуры).
Таблица 2.2 Формат байта 0:0417h.
Биты Значения
0 Нажата правая клавиша Shift1 Нажата левая клавиша Shift2 Нажата комбинация клавиша Ctrl+Shift с любой стороны
3 Нажата комбинация клавиша Alt+Shift с любой стороны
4 Состояние клавиши Scroll Lock5 Состояние клавиши Num Lock6 Состояние клавиши Caps Lock7 Состояние клавиши InsertТаблица 2.3 Формат байта 0:0418h.
Биты Значения
0 Нажата комбинация клавиша Alt+Shift с левой стороны
1 Нажата комбинация клавиша Ctrl+Shift с левой стороны
2 Нажата клавиша Sys Reg3 Состояние клавиш Pause4 Нажата клавиша Scroll Lock
5 Нажата клавиша Num Lock6 Нажата клавиша Caps Lock7 Нажата клавиша InsertПрограммный обработчик прерываний INT 09h отслеживает некоторые комбинации клавиш. Комбинации и действия, выполняемые обработчиком при их обнаружении:
Таблица 2.4. Комбинации клавиш.
Комбинация клавиш Значения
Ctrl + Alt + Delete Сброс и перезагрузка компьютера
Ctrl + Num Lock
Pause Переход машины в состояние ожидания до нажатия любой клавиши
Shift + PrtScРаспечатка на принтере содержимого видеопамяти
Ctrl + BreakВыполнения прерывания INT 1Bh завершающего работу программы
Любой символ можно ввести с помощью одновременного нажатия на клавишу Alt и набора кода символа в десятичной системе на цифровой клавиатуре. Результат заносится как в буфер клавиатуры, так и по адресу 0:0419h в область данных BIOS по отпусканию Alt.
При переполнении внутреннего буфера клавиатуры (ХТ) или буфера, расположенного в области BIOS (АТ) программа обработчик прерывания INT 09h генерирует звуковой сигнал.
Средства BIOS для работы с клавиатурой
Кроме аппаратного прерывания INT 09h для работы с клавиатурой используются программное прерывание BIOS – INT 16h. Это прерывание используется для извлечения слов из клавиатурного буфера. Функция задается в регистре АН при вызове:
Интерфейс прикладного уровня для клавиатуры представляет Int 16h. Его основное назначение — извлечение слов из клавиатурного буфера. Функция задается в регистре АН при вызове, результат помещается в регистр АХ.
АН = 00h — чтение (с ожиданием готовности) и выборка слова из буфера (меняется указатель хвоста). Индикаторы клавиатуры обновляются в соответствии с состоянием флагов. Если буфер пуст, то на AT выполняется прерывание Int 15h (подфункция 90), что может использоваться ОС, например, для переключения задач. Чтобы программа не «зависала» на ожидании символа, предварительно стоит проверить готовность функцией 01h. Символы расширенной клавиатуры фильтруются — преобразуются в их аналоги 83-клавишной клавиатуры.
АН =01h— проверка готовности, чтение без выборки (указатели не изменяются). Признак наличия символа в буфере — установленный флаг ZF.
АН = 02h — чтение состояния флагов (в AL — байт 0:417h, см. выше).
АН =03h — установка задержки и частоты автоповтора: BL — код задержки (00=250, 01=500, 02=750, 03=1000 мс), ВН - код частоты.
АН = 05h — запись слова из регистра СХ в буфер (меняется указатель головы). Признак успешной записи — AL=0, если в буфере нет места, то AL=1.
АН = 10h и AH=11h — функции, аналогичные 00h и 0lh, но предназначены специально для 101/102-клавишных клавиатур — в них не выполняется фильтрация символов расширенной клавиатуры. Для ряда клавиш, отсутствующих в клавиатуре АТ-84, эти функции дадут результаты, отличающиеся от вызовов 00h и 01h.
AH=12h — чтение расширенного состояния флагов (в АХ — слово KbdShift-FlagslOlRec), в котором младший байт совпадает с тем, что дает функция 02h (слово из 0:417h), а старший байт похож на слово из 0:418h. Назначение бит АХ:
бит 0 — клавиша Shift (правая) нажата;
бит 1 — клавиша Shift (левая) нажата;
бит 2 — клавиша Ctrl (любая) нажата;
бит 3 — клавиша Alt (любая) нажата;
бит 4 — включен индикатор Scroll Lock;
бит 5 — включен индикатор Num Lock;
бит 6 — включен индикатор Caps Lock;
бит 7 — включен режим Insert;
бит 8 — клавиша Ctrl (левая) нажата;
бит 9 — клавиша Alt (левая) нажата;
бит 10 — клавиша Ctrl (правая) нажата;
бит 11 — клавиша Alt (правая) нажата;
бит 12 — клавиша Scroll Lock нажата;
бит 13 — клавиша Num Lock нажата;
бит 14 — клавиша Caps Lock нажата;
бит 15 — клавиша SysReq нажата.
Функции чтения буфера (00 и 10h) в регистре AL возвращают ASCII-код символа, в АН — скан-код. Символы, полученные нестандартным способом (в русском регистре или Alt-набором), сопровождаются нулевым скан-кодом. Alt-набор позволяет ввести в буфер любой символ — для этого его код в десятичной системе набирается на цифровой клавиатуре при нажатой клавише Alt, результат заносится в буфер при отпускании клавиши Alt.При AL=0 регистр АН содержит расширенный ASCII-код (Extended ASCII Keystroke). Дополнительные клавиши 101/102-клавиатур при использовании функций 10h-12h генерируют код E0h в младшем байте и скан-код, соответствующий аналогичным управляющим клавишам 83/84-клавишных клавиатур.
Функция записи (05h), несколько неожиданная для клавиатуры, позволяет легко имитировать работу оператора для различных демонстрационных программ. Если прикладная программа не перехватывает обслуживание клавиатуры на уровне аппаратного прерывания (Int 9h), то резидентная программа может ей «подбрасывать» слова в буфер, которые будут восприниматься как нажатие клавиш.
10h, 11h, 12h – аналогичны 00h, 01h, 02h но для 101/102 клавишных клавиатур.
Рассмотрим более подробно некоторые из перечисленных функций.
Функция 00h (или 10h для 101/102 клавишных клавиатур) выполняет чтение кода символа из буфера клавиатуры, если он там есть. Если буфер клавиатуры пуст, программа переводится в состояние ожидания до тех пор, пока не будет нажата какая-либо клавиша. Программе передается скан-код (старший байт) и ASCII-код (младший байт) нажатой клавиши.
Формат вызова функции:
на входе:АН = 00h
на выходе:AL = ASCII-код символа или 0, если AH содержит расширенный ASCII-код символа;
AH = скан-код или расширенный ASCII-код символа, если AL = 0.
Для демонстрации использования функции 00h прерывания INT 16h можно использовать программу [1], которая выводит на экран скан-код и ASCII-коды нажимаемых клавиш:
#include <ctdio.h>
#include <dos.h>
voidmain(void);
void main(void) {
union REGS rg;
printf («\n Определение скан-кода и ASCII-кода клавиш.» «\n Для завершения работы нажмите клавишу ESC. \n\n»);
for (; ; ) {
// Вызываем прерывание INT 16h
rg.h.ah =0;
int 86 (0*16, &rg, &rg);
//Выводим на экран содержимое регистров AH и AL, содержащих соответственно скан-код и ASCII-код
//нажатой клавиши.
printf(«\nScan =%02.2xAscii =%02.2x»,rg.h.ah rg.h.al);
//Если была нажата клавиша ESC, завершаем работу программы
if (rg.h.ah.= =1) break;
return 0;
}
}
Функция 01h (11h для 101/102 клавишных клавиатур).
Это функция проверки буфера клавиатуры на наличие в нем символов.
На входе:AH = 01h (11h)
На выходе:ZF = 0, если в буфере имеется код нажатой на клавиатуре клавиши;
ZF = 1, если буфер клавиатуры пуст;
AL = ASCII-код символа или 0, если AH содержит расширенный ASCII-код символа;
AH = скан-код или расширенный ASCII-код символа, если AL=0.
При проверке наличия символа программа не переводится в состояние ожидания, даже если буфер клавиатуры пуст. В этом случае в регистре флагов устанавливается флаг ZF и управление возвращается программе.
Эту функцию удобно использовать во время выполнения какого-либо длительного процесса (например, форматирования диска) для прерывания этого процесса по запросу оператора.
Кроме этого, функцию можно использовать с функцией 00h(10h) для сброса содержимого клавиатурного буфера. Для этого в цикле повторяют вызов функции 01h , вслед за которым идет вызов функции 00h при условии, что буфер клавиатуры не пуст. Сброс клавиатурного буфера полезно выполнять перед вводом ответственной информации, так как из-за случайного двойного или тройного нажатия на клавишу в буфере клавиатуры могут оказаться лишние символы.
Приводим текст программы, выводящей на экран в цикле символ ‘*’. При нажатии на любую клавишу, кроме ESC программа выводит на экран строку текста – инструкцию для завершения программы. Если нажать на клавишу ESC, работа программы будет завершена.
#include <ctdio.h>
#include <dos.h>
voidmain(void);
void main(void) {
union REGS rg;
int i, zflag;
for (; ;) {
// Выводим в цикле символ ‘*’
patchar (‘*’);
for (i=0; i<1000; i++);
// Вызываем прерывания int 16h для проверки буфера клавиатуры
// Устанавливаем флаг который будет сброшен при нажатии на любую клавишу
zflag = 1;
_asm {
mov ax, 0100h
int 16h
// Если нажатия не было, продолжаем выполнение программы
jz nokey// При нажатии на любую клавишу сбрасываем флаг
mov zflag, 0
nokey:
}
if (zflag = = 0) {// Если флаг сброшен, читаем код нажатой клавиши из буфера при помощи функции 01h прерывания int 16h
rg.h.ah = 0;
int 86 (0*16; &rg; &rg);
// Если была нажата клавиша ESC завершаем работу программы
if (rg.h.ah = = 1) {
// Выводим на экран содержимое регистров AH и AL, содержащих
// соответственно скан-код и ASCII-код нажатой клавиши
printf(«\nScan =%02.2xAscii =%02.2x», rg.h.ah, rg.h.al);
} break; else printf («\n Для завершения нажмите ESC \n»);
}
}
}
Средства MS DOS для работы с клавиатурой.
MS DOS не предоставляет существенных дополнительных возможностей программам по сравнению с функциями прерывания BIOS INT 16h.
Однако, если выполняемая программа пользуется клавиатурными функциями MS DOS, то ей доступно средство переназначения ввода ОС. Это возможно потому, что клавиатурные функции MS DOS являются функциями, работающими со стандартным вводом MS DOS, а стандартный ввод может быть переназначен. Некоторые клавиатурные функции автоматически посылают введенные символы на устройство стандартного вывода. По умолчанию – это дисплей, но устройство вывода может быть переназначено для вывода на файл, на принтер или другое устройство. Клавиатурные функции MS DOS больше всего подходят для программ, которые ведут с оператором ’’построчный’’ диалог.
Приведем описание основных клавиатурных функций прерывания INT 21h.
Функция 01h – буферизованный ввод с эхо выводом.
На входе:AH = 01h
На выходе:AL = ASCII-код символа или 0. Если регистр содержит 0, то следующий вызов этой же функции
возвратит в регистре AL расширенный ASCII-код символа. Функция проверяет комбинации клавиши Ctrl-C и Ctrl-Break.
Функция читает символы со стандартного устройства ввода. Если стандартным устройством ввода является клавиатура и буфер клавиатуры пуст, выполнение программы задерживается до нажатия на любую клавишу.
Если программа в качестве ASCII- кода получила 0, она должна вызвать эту функцию еще один раз. Во второй раз регистр AL будет содержать расширенный ASCII-код нажатой клавиши.
Функция 08h – буферизованный ввод без эхо-вывода. Аналогична предыдущей, но без дублирования на экране вводимых символов. Можно эту функцию использовать для организации паролей.
Функция 07h – не фильтрованный ввод без эхо-вывода. В отличие от 08h не проверяет комбинации клавиш Ctrl-C и Ctrl-Break, поэтому ее удобно использовать, когда завершение программы по нажатию клавиш нежелательно. Например, программа держит в памяти буфера для данных, которые перед завершением работы должны быть записаны на диск, поэтому ошибочное нажатие комбинации клавиш, не вызовет потерю содержимого буферов.
Функция 06h – ввод/вывод на консоль.
На входе:AH = 06h
DL = 0FFh – для ввода символа с консоли,
или
DL = код символа, не равный 0FFh, – для вывода символа на консоль.
На выходе:ZF = 0, если в буфере имеется код нажатой на клавиатуре клавиши;
ZF = 1, если буфер клавиатуры пуст.
AL = ASCII-код символа или 0.
Функция проверяет комбинации клавиш Ctrl+C и Ctrl+Break. Основное отличие функции 06h от описанных ранее заключается в том, что эта функция не ожидает пока оператор нажмет на клавишу.
Функция 0Аh – ввод строки символов.
На входе:AH = 0Аh
DS: DX = адрес буфера для ввода строки.
На выходе:Буфер содержит введенную строку.
Функция проверяет комбинации клавиш Ctrl+C и Ctrl+Break. Перед вводом функции необходимо подготовить буфер, адрес которого передается в регистрах DS:DX, – в первый байт следует записать максимальную длину вводимой строки (диапозон 1–244).
Функция 0Bh – проверка состояния стандартного ввода. Эта функция проверяет состояние клавиатурного буфера.
Функция 0Ch – сброс буфера клавиатуры. Функция очищает буфер клавиатуры и вызывает клавиатурную функцию MS DOS, номер которой определяется содержимым регистра AL.
Клавиатурные функции библиотеки MicroSoft C.
Стандартные библиотеки трансляторов MS Quick C и С 6.0 содержат набор функций, предназначенных для работы с клавиатурой. Эти функции повторяют и немного дополняют возможности функций MS DOS и BIOS, обслуживающих клавиатуру.
Самые простые из них – getch () и getche (). Они описаны в файле conio.h. Первая не отображает прочитанный символ на экране, а вторая – отображает прочитанный символ на экране.
Приведем пример программы, отображающей на экране ASCII-коды и расширенные ASCII-коды нажимаемых клавиш:
#include <conio.h>
#include <ctdio.h>
#include <сtype.h>
voidmain() {
int key;
//Читаем в цикле символы с клавиатуры и отображаем ASCII-коды нажатых клавиш.
//Выходим из цикла при нажатии клавиши ESC.
For (; ;) {
// Читаем символ
key = getch ();
// Если прочитанный символ равен 0, вызываем функцию getch ()
// Для получения расширенного ASCII-кода нажатой клавиши.
if ((key = = 0)|| (key = = 0*e0)) {
key = getch ();
printf(«Расширенный ASCII-код:\t»);
}
else printf(«ASCII-код:\t»);
printf(«%d\n», key);
// При нажатии на клавишу ESC выходим из цикла
if (key = = 27) break;
}
}
Для проверки буфера клавиатуры на наличия символа можно использовать функцию kbhit(). Она описана в файле conio.h:
int kbhit (void);
Если буфер клавиатуры не пуст функция возвращает ненулевые значения. В этом случае программа может прочитать символы из буфера клавиатуры при помощи функции getch () и getche (). Если буфер пуст, функция возвращает нулевое значение.
Приведем пример программы, ожидающей нажатия на любую клавишу. Во время ожидания программа выводит на экран поочередно символы «<» и «>»:
#include <conio.h>
voidmain() {
int key;
// Ожидаем нажатия на любую клавишу.
// Во время ожидания выводим на экран поочередно символы «<» и «>»
while (!kbhit()) printf («<\b>\b»);
// Как только будет нажата какая-нибудь клавиша, выводим её ASCII-код.
key = getch ();
// Если прочитанный символ равен 0, вызываем функцию getch ()
// для получения расширенного ASCII-кода нажатой клавиши.
if ((key = = 0)|| (key = = 0*e0)) {
key = getch ();
printf(«Расширенный ASCII-код:\t»);
}
else printf(«ASCII-код:\t»);
printf(«%d\n»,кеу);
}
Для ввода с клавиатуры строки символов можно использовать функцию cgets (), работающей аналогично функции 0Ah. Функция описана в файле conio.h.
Существует и более удобная для использования функция, позволяющая вводить строку с клавиатуры, а точнее из стандартного потока ввода. Эта функция gets ():
char*gets (char*buffer);
Функция gets () описана в файле stdio.h.
Ещё одна полезная функция которую можно использовать для ввода с клавиатуры, – scanf ().
Клавиатурные функции в среде Turbo PascalВ среде турбо Паскаль наряду со стандартными для Паскаля возможностями, как например, процедура Read/RaedLn вводят с клавиатуры только типизированные данные причем с обязательным эхо-повтором набираеммых символов на экране. С их помощью нельзя также определить факт нажатия какой-либо специальной клавиши (функциональной клавиши, клавиши управления курсором и т. п.). Разработчики турбо Паскаля предусмотрели несколько подпрограмм, существенно увеличивающих возможности текстового ввода/вывода. Эти подпрограммы сосредоточенны в модуле СRT, входящем в комплект поставки турбо Паскаля.
Дополнительные возможности управления клавиатурой реализуются двумя функциями KeyPressend и ReadKey.
Функция KeyPressend. Возвращает значение типа Boolean, указывающее состояние буфера клавиатуры: False означает, что буфер пуст, а True –что в буфере есть хотя бы один символ, еще не прочитанный программой. Чтение из буфера обеспечивается стандартными процедурами Read/ReadLn, а также функцией ReadKey. Использование функции KeyPressend не задерживает исполнения программы: функция немедленно анализирует буфер и возвращает то или иное значение, не дожидаясь нажатия клавиши.
Функция ReadKey. Возвращает значение типа Char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотябы один не прочитанный символ, код этого символа берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу. Ввод символа с помощью этой функции не сопровождается эхо-повтором и содержимое экрана не меняется.
Используя функцию ReadKey можно в требуемой точке программы очистить буфер. Это можно достичь следующим образом:
Uses CRT
var C : Char
beginwhele KeyPresSend do
C:= ReadKey;
..........
end.
При использовании процедуры ReadKey следует учесть, что в клавиатурный буфер помещается расширенные скан-коды. Если нажимается любая алфавитно-цифровая клавиша, расширенный скан-код совпадает с ASCII-кодом соответствующего символа. При наличии функциональных клавиш F1...F10, клавиш управления курсором, клавиш Insert, Home, Delete, End, Page Up, Page Down в буфер помещается двух байтная последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, используется для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна ещё раз обратиться к функции, чтобы прочитать скан-код нажатой клавиши.
Приведем пример программы, которая позволяет определить скан-код. Для завершения работы программы нажмите клавишу ESC:
Uses CRT
var C : Char
begin repeat C:=ReadKey;
if C<>#0 then
writeLn (ord(C))
elsewriteLn («0», ord(ReadKey:8)
until C = #27 {27 – ASCII-код клавиши ESC}
end.
Системные и программные средства настройки и регулировки параметров клавиатуры
К параметрам клавиатуры, которые можно настраивать, относят время, которое должно пройти, прежде чем нажатая клавиша начнет генерировать повторно символ, а также насколько часто при длительном нажатии на клавишу должен повторно выдаваться соответствующий символ. Эти параметры называют задержка до начала регенерации и частота регенерации, их можно регулировать средствами DOS, установками и средствами Windows.
Для установки режима повтора в MS DOS используется команда MODE. Формат команды:
MODE CON [ : ] [RATE = W DELAY = V ]
назначение параметров и ключей:
W – параметр устанавливает, как часто в течении одной секунды должн повторятся символ. Допускаются значения из интервала от 1 до 32 (по умолчанию берется 20);
V – определяет время, которое должно пройти, прежде чем автоматически сработает повтор. Допускаются значения от 1 до 4, где каждая единица соответствует 0.25 секунды.
Пример:MODE CON RATE 25 DELAY 2
Если вы будете удерживать какую-либо клавишу более половины секунды, то соответствующий ей символ станет автоматически повторятся с частотой 25 раз в секунду.
Более комфортно, с точки зрения наглядности средства регулирования параметров клавиатуры предоставляет утилита Norton Control Center (NCC). Можно регулировать параметры клавиатуры в среде «Windows 95». Один из вариантов:
Пуск Настройка Панель управления Клавиатура;
или
Контекстное меню Свойства Клавиатура;
или
Мой компьютер Панель управления Клавиатура.
Можно сразу же опробовать сделанные установки и при необходимости подстроить их под свои потребности.
Порядок выполнения работы.
При домашней подготовке изучить принцип действия кодирующей клавиатуры, назначения клавиш, организацию обмена информацией, блок схему кодирующей клавиатуры.
Составить программу для демонстрации использования клавиатурных функций согласно варианта (таблица №2.5, №2.6).
Продемонстрировать работу программы.
Выполнить настройку клавиатуры, с помощью средств имеющихся в компьютерной системе (OC DOS, OC WINDOWS 95, NORTON UTILITES и др.).
Содержание отчета.
Привести структуру компьютерной системы, используемой в работе, более подробно указать элементы, участвующие в процессе преобразования информации.
Привести назначение контактов разъёма клавиатуры и временную диаграмму сигналов при нажатии и отпускании клавиши.
Выполнить индивидуальное задание согласно варианта (таблица 2.5, 2.6):
Номер варианта, выбирается по номеру в списке журнала преподавателя.
Составить программу, демонстрирующую выполнение заданных функций (таблица 2.5).
Составить программу, демонстрирующую выполнение заданных функций (таблица 2.6).
Письменно ответить на контрольный вопрос (Таблица 2.5).
Контрольные вопросы.
В чем особенность работы клавиатуры АТ?
Объясните процессы, происходящие в системе при нажатии той или иной клавиши?
Что такое скан-код? Перечислите типы скан-кодов?
Какая информация передается при нажатии, и какая при отпускании клавиши?
Какую функцию выполняет контроллер клавиатуры 8042?
Как осуществляется управление клавиатурой АТ?
Утилиты, программные средства и команды DOS для работы с клавиатурой и настройки ее параметров.
Какие средства DOS используются для работы с клавиатурой?
Чем кодирующая клавиатура отличается от не кодирующей?
В каких случаях клавиатурой генерируется звуковой сигнал?
Что такое буфер клавиатуры и для чего нужен?
Какие средства BIOS используются для работы с клавиатурой?
В чем особенность клавиатуры USB.
Опишите аппаратные средства, которые используются для работы с клавиатурой.
Как осуществляется русификация клавиатуры?
Литература .Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC: в 2-х ч. Ч1.-М.: «ДИАЛОГ-МИФИ», 1992.-208с (библиотека системного программиста, Т2), с 30-60.
Гук М. Аппаратные средства IBM PC, второе издание - С. Пб.: Питер, 1997.-288с, с 95-111.
Борзенко А.Е. IBM PC: Устройство, ремонт, модернизация.-2-е издание, перераб. и доп. - М :ТОО фирма «Компьютер Пресс», 1997.-344с., с 258-262.
Франкен Г., Молявко С.М. MS DOS 6.22 .... для пользователя. - К.: Торгово-издательское бюро BHV, 1995.-448с., с 11-13, 318.
А. Марголис. Поиск и устранение неисправностей в персональных компьютерах. - К.: фирма «Диалектика», 1994.-368с, с 155-158.
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. - М.: «Нолидж», 1997.-616с.,с 262-265.
Богумирский Б. Эффективная работа на IBM PC. - С.Пб.: Питер, 1996.-688с., с 48-49, 251, 402-404.
Том Сван. Освоение Borland C++ 4.5. Энциклопедия функций. - К.: «Диалектика», 1996.-320.
Индивидуальные задания к лабораторной работе «Исследование клавиатуры»
Составить программу для установки заданных характеристик клавиатуры, согласно таблицы №2.5
Таблица №2.5. Задания для установки характеристик клавиатуры.
Номер варианта Байт определяющий характеристики режима Контрольный вопрос.
период автоповтора задержка включения режима автоповтора 1 0 00 1
2 1 01 2
3 2 10 3
4 4 11 4
5 6 00 5
6 8 01 6
7 0A 10 7
8 0D 11 8
9 0F 00 9
10 10 01 10
11 12 10 11
12 14 11 12
13 18 00 13
14 1F 01 14
15 0 11 15
16 1 10 14
17 2 01 13
18 3 00 12
19 5 11 11
20 9 10 10
21 0B 01 9
22 0E 00 8
23 13 01 7
24 15 10 6
25 17 11 5
26 1A 00 4
Для установки характеристик режима клавиатуры в порт 60h необходимо записать код команды 0F3h,
затем байт, определяющий характеристики режима согласно таблица №2.5, для указанного преподавателем варианта. Формат байта, определяющего характеристики режима:
7654 0

Период автоповтора
Задержка включения
0

При инициализации системы период задержки для включения режима автоповтора устанавливается модулями BIOS равным 500 мс при периоде автоповтора равном 10 повторам в секунду. Период автоповтора изменяется от 30.0 (при значении битов 0 - 4 = 0); до 2.0 (при значении битов 0 - 4 = 1Fh ), то есть количество посылок скан-кода, генерируемого клавиатурой в 1 секунду колеблется от 30 до 2.
Задержка включения режима автоповтора изменяется следующим образом:
биты 5,6 задержка, мс
00 250
01 500
10 750
11 1000
то есть от 1/4 до одной секунды.
Составить программу управления светодиодами лицевой панели клавиатуры. (таблица №2.6).
Для управления светодиодами, расположенными на лицевой панели клавиатуры используется команда 0EDh. Вслед за этой командой в порт 60h процессора 8042 необходимо записать байт, имеющий следующий вид:
БитыЗначение
01 = включить светодиод Scroll Lock
11 = включить светодиод Num Lock 21 = включить светодиод Caps Lock3-7не используются
Таблица №2.6. Задание для установки состояний индикаторов.
Номер варианта Установка начального состояния индикаторов Состояния индикаторов после нажатия на любую клавишу
Scroll Lock Num Lock Caps Lock Scroll Lock Num Lock Caps Lock
1 1 1 1 1 0 0
2 0 1 1 0 0 1
3 0 0 1 0 1 1
4 0 1 0 1 0 1
5 1 0 0 0 1 0
6 1 0 1 0 1 0
7 1 1 0 1 1 1
8 0 0 0 1 1 0
9 1 0 0 0 1 1
10 1 0 1 0 1 0
11 1 1 0 0 0 1
12 1 1 1 1 0 0
13 0 0 0 1 0 1
14 0 1 0 1 0 1
15 0 0 1 1 1 1
16 0 0 0 0 1 1
17 1 1 1 0 0 0
18 0 1 1 1 0 0
19 0 0 1 1 0 1
20 1 0 1 0 1 0
21 0 1 0 0 0 1
22 1 0 0 0 1 1
23 0 0 0 1 1 1
24 1 0 1 1 1 1
25 0 1 1 0 0 0
1 – соответствует включенному светодиоду
0 – соответствует отключенному светодиоду
Перед посылкой второго байта команды необходимо в программе предусмотреть небольшую задержку: для СИ++:
for (i = 0; i < 4000; i ++ );

Примечание: Язык программирования выбирается самостоятельно. Программа должна быть в виде .ЕХЕ-файла. В процессе выполнения программы должны быть комментарии, поясняющие выполняемые функции.
Например:
Uses crt;
Var key:char;
BEGIN
clrscr;
writeln('Устанавливаем новые параметры повтора');
asmmov dx,60h
mov ax,0f3h
out dx,axmov ax,00001111b
out dx,ax
end;
writeln('Новые параметры установлены');
writeln('Нажмите ESC для продолжения или др. для теста новых пар-ов');
repeatkey:=readkey;
if key<>#27 then write(key);
until (key=#27);
writeln(#13110+'Установка начального состояния индикаторов');
asmmov dx,60h
mov ax,0edh
out dx,axmov ax,0000000lbout dx,axend;
writeln('Scroll Num Caps');
writeln(' ON OFF OFF');
writeln('Нажмите любую клавишу, чтобы установить новое состояние
индикаторов');
readkey;
asmmov dx,60h
mov ax,0edh
out dx,axmov ax,00000110b
out dx,axend;
writeln('Scroll Num Caps');
writeln(' OFF ON ON');
write_lnlli3#10t'Нажмите ENTER для выхода');
readln;
end.
Лабораторная работа№4
ИССЛЕДОВАНИЕ PIO 32TMR
Цель работы : Изучить назначение, функциональную структуру; ознакомиться с техническими характеристиками модуля, способами программирования, режимами работы, способами их установки.
Назначение: Модуль параллельного цифрового интерфейса ввода-вывода PIO-32TMR предназначен для обмена информацией между персональной ЭВМ типа IBM PC/XT/AT и внешними устройствами, такими как измерительные приборы и системы, аналого-цифровые и цифро-аналоговые преобразователи, системы сбора и обработки данных, устройства контроля и сигнализации, устройства управления и регулирования, периферийные устройства ЭВМ с параллельным обменом информации – принтеры, плоттеры и др.Модуль может быть использован для сопряжения ПЭВМ как с собственными разработанными аппаратными средствами (программаторы, автономные контроллеры, устройства индикации и др. ), так и с промышленными приборами и системами. Наличие большого числа линий ввода-вывода позволяет реализовать не только обмен данными, а также требуемый протокол обмена путем его программной эмуляции. Наличие программируемого таймера-счетчика позволяет осуществить генерацию временных интервалов произвольной частоты, осуществить формирование импульсов с программируемой задержкой и длительностью, организовать подсчет импульсов от внешних источников данных или измерение интервалов времени, а также осуществить синхронизацию внешних процессов. Наличие дополнительного макетного поля позволяет пользователю самостоятельно осуществить установку нескольких ИМС средней степени интеграции для решения конкретных практических задач.
Данный модуль является оригинальной разработкой и не имеет зарубежных аналогов. С функциональной точки зрения наиболее близким аналогом является модуль PCL-720 семейства PC-LabCard.
Управление модулем согласуется с общепринятыми принципами для модулей параллельного ввода-вывода, поддерживаемых, например, фирмой Keitheley/Metrabyte/Assist/DAC и другими производителями аналогичного оборудования. Это дает возможность использовать такое программное обеспечение как LabWindows, ASSYST, ASSYSTANT PLUS, Labtech Notebook и аналогичное.
Структурная схема модуля.
Модуль параллельного цифрового интерфейса ввода-вывода типа PIO-32TMR обеспечивает вывод данных по 16 линиям вывода, а также обеспечивает полный доступ пользователя ко входам и выходам программируемого таймера. Все линии совместимы с уровнями ТТЛ схем. Обеспечивается выдача на внешний разъем тактового сигнала внутреннего генератора для внешней синхронизации, прием тактовых счетных импульсов
от внешнего источника, а также прием внешних сигналов запроса прерывания и разрешения запроса прерывания.
Упрощенная структурная схема модуля приведена на рис. 1.
Генератор
ОРА
ОРВ
IРА
IРВ
C0
G0
Q0
C1
G1
Q1
C2
TMR G2
Q2
Буф.
АП5
Буфер
шины
дан-ныхДешифратор
адреса
Шина IBM PC Выходной регист
Выходные порты
-EZA


Шина … OPA0-OPA7
данных Запись ОРА

D0-D7 …OPB0-OPB7
Запись ОРВ
-EZB

Входные порты EWRA
Шина
адреса Чтение IPA … IPA0-IPA7
А2-А9

Чтение в-в …IPB0-IPB7
Чтение IPB
Запись в-в
EWRB
Конфигуратор базового адреса
Установка базового ECLK
адреса
CS53 EC0
EG0
Установкаисточника EQ0
Тактовыхимпульсов EC1
EG1
EQ1
EC2 EC2
-IOW EG2
ПрерыванияIRQ2-IRQ7 EQ2
Установка номера
вектора прерыания
Разреш.прерыв.
INTE
-INT
Запрос прерыв.
Статические регистры выходных и входных портов PA и PB показаны совмещенно одним блоком. В качестве выходных портов использованы ИМС 555ИР23, в качестве входных портов – 555ИР22, а в качестве счетчика-таймера – БИС КР580ВИ53(54). Все входные и выходные линии платы, кроме линий портов, дополнительно буферизированы с помощью ИМС КР555АП5(4) (на рис. 1 показано упрощенно). В отдельных платах возможно использование аналогов указанных ИМС.
Все линии цифрового ввода-вывода осуществляются через внешний 64-контактный разъем типа СНО 58-64, который доступен со стороны задней панели ПЭВМ IBM PC/XT/AT.
Пользователь может использовать сигнал прерывания от внешнего источника, который стробируется внешним сигналом разрешения. Запрос прерывания может быть помещен пользователем на один из уровней с номерами 2-7, доступных на ПЭВМ данного типа. Это достигается путем установки соответствующей данному уровню прерывания перемычки на плате. Так как формируемый запрос на прерывание поступает на контроллер прерывания 8259А, пользователь отвечает за его программирование в соответствии с установленными прерываниями.
Тактовый вход нулевого канала таймера С0 может быть подключен или к внутреннему генератору тактовых импульсов, или путем переустановки перемычки его можно подключить к внешнему источнику тактовых импульсов или импульсному источнику внешних событий. (Внимание! Плата поставляется с заранее установленной конфигурацией, при которой на вход С0 поступает частота от внутреннего генератора тактовых импульсов. Чтобы подключить внешний источник импульсных сигналов на вход С0 требуется перерезать соединение перемычки 2-3 на печатной плате и установить внешнее соединение 2-1 – см. рис 2).
Рис. 2 Расположение перемычки для установки источника тактовых импульсов на вход нулевого канала таймера С0:
2-3: подключен внутренний генератор (по умолчанию);
2-1: подключен внешний генератор (при отсутствии 2-3).
Установка базового адреса модуля
Адрес модуля PIO-32 может быть выбран пользователем для одного из четырех базовых адресов в пределах адресного пространства устройств ввода-вывода ПЭВМ. В качестве базовых приняты адреса 220Н, 228Н, 300Н и 308Н, которые являются свободными на ПЭВМ IBM PC. Для установки базового адреса платы необходимо установить соответствующую ему перемычку в нижней части платы.
Модуль требует выделения 6 ячеек в адресном пространстве устройств ввода-вывода, поэтому карта адресов принимает следующий вид:
Табл. 1
Операция Адрес Адресуемый регистр
Запись Базовый адрес + 0 Канал 0 таймера-счетчика
+ 1 Канал 1 таймера-счетчика
+ 2 Канал 2 таймера-счетчика
+ 3 Регистр управления таймера-счетчика
+ 4 Выходной порт ОРА
+ 5 Выходной порт ОРВ
Чтение Базовый адрес + 0 Канал 0 таймера-счетчика
+ 1 Канал 1 таймера-счетчика
+ 2 Канал 2 таймера-счетчика
+ 3 Регистр состояния таймера (только 8254)
+ 4 Входной порт IРА
+ 5 Входной порт IРВ
Местоположение перемычек векторов прерывания и базового адреса показано на рис. 3
DD 4
228H 300H
220H 308H
Перемычки Перемычки прерывания
базового 345672 номера векторов
адресса 00000 прерывания
00000
Рис. 3 Расположение перемычек прерывания и базового адреса.
Программирование модуля PIO-32TMR
Программирование данного модуля может быть осуществлено или на языке Ассемблер, или на языках высокого уровня, например Паскаль.
Программирование модуля осуществляется по-разному в зависимости от того, используется ли в работе таймер-счетчик.
Если таймер не используется, то достаточно путем простого программного обращения по адресам выходных портов ОРА и ОРВ или входных портов IPA и IPB производить соответственно вывод или ввод информации.
В случае использования таймера необходимо вначале произвести его инициализацию, записать в каналы счетчика требуемые коды предустановки, а также произвести установку перемычек на внешнем разъеме в соответствии с решаемой задачей и конфигурацией таймера. Более подробные сведения по работе с таймером типа КР580ВИ53(54) можно найти в справочной литературе.
Пример программирования:
Записываем байт управления в управляющий регистр таймера для случая инициализации канала 1 в режим 2 для счета в двоичном коде и загрузки обоих байтов в счетчик:
Basic: xxxx OUT (Base Address + 3), &H74
Turbo Pascal: port [Base Address + 3] := $74.
Производим предустановку счетчика значением 1024, например для установки коэффициента деления частоты генератора:
Basic: yyyy OUT (Base Address + 1), &H3F
Turbo Pascal: port [Base Address + 1] := $3F.
Производим прием информации из обоих входных портов:
Basic: zzzz Z% = INP (Base Address + 4)
vvvv V% = INP (Base Address + 5)
Turbo Pascal: port [Base Address + 4] := InputDataIPA;
port [Base Address + 5] := InputDataIPB.
После того, как произведена инициализация таймера, конфигурация сохраняется до момента новой записи в регистр управления таймера.
Режимы работы модуля
Порты ОРА и ОРВ предназначены только для вывода информации, а порты IPA и IPB – только для ввода. Каждый порт имеет байтовый формат и полностью независим один от другого. Входной и выходной порты одного канала (канала А или В) имеют один и тот же адрес в пространстве адресов внешних устройств IBM PC. Запись в порты или прием информации из них может осуществляться или путем обычного программного обращения, или путем использования режима прерывания от внешнего источника. При этом сигнал запроса прерывания EIRQ должен иметь низкий активный уровень, а сигнал разрешения внешнего запроса прерывания EINT – высокий активный уровень.
Так как выходные порты построены на регистрах с тремя состояниями, то путем объединения их выходных линий с одноименными линиями входных портов со стороны выходного разъема можно организовать двунаправленный обмен информацией между платой и внешним устройством или для однобайтовой или для двухбайтовой шины.
После инициализации таймера модуля PIO32TMR последний начинает сразу функционировать, т. к. тактовый вход С0 счетчика нулевого канала в исходной поставке подключен к внутреннему кварцевому генератору тактовых импульсов – обычно 1 МГц или 4МГц, в зависимости от установленного кварцевого резонатора. Этот же выход внутреннего генератора после буферизации выводится и доступен со стороны выходного разъема для синхронизации внешних событий. Кроме того, выход внутреннего генератора может быть отсоединен от входа С0 таймера и на него может быть подан извне входной тактовый сигнал ЕС0. Все остальные выводы таймера, относящиеся к его каналам, буферизованы и доступны пользователю со стороны выходного разъема.
На плате располагается также макетное поле, предназначенное для установки пользователем дополнительных нештатных элементов модуля, с целью расширения функциональных возможностей модуля PIO32TMR в соответствии с конкретной практической задачей.
Расположение и назначение перемычек
Расположение перемычек переключателей установки режимов и конфигурации на модуле PIO32TMR смотри на рис. 1.
Все линии цифрового ввода-вывода осуществляются через внешний 64-контактный разъем типа СНО 58-64, который доступен со стороны задней панели IBM PC/XT/AT, и показаны на рис. 4 и в табл. 2.
В А
1
2

31
32
Рис. 4 Расположение сигнальных линий на выходном разъеме СНО58-64.
Табл. 2 Наименование контактов выходного разъема СНО58-64.
Линия АЛиния ВКонтакт Наименование Контакт Наименование
1 EWRB (строб записи канала В) 1 EWRB (строб записи канала А)
2 -EZB (чтение из канала В) 2 -EZB (чтение из канала А)
3 -EIRQ (внешний запрос прерывания) 3 EINT (разрешение внешнего прерывания)
4 EG2 (внешний гейт счетчика 2) 4 EС2 (внешний тактовый вход сч. 2)
5 IPB7 5 IPB4
6 IPB5 6 IPB6
7 ECO(внешний тактовый вход счетчика 0) 7 EGO (внешний гейт счетчика 0)
8 IPB0 8 IPB3
9 IPB2 9 IPB1
10 ECLK(выход внутреннего тактового генератора) 10 EG1(внешний гейт счетчика 1)
11 EQ0(вых. Счетчика кан. 0) 11 EС1(внешний тактовый вход счетчика 1)
12 EQ1 12 EQ2
13 IPA4 13 IPA5
14 IPA6 14 IPA7
15 IPA3 15 IPA2
16 IPA1 16 IPA0
17 - 17 -
18 - 18 OPB7
19 - 19 OPB6
20 - 20 OPB5
21 - 21 OPB4
22 - 22 OPB0
23 - 23 OPB1
24 - 24 OPB3
25 - 25 OPB2
26 OPA5 26 OPA4
27 OPA7 27 OPA6
28 OPA2 28 OPA3
29 OPA0 29 OPA1
30 - 30 -
31 + 5 B 31 + 5 B
32 Общий ( GND ) 32 Общий ( GND )
Технические характеристики модуля
Табл.3
min max
Выходное напряжение низкого уровня, В- 0.5
Выходное напряжение высокого уровня, В2.4 -
Входной ток низкого уровня, мА - -0.4
Выходной ток низкого уровня, мА - 48
Ток потребления модуля, мА, не более - 480
Рабочий диапазон температур 0 +50
Габаритные размеры Полуплата IBM PC
(160 >< 100 мм)
Содержание отчета.
Тема работы.
Цель работы.
Назначение модуля параллельного цифрового интерфейса ввода-вывода PIO-32TMR.
Структурная схема платы цифрового интерфейса ввода-вывода PIO-32TMR.
Результаты выполнения индивидуальных задания.
Контрольные вопросы.
Назначение модуля параллельного цифрового интерфейса ввода-вывода PIO-32TMR.
Укажите элементы, входящие в состав модуля параллельного цифрового интерфейса ввода-вывода PIO-32TMR.
Порядок установки базового адреса модуля.
Способы программирования модуля в зависимости от использования в работе таймера-счетчика.
Режимы работы модуля.
Объясните способы организации ввода-вывода информации, реализуемые с помощью модуля.
Какие системные ресурсы необходимы для работы модуля?
Лабораторная работа№6
ИССЛЕДОВАНИЕ Шины PCI
Цель работы : Изучить сигналы и исследовать циклы шины PCI.
Назначение : Шина PCI предназначена для подключения различных адаптеров периферийных устройств, расширяющих возможности компьютерной системы.
Общие сведения
PCI (Peripheral Component Interconnect bus) - шина для подсоединения периферийных устройств. Стала массово применяться для Pentium-систем, но используется и с 486 процессорами. Частота шины от 20 до 33 МГц, теоретически максимальная скорость 132/264 Мбайт/с для 32/64 бит. В современных материнских платах частота на шине PCI задается как 1/2 входной частоты процессора, т.е при частоте 66 MHz на PCI будет 33 MHz, при 75 MHz - 37.5 MHz.
Имеет версии с питанием 5V, 3.3V и универсальную (с переключением линий +VI/O c 5V на 3,3V). Ключами являются пропущенные ряды контактов 12, 13 и 50, 51. Для слота с питанием 5V ключ расположен на месте контактов 50, 51, для 3,3 В - 12, 13, а для универсального - два ключа: 12, 13 и 50,51. 32-битный слот заканчивается контактами А62/В62, 64-битный - А94/В94.
Слот PCI самодостаточен для подключения любого контроллера (VLB не работала без ISA), на системной плате может сосуществовать с любой из других шин ввода-вывода. Шина PCI - первая шина в архитектуре IBM PC, которая не привязана к этой архитектуре. Она является процессорно-независимой и применяется, например, в компьютерах Macintosh.В отличие от остальных шин, компоненты расположены на левой поверхности плат PCI-адаптеров. По этой причине крайний PCI-слот обычно разделяет использование посадочного места с соседним ISA-слотом (Shared slot).
Процессор через так называемые мосты (PCI Bridge) может быть подключен к нескольким каналам PCI, обеспечивая возможность одновременной передачи данных между независимыми каналами PCI (возможно только в спецификации 2.1).
Автоконфигурирование устройств (выбор запросов прерывания, каналов DMA) поддерживается средствами BIOS материнской платы по образу и подобию стандарта Plug & Play. В настоящее время действует спецификация PCI 2.1.
Стандарт PCI определяет для каждого слота конфигурационное пространство размером до 256 восьмибитных регистров, не приписанных ни к пространству памяти, ни к пространству ввода-вывода. Доступ к ним осуществляется по специальным циклам шины Configuration Read и Configuration Write, вырабатываемым контроллером при обращении процессора к регистрам контроллера шины PCI, расположенным в его пространстве ввода-вывода.
На PCI определены два основных вида устройств - инициатор (по ГОСТ - задатчик), т.е. устройство, получившее от арбитра шины разрешение на захват ее и устройство назначения, цель (target) с которым инициатор выполняет цикл обмена данными.
В мае 1999 года появилась спецификация 2.2 стандарта PCI и в это же время фирма Intel выпустила первый chipset с поддержкой версии 2.2 - i810. Поддержка версии 2.2 также появилась в некоторых платах на наборе 440BX. В соответствии с новой спецификацией появились следующие новые возможности:
Поддержка "горячей" замены PCI устройств, называемой в стандарте как PCI Hot-Plug. Ввод этой функции позволит добавлять/изымать PCI платы без выключения компьютера. Такая возможность особенно необходима для серверных платформ
Система управления энергопотреблением для устройств на шине PCI. Позволяет управлять энергопотреблением как для внешних PCI плат так и для встроенных на материнской плате устройств. Механизм управления подстроен под стандарт ACPI для облегчения управления энергопотреблением PCI устройств со стороны операционной системы.
Дополнены и переработаны требования к конструктивной реализации PCI плат.
Следует помнить, что для практического использования новых возможностей PCI расширения стандарта должны быть поддержаны как контроллером шины PCI так и самим PCI устройством.
 
Назначение контактов шины PCI

Рис1.
Конструктивно, cлоты PCI представляют собой щелевые разъемы, имеющие контакты с шагом 0,05 дюйма. Слоты расположены несколько дальше от задней панели, чем ISA/EISA или МСА. Карты PCI могут предназначаться для уровня интерфейсных сигналов 5 В и 3,3 В, а также быть универсальными. Слоты PCI имеют уровни сигналов, соответствующие питанию микросхем PCI-устройстн системной платы: либо 5 В, либо 3,3 В. Во избежание ошибочного подключения слоты имеют ключи, определяющие номинал напряжения. Ключами являются пропущенные ряды контактов 12, 13 и 50, 51. Для слота на 5 В ключ расположен на месте контактов 50, 51; для 3,3 В — 12, 13. Па краевых разъемах карт PCI имеются ответные прорези на месте контактов 50, 51 (5 В) и 12,13 (3,3 В): на универсальной карте имеются оба ключа. Ключи не позволяют установить карту в слот с неподходящим напряжением питания. Карты и слоты различаются лишь питанием буферных схем, которое поступает с линий +V I/O. На рис. 1 приведена нумерация контактов разъёма PCI как со стороны установки элементов, так и со стороны монтажа. Назначение контактов приведено в таблице 1.
Таблица SEQ Таблица \* ARABIC 1 Назначение контактов разъёма PCI
Разъем шины PCI
Ряд ВНомер Ряд АРяд ВНомер Ряд А-12 В1 -TSTRES -C / BE 3 26 IDSEL
Test Clock 2 +12 B AD 23 27 +3,3 B
GND 3 TSTMSLCT GND 28 AD 22
Test DO 4 Test DO AD 21 29 AD 20
+5 B 5 +5 B AD 19 30 GND
+5 B 6 -INTR A +3,3 B 31 AD 18
-INTR B 7 -INTR C AD 17 32 AD 16
-INTR D 8 +5 B -C / BE 2 33 +3,3 B
-PRSNT 1 9 Reserved GND 34 -FRAME
Reserved 10 +VI / O -IRDY 35 GND
-PRSNT 2 11 Reserved +3,3 B 36 -TRDY
GND / Ключ 12 GND /Ключ -DEVSEL 37 GND
GND / Ключ 13 GND /Ключ GND 38 -STOP
Reserved 14 Reserved -Lock 39 +3,3 B
GND 15 -RST ParityER 40 SDONE
Clock 16 +VI / O +3,3 B 41 -SBOFF
GND 17 -GNT SysERR 42 GND
-REQ 18 GND +3,3 B 43 PAR
+V I/O 19 Reserved -C / BE 1 44 AD 15
AD 31 20 AD 30 AD 14 45 +3,3 B
AD 29 21 +3,3 B GND 46 AD 13
GND 22 AD 28 AD 12 47 AD 11
AD 27 23 AD 26 AD 10 48 GND
AD 25 24 GND GND 49 AD 9
+3,3 B 25 AD 24 GND / Ключ 50** GND / Ключ
GND /Ключ 51** GND / Ключ GND 73 AD 56
AD 8 52 -C / BE 0 AD 55 74 AD 54
AD 7 53 +3,3 B AD 53 75 +VI / O
+3,3 B 54 AD 6 GND 76 AD 52
AD 5 55 AD 4 AD 51 77 AD 50
AD 3 56 GND AD 49 78 GND
GND 57 AD 2 +VI / O 79 AD 48
AD 1 58 AD 0 AD 47 80 AD 46
+ VI / O 59 +VI / O AD 45 81 GND
-ACK 64 60 -REQ64 GND 82 AD 44
+5 B 61 +5B AD 43 83 AD 42
+5 B 62 +5B AD 41 84 +VI / O
Конец 32-битного разъема GND 85 AD 40
  AD 39 86 AD 38
Reserved 63 GND AD 37 87 GND
GND 64 -C / BE 7 +VI / O 88 AD 36
-C / BE 65 - C / BE 5 AD 35 89 AD 34
-C / BE 66 + VI / O AD 33 90 GND
GND 67 PAR 64 GND 91 AD 32
AD 63 68 AD 62 Reserved 92 Reserved
AD 61 69 GND Reserved 93 GND
+VI / O 70 AD 60 GND 94 Reserved
AD 59 71 AD 58 Конец 64-битного разъема
AD 57 72 GND *12, 13 - ключ для 3,3V
**50,51 - ключ для 5V
На рис. 2 изображена 32-битная карта максимального размера (Long Card), длина короткой платы (Short Card) — 175 мм, но многие карты имеют и меньшие размеры. Карта имеет обрамление (скобку), стандартное для конструктива ISA (раньше встречались карты и с обрамлением в стиле MCA IBM PS/2.
Рис. 2
Сигналы шины PCI
Знак - (минус) перед названием сигнала означает, что активный уровень этого сигнала логический ноль, обозначение {XX:0} означает группу сигналов с номерами от 0 до XX.
AD{31:0} - мультиплексированная шина адреса/данных. Адрес передается по сигналу - FRAME, в последующих тактах передаются данные.
-C/ BE{3:0} - команда/разрешение обращения к байтам. Команда, определяющая тип очередного цикла шины (чтение-запись памяти, ввода/вывода или чтение/запись конфигурации, подтверждение прерывания и другие) задается четырехбитным кодом в фазе адреса по сигналу - FRAME.
-FRAME - индикатор фазы адреса (иначе - передача данных).
-DEVSEL - выбор инициатором устройства назначения.
-IRDY - готовность инициатора к обмену данными.
-TRDY - готовность устройства назначения к обмену данными.
-STOP - запрос устройства назначения к инициатору на останов текущей транзакции.
-LOCK - используется для установки, обслуживания и освобождения захвата ресурса на PCI.
-REQ {3:0} - запрос от PCI-устройства на захват шины (для слотов 3:0).
-GNT {3 0} - разрешение мастеру на использование шины.
PAR - общий бит четности для линий AD{31:0} и C/BE{3:0}.
-ParityER - сигнал об ошибке по четности (от устройства, ее обнаружившего).
-RST - сброс всех устройств.
IDSEL - выбор устройства назначения в циклах считывания и записи конфигурации.
-SERR - системная ошибка, активизируется любым устройством PCI и вызывает немаскируемое прерывание процессора (NMI).
-REQ64 - запрос на 64-битный обмен.
-ASK64 - подтверждение 64-битного обмена.
-INTR A,B,C,D - линии запросов прерывания, направляются на доступные линии IRQ BIOS компьютера. Запрос по низкому уровню допускает разделяемое использование линий прерывания.
Clock - сигнал синхронизации на тактовой частоте шины.
Test Clock, -TSTRES, TestDO, TestDI - сигналы для тестирования адаптеров по интерфейсу JTAG (на системной плате обычно не задействованы).
TSTMSLCT - перевод в режим тестирования.
Конфигурация PCI
   Шина PCI имеет возможность электронной конфигурации подсоединенных к ней устройств. Это позволяет автоматически перераспределить ресурсы компьютера (диапазоны адресов памяти и портов ввода/вывода, линии прерывания и др.) между устройствами. Так-же возможно аппаратное выключение устройств в случае обнаружения конфликта. Координационные функции по распределению ресурсов между устройствами выполняют специальные конфигурационные программы. Все это вместе представляет собой технологию Plug&Play.
   В шине PCI для осуществления конфигурации устройств существуют две команды - чтение и запись конфигурации. При помощи этих команд осуществляется определение типов устройств, их потребностей в ресурсах и предоставлении этих ресурсов. Каждое устройство подключенное к PCI содержит 256 байт данных конфигурации. Формат этих данных показан в таблице 2.6.1.    
Таблица 2.6.1.  Формат данных конфигурации.
Смещение адреса  Символ  Назначение регистра
00-01  VID  Идентификатор производителя
02-03  DID  Идентификатор устройства
04-05  PCICMD  Регистр команды
06-07  PCISTS  Регистр статуса
08  RID  Идентификатор версии
09-0x0B  CCODE  Класс код
0x0C  CLSIZE  Размер кэш линии
0x0D  CLSIZE   Latency таймер (максимальное время захвата шины)
0x0D  HTYPE  Тип заголовка
0x0E  BIST  Регистр самотестирования
0x10-0x27h  -  Регистры базовых адресов (ввода/вывода или памяти)
0x28-0x2F  -  Резерв  
0x30-0x33  -  Базовый адрес ПЗУ  
0x34-0x3F  -  Резерв  
0x40-0xFF  -  Регистры, определяемые производителем.
   Доступ к этим данным осущетствляется при помощи линии IDSEL, подключенной индивидуально к каждому устройству (слоту расширения). При этом конфигурационное обращение идет не во всех устройствах одновременно, а осуществляется поочередный доступ.    Каждому устройству, подключенному к PCI шине (интегрированным мостам или слотам расширения), присваивается некоторый адрес. Этот адрес индивидуален для каждого устройства и слота расширения и определяется схемотехникой системы. Например, если в один слот расширения вставлена видеокарта, то ее конфигурационное пространство доступно по адресу этого слота, переустановив ее в другой слот она уже будет иметь другой адрес.    Спецификацией определены несколько механизмов доступа к конфигурационному пространству, но в простых системах доступ осуществляется через специальные регистры моста центрального процессора - регистры адреса и данных конфигурации.
Регистр установки конфигурационного адреса(CONFADD).
Адрес порта ввода вывода: 0xCF8; значение по умолчанию: 00’00’00’00; доступ: чтение/запись.
Bit  Описание
31  включение конфигурации 1=включено; 0=выключено.
30:24 зарезервировано
23:16 шина
15:11 устройство
10:8 функция
7:2  адрес регистра
1:0  зарезервировано
Регистр конфигурационных данных(CONFDATA).
Адрес порта ввода вывода: 0xCFC; значение по умолчанию: 00’00’00’00; доступ: чтение/запись.
Если 31-й бит в CONFADD установлен в 1, то любое обращение в CONFDATA регистр переводится в конфигурационное пространство соответственно установкам в CONFADD регистре.
Просмотреть конфигурационные пространства устройств, подключенных к PCI шины можно при помощи программы, описаной в пункте 4.1
Адресация на PCI
Шина PCI имеет 3 адресных пространства:
устройств ввода/вывода; памяти; конфигурации.
Шина PCI оперирует с физической памятью объемом до 4 Гбайт. Каждый байт памяти имеет свой физический адрес – от 0 (00000000h) до 232 - 1 (FFFFFFFFh). В 32х разрядной памяти шины PCI хранятся 8 – разрядные байты, 16-разрядные слова и 32-разрядные двойные слова. Слова содержатся в двух смежных байтах памяти, а двойные слова - в четырех смежных байтах, причем младший байт располагается в ячейке с меньшим адресом, а старший байт в ячейке с большим адресом. Адресом слова или двойного слова является адрес младшего байта. Обращение к 32х разрядной памяти должно производиться по адресу кратному четырем (например, 0h, 4h, 8h, Сh…), а доступ к байтам и словам осуществляется при помощи сигналов -C/BE[3:0]:
-C/BE0 выбирает байт AD0-AD7; -C/BE1 выбирает байт AD8-AD15; -C/BE2 выбирает байт AD16-AD23; -C/BE3 выбирает байт AD24-AD31.
Адресные сигналы AD00 и AD01 продублированы сигналами C/BE#[0:3] по следующей схеме:
AD[01:00] -C/BE [0:3]     00      xxx0     01      xx01     10      x011     11      0111 где: 0 – выбирает; 1 – не выбирает; x – значение зависит от формата выбираемых даных.
Сигналы -C/BE [0:3] в фазе передачи данных указывают какие именно и сколько байт передаются по линиям AD[31:00]. Такая побайтная адресация наиболее удобна для обмена информацией между устройствами. Количество адресуемых байтов определяет физический размер передаваемого операнда(1, 2, 3 или 4 байта). Диапазон адресов устройств ввода/вывода определен 32х разрядным адресом и составляет от 00000000h до FFFFFFFFh байт. Дешифрации подлежат все 32 бита адреса. Доступ к данным осуществляется по тому же принципу, что и для адресного пространства памяти. Но, реализация пространства ввода/вывода в PC-совместимых компьютерах определяется возможностями х86 процессоров - 65535 портов (от 00000000h до 0000FFFFh). Поэтому для организации доступа к портам ввода/вывода достаточна дешифрация только 16 бит адреса.

Циклы и временные диаграммы обмена шины PCI
Циклы шиныПо сигналам C/BE (от C/BE3 до C/BE0) во время фазы передачи адреса определяется тип цикла передачи данных.
C/BE Команда
0000 Interrupt Acknowledge (подтверждение прерывания)
0001 Special Cycle (специальный цикл)
0010 I/O Read (чтение порта)
0011 I/O Write (запись в порт)
0100 reserved (резервировано)
0101 reserved (резервировано)
0110 Memory Read (чтение памяти)
0111 Memory Write (запись в память)
1000 reserved (резервировано)
1001 reserved (резервировано)
1010 Configuration Read (чтение конфигурации)
1011 Configuration Write (запись конфигурации)
1100 Multiple Memory Read (множественное чтение памяти)
1101 Dual Address Cycle (двойной цикл адреса)
1110 Memory-Read Line (чтение памяти)
1111 Memory Write and Invalidate (запись в память и проверка)
Подтверждение прерывания (0000)Контроллер прерываний автоматически распознает сигнал INTA и реагирует на него передачей вектора прерывания по шине AD.
Специальный цикл (0001)
AD15-AD0 Описание
0x0000 Processor Shutdown (процессор прекращает работу)
0x0001 Processor Halt (останов процессора)
0x0002 x86 Specific Code (специальный код для машин на архитектуре Intel x86)
0x0003 to 0xFFFF Reserved (зарезервировано)
 
Чтение порта (0010) и запись в порт (0011)Порты ввода/вывода на шине PCI могут быть 8 или 16-ти разрядными, хотя собственно стандарт на шину PCI позволяет иметь 32-х разрядное адресное пространство. Это вызвано тем, что на компьютерах с архитектурой Intel x86, адрес порта может иметь не более 16 разрядов. Пока и 16-ти разрядный адрес порта не может быть использован, так как карты на шине ISA могут декодировать только 10 разрядов.
Адресное пространство конфигурации доступно по адресам портов 0x0CF8 (Адрес) и 0x0CFC (Данные), причем адрес должен быть записан первым.
Чтение памяти (0110) и запись в память (0111)
По шинам AD передается адрес двойным словом (четыре байта). Сигналы AD0 и AD1 декодировать не требуется. Истинность данных определяется сигналами C/BE.
Чтение конфигурации (1010) и запись конфигурационных данных (1011)
Эти операции выполняются для конфигурационного пространства PCI карты. Размер области конфигурации составляет 256 байт, причем читать/записывать в нее можно только в 32-х разрядной сетке, т.е. двойными словами. Поэтому AD0 и AD1 должны быть установлены в 0, AD2-7 содержать адрес двойного слова, AD8-10 используются для выбора адресуемого устройства, а оставшиеся шины адреса игнорируются.
Адрес/Бит 32 16 15 0
00 Unit ID | Manufacturer ID
04 Status | Command
08 Class Code | Revision
0C BIST | Header | Latency | CLS
10-24 Регистр адреса
28 Резерв
2C Резерв
30 Базовый адрес ПЗУ устройства
34 Резерв
38 Резерв
3C MaxLat|MnGNT | INT-pin | INT-line
40-FF Используется самим устройством
Примечания:
Unit ID - идентификационный номер устройства
Manufacturer ID - идентификатор производителя устройства
Status - состояние
Class Code - код класса устройства
BIST - Built-In Self Test - встроенный тест
Множественное чтение памяти (1100)
Это расширение обычного цикла чтения памяти. Используется для чтения больших блоков памяти без кэширования.
Двойной цикл адреса (1101)Двойной цикл адреса необходим в том случае, если необходимо передать 64-х разрядный адрес в версии PCI с 32-х разрядной адресной сетке. В первом цикле передаются четыре младших байта адреса, затем четыре старших байта. Во втором цикле необходимо также передать команду, определяющую тип устройства, чей адрес выставлен (порт ввода/вывода, память и т.д.). Собственно PCI поддерживает 64 разряда адреса для портов ввода/вывода, но в PC на процессорах архитектуры от Intel такое адресное пространство не поддерживается (не позволяет сам процессор).
Временные диаграммы шины PCIЦикл передачи данных на PCI, включает 4 фазы передачи данных, без тактов ожидания. Данные передаются по переднему фронту сигнала CLK
Рис.3 цикл записи и чтения
В каждой транзакции (обмене по шине) участвуют два устройства — инициатор (initiator) обмена, он же мастер (master) или ведущее устройство, и целевое (target) устройство (ЦУ), оно же ведомое (slave). Шина PCI все транзакции трактует как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных.
В каждый момент времени шиной может управлять только один мастер, получивший на это право от арбитра. Каждый мастер имеет пару сигналов -REQ для запроса на управление шиной и -GNT для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал -FRAME) только при активном полученном сигнале -GNT. Снятие сигнала -GNT не позволяет устройству начать следующую транзакцию, а при определенных условиях (см. ниже) заставляет прекратить начатую транзакцию. Арбитражем запросов на использование шины занимается специальный узел, входящий в чипсет системной платы. Схема приоритетов (фиксированный, циклический, комбинированный) определяется программированием арбитра.
Для адреса и данных используются общие мультиплексированные линии AD. Четыре мультиплексированные линии -С/ВЕ[3:0] обеспечивают кодирование команд в фазе адреса и разрешения байт в фазе данных. В начале транзакции мастер активизирует сигнал -FRAME, по шине AD передает целевой адрес, а по линиям -С/ВЕ — информацию о типе транзакции (команде). Адресованное ЦУ отзывается сигналом -DEVSEL. Мастер указывает на свою готовность к обмену данными сигналом -IRDY, эта готовность может быть выставлена и раньше получения -DEVSEL. Когда к обмену данными будет готово и ЦУ, оно установит сигнал -TRDY. Данные по шине AD передаются только при одновременном наличии сигналов -IRDY и -TRDY. С помощью этих сигналов мастер и ЦУ согласуют свой скорости, вводя такты ожидания. На рис. 4 приведена временная диаграмм обмена, в которой и мастер, и ЦУ вводят такты ожидания. Если бы они оба вве ли сигналы готовности в конце фазы адреса и не снимали их до конца обмена, то в каждом такте после фазы адреса передавались бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.
Каждая транзакция на шине должна быть завершена планово или прекращена, при этом шина должна перейти в состояние покоя (сигналы -FRAME и -IRDY пассивны). Завершение транзакции выполняется либо по инициативе мастера, либо по инициативе ПУ.
Мастер может завершить транзакцию одним из перечисленных ниже способов.
Нормальное завершение (Comletion) выполняется по окончании обмена данными.
Завершение по тайм-ауту {Time-out) происходит, когда во время транзакции у мастера отбирают право на управление шиной (снятием сигнала -GNT) и истекает время, указанное в его таймере Latency Timer. Это может случиться, если адресованное ЦУ оказалось непредвиденно медленным или запланирована слишком длинная транзакция. Короткие транзакции (с одной-двумя фазами данных) даже в случае снятия сигнала -GNT и срабатывания таймера завершаются нормально.
Транзакция отвергается {Master-Abort), когда в течение заданного времени мастер не получает ответа ЦУ (-DEVSEL).Транзакция может быть прекращена по инициативе ЦУ, для этого оно может ввести сигнал STOP#. Возможны три типа прекращения.
Повтор (Retry) — сигнал STOP# вводится при пассивном состоянии -TRDY до первой фазы данных. Эта ситуация возникает, когда ЦУ из-за внутренней занятости не успевает выдать первые данные в положенный срок (16 тактов). Повтор является указанием мастеру на необходимость нового запуска той же транзакции.
Отключение (Disconnect) — сигнал -STOP вводится во время или после первой фазы данных. Если STOP# введен при активном сигнале -TRDY очередной фазы данных, то эти данные передаются и на том транзакция завершается. Если -STOP введен при пассивном сигнале -TRDY, то транзакция завершается без передачи данных очередной фазы. Отключение производится, когда ЦУ неспособно своевременно выдать или принять очередную порцию данных пакета.
Отказ (Target-Abort) — сигнал -STOP вводится одновременно со снятием -DEVSEL (в предыдущих случаях во время появление сигнала -STOP сигнал -DEVSEL был активен). После этого данные уже не передаются. Отказ вводится, когда ЦУ обнаруживает фатальную ошибку или иные условия, по которым оно уже никак не сможет обслужить данный запрос. Использование трех типов прекращения вовсе не обязательно для всех ЦУ, однако любой мастер должен быть готов к завершению транзакций по любой из этих причин.

Рис. 4
Индивидуальные задания
к лабораторной работе «Шина PCI»
вари -
ант Контрольный
вопрос Тип цикла передачи данных Тип
обмена Соотношение скоростей
1
2
3
4
5 10
9
8
7
6 1
2
3
4
5 32-разрядный
64-разрядный
64-разрядный
32-разрядный
64-разрядный 1
2
1
2
1
6
7
8
9
10 5
4
3
2
1 6
7
1
2
3 32-разрядный
32-разрядный
64-разрядный
32-разрядный
32-разрядный 2
1
1
2
1
11
12
13
14
15 9
8
7
6
5 4
5
6
7
1 64-разрядный
32-разрядный
64-разрядный
32-разрядный
32-разрядный 2
1
2
1
1
16
17
18
19
20 10
4
3
2
1 2
3
4
5
6 64-разрядный
64-разрядный
32-разрядный
64-разрядный
32-разрядный 2
1
2
2
1
21
22
23
24
25
10
9
8
7
6
7
1
2
3
4
32-разрядный
64-разрядный
32-разрядный
32-разрядный
64-разрядный
1
1
2
1
2
В соответствии с индивидуальными заданиями необходимо:
письменно ответить на контрольный вопрос;
привести временную диаграмму и необходимые пояснения (тип временной диаграммы : 1 –чтение из порта; 2 – запись в порт; 3 – чтение из памяти; 4 – запись в память; 5 –подтверждение прерывания; 6 –чтение конфигурационных данных, 7-запись конфигурационных данных);
соотношение скоростей : 1-скорость задатчика = скорости целевого устройства, скорость задатчика > скорости целевого устройства
временная диаграмма должна соответствовать указанному типу обмена и типу цикла.
Порядок выполнения работы
При домашней подготовке изучить назначение и особенности шины расширения PCI, варианты циклов при обмене информации и используемые сигналы.
Содержание отчёта
Привести структуру шины PCI со всеми абонентами, к которым имеется доступ через магистраль.
Привести временную диаграмму обмена (тип обмена уточняется у преподавателя).
Результаты выполнения индивидуального задания.
Контрольные вопросы
Каково назначение и особенности шины PCI ?
На месте каких выводов размещены ключевые прорези в платах PCI с питанием 5В.
Сколько адресных линий к шины PCI?
Как реализуется технология Plug&Play для устройств шины PCI.?
Для чего предназначен сигнал -С/BE?
Каковы особенности циклов чтения и записи в порт?
Сколько адресных пространств имеет шина PCI ?Назначение сигнала –FRAME ?Как осуществляется доступ к данным конфигурации ?Для чего предназначены сигналы -TRDY и –IRDY ?
Литература
Борзенко А.Е. IBM PC : устройство, ремонт, модернизация. – 2-е изд., переработанное и дополненное. –М.: ТОО фирма «Компьютер-Пресс», 1997. – 344 с., с 109 – 113.
Гук М. Аппаратные средства PC. Энциклопедия – С-Пб : Питер Ком, 2000. – 816 с., с 419 – 43
ЛАБОРАТОРНАЯ РАБОТА №8
Исследование интерфейса SCSI.
Цель работы: изучить назначение, существующие стандарты и условия совместимости интерфейса SCSI, изучить систему команд SCSI и начала программного интерфейса ASPI.
Общие сведения:
Small Computer Systems Interface (системный интерфейс для малых компьютеров) – интерфейс, разработанный для объединения на одной шине различных по своему назначению устройств, таких как жёсткие диски, накопители на магнитооптических дисках, стримеры, сканеры и т.д. Интерфейс предназначен для соединения устройств различных классов: памяти прямого и последовательного доступа, CD-ROM, оптических дисков однократной и многократной записи, устройств автоматической смены носителей информации, принтеров, сканеров, коммуникационных устройств и процессоров. Применяется в различных архитектурах компьютерных систем, а не только в PC. Стандарт определяет не только физический интерфейс, но и систему команд, управляющих устройствами SCSI. За время своего существования стандарт активно развивался.
Стандарты, описывающие SCSI
Стандарт SCSI-1 был стандартизован ANSI ещё в 1986 г.
Стандарт SCSI-2.
Стандарт SCSI-3 описывается документами: SIP (SCSI Interlock Protocol), SPI (SCSI Parallel Interface).
Стандарт SPI, 1995 г. Определяет Fast SCSI (Fast Wide SCSI).
Стандарт SPI-2, 1999 г. Определяет Ultra2 SCSI (Wide Ultra2 SCSI).
Стандарт SPI-3, 2000 г. Определяет Wide Ultra3 SCSI (Ultra 160).
Стандарт SPI-4, 2001 г. Определяет Ultra320 SCSI.
Стандарт EPI (Enhanced Parallel Interface). Описывает построение SCSI-систем.
Существует множество вариантов классификации интерфейса SCSI. Остановимся на одном из вариантов.
Таблица 1. Классификации интерфейса SCSI
Стандарт Вид Скорость на шине, Мбайт/сек Ширина шины, биты Максимальная длина кабеля, метров Максимальное кол-во устройств Внешние разъемы, кол-во контактов Внешние разъемы, кол-во контактов
SE LVD HVD Narrow/Wide N/W N/W N/W N/W N/W N/W N/W N/W
SCSI-1 5/– 8/– 6/– 12/– 25/– 8/– DB-25/– CX-50/– LD50/-
SCSI-2 Fast 10/20 8 /16 3/6 12/12 25/25 16/16 HD-50/HD-68 LD50/HD68
Ultra 20/40 8/16 3(1,5)/3(1,5) –/12 25/25 4(8)/4(8) HD-50/HD-68 LD50/HD68
Ultra 2 40/80 8/16 – 12/12 25/25 8/16 HD-50/HD-68 LD50/HD68
SCSI-3 Ultra 160 –/160 –/16 – –/12 –   HD-68, VHDCI-68 HD68,HD80
Ultra 320 –/320 –/16 – –/12 –   HD-68, VHDCI-68 HD68,HD80
SE – Single-Ended, сигнал ТТЛ-уровня;
LVD – Low Voltage Differential, низковольтный дифференциальный;
HVD – High Voltage Differential, дифференциальный;
HD – High Density, высокая плотность контактов разъёма;
LD – Low Density, низкая плотность контактов разъёма.
SE – Single-Ended, асимметричный SCSI
Термин обозначает обычный SCSI-интерфейс, в котором для каждого сигнала на шине есть свой проводник. Этот термин часто используется для указания принадлежности к «классическому» SCSI. Сигнал передается потенциалом с ТТЛ-уровнями относительно общего провода, который должен быть отдельным для каждого сигнала для снижения уровня помех.
В LVD SCSI и последующих вариантах SCSI каждый сигнал идёт уже по 2 проводам (по одному – положительной полярности, а по другому отрицательной).
LVD – Low Voltage Differential (низковольтный дифференциальный)
Двуполярный дифференциальный сигнал, используемый для высокоскоростной передачи данных в современных вариантах SCSI-интерфейса. При использовании LVD уровень напряжения сигнала находится в пределах ±1,8 В. На LVD-интерфейсе сигналы положительной и отрицательной полярности идут по разным физическим проводам. Для поддержки SCSI LVD требуется специальный кабель, состоящий из групп витых пар.
HVD – High Voltage Differential
Дифференциальный – термин, указывающий, что сигнал на SCSI двуполярный, т.е. значение определяется не только уровнем, но также и полярностью используемого напряжения. Это позволяет снизить воздействие шумов на SCSI-шину. Первый вариант SCSI-интерфейса с использованием двуполярных сигналов LVD SCSI – Ultra2 SCSI.
Дифференциальная версия HVD для каждой цепи задействует пару проводников, по которым передаётся парафазный сигнал. Здесь используются специальные дифференциальные приёмопередатчики, применяемые в интерфейсе RS-485. Дифференциальный интерфейс применяется в дисковых системах серверов, но в обычных PC не распространен. Интерфейс HVD появился в SCSI-2, а в SCSI-3 упразднён, поскольку скорость 40 Мбайт/с он уже не выдерживает.
В LVD-интерфейсе уровни напряжения на шине ниже, чем в случае HVD-интерфейса.
Интерфейс LVD электрически несовместим с SE и HVD, и в первую очередь это касается HVD: попытка подключить к одной шине LVD- и HVD-устройства может привести к выходу из строя LVD-устройств, так что здесь нужно быть осторожным!
Взаимоотношения интерфейсов LVD и SE, если так можно выразиться, не такие «жёсткие».
Многие фирмы решают эту проблему следующим образом:

Рис. 1. Взаимоотношения интерфейсов LVD и SE
1 – SCSI-устройство, 2 – терминатор LVD, 3 – внешний разъем, 4 – преобразователь LVD – SE, 5 – терминатор SE ( младший байт), 6 – внешний разъем
В стандарте SCSI-2 даже предусмотрена возможность изготовления устройств со смешанным интерфейсом – LVD/SE. Что это такое и как оно работает? Очень просто. Устройства – в том числе и терминаторы – этого типа могут работать либо в режиме LVD, либо в режиме SE, а переключение между режимами происходит автоматически – для этого используется сигнал на проводнике DIFFSENS.
На одной шине можно смешивать SE- и LVD-устройства, и они будут синхронизировать интерфейсы автоматически – если обнаружится хотя бы одно SE-устройство, все LVD-устройства на этой шине переключатся в SE-режим. Эта способность называется Multimode LVD. Если необходимо соединить HVD-устройства с SE- или LVD-устройствами, нужно использовать специальные конвертеры, например компаний Ancot или Paralan.
Устройства LVD совместимы с устройствами SE благодаря возможности их автоматического переконфигурирования (Multimode LVD). Устройства LVD распознают напряжение на линии DIFFSENS и по низкому уровню напряжения на ней способны переключаться из режима LVD в SE. Контакт разъёма, на который выводится эта цепь, в устройствах SE заземлен, что и обеспечивает автоматическое «понижение» режима всех устройств шины до SE, если имеется хотя бы одно устройство SE.
Во время сеанса связи между инициатором обмена и получателем данных устройства «договариваются» о максимально поддерживаемой ими скорости обмена. Поэтому если обмениваются данными два Ultra2-устройства, то они посылают друг другу данные на Ultra2-скоростях, в то время как другие устройства на той же самой шине связываются в скоростях Ultra или Fast. Некоторое внимание нужно уделить электрическим интерфейсам, используемым в SCSI-устройствах. Существует три типа таких интерфейсов: Single-Ended (SE), High Voltage Differential (HVD, иногда только называемый «дифференциальным») и Low Voltage Differential (LVD). Ultra2-устройства используют только LVD-интерфейсы, и многие ошибаются, считая, что LVD и Ultra2 – это одно и тоже; однако LVD-интерфейсы имеются и на некоторых Fast SCSI-устройствах.
На рис. 2 представлена диаграмма по напряжению для сигнала SE и LVD:
SE сигнал – 0 В < Use0 < 0,4 В; 2,4 В < Use1 < 5,0 В.
LVD сигнал – 1,05 В < Ulvd < 1,45 В, где Ulvdср. = +1,25 В.

Рис. 2. Диаграмма по напряжению для сигнала SE и LVD
На рис. 3 представлено преобразование сигнала LVD.

Рис. 3. Преобразование сигнала LVD
Рассмотрим несколько вариантов преобразования сигнала |–Slvd|–(+Slvd).
–Slvd , В 1,45 1,25 1,05 1,15
+Slvd, В 1,05 1,25 1,45 1,35
|–Slvd|–(+Slvd), В 0,4 0 –0,4 –0,2
Логический уровень 1 Неопр. 0 Неопр.
Кабели и разъёмы для SE и LVD идентичны, но электрической совместимости устройств нет. Поэтому принято обозначать их для различных версий SCSI по-разному (рис. 4).
«Классический» Single-Ended SCSI LVD SCSI. Оборудование с такой маркировкой может работать только с LVD SCSI-контроллерами Обозначает устройство, поддерживающее как обычный, Single-Ended SCSI, так и LVD SCSI

Рис. 4. Обозначение разъёмов SCSI различных версий
Терминаторы (Terminators)
Для согласования нагрузок на шине SCSI используют терминаторы, которые по электрическим свойствам делят на: пассивные, активные и FPT-терминаторы. Терминаторы требуют питания, для чего в интерфейсе имеются специальные линии TERMINATOR POWER.
Пассивные терминаторы – с импедансом 132 Ом, используются для SCSI-1. Представляют собой обычные резисторы.
Активные терминаторы – с импедансом 110 Ом. Представляют собой источник опорного напряжения (стабилизатор), вырабатывающий нужный потенциал, и каждая линия соединяется резистором 110 Ом с выходом этого источника.
В настоящее время, начиная с Ultra SCSI, применяются только активные терминаторы. При активном согласовании используются источники вспомогательного напряжения. Разумно было бы использовать согласования с принудительным ограничением сигнала. Для реализации данного метода в активном терминаторе устанавливаются фиксирующие диоды, которые ограничивают максимальное и минимальное напряжение входных сигналов на определённом уровне.
FPT (Forced Perfect Terminator) – улучшенный вариант активных терминаторов с ограничителями выбросов. Применяется в высокочастотных версиях SCSI.
Активный терминатор, применяемый для устройств LVD, тоже должен отслеживать линию DIFFSENS и при напряжении ниже 0,7 В переходить в режим SE, а при напряжении 0,85...1,85 В переходить в режим LVD (см. рис. 3). При напряжении на линии DIFFSENS выше 2,4 В терминатор должен «отпускать» шину, поскольку это соответствует режиму HVD.
По исполнению терминаторы могут быть внутренними и внешними.
В большинстве случаев как контроллер, так и все приборы SCSI имеют встроенные активные терминаторы, которые можно как включить, так и отключить. Терминаторы должны быть включены на контроллере и последнем подключённом внешнем.
В настоящее время выпускаются универсальные SE/LVD-терминаторы, которые автоматически определяют тип интерфейса и выполняют согласование для данного типа интерфейса:
DS21T07S фирмы Dallas, 9-канальный;
VCC5672 фирмы Texas Instruments, 9-канальный;
семейство микросхем фирмы ON Semiconductor, в т.ч. MCCS142235;
семейство микросхем фирмы Rohm, в т.ч. BH9595FP-Y, BH9596FP-Y;
семейство микросхем фирмы LinFinity Microelectronics Inc., в т.ч. LX5202.
Для питания терминаторов в шине предусмотрены специальные линии TERMPWR.
Активные терминаторы на каждом устройстве могут быть включены или выключены, это реализуется перестановкой одного джампера или программно, при конфигурировании устройства.
Внутренние терминаторы (или панелька для их установки) имеются во всех устройствах с не LVD-интерфейсом. В устройствах с LVD-интерфейсом внутренние терминаторы, как правило, отсутствуют.
Если используется внутреннее подключение, а внешние устройства подключаются не всё время, то необходимо переключать терминатор контроллера в соответствии с текущей конфигурацией.
Варианты подключения устройств к шине SCSI
Рассмотрим несколько вариантов подключения на одну шину устройств LVD, LVD/SE, SE, т.к. HVD-устройства могут работать только с себе подобными, да и к тому же данный тип передачи применяется в основном в серверах. В стандарте SCSI-3 этот тип передачи уже упразднён.
Возможно несколько ситуаций в зависимости от подключения к шине устройств и терминаторов разного типа – SE, LVD и LVD/SE.
Вариант подключения к шине Результат
Устройства SE и LVD с двумя SE- или LVD/SE-терминаторами SE-устройства будут работать, а LVD – автоматически отключатся
Устройства SE и LVD с двумя LVD-терминаторами Ничего работать не будет
SE- и LVD/SE-устройства с двумя SE- или LVD/SE-терминаторами Все устройства будут работать в режиме SE
SE- и LVD/SE-устройства с двумя LVD-терминаторами Ничего работать не будет
SE-, LVD- и LVD/SE-устройства с двумя SE- или LVD/SE-терминаторами LVD-устройства не работают, а SE и LVD/SE работают в режиме SE
SE-, LVD- и LVD/SE-устройства с двумя LVD-терминаторами Ничего работать не будет
LVD- и LVD/SE-устройства с двумя SE-терминаторами LVD-устройства не работают, а LVD/SE – работают в режиме SE
LVD- и LVD/SE-устройства с двумя LVD- или LVD/SE-терминаторами Все устройства работают в режиме LVD
Экспериментируя с подключением SE-, LVD- и LVD/SE-устройств к одной шине, нужно также помнить, что LVD- и SE-интерфейсы имеют разные ограничения на длину шины в зависимости от скорости передачи данных (Fast-5...40) и количества подключаемых устройств.
Но может возникнуть конфликтная ситуация, когда к хост-адаптеру (с режимом LVD/SE) будет подключено два устройства: первое – LVD, а второе – SE. В этом случае все устройства должны перейти в режим SE. Для второго устройства это очевидно, а для первого – нереально, т.к. оно может работать только в режиме LVD. Возникает патовая ситуация. Решить ее можно двумя способами:
1-й способ. Необходима установка Multimode LVD SCSI Expander, который бы преобразовывал LVD в SE и обратно. Среди существующих следует отметить:
готовые платы RTLVD-SE и RTLVD-3SE фирмы Rancho;
микросхемы семейства ...53C141 (SYM53C141, LSI53C141) фирмы LSI Logic – конвертор LVD<=>SE, повторитель SE<=>SE.
Данный метод может быть реализован только аппаратно в процессе разработки SCSI-устройств.
2-й способ. С использованием внешнего преобразователя LVD/SE.
Шина SCSI
В SCSI-системах принято делить все устройства на Инициаторы (ИУ, Initiator) и Исполнители (ЦУ, Target).
Существуют следующие варианты шины SCSI:
Wide Wirth (широкая шина) – соответственно 16-битная шина данных (D0-D15, 27 каналов [54 линии] для LVD и 36 линий для SE),
Narrow Wirth (узкая шина) – соответственно 8-битная шина данных (D0-D7, 18 каналов [36 линий] для LVD и 18 линий для SE).
Narrow шина не поддерживается последними версиями SCSI, начиная с Ultra 160.
При этом возникают два варианта проблем при подключении ЦУ (Target) на шину.
Для варианта 1:
Wide Target – Wide Width,
Narrow Target – Wide Width.
Для варианта 2:
2.1. Narrow Target – Narrow Width,
2.2. Wide Target – Narrow Width.
Рассмотрим подробнее все эти случаи подробнее.
1.1. Могут возникнуть сложности с подключением терминаторов, т.к. в LVD-устройствах внутренние терминаторы встречаются редко.
1.2. Переходник (адаптер с 68- на 50-контактный разъём) должен терминировать High Byte, если Narrow Target крайнее на шине.
На Wide Target следует установить джампер Disable Wide, терминация High Byte.
Wide Width состоит из старшего байта (High Byte) и младшего байта (Low Byte).
Narrow Width (контроллер всегда SE) представляет Low Byte's Wide Width. Narrow Width можно рассматривать как подмножество Wide Width, у которого используется только Low Byte's Data Bus. В простых одноканальных контроллерах контакты Narrow Width запараллелены с частью контактов Wide Width. При этом можно использовать смесь широких и узких устройств, для чего терминаторы на контроллере разделены на две половины: терминаторы младшего байта (TrmL) и старшего байта (TrmH) – и должны управляться независимо.
Т.е. должны быть соответствующие переключатели: либо на Target, либо на переходниках (TrmH в положении ON, а TrmL в положении OFF, старшие разряды всегда должны быть затерминированы). Если LVD/SE Target имеет переключатель режимов, то для согласования режимов необходимо переключить в режим SE Mode.
В обоих этих вариантах придется столкнуться с разнообразием разъёмов, применяемых для интерфейсов SCSI, из-за этого может возникнуть потребность в применении переходных адаптеров от одного типа разъёма к другому. Подробно о типах разъёмов, применяемых в SCSI-устройствах, см. «Типы применяемых в SCSI разъемов».
Подключение периферии

Рис. 5. Структурная схема подключения периферии

Рис. 6. Структурная схема кабеля для двух периферийных устройств
1, 2, 3 – разъём (розетка);
4 – кабель SCSI LVD, состоящий из витых пар;
5, 6 – разъём (вилка) целевого устройства (ЦУ, target);
7 – разъём (вилка) инициатора (ИУ, initiator).
Типы применяемых в SCSI разъёмов
На рис. 7 представлены типы применяемых в SCSI разъёмов.

Рис. 7. Типы применяемых в SCSI разъёмов
Иногда ещё используют внешний разъём VHDCI-68.
Возможен вариант, когда для подключения Wide Width используют два разъёма HD50.
Внешние разъёмы
В большинстве случаев используется пять (5) видов внешних разъёмов: HD-68, HD-50, CX-50, DB-25, VHDCI-68. Иногда необходимо применение переходников, если подключаемые к внешней шине устройства SCSI имеют различные внешние разъёмы.
Самый распространенный внешний разъём, применяемый в устройствах SCSI, – HE68Female (см. рис. 8 и табл. 2)

Рис. 8. Внешний вид разъёма HD-68
Контакты разъёма HD68 приведены в табл. 2.
В стандарте SPI (SCSI Parallel Interface, 1995 г.) определен Р-кабель и коннекторы для организации широкой (16 бит) шины на одном кабеле. Этот кабель с 68-контактными разъёмами HD-68M (рис. 8) называют кабелем SCSI-3.
Разъёмы Р-кабеля SCSI для цепи SE приведены в табл. 2.
Внутренние разъёмы
Самый распространенный внутренний разъём, применяемый в устройствах SCSI, – HE68Male (табл. 2) и HE50Male (табл. 3).
Таблица 2. Внешний и внутренний разъем HD68. Применяется в интерфейсах SCSI-2,3. Определен стандартом SPI (1995г.)
Single-Ended SCSI Differential SCSI HD-68 Single-Ended SCSI Differential SCSI HD-68
Signal name Signal name Pin# Signal name Signal name Pin#
   
Ground + Data Bit 12 1 Data Bit 12 – Data Bit 12 35
Ground + Data Bit 13 2 Data Bit 13 – Data Bit 13 36
Ground + Data Bit 14 3 Data Bit 14 – Data Bit 14 37
Ground + Data Bit 15 4 Data Bit 15 – Data Bit 15 38
Ground + Parity Bit 1 5 Parity Bit 1 – Parity Bit 1 39
Ground + Data Bit 0 6 Data Bit 0 – Data Bit 0 40
Ground + Data Bit 1 7 Data Bit 1 – Data Bit 1 41
Ground + Data Bit 2 8 Data Bit 2 – Data Bit 2 42
Ground + Data Bit 3 9 Data Bit 3 – Data Bit 3 43
Ground + Data Bit 4 10 Data Bit 4 – Data Bit 4 44
Ground + Data Bit 5 11 Data Bit 5 – Data Bit 5 45
Ground + Data Bit 6 12 Data Bit 6 – Data Bit 6 46
Ground + Data Bit 7 13 Data Bit 7 – Data Bit 7 47
Ground + Parity Bit 0 14 Parity Bit 0 – Parity Bit 0 48
Ground Ground 15 Ground Ground 49
Ground Diffsens 16 Ground Ground 50
Term-n Power Term-n Power 17 Term-n Power Term-n Power 51
Term-n Power Term-n Power 18 Term-n Power Term-n Power 52
Reserved Reserved 19 Reserved Reserved 53
Ground Ground 20 Ground Ground 54
Ground + Attention 21 Attention – Attention 55
Ground Ground 22 Ground Ground 56
Ground + Busy 23 Busy – Busy 57
Ground +Acknowledge 24 Acknowledge – Acknowledge 58
Ground + Reset 25 Reset – Reset 59
Ground +Message 26 Message – Message 60
Ground + Select 27 Select – Select 61
Ground +Com./Data 28 Com./Data –Com./Data 62
Ground + Request 29 Request – Request 63
Ground +Input/Outpt30 Input/Output– Input/Output64
Ground + Data Bit 8 31 Data Bit 8 – Data Bit 8 65
Ground + Data Bit 9 32 Data Bit 9 – Data Bit 9 66
Ground + Data Bit 10 33 Data Bit 10 – Data Bit 10 67
Ground + Data Bit 11 34 Data Bit 11 – Data Bit 11 68
Таблица 3. Разъем HE50 SCSI
Single-Ended SCSI Differential SCSI HE-50 Single-Ended SCSI Differential SCSI HE-50
Signal name Signal name Pin# Signal name Signal name Pin#
   
Ground + Data Bit 0 1 Term-n Power Term-n Power 26
Ground – Data Bit 0 2 Reserved Reserved 27
Ground + Data Bit 1 3 Reserved Reserved 28
Ground – Data Bit 1 4 Ground Ground 29
Ground + Data Bit 2 5 Ground Ground 30
Ground – Data Bit 2 6 Ground + Attention 31
Ground + Data Bit 3 7 Attention – Attention 32
Ground – Data Bit 3 8 Ground Ground 33
Ground + Data Bit 4 9 Ground Ground 34
Ground – Data Bit 4 10 Ground + Busy 35
Ground + Data Bit 5 11 Busy – Busy 36
Reserved – Data Bit 5 12 Ground + Acnowledge37
Ground + Data Bit 6 13 Acknowledge – Acknowledge 38
Reserved – Data Bit 6 14 Ground + Reset 39
Ground + Data Bit 7 15 Reset – Reset 40
Ground – Data Bit 7 16 Ground + Message 41
Ground + Parity Bit 0 17 Message – Message 42
Ground – Parity Bit 0 18 Ground + Select 43
Ground Ground 19 – Select – Select 44
Ground Ground 20 Ground + C/D 45
Ground Ground 21 C/D – C/D 46
Ground Ground 22 Ground + Request 47
Ground Reserved 23 Request – Request 48
Ground Reserved 24 Ground + I/O 49
Ground Ground 25 I/O – I/O 50
Фазы шины
В каждый конкретный момент времени шина SCSI может находиться только в одной из перечисленных фаз:
1. Bus Free – шина находится в состоянии покоя.
2. Arbitration – устройство (ИУ) может получить право на управление шиной.
3.1. Selection – инициатор, выигравший арбитраж, выбирает ЦУ (только одно), с которым он будет работать.
3.2. Reselection – аналогична предыдущей, но её вводит целевое устройство. Т.е. ИУ и ЦУ меняются ролями – ЦУ вызывает ИУ.
4. Command In (Out), Data In (Out), Status, Message In (Out) – информационные фазы (по шине данных передается информация).
Последовательность фаз представлена на рис. 9.
После фазы Selection ИУ может проводить процедуру тайм-аута выбора (Selection Time-Out), которая может быть реализована двумя методами:
1. Hard Reset.
2. Переход в фазу Bus Free.
Для реализации фазы Reselection во всех вышеприведенных фазах Initiator и Target меняются местами в вопросах выполнения действий.
В любом случае завершающей фазой является фаза Message In, в которой передается сообщение Disconnect или Command Complete, после чего шина переходит в состояние Bus Free.
В любой системе SCSI предусмотрена возможность сброса системы (Reset), для чего имеется линия Reset, на которую может быть выставлен сигнал сброса в любое время и любым устройством. Обработка сигнала Reset может быть реализована двумя методами:
1. Жёсткий сброс (Hard Reset) – аналогичен отключению питания для всех устройств системы SCSI.
2. Мягкий сброс (Soft Reset) – позволяет одному инициатору выполнить сброс шины SCSI, не нарушая работы других инициаторов в системе, где таких инициаторов несколько.

Рис. 9. Последовательность фаз шины SCSI
Сигналы управления шины SCSI
В шине SCSI используются девять сигналов управления, активным уровнем которых является низкий уровень сигнала: BSY (Занят), SEL (Выбор), C/D (Управление/Данные), I/O (Ввод/Вывод), MSG (Сообщение), REQ (Запрос), ACK (Подтверждение), RST (Сброс), ATN (Внимание).
Источники вышеприведённых сигналов приведены в табл. 5.
Таблица 4. Источники сигналов управления шины SCSI
Сигнал BSY SEL C/D I/O MSG REQ ACK RST ATN
Источник ИУ, ЦУ ИУ, ЦУ ЦУ ЦУ ЦУ ЦУ ИУ ИУ, ЦУ ИУ
Между фазами передачи информации сигналы Busy, Select, REQ, ACK должны оставаться в неизменном состоянии, меняться могут только значения сигналов Msg, C/D, I/O.
Информационные фазы передачи информации Data Out (In), Command, Status, Message Out (In)
Target управляет сигналами Msg, C/D, I/O, в зависимости от комбинации которых идентифицируются фазы шины Data Out (In), Command, Status, Message Out (In).
Таблица 5. Информационные фазы SCSI
Сигнал Фаза Направление
MSG C/D I/O 0 0 0 Data Out ИУ -> ЦУ
0 0 1 Data In ИУ <- ЦУ
0 1 0 Command ИУ -> ЦУ
0 1 1 Status ИУ <- ЦУ
1 0 0 Зарезервировано  
1 0 1 Зарезервировано  
1 1 0 Message Out ИУ -> ЦУ
1 1 1 Message In ИУ <- ЦУ
Асинхронная передача данных
Является обязательной для всех устройств SCSI и всех фаз передачи информации. Target управляет направлением передачи информации с помощью сигнала I/O:
I/O = «0» – передача Initiator => Target,
I/O = «1» – передача Initiator <= Target.
Передача каждого байта сопровождается взаимосвязанной парой сигналов REQ/ACK. Initiator фиксирует принимаемые данные по отрицательному перепаду сигнала REQ, Target считает принимаемые данные действительными по отрицательному перепаду сигнала ACK.

Рис. 10. Временные диаграммы асинхронной передачи данных
Т – источник данных Target, I – источник данных Initiator
Синхронная передача данных
Является опцией и может использоваться в фазах Data Out и Data In и только по результатам предварительной договорённости, которая реализуется посредством сообщений «Synchronous Data Transfer Request».

Рис. 11. Временные диаграммы синхронной передачи данных
Т – источник данных Target, I – источник данных Initiator
Управление интерфейсом
Для управления интерфейсом служит система сообщений. Всего сообщений – 28. Форматы сообщений стандартизированы, существуют однобайтные, двухбайтные и расширенные сообщения. В двухбайтном сообщении второй байт является аргументом сообщения, в расширенных сообщениях второй байт задаёт длину сообщения, а последующие байты несут код и аргументы сообщения.
Рассмотрим внутреннюю структуру сообщения на примере однобайтного сообщения «Identify».
Identify Message (80h-FFh)
ByteBit 7 6 5 4 3 2 1 0
0 Identify DiscPriv LUNTAR LUNTRN
Identify – Бит идентификации, должен быть установлен в единицу – признак Identify Message.
DiscPriv – Disconnect Privilege Bit, если равен 0, то Target не будет отсоединяться от Initiator до конца выполнения задачи. Если равен 1, то Initiator предоставляет Target привилегию отключения от шины. DiscPriv используется совместно с опциональным битом Dimm (Disconnect Immediate), который описан в Disconnect/Reconnect Mode Page (см. 8.12.3. Disconnect/Reconnect Control Page). Если Initiator выбирает Target, использующее SCSI-1 с опцией одного инициатора, то Target не будет пытаться отключится от шины до конца выполнения задачи и соответственно не будет обращать внимания на DiscPriv, который в этом случае всегда должен быть равен нулю.
LUNTAR – Logical Unit Target Bit. Если равен 0, то Identify Message адресовано логическому устройству (ЛУ). Если равен 1, то Identify Message адресовано обычному Target, который не включает в себя ЛУ. LUNTAR=0 всегда при работе с HDD.
LUNTRN – Logical Unit Number Target Routine Number описывает Logical Unit Number, если LUNTAR=0. При LUNTAR=1 описывает Target Routine Number (номер ЛУ).
Адресация и система команд
SCSI ID (бит идентификатора)
Бит идентификатора является единственным битом на шине данных, который соответствует уникальному адресу устройства на шине SCSI. Каждое устройство SCSI должно иметь свой уникальный адрес, назначаемый при конфигурировании. Бит идентификатора (адрес) задаётся при конфигурировании предварительной установкой переключателей или джамперов. Для хост-адаптера возможно программное конфигурирование.
Для хост-адаптера:
1. Narrow Width
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0
2. Wide Width
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Заводская установка ID для HDD SCSI всегда устанавливается на 0h или 1h.
Для двух подключаемых HDD:
Первый HDD
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Второй HDD
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Именно эта функция определяет максимальное количество устройств, которое может одновременно находится на шине SCSI: 16 на Wide Width и 8 на Narrow Width, включая хост-адаптер.
SCSI pointers (указатели SCSI)
SCSI-архитектура предлагает устанавливать для каждого процесса ввода/вывода сохранение в Initiator Path Control Area два набора из трех указателей, которые состоят из:
Указатель команды (Command Pointer) – 1 байт. Указывает на начало дескриптора блока команды (т.е. на код команды).
Указатель статуса (Status Pointer) – 1 байт. Указывает на начало Status Area.
Указатель данных (Data Pointer) – макс. 4 байта. Указывает на начало области данных (т.е. LBA).
Первый набор указателей называется Current (Active) Pointers и хранится в регистре текущих указателей (Current Pointer Register) ИУ. Текущие указатели указывают на очередной байт команды, состояния и данных, которые будут передаваться между памятью ИУ и ЦУ. Current Pointers заносятся в регистр до начала фазы шины Arbitration и хранятся там до завершения команды (прием от ИУ сообщения Good Status), либо до получения сообщения Save Data Pointer, после чего записываются в «сохранение указателей» (Saved Pointers).
Второй набор указателей называется Saved Pointers (до 15 [7] наборов для широкой [узкой] шины, по одному на каждое устройство).
Минимальная задержка на освобождение SCSI-шины (Bus Clear Delay) – 800 нс. За это время ИУ должен восстановить указатели из памяти в регистр текущих указателей.
Биты чётности (DPB0, DPB1)
Использование битов чётности – системная опция. Но устройство всегда проверяет биты чётности на шине и если имеет возможность, то сообщает об ошибке бита чётности хост-адаптеру. Эта возможность определяется устройством для каждого конкретного устройства отдельно.
SCSI-система может иметь такую конфигурацию, когда все подключённые к интерфейсу устройства генерируют бит чётности и регистрация чётности для всех устройств включена. Система может также иметь конфигурацию, когда регистрация чётности отсутствует, и проверка по чётности вообще не осуществляется.
Во время фазы Arbitration (см. рис. 9) чётность не используется (DPB0, DPB1 не должны устанавливаться в состояние логического нуля).
Программный интерфейс ASPI
Для ускорения и упрощения разработки управляющих программ (драйверов) под операционную систему Windows (и не только) был разработан (фирмой Adaptec) программный интерфейс ASPI (Advanced SCSCI Programming Interface — расширенный интерфейс программирования SCSI), упрощающий разработку переносимых приложений управления различными устройствами с одной платформы Win32 на другую. Интерфейс ASPI представляет собой программную оболочку (надстройку), которая объединяет в себе соглашение о вызовах функций и установленный набор команд. Этот интерфейс призван посылать и обрабатывать команды SCSI, используя любой доступный в системе контроллер SCSI, поддерживающий такую возможность. ASPI интерфейс стал промышленным стандартом программной оболочки для следующих операционных систем: DOS, Windows, OS/2, Netware.
Интерфейс ASPI состоит из нескольких уровней. На самом низком уровне находится управляющая программа ASPI (драйвер), работающая непосредственно с контроллером. Далее следует периферийный драйвер, скрывающий тонкости работы с поддерживаемым периферийным оборудованием (жестким диском, сканером и т. д.). Этот драйвер может быть универсальным для различных моделей устройств одного типа или индивидуальным, но всегда поставляется изготовителем оборудования. Управляющий драйвер ASPI имеет несколько модификаций, зависящих от версии операционной системы Windows (MS-DOS, Windows 3.1, Windows 95/98/ME/NT/2000/XP). В большинстве случаев он поставляется в составе операционной системы и состоит из нескольких файлов:
Windows 98/ME Windows NT 4.0 Windows 2000 Windows XP
Wnaspi32.dll Wnaspi32.dll Wnaspi2k.dll Aspixp.sys (32 bit)
Apix.vxd Aspi32.sys Aspi2k.sys Wnaspixp.dll (32 bit)
Winaspi.dll Winaspi.dll Aspi64.sys (64 bit)
Wnaspi64.dll (64 bit)
Приведем примеры программ, использующих простейшие основы ASPI на Visual C++.
Пример №1. Инициализация интерфейса ASPI:
void InitASPI ( )
{
DWORD dwASPIsupport ;// вызываем функцию GetASPI32SupportInfo для инициализации ASPI
dwASPIsupport = GetASPI32SupportInfo( ) ;
if (HIBYTE (LOWORD (dwASPIsupport) = = SS_COMP)) // если ошибок нет
{
MessageBox (0, "ASPI успешно инициализирован !", MB_OK) ;
}
else
{
MessageBox (0, "Ошибка инициализации ASPI !", MB_OK | MB_ICONINFORMATION) ;
}
}
Пример №2. Определение количества установленных в системе устройств:
DWORD GetCountDevice ( )
{
BYTE byCountDevice ;DWORD dwASPI ;// инициализируем ASPI
dwASPI = GetASPI32SupportInfo( ) ;
if (HIBYTE (LOWORD (dwASPI) = = SS_COMP)) // если ошибок нет
{
MessageBox (0, "ASPI успешно инициализирован !", MB_OK) ;
// определяем количество установленных в системе устройств
byCountDevice = LOBYTE (LOWORD (dwASPI)) ;
return (DWORD) byCountDevice ;
}
else {
MessageBox (0, "Ошибка инициализации ASPI !", MB_OK | MB_ICONINFORMATION) ;
return 0 ; }
}
Пример №3. Получение информации об установленных в системе контроллерах:
void GetAdapterInfo ( )
{
SRB_HAInquiry haInq ;BYTE byCountDevice ;DWORD dwASPI, dwStatus ;// инициализируем ASPI
dwASPI = GetASPI32SupportInfo( ) ;
if (HIBYTE (LOWORD (dwASPI) = = SS_COMP)) // если ошибок нет
{
MessageBox (0, "ASPI успешно инициализирован !", MB_OK) ;
// определяем количество установленных в системе устройств
byCountDevice = LOBYTE (LOWORD (dwASPI)) ;
for (int i = 0; i < byCountDevice; i++)
{
//обнуляем структуру и заполняем данными
memset (&haInq, 0, sizeof (SRB_HA_Inquiry)) ;
haInq.SRB_Cmd = SC_HA_INQUIRY ; haInq.SRB_HaId = i ;
haIng.SRB_Flags = 0 ; haInq.SRB_Hdr_Rsvd = 0 ; // выполняем команду ASPI
dwStatus = SendASPI32Command ( (LPSRB) &haInq) ;
while (!haInq.SRB_Status) { // ждем
}
// если команда завершена
if (dwStatus = = SS_COMP)
{
// заносим полученные данные куда-нибудь (например, в структуру)
// haInq.HA_SCSI_ID // haInq.HA_ManagerId // haInq.HA_Identifier // haInq.HA_Unique }
}
}
else {
MessageBox (0, "Ошибка инициализации ASPI !", MB_OK | MB_ICONINFORMATION) ;
return ; }
}
Более подробную информацию по этим примерам можно получить в [5] или internet.
Система команд SCSI
Система команд SCSI включает общие команды, применимые для устройств всех классов, и специфические для каждого класса. Все команды делятся на три категории:
обязательные (mandatory);
дополнительные (optional);
фирменные (vendor specific).
Любое SCSI-устройство должно поддерживать обязательные команды общего набора и своего класса, чем обеспечивается высокий уровень совместимости. Команды SCSI для устройств прямого доступа (Direct-Access Devices) приведены в табл. 7.
Таблица 6. Команды SCSI для устройств прямого доступа
№ Команда Код команды Тип команды
123456789101112131415161718192021222324252627282930313233343536373839 CHANGE DEFINITIONCOMPARECOPYCOPY AND VERIFYFORMAT UNITINQUIRYLOCK-UNLOCK CACHELOG SELECTLOG SENSEMODE SELECT (6)MODE SELECT (10)MODE SENSE (6)MODE SENSE (10)PRE-FETCHPREVENT-ALLOW MEDIUM REMOVALREAD (6)READ (10)READ BUFFERREAD CAPACITYREAD DEFECT DATAREAD LONGREASSIGN BLOCKSRECEIVE DIAGNOSTIC RESULTSRELEASEREQUEST SENSERESERVEREZERO UNITSEARCH DATA EQUALSEARCH DATA HIGHSEARCH DATA LOWSEEK (6)SEEK (10)SEND DIAGNOSTICSET LIMITSSTART STOP UNITSYNCHRONIZE CACHETEST UNIT READYVERIFYWRITE (6)WRITE (10)WRITE AND VERIFYWRITE BUFFERWRITE LONGWRITE SAME 40h39h18h3Ah04h12h36h4Ch4Dh15h55h1Ah5Ah34h1Eh08h28h3Ch25h37h3Eh07h1Ch17h03h16h01h31h30h32h0Bh2Bh1Dh33h1Bh35h00h2Fh0Ah2Ah2Eh3Bh3Fh41h OOOOMMOOOOOOOOOMMOMOOOOMMMOOOOOOMOOOMOOOOOOO
Примечание: M – обязательные команды, O – опциональные команды.
Некоторые команды сопровождаются блоком параметров, следующим за блоком дескриптора команды. Форматы блоков стандартизированы, длина блока определяется кодом операции, который всегда является первым байтом блока и может составлять 6, 10 или 12 байтов.
Любое ЦУ SCSI должно поддерживать четыре команды: Inquiry, Request Sense, Send Diagnostic, Test Unit Ready.Порядок выполнения работы
При домашней подготовке изучить назначение, режимы работы и условия совместимости интерфейса SCSI.
Ознакомиться с основами программного интерфейса ASPI.
Выполнить индивидуальное задание по варианту
Содержание отчёта
Привести структурную схему подключения периферии к шине SCSI.
Привести схему, отражающую последовательности фаз шины SCSI.
Привести временные диаграммы для асинхронного и синхронного режима передачи данных.
Результаты выполнения индивидуального задания.
Контрольные вопросы
Каковы особенности и назначение интерфейса SCSI?
Классификация SCSI. Понятия Single-Ended, Low Voltage Differential и High Voltage Differential.
Назначение терминаторов. Их виды.
Варианты подключения устройств к шине SCSI (SE, LVD и LVD/SE).
Перечислите основные типы применяемых в SCSI разъемов.
Фазы шины SCSI. Характеристика фаз и их последовательность.
Перечислите сигналы управления шины SCSI.
Приведите временные диаграммы для асинхронного и синхронного варианта обмена по шине SCSI.
Охарактеризуйте систему управляющих сообщений интерфейса SCSI. Приведите пример внутренней структуры управляющего сообщения.
Охарактеризуйте программный интерфейс ASPI и его уровни.
Литература
Гук М. Дисковая подсистема ПК. – Санкт-Петербург, 2001.
Интерфейс малой компьютерной системы (ИМКС) / Всесоюзный центр переводов научно-технической литературы и документации (ВЦП). Северо-Кавказский филиал. – Ростов-Н/Д, 1989.
SCSI Interface: Product Manual. Vol. 1, 2 / Seagate.
SCSI-2 Specification.
Несвижский В. Программирование устройств SCSI и IDE. — СПб.: БХВ – Петербург, 2003. – 592 с.
Примерные варианты заданий:
Общее для всех:
Определить, установлена ли в системе поддержка ASPI.
Проинициализировать интерфейс ASPI.
Определить количество установленных в системе устройств.
Получить информацию об установленных контроллерах.
Индивидуальные задания:
Получить текущую скорость чтения устройства.
Выполнить полную и частичную очистку диска.
Закрыть записанный трек или сессию.
Открыть и закрыть лоток устройства.
Определить полный размер носителя.
Определить максимальную поддерживаемую устройством скорость чтения.
Определить текущую позицию воспроизведения на диске.
Определить имя и номер продукта.
Заблокировать и разблокировать лоток устройства.
Приостановить и продолжить текущее воспроизведение диска.
Прочитать данные с диска на компьютер.
Прочитать заголовочную область диска.
Просканировать диск.
Установить время остановки шпинделя двигателя устройства.
Установить скорость чтения для устройства.
Проверить готовность устройства к работе.

Приложенные файлы

  • docx 8903052
    Размер файла: 618 kB Загрузок: 0

Добавить комментарий