CSO#
, символ «#
» указывает на инверсность (низкий уровень сигнала отвечает активному состоянию). Названия команд, регистров и битов имеют иной вид — например, INSW
(команда процессора), DR
(регистр данных), АХ
(регистр процессора). Подробные оглавление и предметный указатель помогут быстро найти необходимую информацию.
Я благодарен любознательным и внимательным читателям, присылающим свои замечания, вопросы и отзывы о моих книгах. Пользуясь случаем, еще раз обращаюсь к читателям — пишите письма! С вашей помощью исправляются многие ошибки, и я стараюсь поддерживать свои книги на личном сайте по адресу http://www.neva.ru/mgook, обновляя списки замеченных опечаток и публикуя статьи на смежные темы.
Как и все предыдущие, эта книга не смогла бы появиться без информационной поддержки коллектива RUSNet (http://www.neva.ru), обеспечивающего доступ к Сети в ЦНИИ РТК — «базовом лагере» автора. После выпуска второго издания «Энциклопедии» я снова погрузился в инженерную деятельность в НПО РТК. Это несколько притормаживает работу над книгами, но обогащает практический опыт, что выливается в дополнительные разъяснения актуальных вопросов.
Свои замечания и пожелания присылайте на адрес mgook@stu.neva.ru (автор) или comp@piter.com (издательство «Питер», редакция компьютерной литературы). Информацию по всем книгам можно получить на сайте издательства «Питер» www.piter.com.
Михаил Гук
В ряде интерфейсов заложены возможности PnP (Plug and Play — включай и играй), которые предназначены для снятия с пользователей забот по конфигурированию подключаемых устройств. В современных интерфейсах эти возможности закладывались изначально (PCI, USB, Fire Wire, Bluetooth), и эти функции в большинстве случаев работают нормально. Однако для интерфейсов-ветеранов (например, ISA, SCSI) технология PnP является поздней искусственной надстройкой, работающей с переменным успехом (Plug and Pray — включай и молись). Часто побочные эффекты вызваны наследием «тяжелого прошлого» — соседством устройств PnP с традиционными (legacy) устройствами. На закате шины ISA ее система PnP в общем работала, но в SCSI от идей автоконфигурирования со временем отказались. При разработке собственных устройств встает вопрос выбора подходящего интерфейса подключения. Этот вопрос следует решать, исходя из принципа разумной достаточности, по возможности отдавая предпочтение внешним интерфейсам. Следует помнить, что разработка аппаратной части устройства (hardware) тесно связана и с программной поддержкой устройств — как модулями ПО, исполняемыми процессором компьютера (software), так и программами встроенного микроконтроллера (firmware), на базе которого, как правило, строятся современные устройства. Промышленностью выпускается множество моделей микроконтроллеров, имеющих популярные интерфейсы (USB, RS-232, I²C и другие). Однако в ряде случаев приходится использовать и стандартизованные шины расширения ввода-вывода. Эти шины предоставляют более широкие возможности для взаимодействия процессора с аппаратурой, не скованные жесткими ограничениями внешних интерфейсов. Однако за универсальность и производительность внутренних шин расширения приходится расплачиваться более замысловатой реализацией интерфейсных схем и сложностями при обеспечении совместимости с другим установленным в компьютер оборудованием. Здесь ошибки могут приводить к потере работоспособности компьютера (хорошо если временной). Недаром серьезные производители компьютеров гарантируют работоспособность своих изделий только при установке сертифицированных (ими или независимыми лабораториями) карт расширения. При использовании внешних интерфейсов неприятности в случае ошибок чаще всего имеют отношение только к подключаемому устройству. На этом мы закончим краткий обзор интерфейсов и перейдем к их детальным описаниям.ВНИМАНИЕ
Карты расширения, модули памяти и процессоры можно устанавливать и извлекать только при выключенном питании компьютера. При этом выключения блока питания ATX основной кнопкой недостаточно, поскольку при этом на системной плате остается напряжение 3,3 В. Эти блоки должны обесточиваться по входу (посредством извлечения питающего кабеля).
IRQ7
или IRQ5
. В расширенных режимах может использоваться и канал DMA.
Порт имеет поддержку на уровне BIOS — поиск установленных портов во время теста POST и сервисы печати Int 17h
(см. п. 8.3.3) обеспечивают вывод символа (по опросу готовности, не используя аппаратных прерываний), инициализацию интерфейса и принтера, а также опрос состояния принтера. Практически все современные системные платы (еще начиная с PCI-плат для процессоров 486) имеют встроенный адаптер LPT-порта. Существуют карты ISA с LPT-портом, где он чаще всего соседствует с парой СОМ-портов, а также с контроллерами дисковых интерфейсов (FDC+IDE). LPT-порт обычно присутствует и на плате дисплейного адаптера MDA (монохромный текстовый) и HGC (монохромный графический «Геркулес»). Есть и карты PCI с дополнительными LPT-портами.
К LPT-портам подключают принтеры, плоттеры, сканеры, коммуникационные устройства и устройства хранения данных, а также электронные ключи, программаторы и прочие устройства. Иногда параллельный интерфейс используют для связи между двумя компьютерами — получается сеть, «сделанная на коленке» (LapLink).
Контакт DB-25S | № провода в кабеле | Назначение I/O¹ | Бит² | Сигнал |
---|---|---|---|---|
1 | 1 | O/I | CR.0\ | Strobe# |
2 | 3 | O(I) | DR.0 | Data 0 |
3 | 5 | O(I) | DR.1 | Data 1 |
4 | 7 | O(I) | DR.2 | Data 2 |
5 | 9 | O(I) | DR.3 | Data 3 |
6 | 11 | O(I) | DR.4 | Data 4 |
7 | 13 | O(I) | DR.5 | Data 5 |
8 | 15 | O(I) | DR.6 | Data 6 |
9 | 17 | O(I) | DR.7 | Data 7 |
10 | 19 | I³ | SR.6 | Ack# |
11 | 21 | I | SR.7\ | Busy |
12 | 23 | I | SR.5 | PaperEnd (PE) |
13 | 25 | I | SR.4 | Select |
14 | 2 | O/I | CR.1\ | Auto LF# (AutoFeed#) |
15 | 4 | I | SR.3 | Error# |
16 | 6 | O/I | CR.2 | Init# |
17 | 8 | O/I | CR.3\ | Select In# |
18-25 | 10, 12, 14, 16, 18, 20, 22, 24, 26 | - | - | - |
BASE
(3BCh, 378h или 278h).
Data Register (DR
) — регистр данных, адрес=BASE
. Данные, записанные в этот регистр, выводятся на выходные линии Data[7:0]
. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же.
Status Register (SR
) — регистр состояния (только чтение), адрес=BASE+1
. Регистр отображает 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7
) и флаг прерывания. Бит SR.7
инвертируется — низкому уровню сигнала соответствует единичное значению бита в регистре, и наоборот.
Ниже описано назначение бит регистра состояния (в скобках даны номера контактов разъема порта).
♦ SR.7
— Busy
— инверсное отображение состояния линии Busy
(11): при низком уровне на линии устанавливается единичное значения бита — разрешение на вывод очередного байта.
♦ SR.6
— Ack
(Acknowledge) — отображение состояния линии Ack#
(10).
♦ SR.5
— РЕ
(Paper End) — отображение состояния линии Paper End
(12). Единичное значение соответствует высокому уровню линии — сигналу о конце бумаги в принтере.
♦ SR.4
— Select
— отображение состояния линии Select
(13). Единичное значение соответствует высокому уровню линии — сигналу о включении принтера.
♦ SR.3
— Error
— отображение состояния линии Error#
(15). Нулевое значение соответствует низкому уровню линии — сигналу о любой ошибке принтера.
♦ SR.2
— PIRQ
— флаг прерывания по сигналу Ack#
(только для порта PS/2). Бит обнуляется, если сигнал Ack#
вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.
♦ SR[1:0]
— зарезервированы.
Control Register (CR
) — регистр управления, адрес=ВАSЕ+2
, допускает запись и чтение. Регистр связан с 4-битным портом вывода управляющих сигналов (биты 0–3) для которых возможно и чтение; выходной буфер обычно имеет тип «открытый коллектор». Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты 0, 1, 3 инвертируются.
Ниже описано назначение бит регистра управления.
♦ CR[7:6]
— зарезервированы.
♦ CR.5
— Direction
— бит управления направлением передачи (только для портов PS/2, см. ниже). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.
♦ CR.4
— AckINTEN
(Ack Interrupt Enable) — единичное значение разрешает прерывание по спаду сигнала на линии Ack#
— сигнал запроса следующего байта.
♦ CR.3
— Select In
— единичное значение бита соответствует низкому уровню на выходе Select In#
(17) — сигналу, разрешающему работу принтера по интерфейсу Centronics.
♦ CR.2
— Init
— нулевое значение бита соответствует низкому уровню на выходе Init#
(16) — сигнал аппаратного сброса принтера.
♦ CR.1
— Auto LF
— единичное значение бита соответствует низкому уровню на выходе Auto LF#
(14) — сигналу на автоматический перевод строки (LF — Line Feed) по приему байта возврата каретки (CR). Иногда сигнал и бит называют AutoFD
или AutoFDXT
.
♦ CR.0
— Strobe
— единичное значение бита соответствует низкому уровню на выходе Strobe#
(1) — сигналу стробирования выходных данных.
Запрос аппаратного прерывания (обычно IRQ7
или IRQ5
) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#
) при установке CR.4=1
. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.
Перечислим шаги процедуры вывода байта по интерфейсу Centronics с указанием требуемого количества шинных операций процессора.
1. Вывод байта в регистр данных (1 цикл IOWR#
).
2. Ввод из регистра состояния и проверка готовности устройства (бит SR.7
— сигнал Busy
). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#
).
3. По получению готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается. Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что к двум циклам IOWR#
добавляет еще один цикл IORD#
.
Видно, что для вывода одного байта требуется 4–5 операций ввода-вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт — невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100–150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерном принтере. Другой недостаток функциональный — сложность использования в качестве порта ввода.
Стандартный порт асимметричен — при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работает только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена — Nibble Mode. В этом режиме, называемом также Hewlett Packard Bi-tronics, одновременно принимаются 4 бита данных, пятая линия используется для квитирования. Таким образом, каждый байт передается за два цикла, а каждый цикл требует по крайней мере 5 операций ввода-вывода.
Схемотехника выходных буферов данных LPT-портов отличается большим разнообразием. На многих старых моделях адаптеров SPP-порт данных можно использовать и для организации ввода. Если в порт данных записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа «открытый коллектор» подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из того же регистра данных. Однако выходным цепям передатчика информации придется «бороться» с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для «победы» в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет показывает, что даже в случае короткого замыкания контакта разъема на землю при выводе «единицы» на этом резисторе падает напряжение 1,5 В, что входной схемой приемника будет воспринято как «единица». Поэтому нельзя полагать, что такой способ ввода будет работать на всех компьютерах. На некоторых старых адаптерах портов выходной буфер отключается перемычкой на плате. Тогда порт превращается в обыкновенный порт ввода.
CR.5
: 0 — буфер данных работает на вывод, 1 — на ввод. Не путайте этот порт, называемый также enhanced bi-directional, с EPP. Данный тип порта «прижился» и в обычных компьютерах, в CMOS Setup он может называться PS/2 или Bi-Di.
Порт с прямым доступом к памяти (Туре 3 DMA parallel port) применялся в PS/2 моделей 57, 90, 95. Был введен для повышения пропускной способности и разгрузки процессора при выводе на принтер. Программе, работающей с портом, требовалось только задать в памяти блок данных, подлежащих выводу, а затем вывод по протоколу Centronics производился без участия процессора.
Позже появились другие адаптеры LPT-портов, реализующие протокол обмена Centronics аппаратно, — Fast Centronics. Некоторые из них использовали FIFO-буфер данных — Parallel Port FIFO Mode. He будучи стандартизованными, такие порты разных производителей требовали наличия собственных специальных драйверов. Программы, использующие прямое управление регистрами стандартных портов, не могли задействовать их дополнительные возможности. Такие порты часто входили в состав мультикарт VLB. Существуют их варианты с шиной ISA, а также встроенные в системную плату.
Ack#
, вызывающий прерывание, которое может использоваться в данном режиме, соответствует биту 6 регистра состояния, что усложняет программные манипуляции с битами при сборке байта. Сигналы порта приведены в табл. 1.2, временные диаграммы — на рис. 1.1.
Контакт | Сигнал SPP | I/O | Бит | Описание |
---|---|---|---|---|
14 | AutoFeed# | O | CR.1\ | HostBusy — сигнал квитирования. Низкий уровень означает готовность к приему тетрады, высокий подтверждает прием тетрады |
17 | SelectIn# | O | CR.3\ | Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) |
10 | Ack# | I | SR.6 | PtrClk. Низкий уровень означает готовность тетрады, высокий — ответ на сигнал HostBusy |
11 | Busy | I | SR.7 | Прием бита данных 3, затем бита 7 |
12 | РЕ | I | SR.5 | Прием бита данных 2, затем бита 6 |
13 | Select | I | SR.4 | Прием бита данных 1, затем бита 5 |
15 | Error# | I | SR.3 | Прием бита данных 0, затем бита 4 |
HostBusy
.
2. ПУ в ответ помещает тетраду на входные линии состояния.
3. ПУ сигнализирует о готовности тетрады установкой низкого уровня на линии PtrClk
.
4. Хост устанавливает высокий уровень на линии HostBusy, указывая на занятость приемом и обработкой тетрады.
5. ПУ отвечает установкой высокого уровня на линии PtrClk
.
6. Шаги 1–5 повторяются для второй тетрады.
Полубайтный режим сильно нагружает процессор, и поднять скорость обмена выше 50 Кбайт/с не удается. Безусловное его преимущество в том, что он работает на всех портах. Его применяют в тех случаях, когда поток данных невелик (например, для связи с принтерами). Однако при связи с адаптерами локальных сетей, внешними дисковыми накопителями и CD-ROM прием больших объемов данных требует изрядного терпения со стороны пользователя.
CR.5
=1. Как и предыдущие, режим является программно-управляемым — все сигналы квитирования анализируются и устанавливаются драйвером. Сигналы порта описаны в табл. 1.3, временные диаграммы — на рис. 1.2.
Контакт | Сигнал SPP | Имя в байтном режиме | I/O | Бит | Описание |
---|---|---|---|---|---|
1 | Strobe# | HostClk | O | CR.0\ | Импульс (низкого уровня) подтверждает прием байта в конце каждого цикла |
14 | AutoFeed# | HostBusy | О | CR.1\ | Сигнал квитирования. Низкий уровень означает готовность хоста принять байт; высокий уровень устанавливается по приему байта |
17 | SelectIn# | 1284Active | О | CR.3\ | Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) |
16 | Init# | Init# | O | CR.2 | Не используется; установлен высокий уровень |
10 | Ack# | PtrClk | I | SR.6 | Устанавливается в низкий уровень для индикации действительности данных на линиях Data[0:7]. В низкий уровень устанавливается в ответ на сигнал HostBusy |
11 | Busy | PtrBusy | I | SR.7\ | Состояние занятости прямого канала |
12 | PE | AckDataReq¹ | I | SR.5 | Устанавливается ПУ для указания на наличие обратного канала передачи |
13 | Select | Xflag¹ | I | SR.4 | Флаг расширяемости |
15 | Error# | DataAvail#¹ | I | SR.3 | Устанавливается ПУ для указания на наличие обратного канала передачи |
2-9 | Data[0:7] | Data[0:7] | I/O | DR[0:7] | Двунаправленный (прямой и обратный) канал данных |
HostBusy
.
2. ПУ в ответ помещает байт данных на линии Data[0:7]
.
3. ПУ сигнализирует о действительности байта установкой низкого уровня на линии PtrClk
.
4. Хост устанавливает высокий уровень на линии HostBusy
, указывая на занятость приемом и обработкой байта.
5. ПУ отвечает установкой высокого уровня на линии PtrClk
.
6. Хост подтверждает прием байта импульсом HostClk
.
Шаги 1–6 повторяются для каждого следующего байта. Квитирование осуществляется парой сигналов HostBusy
и PtrClk
; ПУ может и не использовать сигнал HostClk
(это приглашение к выдаче следующего байта, напоминающее сигнал Ack
# в интерфейсе Centronics). Побайтный режим позволяет поднять скорость обратного канала до скорости прямого канала в стандартном режиме. Однако он способен работать только на двунаправленных портах, которые раньше применялись в основном на малораспространенных машинах PS/2, но практически все современные порты можно сконфигурировать на двунаправленный режим (в настройках BIOS Setup — Bi-Di
или PS/2
).
Контакт | Сигнал SPP | Имя в EPP | I/O | Описание |
---|---|---|---|---|
1 | Strobe# | Write# | O | Низкий уровень — цикл записи, высокий — цикл чтения |
14 | AutoLF# | DataStb# | O | Строб данных. Низкий уровень устанавливается в циклах передачи данных |
17 | SelectIn# | AddrStb# | O | Строб адреса. Низкий уровень устанавливается в адресных циклах |
16 | Init# | Reset# | O | Сброс ПУ (низким уровнем) |
10 | Ack# | INTR# | I | Прерывание от ПУ |
11 | Busy | Wait# | I | Сигнал квитирования. Низкий уровень разрешает начало цикла (установку строба в низкий уровень), переход в высокий — разрешает завершение цикла (снятие строба) |
2-9 | Data[0:7] | AD[0:7] | I/O | Двунаправленная шина адреса/данных |
12 | PaperEnd | AckDataReq¹ | I | Используется по усмотрению разработчика периферии |
13 | Select | Xflag¹ | I | Используется по усмотрению разработчика периферии |
15 | Error# | DataAvail#¹ | I | Используется по усмотрению разработчика периферии |
Имя регистра | Смещение | Режим | R/W | Описание |
---|---|---|---|---|
SPP Data Port | +0 | SPP/EPP | W | Регистр данных SPP |
SPP Status Port | +1 | SPP/EPP | R | Регистр состояния SPP |
SPP Control Port | +2 | SPP/EPP | W | Регистр управления SPP |
EPP Address Port | +3 | EPP | R/W | Регистр адреса EPP. Чтение или запись в него генерирует связанный цикл чтения или записи адреса EPP |
EPP Data Port | +4 | EPP | R/W | Регистр данных EPP. Чтение (запись) генерирует связанный цикл чтения (записи) данных EPP |
Not Defined | +5…+7 | EPP | N/A | В некоторых контроллерах могут использоваться для 16-32-битных операций ввода-вывода |
IOWR#
) в порт 4 (EPP Data Port
).
2. Адаптер устанавливает сигнал Write#
(низкий уровень), и данные помещаются на выходную шину LPT-порта.
3. При низком уровне Wait#
устанавливается строб данных.
4. Порт ждет подтверждения от ПУ (перевода Wait#
в высокий уровень).
5. Снимается строб данных — внешний EPP-цикл завершается.
6. Завершается процессорный цикл вывода.
7. ПУ устанавливает низкий уровень Wait#
, указывая на возможность начала следующего цикла.
Пример адресного цикла чтения приведен на рис. 1.4. Цикл чтения данных отличается только применением другого стробирующего сигнала.
Wait#
. Протокол автоматически подстраивается под длину кабеля — вносимые задержки приведут только к удлинению цикла. Поскольку кабели, соответствующие стандарту IEEE 1284 (см. выше), имеют одинаковые волновые свойства для разных линий, нарушения передачи, связанного с «состязаниями» сигналов, происходить не должно. При подключении сетевых адаптеров или внешних дисков к EPP-порту можно наблюдать непривычное явление: снижение производительности по мере удлинения интерфейсного кабеля.
Естественно, ПУ не должно «подвешивать» процессор на шинном цикле обмена. Это гарантирует механизм тайм-аутов PC, который принудительно завершает любой цикл обмена, длящийся более 15 мкс. В ряде реализаций EPP за тайм-аутом интерфейса следит сам адаптер — если ПУ не отвечает в течение определенного времени (5 мкс), цикл прекращается и в дополнительном (нестандартизованном) регистре состояния адаптера фиксируется ошибка.
Устройства с интерфейсом EPP, разработанные до принятия IEEE 1284, отличаются началом цикла: строб DataStb#
или AddrStb
# устанавливается независимо от состояния WAIT#
. Это означает, что ПУ не может задержать начало следующего цикла (хотя может растянуть его на требуемое время). Такая спецификация называется EPP 1.7 (предложена Xircom). Именно она применялась в контроллере 82360. Периферия, совместимая с IEEE 1284 EPP, будет нормально работать с контроллером EPP 1.7, но ПУ в стандарте EPP 1.7 может отказаться работать с контроллером EPP 1284.
С программной точки зрения контроллер EPP-порта выглядит просто (см. табл. 1.5). К трем регистрам стандартного порта, имеющим смещение 0, 1 и 2 относительно базового адреса порта, добавлены два регистра (EPP Address Port
и EPP Data Port
), чтение и запись в которые вызывает генерацию связанных внешних циклов.
Назначение регистров стандартного порта сохранено для совместимости EPP-порта с ПУ и ПО, рассчитанными на применение программно-управляемого обмена. Поскольку сигналы квитирования адаптером вырабатываются аппаратно, при записи в регистр управления CR биты 0, 1 и 3, соответствующие сигналам Strobe#
, AutoFeed#
и SelectIn#
должны иметь нулевые значения. Программное вмешательство могло бы нарушить последовательность квитирования. Некоторые адаптеры имеют специальные средства защиты (EPP Protect), при включении которых программная модификация этих бит блокируется.
Использование регистра данных EPP позволяет осуществлять передачу блока данных с помощью одной инструкции REP INSB
или REP OUTSB
. Некоторые адаптеры допускают 16/32-битное обращение к регистру данных EPP. При этом адаптер просто дешифрует адрес со смещением в диапазоне 4–7 как адрес регистра данных EPP, но процессору сообщает о разрядности 8 бит. Тогда 16- или 32-битное обращение по адресу регистра данных EPP приведет к автоматической генерации двух или четырех шинных циклов по нарастающим адресам, начиная со смещения 4. Эти циклы будут выполняться быстрее, чем то же количество одиночных циклов. Более «продвинутые» адаптеры для адреса регистра данных EPP сообщают разрядность 32 бит и для них до 4 байт может быть передано за один цикл обращения процессора. Таким образом обеспечивается производительность до 2 Мбайт/с, достаточная для адаптеров локальных сетей, внешних дисков, стриммеров и CD-ROM. Адресные циклы EPP всегда выполняются только в однобайтном режиме.
Важной чертой EPP является то, что обращение процессора к ПУ осуществляется в реальном времени — нет буферизации. Драйвер способен отслеживать состояние и подавать команды в точно известные моменты времени. Циклы чтения и записи могут чередоваться в произвольном порядке или идти блоками. Такой тип обмена удобен для регистро-ориентированных ПУ или ПУ, работающих в реальном времени, например устройств сбора информации и управления. Этот режим пригоден и для устройств хранения данных, сетевых адаптеров, принтеров, сканеров и т.п.
К сожалению, режим EPP поддерживается не всеми портами — он отсутствует, к примеру, в ряде блокнотных ПК. Так что при разработке собственных устройств ради большей совместимости с компьютерами приходится ориентироваться на режим ECP.
Контакт | Сигнал SPP | Имя в ECP | I/O | Описание |
---|---|---|---|---|
1 | Strobe# | HostClk | О | Строб данных, используется в паре с PeriphAck для передачи в прямом направлении (вывод) |
14 | AutoLF# | HostAck | О | Указывает тип цикла (команда/данные) при передаче в прямом направлении. Используется как сигнал подтверждения в паре с PeriphClk для передачи в обратном направлении |
17 | SelectIn# | 1284Active | O | Высокий уровень указывает на обмен в режиме IEEE 1284 (в режиме SPP уровень низкий) |
16 | Init# | ReverseRequest# | O | Запрос реверса. Низкий уровень сигнализирует о переключении канала на передачу в обратном направлении |
10 | Ack# | PeriphClk | I | Строб данных, используется в паре с HostAck для передачи в обратном направлении |
11 | Busy | PeriphAck | I | Используется как сигнал подтверждения в паре с HostClk для передачи в прямом направлении. Индицирует тип команда/данные при передаче в образном направлении |
12 | PaperEnd | AckReverse# | I | Подтверждение реверса. Переводится в низкий уровень в ответ на ReverseRequest# |
13 | Select | Xflag¹ | I | Флаг расширяемости |
15 | Error# | PeriphRequest#¹ | I | Устанавливается ПУ для указания на доступность (наличие) обратного канала передачи¹ |
2-9 | Data [0:7] | Data [0:7] | I/O | Двунаправленный канал данных |
HostAck
: в цикле данных — высокий, в командном цикле — низкий. В командном цикле байт может содержать канальный адрес или счетчик RLE. Отличительным признаком является бит 7 (старший): если он нулевой, то биты 0–6 содержат счетчик RLE (0-127), если единичный — то канальный адрес. На рис. 1.5, б показана пара циклов обратной передачи.
HostAck
.
2. Хост устанавливает низкий уровень на линии HostClk
, указывая на действительность данных.
3. ПУ отвечает установкой высокого уровня на линии PeriphAck
.
4. Хост устанавливает высокий уровень линии HostClk
, и этот перепад может использоваться для фиксации данных в ПУ.
5. ПУ устанавливает низкий уровень на линии PeriphAck
для указания на готовность к приему следующего байта.
Поскольку передача в ЕСР происходит через FIFO-буферы, которые могут присутствовать на обеих сторонах интерфейса, важно понимать, на каком этапе данные можно считать переданными. Данные считаются переданными на шаге 4, когда линия HostClk
переходит в высокий уровень. В этот момент модифицируются счетчики переданных и принятых байт. В протоколе ЕСР есть условия, вызывающие прекращение обмена между шагами 3 и 4. Тогда эти данные не должны рассматриваться как переданные.
Из рис. 1.5 видно и другое отличие ЕСР от EPP. Протокол EPP позволяет драйверу чередовать циклы прямой и обратной передачи, не запрашивая подтверждения на смену направления. В ЕСР смена направления должна быть согласована: хост запрашивает реверс установкой ReverseRequest#
, после чего он должен дождаться подтверждения сигналом AckReverse#
. Поскольку предыдущий цикл мог выполняться по прямому доступу, драйвер должен дождаться завершения прямого доступа или прервать его, выгрузить буфер FIFO, определив точное значение счетчика переданных байт, и только после этого запрашивать реверс.
Обратная передача данных состоит из следующих шагов:
1. Хост запрашивает изменение направления канала, устанавливая низкий уровень на линии ReverseRequest#
.
2. ПУ разрешает смену направления установкой низкого уровня на линии AckReverse#
.
3. ПУ помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии PeriphAck
.
4. ПУ устанавливает низкий уровень на линии PeriphClk
, указывая на действительность данных.
5. Хост отвечает установкой высокого уровня на линии HostAck
.
6. ПУ устанавливает высокий уровень линии PeriphClk
; этот перепад может использоваться для фиксации данных хостом.
7. Хост устанавливает низкий уровень на линии HostAck
для указания на готовность к приему следующего байта.
Mode
регистра ECR
(биты [7:5]).
Код | Режим |
---|---|
000 | SPP mode, стандартный (традиционный) режим |
001 | Bi-directional mode, двунаправленный порт (тип 1 для PS/2) |
010 | Fast Centronics, однонаправленный с использованием FIFO и DMA |
011 | ЕСР Parallel Port mode, собственно режим ЕСР |
100 | ЕРР Parallel Port mode, режим ЕРР¹ |
101 | Зарезервировано |
110 | Test mode, тестирование работы FIFO и прерываний |
111 | Configuration mode, доступ к конфигурационным регистрам |
Port
, Port+400h
, Port+800h
… будут восприниматься как обращения к адресу Port, лежащему в диапазоне 0-3FFh. Современные PC и адаптеры декодируют большее количество адресных бит, поэтому обращения по адресам 0378h и 0778Н будут адресованы двум различным регистрам. Помещение дополнительных регистров ЕСР «за спину» регистров стандартного порта (смещение 400-402Н) преследует две цели. Во-первых, эти адреса никогда не использовались традиционными адаптерами и их драйверами, и их применение в ЕСР не приведет к сужению доступного адресного пространства ввода-вывода. Во-вторых, этим обеспечивается совместимость со старыми адаптерами на уровне режимов 000–001 и возможность определения факта присутствия ЕСР-адаптера посредством обращения к его расширенным регистрам.
Смещение | Имя | R/W | Режимы ECP¹ | Название |
---|---|---|---|---|
000 | DR | R/W | 000-001 | Data Register |
000 | ECPAFIFO | R/W | 011 | ЕСР Address FIFO |
001 | SR | R/W | Все | Status Register |
002 | CR | R/W | Все | Control Register |
400 | SDFIFO | R/W | 010 | Parallel Port Data FIFO |
400 | ECPDFIFO | R/W | 011 | ECP Data FIFO |
400 | TFIFO | R/W | 110 | Test FIFO |
400 | ECPCFGA | R | 111 | Configuration Register A |
401 | ECPCFGB | R/W | 111 | Configuration Register В |
402 | ECR | R/W | Все | Extended Control Register |
ЕСР
соответствуют (и доступны) свои функциональные регистры. Переключение режимов осуществляется записью в регистр ECR. «Дежурными» режимами, включаемыми по умолчанию, являются 000 или 001. В любом из них работает полубайтный режим ввода. Из этих режимов всегда можно переключиться в любой другой, но из старших режимов (010–111) переключение возможно только в 000 или 001. Для корректной работы интерфейса перед выходом из старших режимов необходимо дождаться завершения обмена по прямому доступу и очистки FIFO-буфера.
В режиме 000 (SPP) порт работает как однонаправленный программно-управляемый SPP-порт.
В режиме 001 (Bi-Di PS/2) порт работает как двунаправленный порт PS/2 типа 1. От режима 000 отличается возможностью реверса канала данных по биту CR.5
.
Режим 010 (Fast Centronics) предназначен только для высокопроизводительного вывода через FIFO-буфер с использованием DMA. Сигналы квитирования по протоколу Centronics вырабатываются аппаратно. Сигнал запроса прерывания вырабатывается по состоянию FIFO-буфера, но не по сигналу Ack#
(запрос одиночного байта «не интересует» драйвер быстрого блочного вывода).
Режим 011 является собственно режимом ЕСР, описанным выше, Поток данных и команд
, передаваемых в ПУ, помещается в FIFO-буфер через регистры ECPDFIFO
и ECPAFIFO соответственно. Из FIFO они выводятся с соответствующим признаком цикла (состояние линии HostAck
). Принимаемый поток данных от ПУ извлекается из FIFO-буфера через регистр ECPDFIFO
. Получение адреса в командном цикле от ПУ не предусматривается. Обмен с регистром ECPDFIFO
может производиться и по каналу DMA.
Компрессия по методу RLE при передаче выполняется программно. Для передачи подряд более двух одинаковых байт данных в регистр ЕСPAFIFO
записывается байт, у которого младшие 7 бит содержат счетчик RLC (значение RLC=127 соответствует 128 повторам), а старший бит нулевой. После этого в ECPDFIFO
записывается сам байт. Принимая эту пару байт (командный байт и байт данных), ПУ осуществляет декомпрессию. При приеме потока от ПУ адаптер ЕСР декомпрессию осуществляет аппаратно и в FIFO-буфер помещает уже декомпрессированные данные. Отсюда очевидно, что вывод данных с одновременным использованием компрессии и DMA невозможен.
Режим 100 (EPP) — один из способов включения режима EPP (если таковой поддерживается адаптером и разрешен в CMOS Setup).
Режим 110 (Test Mode) предназначен для тестирования взаимодействия FIFO и прерываний. Данные могут передаваться в регистр TFIFO и из него с помощью DMA или программным способом. На внешний интерфейс обмен не воздействует. Адаптер отрабатывает операции вхолостую на максимальной скорости интерфейса (как будто сигналы квитирования приходят без задержек). Адаптер следит за состоянием буфера и по мере необходимости вырабатывает сигналы запроса прерывания. Таким образом программа может определить максимальную пропускную способность канала.
Режим 111 (Configuration mode) предназначен для доступа к конфигурационным регистрам. Выделение режима защищает адаптер и протокол от некорректных изменений конфигурации в процессе обмена.
Как уже упоминалось, каждому режиму ЕСР соответствуют свои функциональные регистры (табл. 1.8).
Регистр данных DR
используется для передачи данных только в программно-управляемых режимах (000 и 001).
Регистр состояния SR
передает значение сигналов на соответствующих линиях (как в SPP).
Регистр управления CR
имеет назначение бит, совпадающее с SPP. В режимах 010, 011 запись в биты 0, 1 (сигналы AutoLF#
и Strobe#
) игнорируется.
Регистр ECPAFIFO
служит для помещения информации командных циклов (канального адреса или счетчика RLE
, в зависимости от бита 7) в FIFO-буфер. Из буфера информация будет выдана в командном цикле вывода.
Регистр SDFIFO
используется для передачи данных в режиме 010. Данные, записанные в регистр (или посланные по каналу DMA), передаются через буфер FIFO по реализованному аппаратно протоколу Centronics. При этом должно быть задано прямое направление передачи (бит CR.5
=0).
Регистр DFIFO
используется для обмена данными в режиме 011 (ЕСР). Данные, записанные в регистр или считанные из него (или переданные по каналу DMA), передаются через буфер FIFO по протоколу ЕСР.
Регистр TFIFO
обеспечивает механизм тестирования FIFO-буфера в режиме 110.
Регистр ECPCFGA
позволяет считывать информацию об адаптере (идентификационный код в битах [7:4]).
Регистр ECPCFGB
позволят хранить любую информацию, необходимую драйверу. Запись в регистр не влияет на работу порта.
Регистр ECR
— главный управляющий регистр ЕСР. Его биты имеют следующее назначение:
♦ ECR[7:5]
— ЕСР MODE
— задают режим ЕСР;
♦ ECR.4
— ERRINTREN#
— (Error Interrupt Disable) запрещает прерывания по сигналу Error#
(при нулевом значении бита по отрицательному перепаду на этой линии вырабатывается запрос прерывания);
♦ ECR.3
— DMAEN
— (DMA Enable) разрешает обмен по каналу DMA;
♦ ECR.2
— SERVICEINTR
— (Service Interrupt) запрещает сервисные прерывания, которые вырабатываются по окончании цикла DMA (если он разрешен), по порогу заполнения/опустошения FIFO-буфера (если не используется DMA) и по ошибке переполнения буфера сверху или снизу;
♦ ECR.1
— FIFOFS
— (FIFO Full Status) сигнализирует о заполнении буфера; при FIFOFS
=1 в буфере нет ни одного свободного байта;
♦ ECR.0
— FIFOES
— (FIFO Empty Status) указывает на полное опустошение буфера; комбинация FIFOFS
=FIFOES
=1 означает ошибку работы с FIFO (переполнение сверху или снизу).
Когда порт находится в стандартном или двунаправленном режимах (000 или 001), первые три регистра полностью совпадают с регистрами стандартного порта. Так обеспечивается совместимость драйвера со старыми адаптерами и старых драйверов с новыми адаптерами.
По интерфейсу с программой ECP-порт напоминает EPP: после установки режима (записи кода в регистр ECR
) обмен данными с устройством сводится к чтению или записи в соответствующие регистры. За состоянием FIFO-буфера наблюдают либо по регистру ECR
, либо по обслуживанию сервисных прерываний от порта. Весь протокол квитирования генерируется адаптером аппаратно. Обмен данными с ЕСР-портом (кроме явного программного) возможен и по прямому доступу к памяти (каналу DMA), что эффективно при передаче больших блоков данных.
Xflag
(Select
в терминах SPP) для подтверждения запрошенного режима обратного канала, кроме полубайтного, который поддерживается всеми устройствами IEEE 1284. Бит Extensibility Link request
послужит для определения дополнительных режимов в будущих расширениях стандарта.
Бит | Описание | Допустимые комбинации бит [7:0] |
---|---|---|
7 | Request Extensibility Link — зарезервирован | 1000 0000 |
6 | Запрос режима ЕРР | 0100 0000 |
5 | Запрос режима ЕСР с RLE | 0011 0000 |
4 | Запрос режима ЕСР без RLE | 0001 0000 |
3 | Зарезервировано | 0000 1000 |
2 | Запрос идентификатора устройства с ответом в режиме: | |
полубайтный | 0000 0100 | |
байтный | 0000 0101 | |
ЕСР без RLE | 0001 0100 | |
ЕСР с RLE | 0011 0100 | |
1 | Зарезервировано | 0000 0010 |
0 | Запрос полубайтного режима | 0000 0001 |
none | Запрос байтного режима | 0000 0000 |
SelectIn#
и низкий — AutoFeed#
, что означает начало последовательности согласования.
3. ПУ отвечает установкой низкого уровня сигнала Ack#
и высокого — Error#
, PaperEnd
и Select
. Устройство, «не понимающее» стандарта 1284, ответа не даст, и дальнейшие шаги не выполнятся.
4. Хост устанавливает низкий уровень сигнала Strobe#
для записи байта расширяемости в ПУ.
5. Хост устанавливает высокий уровень сигналов Strobe#
и AutoLF#
.
6. ПУ отвечает установкой в низкий уровень сигналов PaperEnd
и Error#
, если ПУ имеет обратный канал передачи данных. Если запрошенный режим поддерживается устройством, на линии Select
устанавливается высокий уровень, если не поддерживается — низкий.
7. ПУ устанавливает высокий уровень на линии Ack#
для указания на завершение последовательности согласования, после чего контроллер задает требуемый режим работы.
Тип | Расшифровка | Разъем 1 | Разъем 2 |
---|---|---|---|
AMAM | Type A Male — Type A Male | А (вилка) | А (вилка) |
AMAF | Type A Male — Type A Female | А (вилка) | А (розетка) |
AB | Type A Male — Туре В Plug — стандартный кабель к принтеру | А (вилка) | В |
АС | Type A Male — Туре С Plug — новый кабель к принтеру | А (вилка) | С |
BC | Туре В Plug — Type С Plug | В | С |
CC | Туре С Plug — Type С Plug | С | С |
BIOS Data Area
0:0408h, 040Ah, 040Ch, 040Eh. Эти ячейки хранят адреса портов LPT1
-LPT4
, нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:0478, 0479, 047А, 047В заносятся константы, задающие тайм-аут для этих портов.
Поиск портов обычно ведется достаточно примитивно — по базовому адресу (в регистр данных предполагаемого порта) выводится тестовый байт (AAh или 55h), затем производится ввод по тому же адресу. Если считанный байт совпал с записанным, предполагается, что найден LPT-порт; его адрес помещается в ячейку BIOS Data Area
. Базовые адреса портов могут быть впоследствии изменены программно. Адрес порта LPT4 система BIOS самостоятельно установить не может, поскольку в списке стандартных адресов поиска имеются только три вышеуказанных.
Обнаруженные порты инициализируются — записью в регистр управления формируется и снимается сигнал Init#
, после чего записывается значение 0Ch, соответствующее исходному состоянию сигналов интерфейса. В некоторых случаях сигнал Init#
активен с момента аппаратного сброса до инициализации порта при загрузке ОС. Это можно заметить по поведению включенного принтера во время перезагрузки компьютера — у принтера надолго гаснет индикатор On-Line
. Следствие этого явления — невозможность распечатки экранов (например, параметров BIOS Setup) по нажатию клавиши Print Screen
до загрузки ОС.
SelectIn#
(контакт 17 порта LPT и контакт 36 разъема Centronics).
X1, разъем PC#1 | X2, разъем PC#2 | ||
---|---|---|---|
Бит | Контакт | Контакт | Бит |
DR.0 | 2 | 15 | SR.3 |
DR.1 | 3 | 13 | SR.4 |
DR.2 | 4 | 12 | SR.5 |
DR.3 | 5 | 10 | SR.6 |
DR.4 | 6 | 11 | SR.7 |
SR.6 | 10 | 5 | DR.3 |
SR.7 | 11 | 6 | DR.4 |
SR.5 | 12 | 4 | DR.2 |
SR.4 | 13 | 3 | DR.1 |
SR.3 | 15 | 2 | DR.0 |
GND | 18-25 | 18-25 | GND |
PeriphRequest#
(контакт 15). В цепи линий данных рекомендуется вставить последовательные резисторы (0,5–1 кОм), препятствующие протеканию слишком больших токов, когда порты данных обоих компьютеров находятся в режиме вывода. Эта ситуация возникает, когда коммуникационное ПО компьютеров еще не запущено. Связь в режиме ЕСР поддерживается Windows 9х, в комплект поставки этих ОС входит драйвер PARALINK.VxD
, но из-за внутренней ошибки он неработоспособен. «Заплатку» на этот драйвер, а также тестовую утилиту и необходимые описания можно найти в сети (www.lpt.com, www.lvr.com/parport.htm).
Разъем X1 | Разъем X2 | ||
---|---|---|---|
Контакт | Имя в ЕСР | Имя в ЕСР | Контакт |
1 | HostClk | PeriphClk | 10 |
14 | HostAck | PeriphAck | 11 |
17 | 1284Active | Xflag | 13 |
16 | ReverseRequest# | AskReverse# | 12 |
10 | PeriphClk | HostClk | 1 |
11 | PeriphAck | HostAck | 14 |
12 | AckReverse# | ReverseRequest# | 16 |
13 | Xflag | 1284Active | 17 |
2, 3…9 | Data [0:7] | Data [0:7] | 2, 3…9 |
Контакт | I/O | Бит¹ | SPP | ECP | EPP |
---|---|---|---|---|---|
1 | O/I | CR.0\ | Strobe# | HostClk | Write# |
2 | O/I | DR.0 | Data 0 | Data 0 | Data 0 |
3 | O/I | DR.1 | Data 1 | Data 1 | Data 1 |
4 | O/I | DR.2 | Data 2 | Data 2 | Data 2 |
5 | O/I | DR.3 | Data 3 | Data 3 | Data 3 |
6 | O/I | DR.4 | Data 4 | Data 4 | Data 4 |
7 | O/I | DR.5 | Data 5 | Data 5 | Data 5 |
8 | O/I | DR.6 | Data 6 | Data 6 | Data 6 |
9 | O/I | DR.7 | Data 7 | Data 7 | Data 7 |
10 | I | SR.6 | Ack# | PeriphClk | INTR# |
11 | I | SR.7\ | Busy | PeriphAck | Wait# |
12 | I | SR.5 | PaperEnd | AckReverse# | —² |
13 | I | SR.4 | Select | Xflag | —² |
14 | O/I | CR.1\ | Auto LF# | HostAck | DataStb# |
15 | I | SR.3 | Error# | PeriphRequest# | —² |
16 | O/I | CR.2 | Init# | ReverseRequest# | Reset# |
17 | O/I | CR.3\ | Select In# | 1284Active | AddrStb# |
LPT1
, LPT2
, LPT3
. Адрес 3BCh имеет адаптер порта, расположенный на плате MDA или HGC. Большинство портов по умолчанию конфигурируется на адрес 378h и может переключаться на 278h.
♦ Используемая линия запроса прерывания: для LPT
— IRQ7
, для LPT2
— IRQ5
. Традиционно прерывания от принтера не задействуются, и этот дефицитный ресурс можно сэкономить. Однако при использовании скоростных режимов ЕСР (или Fast Centronics) работа через прерывания может заметно повысить производительность и снизить загрузку процессора.
♦ Использование канала DMA для режимов ЕСР и Fast Centronics — разрешение и номер канала DMA.
♦ Режимы работы порта:
• SPP — порт работает только в стандартном однонаправленном программно-управляемом режиме;
• PS/2, он же Bi-Directional — отличается от SPP возможностью реверса канала (установкой CR.5
=1);
• Fast Centronics — аппаратное формирование протокола Centronics с использованием FIFO-буфера и, возможно, DMA;
• EPP — в зависимости от использования регистров порт работает в режиме SPP или EPP;
• ЕСР — по умолчанию включается в режим SPP или PS/2, записью в ECR может переводиться в любой режим ЕСР, но перевод в EPP записью в ECR кода 100 не гарантируется;
• ЕСР+EPP — то же, что и ЕСР, но запись в ECR кода режима 100 переводит порт в EPP.
Выбор режима EPP, ЕСР или Fast Centronics сам по себе не приводит к повышению быстродействия обмена с подключенными ПУ, а только дает возможность драйверу и ПУ установить оптимальный режим в пределах их «разумения». Большинство современных драйверов и приложений пытаются использовать эффективные режимы, поэтому «подрезать им крылья» установкой простых режимов без веских на то оснований не стоит.
Принтеры и сканеры могут пожелать режима ЕСР. Windows (3.x, 9х и NT) имеет системные драйверы для этого режима. В среде DOS печать через ЕСР поддерживается только специальным загружаемым драйвером.
Сетевые адаптеры, внешние диски и CD-ROM, подключаемые к параллельному порту, могут использовать режим EPP. Для этого режима специальный драйвер пока еще не применяется; поддержка EPP включается в драйвер самого подключаемого устройства.
BIOS Data Area
с помощью отладчика.
Если BIOS обнаруживает меньше портов, чем установлено физически, скорее всего, двум портам присвоен один и тот же адрес. При этом работоспособность ни одного из конфликтующих портов не гарантируется: они будут одновременно выводить сигналы, но при чтении регистра состояния конфликт на шине, скорее всего, приведет к искажению данных. Программное тестирование порта без диагностической заглушки (Loop Back) не покажет ошибок, поскольку при этом читаются данные выходных регистров, а они у всех конфликтующих (по отдельности исправных портов) совпадут. Именно такое тестирование производит BIOS при проверке на наличие портов. Разбираться с такой ситуацией следует, последовательно устанавливая порты и наблюдая за адресами, появляющимися в списке.
Если физически установлен только один порт, a BIOS его не обнаруживает, то либо порт отключен при конфигурировании, либо он вышел из строя (скорее всего из-за нарушений правил подключения). Если вам везет, неисправность устраняется «передергиванием» платы в слоте — там иногда возникают проблемы с контактами.
Наблюдаются и такие «чудеса» — при «теплой» перезагрузке DOS после Windows 95 порт не виден (и приложения не могут печатать из MS-DOS). Однако после повторной перезагрузки DOS порт оказывается на месте. С этим явлением легче смириться, чем бороться.
Тестирование портов с помощью диагностических программ позволяет проверить выходные регистры, а при использовании специальных заглушек — и входные линии. Поскольку количество выходных линий порта (12) и входных (5) различно, то полная проверка порта с помощью пассивной заглушки принципиально невозможна. Разные программы тестирования требуют применения разных заглушек (рис. 1.8).
LPTn
или PRN
совершается быстро и успешно), а принтер (исправный) не напечатал ни одного символа — скорее всего, это обрыв (не контакт в разъеме) цепи Strobe#
.
♦ Если принтер находится в состоянии On Line, а появляется сообщение о его неготовности, причину следует искать в линии Busy
.
♦ Если принтер, подключенный к порту, в стандартном режиме (SPP) печатает нормально, а при переходе в режим ЕСР начинаются сбои, следует проверить кабель — соответствует ли он требованиям IEEE 1284 (см. выше). Дешевые кабели с неперевитыми проводами нормально работают на скоростях 50-100 Кбайт/с, но при скорости 1–2 Мбайт/с, обеспечиваемой ЕСР, имеют полное право не работать, особенно при длине более 2 м.
♦ Если при установке драйвера PnP-принтера появилось сообщение о необходимости применения «двунаправленного кабеля», проверьте наличие связи контакта 17 разъема DB-25 с контактом 36 разъема Centronics. Хотя эта связь изначально предусматривалась, в ряде кабелей она отсутствует.
♦ Если принтер искажает информацию при печати, возможен обрыв (или замыкание) линий данных. В этом случае удобно воспользоваться файлом, содержащим последовательность кодов всех печатных символов. Если файл печатается с повтором некоторых символов или их групп, по периодичности повтора можно легко вычислить оборванный провод данных интерфейса. Этот же файл удобно использовать для проверки аппаратной русификации принтера.
Аппаратные прерывания от LPT-порта используются не всегда. Даже DOS-программа фоновой печати PRINT
работает с портом по опросу состояния, а ее обслуживающий процесс запускается по прерыванию от таймера. Поэтому неисправности, связанные с цепью прерывания от порта, проявляются не часто. Однако по-настоящему многозадачные ОС (например, NetWare) стараются работать с портом по прерываниям. Протестировать линию прерывания можно, только подключив к порту ПУ или заглушку. Если к порту с неисправным каналом прерывания подключить адаптер локальной сети, то он, возможно, будет работать, но с очень низкой скоростью: на любой запрос ответ будет приходить с задержкой в десятки секунд — принятый из адаптера пакет будет приниматься не по прерыванию (сразу по приходу), а по внешнему тайм-ауту.
IRQ4
(обычно используются для COM1 и COM3) и IRQ3
(для COM2 и COM4). С внешней стороны порты имеют линии последовательных данных передачи и приема, а также набор сигналов управления и состояния, соответствующий стандарту RS-232C. СОМ-порты имеют внешние разъемы-вилки (male — «папа») DB25P или DB9P, выведенные на заднюю панель компьютера (см. п. 2.1). Характерной особенностью интерфейса является применение «не ТТЛ» сигналов — все внешние сигналы порта двуполярные. Гальваническая развязка отсутствует — схемная земля подключаемого устройства соединяется со схемной землей компьютера. Скорость передачи данных может достигать 115 200 бит/с.
Компьютер может иметь до четырех последовательных портов COM1-COM4 (для машин класса AT типично наличие двух портов) с поддержкой на уровне BIOS. Сервис BIOS Int 14h
обеспечивает инициализацию порта, ввод и вывод символа (не используя прерываний) и опрос состояния. Через Int 14h
скорость передачи программируется в диапазоне 110-9600 бит/с (меньше, чем реальные возможности порта). Для повышения производительности широко используется взаимодействие программ с портом на уровне регистров, для чего требуется совместимость аппаратных средств СОМ-порта с программной моделью i8250/16450/16550.
Название порта указывает на его основное назначение — подключение коммуникационного оборудования (например, модема) для связи с другими компьютерами, сетями и периферийными устройствами. К порту могут непосредственно подключаться и периферийные устройств с последовательным интерфейсом: принтеры, плоттеры, терминалы и другие. СОМ-порт широко используется для подключения мыши, а также организации непосредственной связи двух компьютеров. К СОМ-порту подключают и электронные ключи.
Практически все современные системные платы (еще начиная с PCI-плат для процессоров 486) имеют встроенные адаптеры двух СОМ-портов. Один из портов может использоваться и для беспроводной инфракрасной связи с периферийными устройствами (IrDA). Существуют карты ISA с парой СОМ-портов, где они чаще всего соседствуют с LPT-портом, а также с контроллерами дисковых интерфейсов (FDC+IDE). Если возникает потребность в большом количестве последовательных интерфейсов, то в ПК можно установить специальные адаптеры-мультиплексоры. Это весьма дорогие карты, они выпускаются обычно на 4, 8, 12 и даже 16 портов. Такое большое число разъемов на заднюю стенку ПК вывести проблематично, и у мультиплексоров обычно имеется внешний блок с разъемами (и электроникой), соединяемый с адаптером кабелем с многоконтактными разъемами. BIOS мультиплексоры не поддерживает.
«Классический» СОМ-порт позволял осуществлять обмен данными только программно-управляемым способом, при этом для пересылки каждого байта процессору приходится выполнять несколько инструкций. Современные порты имеют FIFO-буферы данных и позволяют выполнять обмен по каналу DMA, существенно разгружая центральный процессор, что особенно важно на больших скоростях обмена.
Стандарт RS-232C регламентирует типы применяемых разъемов. На аппаратуре АПД (в том числе на СОМ-портах) принято устанавливать вилки DB-25P или более компактный вариант — DB-9P. Девятиштырьковые разъемы не имеют контактов для дополнительных сигналов, необходимых для синхронного режима (в большинстве 25-штырьковых разъемах эти контакты не используются). На аппаратуре АКД (модемах) устанавливают розетки DB-25S или DB-9S.ВНИМАНИЕ
Подключение и отключение интерфейсных кабелей устройств с автономным питанием должно производиться при отключенном питании. Иначе разность невыровненных потенциалов устройств в момент коммутации может оказаться приложенной к выходным или входным (что опаснее) цепям интерфейса и вывести из строя микросхемы.
Обозначение цепи | Контакт разъема | № провода кабеля выносного разъёма PC | Направление | ||||||
---|---|---|---|---|---|---|---|---|---|
СОМ-порт | RS-232 | V.24 Стык 2 | DB-25Р | DB-9Р | 11 | 22 | 33 | 44 | I/O |
PG | AA | 101 | 1 | 5 | (10) | (10) | (10) | 1 | - |
SG | AB | 102 | 7 | 5 | 5 | 9 | 1 | 13 | - |
TD | BA | 103 | 2 | 3 | 3 | 5 | 3 | 3 | O |
RD | BB | 104 | 3 | 2 | 2 | 3 | 4 | 5 | I |
RTS | CA | 105 | 4 | 7 | 7 | 4 | 8 | 7 | O |
CTS | CB | 106 | 5 | 8 | 8 | 6 | 7 | 9 | I |
DSR | CC | 107 | 6 | 6 | 6 | 2 | 9 | 11 | I |
DTR | CD | 108/2 | 20 | 4 | 4 | 7 | 2 | 14 | O |
DCD | CF | 109 | 8 | 1 | 1 | 1 | 5 | 15 | I |
RI | СЕ | 125 | 22 | 9 | 9 | 8 | 6 | 18 | I |
Сигнал | Назначение |
---|---|
PG | Protected Ground — защитная земля, соединяется с корпусом устройства и экраном кабеля |
SG | Signal Ground — сигнальная (схемная) земля, относительно которой действуют уровни сигналов |
TD | Transmit Data — последовательные данные — выход передатчика |
RD | Receive Data — последовательные данные — вход приемника |
RTS | Request To Send — выход запроса передачи данных: состояние «включено» уведомляет модем о наличии у терминала данных для передачи. В полудуплексном режиме используется для управления направлением — состояние «включено» служит сигналом модему на переключение в режим передачи |
CIS | Clear To Send — вход разрешения терминалу передавать данные. Состояние «выключено» запрещает передачу данных. Сигнал используется для аппаратного управления потоками данных |
DSR | Data Set Ready — вход сигнала готовности от аппаратуры передачи данных (модем в рабочем режиме подключен к каналу и закончил действия по согласованию с аппаратурой на противоположном конце канала) |
DTR | Data Terminal Ready — выход сигнала готовности терминала к обмену данными. Состояние «включено» поддерживает коммутируемый канал в состоянии соединения |
DCD | Data Carrier Detected — вход сигнала обнаружения несущей удаленного модема |
RI | Ring Indicator — вход индикатора вызова (звонка). В коммутируемом канале этим сигналом модем сигнализирует о принятии вызова |
DTR
компьютер указывает на желание использовать модем.
2. Установкой DSR
модем сигнализирует о своей готовности и установлении соединения.
3. Сигналом RTS
компьютер запрашивает разрешение на передачу и заявляет о своей готовности принимать данные от модема.
4. Сигналом CTS
модем уведомляет о своей готовности к приему данных от компьютера и передаче их в линию.
5. Снятием CTS
модем сигнализирует о невозможности дальнейшего приема (например, буфер заполнен) — компьютер должен приостановить передачу данных.
6. Сигналом CTS
модем разрешает компьютеру продолжить передачу (в буфере появилось место).
7. Снятие RTS
может означать как заполнение буфера компьютера (модем должен приостановить передачу данных в компьютер), так и отсутствие данных для передачи в модем. Обычно в этом случае модем прекращает пересылку данных в компьютер.
8. Модем подтверждает снятие RTS
сбросом CTS
.
9. Компьютер повторно устанавливает RTS
для возобновления передачи.
10. Модем подтверждает готовность к этим действиям.
11. Компьютер указывает на завершение обмена.
12. Модем отвечает подтверждением.
13. Компьютер снимает DTR
, что обычно является сигналом на разрыв соединения («повесить трубку»).
14. Модем сбросом DSR
сигнализирует о разрыве соединения.
Из рассмотрения этой последовательности становятся понятными соединения DTR
-DSR
и RTS
-CTS
в нуль-модемных кабелях.
Параметр | RS-422 | RS-485 |
---|---|---|
Порог срабатывания, |UA-UB|, В | 0,2 | 0,2 |
Допустимое напряжение синфазной помехи, В¹ | –6,8…+6,8 | –6,8…+11,8 |
Допустимое напряжение на входах, В¹ | –7…+7 | –7…+12 |
Входное сопротивление приемника, кОм | 4 | 12 |
Минимальное сопротивление нагрузки передатчика, Ом | 100 | 60 |
Максимальное число узлов | 1 передатчик +10 приемников | 32 (передатчиков, приемников или их комбинаций) |
Максимальная длина, м | 1200 (100 кбит/с) 12 (10 Мбит/с) | 1200 (100 кбит/с) 12 (10 Мбит/с) |
Терминаторы, R=100 Ом | На дальнем конце от передатчика | На обоих концах |
Ток короткого замыкания, мА | <150 Ha шину GND | <250 на шину с потенциалом -7…+12 В или между проводами А и В |
CTS
, который позволяет остановить передачу данных, если приемник не готов к их приему (рис. 2.13). Передатчик «выпускает» очередной байт только при включенной линии CTS
. Байт, который уже начал передаваться, задержать сигналом CTS
невозможно (это гарантирует целостность посылки). Аппаратный протокол обеспечивает самую быструю реакцию передатчика на состояние приемника. Микросхемы асинхронных приемопередатчиков имеют не менее двух регистров в приемной части — сдвигающий, для приема очередной посылки, и хранящий, из которого считывается принятый байт. Это позволяет реализовать обмен по аппаратному протоколу без потери данных.
RTS
— CTS
.
При непосредственном соединении у передающего терминала должно быть обеспечено состояние «включено» на линии CTS (соединением собственных линий RTS
— CTS
), в противном случае передатчик будет «молчать».
Применяемые в IBM PC приемопередатчики 8250/16450/16550 сигнал CTS
аппаратно не отрабатывают, а только показывают его состояние в регистре MSR
(см. п. 2.5). Реализация протокола RTS/CTS возлагается на драйвер BIOS Int 14h
, и называть его «аппаратным» не совсем корректно. Если же программа, пользующаяся СОМ-портом, взаимодействует с UART на уровне регистров (а не через BIOS), то обработкой сигнала CTS
для поддержки данного протокола она занимается сама. Ряд коммуникационных программ позволяет игнорировать сигнал CTS
(если не используется модем), и для них не требуется соединение входа CTS
с выходом даже своего сигнала RTS
. Однако существуют и иные приемопередатчики (например, 8251), в которых сигнал CTS
отрабатывается аппаратно. Для них, а также для «честных» программ, использование сигнала CTS
на разъемах (а то и на кабелях) обязательно. Преимущество протокола RTS/CTS во времени реакции (по сравнению с программным методом XON/XOFF) остается лишь для буферированной (в режиме FIFO) передачи.
Программный протокол управления потоком XON/XOFF предполагает наличие двунаправленного канала передачи данных. Работает протокол следующим образом: если устройство, принимающее данные, обнаруживает причины, по которым оно не может их дальше принимать, оно по обратному последовательному каналу посылает байт-символ XOFF
(13h). Противоположное устройство, приняв этот символ, приостанавливает передачу. Когда принимающее устройство снова становится готовым к приему данных, оно посылает символ XON
(11h), приняв который противоположное устройство возобновляет передачу. Время реакции передатчика на изменение состояния приемника по сравнению с аппаратным протоколом увеличивается, по крайней мере, на время передачи символа (XON
или XOFF
) плюс время реакции программы передатчика на прием символа (рис. 2.14). Из этого следует, что данные без потерь могут приниматься только приемником, имеющим дополнительный буфер принимаемых данных и сигнализирующим о неготовности заблаговременно (имея в буфере свободное место).
XON
), является сложность реализации полнодуплексного режима обмена. В этом случае из потока принимаемых данных должны выделяться (и обрабатываться) символы управления потоком, что ограничивает набор передаваемых символов.
Кроме этих двух распространенных стандартных протоколов, поддерживаемых и ПУ, и ОС, существуют и другие.
DLAB
(бита 7 регистра LCR
). В адресном пространстве микросхема занимает 8 смежных адресов. Список регистров UART 16550A и способы доступа к ним приведены в табл. 2.4. Микросхемы 8250 отличаются отсутствием регистра FCR и всех возможностей FIFO и DMA.
Доступ | Регистр | Чтение/запись 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 | DIM | Divisor Latch MSB | R/W |
1h | 0 | IER | Interrupt Enable Register | R/W |
2h | x | IIR | Interrupt Identification Register | RO |
2h | x | FOR | FIFO Control Register | 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 | R/W |
ТHR
— промежуточный регистр данных передатчика (только для записи). Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS
. Бит 0 передается (и принимается) первым. При длине посылки менее 8 бит старшие биты игнорируются.
RBR
— буферный регистр принимаемых данных (только для чтения). Данные, принятые входным сдвигающим регистром, помещаются в регистр RBR
, откуда они могут быть считаны процессором. Если к моменту окончания приема очередного символа предыдущий не был считан из регистра, фиксируется ошибка переполнения. При длине посылки менее 8 бит старшие биты в регистре имеют нулевое значение.
DLL
— регистр младшего байта делителя частоты.
DLM
— регистр старшего байта делителя частоты. Делитель определяется по формуле D=115200/V, где V — скорость передачи, бит/с. Входная частота синхронизации 1,8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.
IER
— регистр разрешения прерываний. Единичное значение бита разрешает прерывание от соответствующего источника.
Назначение бит регистра IER
:
♦ биты [7:4]=0 — не используются;
♦ бит 3 — Mod_IE
— по изменению состояния модема (любой из линий CTS
, DSR
, RI
, DCD
);
♦ бит 2 — RxL_IЕ
— по обрыву/ошибке линии;
♦ бит 1 — TxD_IE
— по завершении передачи;
♦ бит 0 — RxD_IЕ
— по приему символа (в режиме FIFO — прерывание по тайм-ауту).
IIR
— регистр идентификации прерываний и признака режима FIFO (только для чтения). Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по четырехуровневой системе приоритетов. Порядок приоритетов (по убыванию): состояние линии, прием символа, освобождение регистра передатчика, состояние модема. При возникновении условий прерывания UART указывает на источник с высшим приоритетом до тех пор, пока он не будет сброшен соответствующей операцией. Только после этого будет выставлен запрос с указанием следующего источника. Ниже описано назначение бит регистра IIR.
♦ Биты [7:6] — признак режима FIFO:
• 11 — режим FIFO 16550A;
• 10 — режим FIFO 16550;
• 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 — изменение состояния модема (CIS
, DSR
, RI
или DCD
). Сброс выполняется чтением регистра MSR
.
FCR
— регистр управления FIFO (только для записи). Ниже описано назначение бит регистра FCR
:
♦ Биты [7:6] — ITL
(Interrupt Trigger Level) — уровень заполнения FIFO-буфера, при котором вырабатывается прерывание:
• 00 — 1 байт (по умолчанию);
• 01 — 4 байта;
• 10 — 8 байт;
• 11–14 байт.
♦ Биты [5:4] зарезервированы.
♦ Бит 3 — разрешение операций DMA.
♦ Бит 2 — RESETTF
(Reset Transmitter FIFO) — сброс счетчика FIFO-передатчика (записью единицы; сдвигающий регистр не сбрасывается).
♦ Бит 1 — RESETRF
(Reset Receiver FIFO) — сброс счетчика FIFO-приемника (записью единицы; сдвигающий регистр не сбрасывается).
♦ Бит 0 — TRFIFOE
(Transmit And Receive FIFO Enable) — разрешение (единицей) режима FIFO для передатчика и приемника. При смене режима FIFO-буферы автоматически очищаются.
LCR
— регистр управления линией (настройки параметров канала). Ниже описано назначение бит регистра LCR
.
♦ Бит 7 — DLAB
(Divisor Latch Access Bit) — управление доступом к делителю частоты.
♦ Бит 6 — BRCON
(Break Control) — формирование обрыва линии (посылка нулей) при BRCON
=1.
♦ Бит 5 — STICPAR
(Sticky Parity) — принудительное формирование бита паритета:
• 0 — контрольный бит генерируется в соответствии с паритетом выводимого символа;
• 1 — постоянное значение контрольного бита: при EVENPAR
=1 — нулевое, при EVENPAR
=0 — единичное.
♦ Бит 4 — EVENPAR
(Even Parity Select) — выбор типа контроля: 0 — нечетность, 1 — четность.
♦ Бит 3 — PAREN
(Parity Enable) — разрешение контрольного бита:
• 1 — контрольный бит (паритет или постоянный) разрешен;
• 0 — контрольный бит запрещен.
♦ Бит 2 — STOPВ
(Stop Bits) — количество стоп-бит:
• 0–1 стоп-бит;
• 1–2 стоп-бита (для 5-битного кода стоп-бит будет иметь длину 1,5 бит).
♦ Биты [1:0] — SERIALDB
(Serial Data Bits) — количество бит данных:
• 00 — 5 бит;
• 01 — 6 бит;
• 10 — 7 бит;
• 11 — 8 бит.
MCR
— регистр управления модемом. Ниже описано назначение бит регистра MCR
.
♦ Биты [7:5]=0 — зарезервированы.
♦ Бит 4 — LME
(Loopback Mode Enable) — разрешение режима диагностики:
• 0 — нормальный режим;
• 1 — режим диагностики (см. ниже).
♦ Бит 3 — IE
(Interrupt Enable) — разрешение прерываний с помощью внешнего выхода OUT2
; в режиме диагностики поступает на вход MSR.7
:
• 0 — прерывания запрещены;
• 1 — прерывания разрешены.
♦ Бит 2 — OUT1C
(OUT1 Bit Control) — управление выходным сигналом 1 (не используется); в режиме диагностики поступает на вход MSR.6
.
♦ Бит 1 — RTSC
(Request To Send Control) — управление выходом RTS
; в режиме диагностики поступает на вход MSR.4
:
• 0 — активен (-V);
• 1 — пассивен (+V).
♦ Бит 0 — DTRC
(Data Terminal Ready Control) — управление выходом DTR
; в режиме диагностики поступает на вход MSR.5
:
• 0 — активен (-V);
• 1 — пассивен (+V).
LSR
— регистр состояния линии (точнее, состояния приемопередатчика). Ниже описано назначение бит регистра LSR
.
♦ Бит 7 — FIFOE
(FIFO Error Status) — ошибка принятых данных в режиме FIFO (буфер содержит хотя бы один символ, принятый с ошибкой формата, паритета или обрывом). В не FIFO-режиме всегда 0.
♦ Бит 6 — TEMPT
(Transmitter Empty Status) — регистр передатчика пуст (нет данных для передачи ни в сдвиговом регистре, ни в буферных регистрах THR
или FIFO).
♦ Бит 5 — THRE
(Transmitter Holding Register Empty) — регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO-буфере передачи. Может являться источником прерывания.
♦ Бит 4 — BD
(Break Detected) — индикатор обрыва линии (вход приемника находится в состоянии 0 не менее чем время посылки символа).
♦ Бит 3 — FE
(Framing Error) — ошибка кадра (неверный стоп-бит).
♦ Бит 2 — РЕ
(Parity Error) — ошибка контрольного бита (паритета или фиксированного).
♦ Бит 1 — ОЕ
(Overrun Error) — переполнение (потеря символа). Если прием очередного символа начинается до того, как предыдущий выгружен из сдвигающего регистра в буферный регистр или в регистр FIFO, прежний символ в сдвигающем регистре теряется.
♦ Бит 0 — DR
(Receiver Data Ready) — принятые данные готовы (в DHR или FIFO- буфере). Сброс — чтением приемника.
Индикаторы ошибок — биты [4:1] — сбрасываются после чтения регистра LSR
. В режиме FIFO признаки ошибок хранятся в FIFO-буфере вместе с каждым символом. В регистре они устанавливаются (и вызывают прерывание) в тот момент, когда символ, принятый с ошибкой, находится на вершине FIFO (первый в очереди на считывание). В случае обрыва линии в FIFO заносится только один «обрывной» символ, и UART ждет восстановления и последующего старт-бита.
MSR
— регистр состояния модема. Ниже описано назначение бит регистра MSR
:
♦ Бит 7 — DCD
(Data Carrier Detect) — состояние линии DCD
:
• 0 — активна (-V);
• 1 — пассивна (+V).
♦ Бит 6 — RI
(Ring Indicator) — состояние линии RI
:
• 0 — активна (-V);
• 1 — пассивна (+V).
♦ Бит 5 — DSR
(Data Set Ready) — состояние линии DSR
:
• 0 — активна (-V);
• 1 — пассивна (+V).
♦ Бит 4 — CTS
(Clear To Send) — состояние линии CTS
:
• 0 — активна (-V);
• 1 — пассивна (+V).
♦ Бит 3 — DDCD
(Delta Data Carrier Detect) — изменение состояния DCD
.
♦ Бит 2 — ТЕRI
(Trailing Edge Of Ring Indicator) — спад огибающей RI
(окончание звонка).
♦ Бит 1 — DDSR
(Delta Data Set Ready) — изменение состояния DSR
.
♦ Бит 0 — DCTS
(Delta Clear To Send) — изменение состояния CTS
.
Признаки изменения (биты [3:0]) сбрасываются по чтению регистра.
SCR
— рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 отсутствует).
В диагностическом режиме (при LME
=1) внутри UART организуется внутренняя «заглушка»:
♦ выход передатчика переводится в состояние логической единицы;
♦ вход приемника отключается;
♦ выход сдвигающего регистра передатчика логически соединяется со входом приемника;
♦ входы DSR
, CIS
, RI
и DCD
отключаются от входных линий и внутренне управляются битами DTRC
, RISC
, OUT1C
, IE
;
♦ выходы управления модемом переводятся в пассивное состояние (логический ноль).
Переданные данные в последовательном виде немедленно принимаются, что позволяет проверять внутренний канал данных порта (включая сдвигающие регистры) и отработку прерываний, а также определять скорость работы UART.
Int 14h
, который обеспечивает следующие функции:
♦ инициализация (установка скорости обмена и формата посылок; запрет источников прерываний) — на сигналы DTR
и RTS
влияния не оказывает (после аппаратного сброса они пассивны);
♦ вывод символа — активируются сигналы DTR
и RTS
, и после освобождения регистра THR в него помещается выводимый символ;
♦ ввод символа — активируется только сигнал DTR
(RTS
переходит в пассивное состояние), и ожидается готовность принятых данных;
♦ опрос состояния модема и линии (чтение регистров MSR
и LSR
).
Аппаратные прерывания не используются, ожидание готовности ввода и вывода ограничивается по тайм-ауту. Готовность можно быстро проверить опросом состояния.
В процессе начального тестирования POST BIOS проверяет наличие последовательных портов (регистров UART 8250 или совместимых) по стандартным адресам и помещает базовые адреса обнаруженных портов в ячейки BIOS Data Area
0:0400, 0402, 0404, 0406. Эти ячейки хранят адреса портов с логическими именами СOМ1-COM4. Нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:047C, 047D, 047E, 047F заносятся константы, задающие тайм-ауты для портов.
Обнаруженные порты инициализируются на скорость обмена 2400 бит/с, 7 бит данных с контролем на четность (even), 1 стоп-бит. Управляющие сигналы интерфейса DTR
и RTS
переводятся в исходное состояние («выключено» — положительное напряжение).
IRQ4
или IRQ11
, для COM2 и COM4 — IRQ3
или IRQ10
. В принципе номер прерывания можно назначать в произвольных сочетаниях с базовым адресом (номером порта), но некоторые программы и драйверы (например, драйверы последовательной мыши) настроены на стандартные сочетания. Каждому порту, нуждающемуся в аппаратном прерывании, назначают отдельную линию, не совпадающую с линиями запроса прерываний других устройств. Прерывания необходимы для портов, к которым подключаются устройства ввода, UPS или модемы. При подключении принтера или плоттера прерываниями пользуются только многозадачные ОС (не всегда), и этот дефицитный ресурс PC можно сэкономить. Также прерывания обычно не задействуют при связи двух компьютеров нуль-модемным кабелем. Возможность разделяемого использования одной линии запроса несколькими портами (или ее разделения с другими устройствами) зависит от реализации аппаратного подключения и ПО. При использовании портов, установленных на шину ISA, разделяемые прерывания обычно не работают.
♦ Канал DMA (для микросхем UART 16450/16550, расположенных на системной плате) — разрешение использования и номер канала DMA. Режим DMA при работе с СОМ-портами используют редко.
IRQ4
, для COM2 — IRQ3
. То, что для использования мыши порт COM1 должен использовать прерывание IRQ4
, является особенностью ее драйвера, но для пользователя важен сам факт ограничения. Каждое событие — перемещение мыши или нажатие-отпускание кнопки — кодируется двоичной посылкой по интерфейсу RS-232C. Применяется асинхронная передача; двуполярное питание обеспечивается от управляющих линий интерфейса.
Для подключения внешних модемов используется полный (9-проводный) кабель АПД — АКД, схема которого приведена на рис. 2.4. Этот же кабель используется для согласования разъемов (по количеству контактов); возможно применение переходников 9–25, предназначенных для мыши. Для работы коммуникационного ПО обычно требуются прерывания, но здесь есть свобода выбора номера (адреса) порта и линии прерывания. Если предполагается работа на скоростях 9600 бит/с и выше, то СОМ-порт должен быть реализован на микросхеме UART 16550А или совместимой. Возможности работы с использованием FIFO-буферов и обмена по каналам DMA зависят от коммуникационного ПО.
Для связи двух компьютеров, удаленных друг от друга на небольшое расстояние, используют и непосредственное соединение их СОМ-портов нуль-модемным кабелем (см. рис. 2.5). Программы типа Norton Commander или Interlnk MS-DOS позволяют обмениваться файлами со скоростью до 115,2 Кбит/с без применения аппаратных прерываний. Это же соединение может использоваться и сетевым пакетом Lantastic, предоставляющим более развитый сервис, и средствами ОС Windows.
СОМ-порт позволяет выполнять подключение электронных ключей (Security Devices), предназначенных для защиты от нелицензированного использования ПО. Эти устройства могут быть как «прозрачными» (обеспечивающими возможность подключения периферии через тот же порт), так и полностью занимающими порт.
СОМ-порт при наличии соответствующей программной поддержки позволяет превратить PC в терминал, эмулируя систему команд распространенных специализированных терминалов (VT-52, VT-100 и т.д.). Простейший терминал получается, если замкнуть друг на друга функции BIOS обслуживания СОМ-порта (Int 14h
), телетайпного вывода (Int 10h
) и клавиатурного ввода (Int 16h
). Однако такой терминал будет работать лишь на малых скоростях обмена (если, конечно, его делать не на Pentium), поскольку функции BIOS хоть и универсальны, но не слишком быстры.
СОМ-порт может использоваться и как двунаправленный интерфейс, у которого имеется три программно-управляемых выходных линии (TD
, DTR
, RTS
) и четыре программно-читаемых входных линии (CIS
, DSR
, DCD
, RI
) с двуполярными сигналами. Их можно использовать, например, для программной реализации синхронных последовательных интерфейсов (см. п. 11.5) и других целей. Во времена АТ-286 была известна схема однобитного широтно-импульсного преобразователя, позволяющего записывать звуковой сигнал на диск PC, используя входную линию СОМ-порта. Воспроизведение этой записи через обычный динамик PC позволяло передать речь.
DTR=ON
, RTS=OFF
, TXD=Mark
— состояние покоя (Idle).
2. Некоторое время (0,2 с) ожидается появление сигнала DSR
, которое указало бы на наличие устройства, подключенного к порту. В простейшем случае устройство имеет на разъеме перемычку DTR
-DSR
, обеспечивающую указанный ответ. Если устройство обнаружено, выполняются манипуляции управляющими сигналами DTR
и RTS
для получения информации от устройства. Если ответ не получен, ОС, поддерживающая динамическое реконфигурирование, периодически опрашивает состояние порта для обнаружения новых устройств.
3. Порт программируется на режим 1200 бит/с, 7 бит данных, без паритета, 1 стоп-бит, и на 0,2 с снимается сигнал DTR
. После этого устанавливается DTR
=1, а еще через 0,2 с устанавливается и RTS
=1.
4. В течение 0,2 с ожидается приход первого символа от устройства. По приходу символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел, выполняется вторая попытка опроса (см. п. 5), несколько отличающаяся от первой.
5. На 0,2 с снимаются оба сигнала (DTR
=0 и RTS
=0), после чего они оба устанавливаются (DTR
=1 и RTS
=1).
6. В течение 0,2 с ожидается приход первого символа от устройства, по приходу символа начинается прием идентификатора (см. ниже). Если за это время символ не пришел, то в зависимости от состояния сигнала DSR
переходят к проверке отключения Verify Disconnect (при DSR
=0) или в дежурное состояние Connect Idle (при DSR
=1).
7. В дежурном состоянии Connect Idle устанавливается DTR
=1, RTS
=0, порт программируется на режим 300 бит/с, 7 бит данных, без паритета, 1 стоп-бит. Если в этом состоянии обнаружится DSR
=0, ОС следует уведомить об отключении устройства.
Посимвольный прием идентификатора устройства имеет ограничения по тайм- ауту в 0,2 с на символ, а также общее ограничение в 2,2 с, позволяющее принять строку длиной до 256 символов. Строка идентификатора PnP должна иметь маркеры начала (28h или 08h) и конца (29h или 09h), между которыми располагается тело идентификатора в стандартизованном формате. Перед маркером начала может находиться до 16 символов, не относящихся к идентификатору PnP. Если за первые 0,2 с ожидания символа (шаг 4 или 6) маркер начала не пришел, или же сработал тайм-аут, а маркер конца не получен, или же какой-либо символ принят с ошибкой, происходит переход в состояние Connect Idle. Если получена корректная строка идентификатора, она передается ОС.
Для проверки отключения (Verify Disconnect) устанавливается DTR
=1, RTS
=0 и через 5 с проверяется состояние сигнала DSR
. При DSR
=1 происходит переход в состояние Connect Idle (см. п. 7), при DSR
=0 происходит переход в состояние Disconnect Idle
, в котором система может периодически опрашивать сигнал DSR
для обнаружения подключения устройства.
Описанный механизм разрабатывался компанией Microsoft с учетом совместимости с устройствами, не относящимися к устройствам PnP, — он обеспечивает невозможность их вывода из строя и устойчивость системы к сообщениям, не являющимся PnP-идентификаторами. Например, обычная мышь Microsoft Mouse (не PnP) по включении питания от интерфейса ответит ASCII-символом «M» (трехкнопочная — строкой «M3»).
BIOS Data AREA
с помощью отладчика.
Если BIOS обнаруживает меньше портов, чем установлено физически, значит, двум портам присвоен один адрес или установлен нестандартный адрес какого-либо порта. Проблемы могут возникать с адресами портов COM3 и COM4: не все версии BIOS будут искать порты по альтернативным адресам 3E0h, 338h, 2E0h и 238h; иногда не производится поиск по адресам 3E8h и 2E8h. Нумерация найденных портов, отображаемая в заставке, может вводить в заблуждение: если установлены два порта с адресами 3F8h и 3E8h, в заставке они могут называться COM1 и COM2, и по этим именам на них можно ссылаться. Однако те же порты в заставке могут называться COM1 и COM3 (поскольку 3E8h является штатным адресом для COM3), но попытка сослаться на порт COM3 будет неудачной, поскольку в данном случае адрес 3E8h будет находиться в ячейке 0:402h BIOS Data Area
, соответствующей порту COM2, а в ячейке порта COM3 (0:404h) будет нуль — признак отсутствия такового порта. «Объяснить» системе, где какой порт, можно вручную с помощью любого отладчика, занеся правильные значения базовых адресов в ячейки BIOS Data Area
(это придется делать каждый раз после перезагрузки ОС перед использованием «потерянного» порта). Существуют тестовые утилиты, позволяющие находить порты (например, Port Finder).
Если двум портам назначен один и тот же адрес; тестовая программа обнаружит ошибки порта только с помощью внешней заглушки (External LoopBack). Программное тестирование порта без заглушки не покажет ошибок, поскольку при этом включается диагностический режим (см. описание UART) и конфликтующие (по отдельности исправные) порты будут работать параллельно, обеспечивая совпадение считываемой информации. В «реальной жизни» нормальная работа конфликтующих портов невозможна. Разбираться с конфликтом адресов удобно, последовательно устанавливая порты и наблюдая за адресами, появляющимися в списке.
Если физически установлен только один порт и его не обнаруживает BIOS, причины те же, что с LPT-портом: либо он отключен при конфигурировании, либо вышел из строя. Неисправность может устраниться при вынимании/вставке платы адаптера в слот системной шины.
При работе с С ОМ-портом задействуются соответствующие аппаратные прерывания — их используют при подключении модема, мыши и других устройств ввода. Неработоспособность этих устройств может быть вызвана некорректной настройкой запроса прерывания. Здесь возможны как конфликты с другими устройствами, так и несоответствие номера прерывания адресу порта.
RTS
-CTS
позволяет работать передатчику — без нее символы не смогут передаваться. Выходной сигнал DTR
обычно используют для проверки входных линий DSR
, DCD
и RI
.
TD
, RTS
и DTR
: после аппаратного сброса на выходе TD должен быть отрицательный потенциал около -12 В (по край ней мере, ниже -5 В), а на выходах RTS
и DTR
— такой же положительный. Если этих потенциалов нет, возможна ошибка подключения разъема к плате через ленточный кабель. Распространенные варианты:
• ленточный кабель не подключен;
• ленточный кабель подключен неправильно (разъём перевернут или встав лен со смещением);
• раскладка ленточного кабеля не соответствует разъему платы.
Первые два варианта проверяются внимательным осмотром, третий же может потребовать некоторых усилий. В табл. 2.1 приведены три варианта раскладки 10-проводного ленточного кабеля для разъема СОМ-порта, известных автору; для СОМ-портов на системных платах возможно существование и других. Теоретически ленточный кабель должен поставляться в соответствии с разъемом.
Если дело в ошибочной раскладке, то эти три выходных сигнала удастся обнаружить на других контактах разъемов (на входных контактах потенциал совсем небольшой). Если эти сигналы обнаружить не удалось, очевидно, вышли из строя буферные формирователи.
3. Соединив контакты линий RTS
и CTS
(или установив заглушку), следует по пытаться вывести небольшой файл на СОМ-порт (например, командой COPY С:\AUTOEXEC.ВАТ COM1:
). С исправным портом эта команда успешно выполнится за несколько секунд с сообщением об успешном копировании. При этом потенциалы на выходах RTS
и DTR
должны измениться на отрицательные, а на выходе TD
должна появиться пачка двуполярных импульсов с амплитудой более 5 В. Если потенциалы RTS
и DTR
не изменились, ошибка в буферных формирователях. Если на выходе RTS
(и входе CTS
) появился отрицательный потенциал, а команда COPY
завершается с ошибкой, скорее всего, вышел из строя приемник линии CTS
(или опять-таки ошибка в ленточном кабеле). Если команда COPY
успешно проходит, а изменения на выходе TD
не обнаруживаются (их можно увидеть стрелочным вольтметром, но оценить амплитуду импульсов не удастся), виноват буферный передатчик сигнала TD
.
Замена микросхем приемников и передатчиков существенно облегчается, если они установлены в «кроватки».
Перед заменой следует с помощью осциллографа или вольтметра удостовериться в неисправности конкретной микросхемы. Если буферные элементы включены в состав интерфейсной БИС (что теперь весьма распространено), то такой порт ремонту не подлежит (по крайней мере, в обычных условиях). Неисправный СОМ-порт, установленный на системной плате, можно попытаться отключить в BIOS SETUP, но порт мог сгореть и вместе со схемой своего отключения — тогда он останется «живым мертвецом» в карте портов ввода-вывода и прерываний. Иногда он полностью выводит из строя системную плату.
Источниками ошибок могут являться разъемы и кабели. В разъемах встречаются плохие контакты, а кабели, кроме возможных обрывов, могут иметь плохие частотные характеристики. Частотные свойства кабелей обычно сказываются при большой длине (десятки метров) на высоких скоростях обмена (56 или 115 Кбит/с). При необходимости использования длинных кабелей на высоких скоростях сигнальные провода данных должны быть перевиты с отдельными проводами «схемной земли».
В ряде отечественных PC-совместимых (почти) компьютеров для последовательного интерфейса применялась микросхема КР580ВВ51 — аналог 18251. Однако эта микросхема является универсальным синхронно-асинхронным приемопередатчиком (УСАПП или USART — Universal Asynchronous Receiver-Transmitter). Совместимости с PC на уровне регистров СОМ-порта такие компьютеры не имеют. Хорошо, если у соответствующих компьютеров имеется «честный» драйвер BIOS Int 14h
, а не заглушка, возвращающая состояние модема «всегда готов» и ничего не делающая.
DTR
и RTS
не используются по прямому назначению, их можно задействовать как питающие с напряжением около 12 В. Ток короткого замыкания на «схемную землю» ограничен буферной микросхемой передатчика на уровне 20 мА. При инициализации порта эти линии переходят в состояние «выключено», то есть вырабатывают положительное напряжение. Линия TD
в покое находится в состоянии логической единицы, так что на выходе вырабатывается отрицательное напряжение. Потенциалами линий можно управлять через регистры СОМ-порта (выход TD
вырабатывает положительное напряжение, если установить бит BRCON
). Питание можно получать и с сигнальных линий через выпрямительные диоды с использованием накопительных конденсаторов. При этом, конечно, следует учитывать, сколько времени выходной сигнал находится в нужном состоянии (чтобы накопленной энергии хватало).
Двуполярным питанием от линий интерфейса (+V от DTR
и RTS
, -V от TD
) пользуются все манипуляторы, подключаемые к СОМ-портам. Зная это, в случае неработоспособности мыши с данным портом следует проверить напряжения на соответствующих контактах разъема. Бывает, что с конкретным портом не работает только конкретная мышь (модель или экземпляр), хотя другие мыши с этим портом и эти же мыши с другими портами работают нормально. Здесь дело может быть в уровнях напряжений. Стандарт требует от порта выходного напряжения не менее 5 В (абсолютного значения), и если данный порт обеспечивает только этот минимум, некоторым мышам не хватит мощности для питания светодиодов (главных потребителей энергии).
Порт получает двуполярное питание через системную плату от блока питания компьютера. Отсутствие на выходе блока питания напряжения +12 В обычно обнаружится по неработоспособности дисков. Отсутствие напряжения -12 В «заметят» только устройства, подключенные к СОМ-портам. Блок питания теоретически контролирует наличие этих напряжений на своем выходе (сообщая о неполадках сигналом Power Good
, вызывающим аппаратный сброс). Встречаются упрощенные схемы блоков питания, у которых контролируются не все напряжения. Кроме того, возможны плохие контакты в разъеме подключения питания к системной плате.
PUT
и GET
для обмена «полезными» двоичными данными между устройствами. Этот протокол располагается над протоколом Tiny ТР. У протокола IrOBEX есть расширение для мобильных коммуникаций, которое определяет передачу информации, относящуюся к сетям GSM (записная книжка, календарь, управление вызовом, цифровая передача голоса и т.п.), между телефоном и компьютерами разных размеров (от настольного до PDA).
Этими протоколами не исчерпывается весь список протоколов, имеющих отношение к ИК-связи. Заметим, что для дистанционного управления бытовой техникой (телевизоры, видеомагнитофоны и т.п.) используется тот же диапазон 880 нм, но иные частоты и методы физического кодирования.
Приемопередатчик IrDA может быть подключен к компьютеру различными способами; по отношению к системному блоку он может быть как внутренним (размещаемым на лицевой панели), так и внешним, размещаемым в произвольном месте. Размещать приемопередатчик следует с учетом угла «зрения» (30° у передатчика и 15° у приемника) и расстояния до требуемого устройства (до 1 м).
Внутренние приемопередатчики на скоростях до 115,2 Кбит/с (IrDA SIR, HP-SIR, ASK IR) подключаются через обычные микросхемы UART, совместимые с 16450/16550 через сравнительно несложные схемы модуляторов-демодуляторов. В ряде современных системных плат на использование инфракрасной связи (до 115,2 Кбит/с) может конфигурироваться порт COM2. Для этого в дополнение к UART чипсет содержит схемы модулятора и демодулятора, обеспечивающие один или несколько протоколов инфракрасной связи. Чтобы порт COM2 использовать для инфракрасной связи, в CMOS Setup требуется выбрать соответствующий режим (запрет инфракрасной связи означает обычное использование COM2). Существуют внутренние адаптеры и в виде карт расширения (для шин ISA, PCI, PC Card); для системы они выглядят как дополнительные СОМ-порты.
На средних и высоких скоростях обмена применяются специализированные микросхемы контроллеров IrDA, ориентированные на интенсивный программно- управляемый обмен или DMA, с возможностью прямого управления шиной. Здесь обычный приемопередатчик UART непригоден, поскольку он не поддерживает синхронный режим и высокую скорость. Контроллер IrDA FIR выполняется в виде карты расширения или интегрируется в системную плату; как правило, такой контроллер поддерживает и режимы SIR.
Приемопередатчик подключается к разъему IR-Connector системной платы напрямую (если он устанавливается на лицевую панель компьютера) или через промежуточный разъем (mini-DIN), расположенный на скобе-заглушке задней стенки корпуса. К сожалению, единой раскладки цепей на внутреннем коннекторе нет, и для большей гибкости приемопередатчик (или промежуточный разъем) снабжают кабелем с отдельными контактами разъема. Собрать их в должном порядке предоставляют пользователю; варианты назначения контактов коннектора инфракрасного приемопередатчика приведены в табл. 3.1. Некоторые приемопередатчики, поддерживающие режимы FIR и SIR, имеют раздельные выходы приемников — IRRX
(для SIR) и FIRRX
(для FIR). Если контроллер поддерживает только один из режимов, один из контактов останется неподключенным.
Цепь | Назначение | Контакт/вариант | |||
---|---|---|---|---|---|
1 | 2 | 3 | 4 | ||
IRRX(RX) | Вход с приемника | 1 | 3 | 3 | 3 |
FIRRX(RXH) | Вход с приемника FIR | 5 | – | – | 4 |
IRTX(TX) | Выход на передатчик | 3 | 5 | 1 | 1 |
GND | Общий | 2, 7 | 4 | 2 | 2 |
Vcc (+5B) | Питание | 4, 6 | 1 | 5 | 5 |
NC | Свободный | – | 2 | 4 | – |
Сетевое окружение
. Сконфигурированное ПО позволяет устанавливать соединение с локальной сетью (для выхода в Интернет, использования сетевых ресурсов); передавать файлы между парой компьютеров; выводить данные на печать; синхронизировать данные PDA, мобильного телефона и настольного компьютера; загружать отснятые изображения из фотокамеры в компьютер и выполнять ряд других полезных действий, не заботясь ни о каком кабельном хозяйстве.
Контакт (рис. 4.2, а — г) | Контакт (рис. 4.2, д) | Цепь |
---|---|---|
1 | 1 | VBus (+5 В) |
2 | 2 | D- |
3 | 3 | D+ |
4 | 5 | GND |
D+
и D-
по двум проводам. Скорость устройства, подключенного к конкретному порту, определяется хабом по уровням сигналов на линиях D+
и D-
, смещаемых нагрузочными резисторами приемопередатчиков: устройства с низкой скоростью «подтягивают» к высокому уровню линию D-
, с полной — D+
. Подключение устройства HS определяется на этапе обмена конфигурационной информацией — физически на первое время устройство HS должно подключаться как FS. Передача по двум проводам в USB не ограничивается дифференциальными сигналами. Кроме дифференциального приемника, каждое устройство имеет линейные приемники сигналов D+
и D-
, а передатчики этих линий управляются индивидуально. Это позволяет различать более двух состояний линии, используемых для организации аппаратного интерфейса.
Введение высокой скорости (480 Мбит/с — всего в 2 раза медленнее, чем Gigabit Ethernet) требует тщательного согласования приемопередатчиков и линии связи. На этой скорости может работать только кабель с экранированной витой парой для сигнальных линий. Для высокой скорости аппаратура USB должна иметь дополнительные специальные приемопередатчики. В отличие от формирователей потенциала для режимов FS и LS, передатчики HS являются источниками тока, ориентированными на наличие резисторов-терминаторов на обеих сигнальных линиях.
Скорость передачи данных (LS, FS или HS) выбирается разработчиком периферийного устройства в соответствии с потребностями этого устройства. Реализация низких скоростей для устройства обходится несколько дешевле (приемопередатчики проще, а кабель для LS может быть и неэкранированной невитой парой). Если в «старой» USB устройства можно было, не задумываясь, подключать в любой свободный порт любого хаба, то в USB 2.0 при наличии устройств и хабов разных версий появились возможности выбора между оптимальными, неоптимальными и неработоспособными конфигурациями.
Хабы USB 1.1 обязаны поддерживать скорости FS и LS, скорость подключенного к хабу устройства определяется автоматически по разности потенциалов сигнальных линий. Хабы USB 1.1 при передаче пакетов являются просто повторителями, обеспечивающими прозрачную связь периферийного устройства с контроллером. Передачи на низкой скорости довольно расточительно расходуют потенциальную пропускную способность шины: за то время, на которое они занимают шину, высокоскоростное устройство может передать данных в 8 раз больше. Но ради упрощения и удешевления всей системы на эти жертвы пошли, а за распределением полосы между разными устройствами следит планировщик транзакций хост-контроллера.
В спецификации 2.0 скорость 480 Мбит/с должна уживаться с прежними, но при таком соотношении скоростей обмены на FS и LS «съедят» возможную полосу пропускания шины без всякого «удовольствия» (для пользователя). Чтобы этого не происходило, хабы USB 2.0 приобретают черты коммутаторов пакетов. Если к порту такого хаба подключено высокоскоростное устройство (или аналогичный хаб), то хаб работает в режиме повторителя, и транзакция с устройством на HS занимает весь канал до хост-контроллера на все время своего выполнения. Если же к порту хаба USB 2.0 подключается устройство или хаб 1.1, то по части канала до контроллера пакет проходит на скорости HS, запоминается в буфере хаба, а к старому устройству или хабу идет уже на его «родной» скорости FS или LS. При этом функции контроллера и хаба 2.0 (включая и корневой) усложняются, поскольку транзакции на FS и LS расщепляются и между их частями вклиниваются высокоскоростные передачи. От старых (1.1) устройств и хабов все эти тонкости скрываются, что и обеспечивает обратную совместимость. Вполне понятно, что устройство USB 2.0 сможет реализовать высокую скорость, только если по пути от него к хост-контроллеру (тоже 2.0) будут встречаться только хабы 2.0. Если это правило нарушить и между ним и контроллером 2.0 окажется старый хаб, то связь может быть установлена только в режиме FS. Если такая скорость устройство и клиентское ПО устроит (к примеру, для принтера и сканера это выльется только в большее время ожидания пользователя), то подключенное устройство работать будет, но появится сообщение о неоптимальной конфигурации соединений. По возможности ее (конфигурацию) следует исправить, благо переключения кабелей USB можно выполнять на ходу. Устройства и ПО, критичные к полосе пропускания шины, в неправильной конфигурации работать откажутся и категорично потребуют переключений. Если же хост-контроллер старый, то все преимущества USB 2.0 окажутся недоступными пользователю. В этом случае придется менять хост- контроллер (менять системную плату или приобретать PCI-карту контроллера). Контроллер и хабы USB 2.0 позволяют повысить суммарную пропускную способность шины и для старых устройств. Если устройства FS подключать к разным портам хабов USB 2.0 (включая и корневой), то для них суммарная пропускная способность шины USB возрастет по сравнению с 12 Мбит/с во столько раз, сколько используется портов высокоскоростных хабов.
Хаб является ключевым элементом системы PnP в архитектуре USB. Хаб выполняет множество функций:
♦ обеспечивает физическое подключение устройств, формируя и воспринимая сигналы в соответствии со спецификацией шины на каждом из своих портов;
♦ управляет подачей питающего напряжения на нисходящие порты, причем предусматривается установка ограничения на ток, потребляемый каждым портом;
♦ отслеживает состояние подключенных к нему устройств, уведомляя хост об изменениях;
♦ обнаруживает ошибки на шине, выполняет процедуры восстановления и изолирует неисправные сегменты шины;
♦ обеспечивает связь сегментов шины, работающих на разных скоростях.
Хаб следит за сигналами, генерируемыми устройствами. Неисправное устройство может не вовремя «замолчать» (потерять активность) или, наоборот, что-то «бормотать» (babble). Эти ситуации отслеживает ближайший к устройству хаб и запрещает восходящие передачи от такого устройства не позже, чем по границе (микро)кадра. Благодаря бдительности хабов эти ситуации не позволят неисправному устройству заблокировать всю шину.
Каждый из нисходящих (downstream) портов может быть разрешен или запрещен, а также сконфигурирован на высокую, полную или ограниченную скорость обмена. Хабы могут иметь световые индикаторы состояния нисходящих портов, управляемые автоматически (логикой хаба) или программно (хост-контроллером). Индикатор может представлять собой пару светодиодов — зеленый и желтый (янтарный) или один светодиод с изменяющимся цветом. Состояние порта представляется следующим образом:
♦ не светится — порт не используется;
♦ зеленый — нормальная работа;
♦ желтый — ошибка;
♦ зеленый мигающий — программа требует внимания пользователя (Software attention);
♦ желтый мигающий — аппаратура требует внимания пользователя (Hardware attention).
Восходящий (upstream) порт хаба конфигурируется и внешне представляется как полноскоростной или высокоскоростной (только для USB 2.0). При подключении порт хаба USB 2.0 обеспечивает терминацию по схеме FS, в режим HS он переводится только по команде контроллера.
На рис. 4.3 приведен вариант соединения устройств и хабов, где высокоскоростным устройством USB 2.0 является только телекамера, передающая видеопоток без компрессии. Подключение принтера и сканера USB 1.1 к отдельным портам хаба 2.0, да еще и развязка их с аудиоустройствами, позволяет им использовать полосу шины по 12 Мбит/с каждому. Таким образом, из общей полосы 480 Мбит/с на «старые» устройства (USB 1.0) выделяется 3×12=36 Мбит/с. Вообще-то можно говорить и о полосе в 48 Мбит/с, поскольку клавиатура и мышь подключены к отдельному порту хост-контроллера USB 2.0, но эти устройства «освоят» только малую толику из выделенных им 12 Мбит/с. Конечно, можно подключать клавиатуру и мышь к порту внешнего хаба, но с точки зрения повышения надежности системные устройства ввода лучше подключать наиболее коротким (по количеству кабелей, разъемов и промежуточных устройств) способом. Неудачной конфигурацией было бы подключение принтера (сканера) к хабу USB 1.1 — во время работы с аудиоустройствами (если они высокого качества) скорость печати (сканирования) будет падать. Неработоспособной конфигурацией явилось бы подключение телекамеры к порту хаба USB 1.1.
SOF
(Start Of Frame), который является синхронизирующим сигналом для всех устройств, включая хабы. В конце каждого кадра выделяется интервал времени EOF
(End Of Frame), на время которого хабы запрещают передачу по направлению к контроллеру. В режиме HS пакеты SOF передаются в начале каждого микрокадра (период 125±0,0625 мкс). Хост планирует загрузку кадров так, чтобы в них всегда находилось место для транзакций управления и прерываний. Свободное время кадров может заполняться передачами массивов (bulk transfers). В каждом (микро)кадре может быть выполнено несколько транзакций, их допустимое число зависит от длины поля данных каждой из них.
SOF
);
♦ частота обслуживания — частота, с которой клиентское ПО обращается к драйверам USB для передачи и приема изохронных данных.
В системе без общего источника синхронизации между парами синхросигналов возможны отклонения следующих типов:
♦ дрейф (drift) — отклонения формально одинаковых частот от номиналов (не бывает двух абсолютно одинаковых генераторов);
♦ дрожание (jitter) — колебание частот относительно номинала;
♦ фазовый сдвиг, если сигналы не связаны системой фазовой автоподстройки ФАПЧ (PLL).
В цифровой системе передачи данных эти отклонения выливаются в то, что у источника или приемника данных может образовываться излишек или недостаток данных, колеблющийся или прогрессирующий во времени. В USB по способу синхронизации конечных точек (источников или получателей данных) с системой различают асинхронный, синхронный и адаптивный классы устройств (точнее, конечных точек), каждому из которых соответствует свой тип канала USB.
Асинхронные устройства не имеют возможности согласования своей частоты выборок с метками SOF
или иными частотами системы USB. Частота передачи данных у них фиксированная или программируемая. Число байт данных, принимаемых за каждый (микро)кадр USB, не является постоянным. Источник данных неявно сообщает свою скорость передачи данных числом выборок, генерируемых им за один (микро)кадр (клиентское ПО будет обрабатывать столько данных, сколько реально поступило). Приемник данных должен обеспечивать обратную связь для адаптивного драйвера клиентского ПО, чтобы согласовать темп выдачи потока (см. ниже). Примерами асинхронного устройства-источника может быть CD-плейер с синхронизацией от кварцевого генератора или приемник спутникового телевещания. Пример приемника — дешевые колонки, работающие от внутреннего источника синхронизации.
Синхронные устройства имеют внутренний генератор, синхронизируемый с метками SOF
(системная частота 1 кГц); на высокой частоте передачи более точную синхронизацию обеспечивает связь с микрокадрами. Источники и приемники за каждый (микро)кадр генерируют (потребляют) одинаковое количество байт данных, которое устанавливается на этапе программирования каналов. Примером синхронного источника может быть цифровой микрофон с частотой выборки, синтезируемой по SOF
.
Адаптивные устройства имеют возможность подстройки своей внутренней частоты под требуемый поток данных (в определенных границах). Адаптивный источник позволяет менять скорость под управлением приемника, обеспечивающего обратную связь. Для адаптивного приемника информацию о частоте задает входной поток данных. Он определяет мгновенное значение частоты по количеству данных, принятых за некоторый интервал усреднения. Примером адаптивного источника является CD-плейер со встроенным согласователем частоты SRC (sample rate converter) приемника — высококачественные колонки или наушники USB.
Обратная связь позволяет согласовать значения частот устройств с частотой шины. Асинхронный приемник должен явным образом сообщать хост-контроллеру желаемую частоту передачи данных относительно частоты (микро)кадров. Это позволит хост-контроллеру постоянно корректировать число передаваемых байт за каждый (микро)кадр, не допуская переполнения или опустошения буфера устройства-приемника. Адаптивный передатчик должен воспринимать информацию обратной связи, чтобы за каждый (микро)кадр генерировать ровно столько данных, сколько требуется хост-контроллеру. Для обратной связи в устройстве выделяется специальная конечная точка, через которую периодически передается информация о текущем значении желаемой относительной частоты.
В принципе контроллер USB может подстраивать частоту кадров, но, естественно, под частоту внутренней синхронизации только одного устройства. Подстройка осуществляется через механизм обратной связи, который позволяет изменять период кадра в пределах ±1 битового интервала.
IRP
(I/O Request Packet — пакет запроса ввода-вывода), состоящих из запросов на транспортировку данных по заданному каналу. Кроме того, USBD отвечает за некоторое абстрактное представление устройства USB клиенту, которое позволяет выполнять конфигурирование и управление состоянием устройств (включая и стандартное управление через конечную точку «0»). Реализация интерфейса USBDI определяется операционной системой; в спецификации USB излагаются только общие идеи.
• Программное обеспечение хоста реализует функции, необходимые для функционирования системы USB в целом: обнаружение подключения и отключения устройств и выполнение соответствующих действий по этим событиям (загрузки требуемых драйверов), нумерацию устройств, распределение полосы пропускания и потребляемой мощности и т.п.
♦ Клиенты USB — программные элементы (приложения или системные компоненты), взаимодействующие с устройствами USB. Клиенты могут взаимодействовать с любыми устройствами (их конечными точками), подключенными к системе USB. Однако система USB изолирует клиентов от непосредственного обмена с какими-либо портами (в пространстве ввода-вывода) или ячейками памяти, представляющими интерфейсную часть контроллера USB.
В совокупности уровни хоста имеют следующие возможности:
♦ обнаружение подключения и отсоединения устройств USB;
♦ манипулирование потоками управления между устройствами и хостом;
♦ манипулирование потоками данных;
♦ сбор статистики активности и состояний устройств;
♦ управление электрическим интерфейсом между хост-контроллером и устройствами USB, включая управление электропитанием.
Хост-контроллер является аппаратным посредником между устройствами USB и хостом. Программная часть хоста в полном объеме реализуется операционной системой. До загрузки ОС может функционировать лишь усеченная часть ПО USB, поддерживающая только устройства, требующиеся для загрузки. Так, в BIOS современных системных плат имеется поддержка клавиатуры USB, реализующая функции сервиса Int 10h
. При загрузке системы USB эта «дозагрузочная» поддержка игнорируется — система начинает работу с контроллером «с чистого листа», то есть со сброса и определения всех подключенных устройств. По окончании работы ОС передача состояния USB «дозагрузочной» поддержке не предусматривается, так что для нее это событие тоже может рассматриваться как первоначальное включение. В спецификации РС'2001 выдвигается требование к BIOS поддержки USB в такой мере, чтобы обеспечивалась загрузка ОС с устройств USB. USB поддерживает динамическое подключение и отключение устройств.
Нумерация (перенумерация) устройств шины идет постоянно, отслеживая изменения физической топологии.
Все устройства подключаются через порты хабов. Хабы определяют подключение и отключение устройств к своим портам и сообщают состояние портов при запросе от контроллера. Хост разрешает работу порта и адресуется к устройству через канал управления, используя нулевой адрес — USB Default Address. При начальном подключении или после сброса все устройства адресуются именно так.
Хост определяет, является новое подключенное устройство хабом или функцией, и назначает ему уникальный адрес USB. Хост создает канал управления (control pipe) с этим устройством, используя назначенный адрес и нулевой номер точки назначения.
Если новое устройство является хабом, хост определяет подключенные к нему устройства, назначает им адреса и устанавливает каналы. Если новое устройство является функцией, уведомление о подключении передается диспетчером USB заинтересованному ПО.
Когда устройство отключается, хаб автоматически запрещает соответствующий порт и сообщает об отключении контроллеру, Который удаляет сведения о данном устройстве из всех структур данных. Если отключается хаб, процесс удаления выполняется для всех подключенных к нему устройств. Если отключается функция, уведомление посылается заинтересованному ПО.
CS#
, RD#
, WR#
…), линией запроса прерывания и, возможно, сигналами канала DMA. Выпускаются и специализированные преобразователи интерфейсов USB в последовательный (RS-232, RS-422/485) и параллельный, не требующие программирования (нужно лишь записать в EEPROM идентификатор устройства). Есть и микросхемы USB, сочетающие в себе и функции, и хабы. Все варианты не перечислить, тем более что все время появляются новые микросхемы. Информацию о них можно найти в Сети (www.cypress.com, www.devasys.com, www.iged.com, www.microchip.com, www.netchip.com, www.motorola.com, www.semiconductor.philips.com, www.natsemi.com, www.intel.com, www.ftdichip.com, www.gigatechnology.com).
Немаловажная часть разработки собственных устройств — программное обеспечение для хост-компьютера, которое доносит до пользователя всю пользу устройства. В ряде случаев удается воспользоваться готовыми драйверами (например, драйвером виртуального СОМ-порта для преобразователя интерфейса). В других случаях ПО приходится писать самостоятельно, и хорошо, когда изготовитель микросхем с USB заботится о предоставлении инструментальных средств разработки всех частей ПО.
Разъем А | Провод | Разъем Б | ||||
---|---|---|---|---|---|---|
4-конт. | 6-конт. | Цепь | Цепь | 6-конт. | 4-конт. | |
- | 1 | Power | Белый | Power | 1 | |
- | 2 | GND | Черный | GND | 2 | |
1 | 3 | TPB- | Красный | TPA- | 5 | 3 |
2 | 4 | TPB+ | Зеленый | TPA+ | 6 | 4 |
3 | 5 | TPA- | Оранжевый | TPB- | 3 | 1 |
4 | 6 | TPA+ | Синий | TPB+ | 4 | 2 |
Экран | Экран | Экран | Экран | Экран | Экран | Экран |
REQ#
/ACK#
, вводится CRC-контроль передач, пакетированные команды и сообщения (Packetized Commands and Messaging) и быстрый арбитраж (Quick Arbitration). Это тоже законченный документ, описывающий все параллельные интерфейсы SCSI вплоть до Fast-80DT и отменяющий HVD, SCAM (SCSI Configured AutoMatically — автоматическое конфигурирование устройств) и 32-битную шину.
♦ В стандарте SPI-4 (2001 г.) снова удваивается частота переключений и получается интерфейс Fast-160DT, уже известный как Ultra320 SCSI (только широкая шина, 320 Мбайт/с).
DIFFSENS
и по низкому уровню напряжения на ней способны переключаться из режима LVD (дифференциальный) в SE (линейный). Контакт разъема, на который выводится эта цепь, в устройствах SE заземлен, что и обеспечивает автоматическое «понижение» режима всех устройств шины до SE, если имеется хотя бы одно устройство SE.
Скорость передачи данных определяется частотой переключений сигналов, измеряемой в МТ/с, разрядностью, а в последних версиях и способом синхронизации (одиночная или двойная). Изначально разрядность шины SCSI составляла 8 бит (Narrow), а частота — до 5 МТ/с. Широкий (wide) вариант шины имеет разрядность 16 бит. Комбинации этих параметров обеспечивают широкий диапазон пропускной способности (табл. 5.1), достигающей уже 320 Мбайт/с. В обозначениях пропускной способности интерфейсов встречаются разночтения, здесь приводятся названия, используемые фирмой Western Digital в 2000 году. Fast SCSI означает частоту передач 10 МТ/с, временные диаграммы для такого режима определены в SCSI-2. Краткое название Fast-20 соответствует полному «Fast Wide SCSI» (16 бит, 10 MT/s). Режим Ultra SCSI указывает на частоту передач 20 МТ/с, он определен для параллельного интерфейса в SCSI-3. Краткое название Fast-40 соответствует полному «Wide Ultra SCSI» (16 бит, 20 MT/s). Режим Ultra2 SCSI указывает на частоту передач 40 МТ/с, краткое название Fast-80 соответствует полному «Wide Ultra2 SCSI» (16 бит, 40 MT/s). Этот режим, определенный в SCSI-3, в настоящее время является самым распространенным для новых устройств с параллельной шиной. Он реализован только в низковольтной дифференциальной версии интерфейса — LVD. В SCSI-3 понятие Ultra3 SCSI довольно широкое. Ultra160 SCSI означает скорость 160 Мбайт/с и существует только в «широком» (16 бит) варианте. Здесь применяется синхронизация по обоим фронтам сигнала, а также контроль достоверности передач по CRC-кодам, что позволяет «выжать» из кабеля максимальную скорость передачи (как и в Ultra DMA интерфейса ATA). В 2001 году появился интерфейс Ultra320 SCSI со скоростью 320 Мбайт/с.
Разрядность шины, бит | Разновидность | |||||
---|---|---|---|---|---|---|
Обычная | Fast | Fast-20 (Ultra) | Fast-40 (Ultra2) | Ultra 160 (Ultra3) | Ultra 320 | |
8 (Narrow) | 5 | 10 | 20 | 40 | – | – |
16 (Wide) | 10 | 20 | 40 | 80 | 160 | 320 |
Тип интерфейса | Обычный (5 МТ/с) | Fast (10 МТ/с) | Ultra (20 МТ/с) | Ultra2 (40 МТ/с) | Ultra160 (80 МТ/с) | Ultra320 (160 МТ/с) |
---|---|---|---|---|---|---|
Линейный (Single ended) | 6 м | 3 м | 1,5 м (8 устр.), 3 м (4 устр.) | – | – | – |
Дифференциальный (HVD) | 25 м | 12 м (16 устр.), 25 м (8 устр.) | 6 м (16 устр.), 25 м (8 устр.) | – | – | – |
Дифференциальный, низковольтный (LVD) | – | – | – | 12 м (16 устр.), 25 м (8 устр.) | 12 м (16 устр.), 25 м (8 устр.) | 12 м (16 устр.), 25 м (8 устр.) |
Контакт IDC-50/CX-50 | Цепь SE/Diff | Контакт IDC-50/CX-50 | Цепь |
---|---|---|---|
1/1 | GND/DB0+ | 2/26 | DB0# |
3/2 | GND/DB1+ | 4/27 | DB1# |
5/3 | GND/DB2+ | 6/28 | DB2# |
7/4 | GND/DB3+ | 8/29 | DB3# |
9/5 | GND/DB4+ | 10/30 | DB4# |
11/6 | GND/DB5+ | 12/31 | DB5# |
13/7 | GND/DB6+ | 14/32 | DB6# |
15/8 | GND/DB7+ | 16/33 | DB7# |
17/9 | GND/DBP0+ | 18/34 | DBP0# |
19/10 | GND/GND | 20/35 | GND |
21/11 | GND/GND | 22/36 | GND |
23/12 | Резерв | 24/37 | Резерв |
25/13 | Свободен | 26/38 | TERMPWR |
27/14 | Резерв | 28/39 | Резерв |
29/15 | GND | 30/40 | GND |
31/16 | GND/ATN+ | 32/41 | ATN# |
33/17 | GND | 34/42 | GND |
35/18 | GND/BSY+ | 36/43 | BSY# |
37/19 | GND/ACK+ | 38/44 | ACK# |
39/20 | GND/RST+ | 40/45 | RST# |
41/21 | GND/MSG+ | 42/46 | MSG# |
43/22 | GND/SEL+ | 44/47 | SEL# |
45/23 | GND/C/D+ | 46/48 | C/D# |
47/24 | GND/REQ+ | 48/49 | REQ# |
49/25 | GND/I/O+ | 50/50 | I/O# |
Контакт внутр./внешн. | Цепь SE/Diff | Контакт внутр./внешн. | Цепь |
---|---|---|---|
1/1 | GND | 2/35 | GND |
3/2 | GND/DB8+ | 4/36 | DB8# |
5/3 | GND/DB9+ | 6/37 | DB9# |
7/4 | GND/DB10+ | 8/38 | DB10# |
9/5 | GND/DB11+ | 10/39 | DB11# |
11/6 | GND/DB12+ | 12/40 | DB12# |
13.07.12 | GND/DB13+ | 14/41. | DB13# |
15/8 | GND/DB14+ | 16/42 | DB14# |
17/9 | GND/DB15+ | 18/43 | DB15# |
19/10 | GND/DBP1+ | 20/44 | DBP1# |
21/11 | GND/ACKB+ | 22/45 | ACKB# |
23/12 | GND/GND | 24/46 | GND |
25/13 | GND/REQB+ | 26/47 | REQB# |
27/14 | GND/DB16+ | 28/48 | DB16# |
29/15 | GND/DB17+ | 30/49 | DB17# |
31/16 | GND/DB18+ | 32/50 | DB18# |
33/17 | TERMPWR | 34/51 | TERMPWR |
35/18 | TERMPWR | 36/52 | TERMPWR |
37/19 | GND/DB19+ | 38/53 | DB19# |
39/20 | GND/DB20+ | 40/54 | DB20# |
41/21 | GND/DB21+ | 42/55 | DB21# |
43/22 | GND/DB22+ | 44/56 | DB22# |
45/23 | GND/DB23+ | 46/57 | DB23# |
47/24 | GND/DBP2+ | 48/58 | DBP2# |
49/25 | GND/DB24+ | 50/59 | DB24# |
51/26 | GND/DB25+ | 52/60 | DB25# |
53/27 | GND/DB26+ | 54/61 | DB26# |
55/28 | GND/DB27+ | 56/62 | DB27# |
57/29 | GND/DB28+ | 58/63 | DB28# |
59/30 | GND/DB29+ | 60/64 | DB29# |
61/31 | GND/DB30+ | 62/65 | DB30# |
53/32 | GND/DB31+ | 64/66 | DB31# |
65/33 | GND/DBP2+ | 66/67 | DBP2# |
67/34 | GND/GND | 68/68 | GND |
Контакт | Цепь SE/Diff | Контакт | Цепь |
---|---|---|---|
1 | GND/DB12+ | 35 | DB12# |
2 | GND/DB13+ | 36 | DB13# |
3 | GND/DB14+ | 37 | DB14# |
4 | GND/DB15+ | 38 | DB15# |
5 | GND/DBP1+ | 39 | DBP1# |
6 | GND/DB0+ | 40 | DB0# |
7 | GND/DB1+ | 41 | DB1# |
8 | GND/DB2+ | 42 | DB2# |
9 | GND/DB3+ | 43 | DB3# |
10 | GND/DB4+ | 44 | DB4# |
11 | GND/DB5+ | 45 | DB5# |
12 | GND/DB6+ | 46 | DB6# |
13 | GND/DB7+ | 47 | DB7# |
14 | GND/DBP0+ | 48 | DBP0# |
15 | GND | 49 | GND |
16 | DIFFSENS (GND)¹ | 50 | GND |
17 | TERMPWR | 51 | TERMPWR |
18 | TERMPWR | 52 | TERMPWR |
19 | Резерв | 53 | Резерв |
20 | GND | 54 | GND |
21 | GND/ATN+ | 55 | ATN# |
22 | GND/GND | 56 | GND |
23 | GND/BSY+ | 57 | BSY# |
24 | GND/ACK+ | 58 | ACK# |
25 | GND/RST+ | 59 | RST# |
26 | GND/MSG+ | 60 | MSG# |
27 | GND/SEL+ | 61 | SEL# |
28 | GND/C/D+ | 62 | C/D# |
29 | GND/REQ+ | 63 | REQ# |
30 | GND/I/O+ | 64 | I/O# |
31 | GND/DB8+ | 65 | DB8# |
32 | GND/DB9+ | 66 | DB9# |
33 | GND/DB10+ | 67 | DB10 |
34 | GND/DB11+ | 68 | DB11 |
Контакт | Цепь | Контакт | Цепь |
---|---|---|---|
1 | REQ# | 14 | GND |
2 | MSG# | 15 | C/D# |
3 | I/O# | 16 | GND |
4 | RST# | 17 | ATN# |
5 | ACK# | 18 | GND |
6 | BSY# | 19 | SEL# |
7 | GND | 20 | DBP0# |
8 | DB0# | 21 | DB1# |
9 | GND | 22 | DB2# |
10 | DB3# | 23 | DB4# |
11 | DB5# | 24 | GND |
12 | DB6# | 25 | TERMPWR |
13 | DB7# |
Контакт | Цепь | Контакт | Цепь SE/Diff |
---|---|---|---|
01 | 12 Volt Charge | 41 | 12V GND |
02 | 12 Volt | 42 | 12V GND |
03 | 12 Volt | 43 | 12V GND |
04 | 12 Volt | 44 | Mated 1 |
05 | Резерв | 45 | Резерв |
06 | Резерв | 46 | GND |
07 | DB11# | 47 | GND/DB11+ |
08 | DB10# | 48 | GND/DB10+ |
09 | DB9# | 49 | GND/DB9+ |
10 | DB8# | 50 | GND/DB8+ |
11 | I/O# | 51 | GND/I/O+ |
12 | REQ# | 52 | GND/REQ+ |
13 | C/D# | 53 | GND/C/D+ |
14 | SEL# | 54 | GND/SEL+ |
15 | MSG# | 55 | GND/MSG+ |
16 | RST# | 56 | GND/RST+ |
17 | ACK# | 57 | GND/ACK+ |
18 | BSY# | 58 | GND/BSY+ |
19 | ATN# | 59 | GND/ATN+ |
20 | DBP0# | 60 | GND/DBP0+ |
21 | DB7# | 61 | GND/DB7+ |
22 | DB6# | 62 | GND/DB6+ |
23 | DB5# | 63 | GND/DB5+ |
24 | DB4# | 64 | GND/DB4+ |
25 | DB3# | 65 | GND/DB3+ |
26 | DB2# | 66 | GND/DB2+ |
27 | DB1# | 67 | GND/DB1+ |
28 | DB0# | 68 | GND/DB0+ |
29 | DBP1# | 69 | GND/DBP1+ |
30 | DB15# | 70 | GND/DB15+ |
31 | DB14# | 71 | GND/DB14+ |
32 | DB13# | 72 | GND/DB13+ |
33 | DB12# | 73 | GND/DB12+ |
34 | 5 Volt | 74 | Mated 2 |
35 | 5 Volt | 75 | 5V GND |
36 | 5 Volt Charge | 76 | 5V GND |
37 | Резерв | 77 | Active LED Out |
38 | Auto Spin Up | 78 | Delayed Start |
39 | SCSI I D 0 | 79 | SCSI I D 1 |
40 | SCSI I D 2 | 80 | SCSI I D 3 |
TERMPWR
(+5.В).
♦ Пассивные терминаторы SE (рис. 5.4, а) имеют импеданс 132 Ом, что плохо согласуется с ленточным кабелем шины. Эти терминаторы пригодны лишь для «обычного» интерфейса SCSI (скорость передачи до 5/10 Мбайт/с в «узком»/«широком» вариантах). Для Fast SCSI, Ultra SCSI и далее они непригодны.
♦ Активные терминаторы SE (рис. 5.4, б) имеют импеданс 110 Ом, что позволяет их использовать на более высоких скоростях в Fast SCSI,Их «активность» заключается лишь в наличии внутреннего источника опорного напряжения (ИОН) +2,85 В, питающегося от тех же линий TermPWR
. Микросхемы активных терминаторов имеют и электронные ключи, включенные последовательно в каждую линию. Ключи управляются общим сигналом, позволяющим включать-отключать терминатор.
♦ Терминаторы FPT SE (Forced Perfect Terminator) — улучшенный вариант активных терминаторов с диодными ограничителями выбросов, применяемые в высокоскоростных версиях SE-интерфейса.
♦ Терминаторы для LVD (рис. 5.4, в) имеют дифференциальной импеданс 105 Ом (линейный — 150 Ом). Здесь два источника опорных напряжений обеспечивают между прямым и обратным проводами смещение 112 мВ (в их пассивном состоянии).
♦ Универсальные терминаторы LVD/SE сочетают в себе активные SE-терминаторы, дифференциальные терминаторы LVD, схему определения режима и цепи коммутации каждого провода (прямого и обратного) шины SCSI на соответствующие терминирующие цепи.
DIFSENSE
. В старых устройствах SE контакт разъема, соответствующий этой линии, был заземлен. Устройства LVD пытаются вывести на этот контакт потенциал 1,3 В. Устройства HVD на этот контакт выводили потенциал выше 2,1 В. В терминаторе имеются компараторы, сравнивающие сигнал этой линии с эталонами, и логика, переключающая режим терминатора (если обнаруживается HVD, терминатор отключает все свои цепи). Специально для универсальных терминаторов выпускаются микросхемы (например, DS2117М, DS2118М фирмы Dallas Semiconductor), выполняющие все функции автоматической терминации для 9 пар проводов. Для терминации 16-разрядной шины данных (Wide SCSI) и сигналов управления требуется 3 таких микросхемы. В микросхемах используются прецизионные резисторы с лазерной подгонкой, что обходится недешево.
По исполнению терминаторы могут быть как внутренними (размещенными на печатной плате устройства), так и внешними (устанавливаемыми на разъемы кабеля или устройства). Внутренние терминаторы на каждом устройстве могут быть включены или выключены. В старых устройствах (SCSI-1) для включения терминаторов нужно было установить набор перемычек или вставить в специальную кроватку сборку резисторов. Активные терминаторы включаются-выключаются перестановкой одного джампера или даже бесконтактно — программно при конфигурировании устройства. Возможно даже автоматическое включение терминатора (если таковая возможность поддерживается устройством и разрешена при конфигурировании). Внешние терминаторы выглядят как разъемы с небольшой крышкой, под которой смонтирована их «начинка». Несмотря на внешнюю простоту, они имеют ощутимую цену — терминатор для Ultra-Wide SCSI стоит $10–15. Внешние терминаторы устанавливаются и снимаются только вручную.
Внутренние терминаторы или, по крайней мере, панелька для их установки имеются практически во всех устройствах, интерфейс которых не является LVD-интерфейсом. В устройствах с LVD-интерфейсом терминаторы, как правило, отсутствуют в целях экономии: когда на шину устанавливается несколько устройств, терминатор используется лишь в последних. Однако при подключении одного устройства экономия на цене устройства незаметна, а вот расходы на приобретение терминатора вполне очевидны.
ВНИМАНИЕ
Отсутствие терминаторов на устройствах с LVD не означает отказа от правил терминации!
Сигнал | Назначение |
---|---|
BSY# | Busy — шина занята |
SEL# | Select — выбор ЦУ инициатором (Select) или инициатора целевым устройством (Reselect) |
C/D# | Control/Data — управление (низкий уровень)/данные (высокий уровень) |
I/O# | Input/Output — направление передачи относительно ИУ: вводу в ИУ соответствует низкий уровень. Используется для различия прямой (Select) и обратной (Reselect) выборки: фазе Selection соответствует низкий уровень |
MSG# | Message — передача сообщения |
DB[0:31]# | Data Bus — инверсная шина данных |
DP[0:3]# | Data Parity — инверсные биты паритета, дополняют количество единичных битов байта до нечетного. DP0# относится к DB[0:7], …, DP3# — к DB[24:31]. В фазе арбитража не действуют |
TERMPWR | Terminator Power — питание терминаторов |
ATN# | Attention — внимание (намерение ИУ послать сообщение) |
REQ# | Request — запрос от ЦУ на пересылку данных |
ACK# | Acknowledge — подтверждение передачи (ответ на REQ#) |
RST# | Reset — сброд |
DIFFSENS | Признак дифференциального (LVD) интерфейса: ниже 0,7 В — линейный SE; 0,9–1,9 В — дифференциальный LVD; выше 2,4 В — дифференциальный HVD |
DB0#
(SCSI ID=00000001), с адресом 7 — на линии DB7#
(SCSI ID=10000000). Для ИУ значение идентификатора определяет приоритет устройства при использовании шины; наибольший приоритет имеет устройство с большим значением адреса. Понятия адрес и идентификатор часто путают, но это всего лишь две различные формы представления одного и того же параметра.
В любой момент обмен информацией по шине может происходить только между парой устройств. Операцию начинает инициатор обмена ИУ (initiator), а целевое устройство ЦУ (target) ее исполняет. ИУ выбирает ЦУ по его идентификатору. Чаще всего роли устройств фиксированы: хост-адаптер является инициатором (ИУ), а периферийное устройство — целевым (ЦУ). Возможны комбинированные устройства, выступающие в роли и ИУ, и ЦУ. В ряде случаев роли устройств меняются: ЦУ может, пройдя фазу арбитража, выполнить обратную выборку (Reselect) ИУ для продолжения прерванной операции. При выполнении команды копирования (Сору) ИУ дает указание ведущему устройству копирования (Copy Master) на обмен данными, который может производиться и с другим ЦУ (для которого ведущее устройство копирования выступит в роли ИУ).
Информация по шине данных передается побайтно (пословно) асинхронно, используя механизм запросов (REQuest) и подтверждений (ACKnowledge). Каждый байт контролируется на нечетность (кроме фазы арбитража), но контроль может быть отключен. Интерфейс имеет возможность синхронной передачи данных, ускоряющей обмен (в SCSI-1 синхронного режима не было).
Шина может находиться в одной из перечисленных ниже фаз. Роли источников сигналов между ИУ и ЦУ описаны в табл. 5.9.
Фаза шины | Сигнал | ||||
---|---|---|---|---|---|
BSY# | SEL# | REQ#, C/D#, I/O#, MSG# | ACK#, ATN# | DBx#, DBPx# | |
Bus Free | - | - | - | - | - |
Arbitration | AA1 | WA2 | - | - | SID3 |
Selection | I4, T5 | I | - | I | I |
Reselection | I, T | T | T | I | T |
Command | T | - | T | I | I |
Data IN | T | - | T | I | T |
Data OUT | T | - | T | I | I |
Status | T | - | T | I | T |
Message IN | T | - | T | I | T |
Message OUT | T | - | T | I | I |
BSY#
и SEL#
.
В фазе Arbitration устройство может получить право на управление шиной. Дождавшись покоя шины (Bus Free), устройство вводит сигнал BSY#
и свой идентификатор SCSI ID. Если идентификаторы выставили несколько устройств одновременно, то право на управление шиной получает устройство с наибольшим адресом, а остальные устройства отключаются до следующего освобождения шины. Устройство, выигравшее арбитраж, вводит сигнал SEL#
и переходит в фазу Selection или Reselection.
В фазе Selection ИУ, выигравшее арбитраж, вводит на шину данных результат логической функции ИЛИ от пары идентификаторов — своего и ЦУ, — сопровождая его битом паритета. Установкой сигнала ATN#
ИУ указывает, что следующей фазой будет Message OUT
. ИУ снимает сигнал BSY#
. Отсутствие сигнала I/O#
отличает данную фазу от Reselection. Адресованное ЦУ отвечает сигналом BSY#
, если паритет корректный и на шине данных присутствует только пара идентификаторов (его и ИУ). На некорректные значения данных устройства отвечать не должны. Если за заданное время ЦУ не ответило, срабатывает тайм-аут, ИУ освобождает шину или вводит сигнал сброса RST#
.
Фаза Reselection аналогична предыдущей, но ее вводит ЦУ. Фаза появляется в том случае, когда ЦУ на время исполнения команды отключалось от шины. По завершении внутренней операции это устройство, выиграв арбитраж, будет вызывать ИУ, которое ранее породило исполнение операции. ЦУ снимает сигнал BSY#
, активность сигнала I/O#
отличает данную фазу от фазы Selection
. Адресованное ИУ отвечает сигналом BSY#
, условия ответа и тайм-аут аналогичны предыдущей фазе.
В фазах Command, Data, Status и Message по шине данных передается информация, фазы идентифицируются сигналами MSG#
, C/D#
и I/O#
(табл. 5.10), которыми управляет ЦУ. ИУ может потребовать посылки сообщения (фаза Message OUT) введением сигнала ATN#
, а ЦУ может освободить шину, сняв сигналы MSG#
, C/D#
, I/O#
и BSY#
.
Сигнал | Фаза | Направление | ||
---|---|---|---|---|
MSG# | C/D# | I/O# | ||
0 | 0 | 0 | Data OUT | I→T |
0 | 0 | 1 | Data IN | I←T |
0 | 1 | 0 | Command | I→T |
0 | 1 | 1 | Status | I←T |
1 | 0 | 0 | Зарезервировано | |
1 | 0 | 1 | Зарезервировано | |
1 | 1 | 0 | Message OUT | I→T |
1 | 1 | 1 | Message IN | I←T |
REQ#
/ACK#
. ИУ фиксирует принимаемые данные, получив сигнал REQ#
(по отрицательному перепаду). ЦУ считает принимаемые данные действительными по отрицательному перепаду сигнала ACK#
. Асинхронный обмен поддерживается всеми устройствами для всех фаз передачи информации.
ACK#
и REQ#,
а также допустимое отставание подтверждений от запросов (REQ/ACK offset agreement). ЦУ передает серию данных, сопровождаемых стробами REQ#
(рис. 5.6, а), в темпе, ограниченном установленными временными параметрами. ИУ фиксирует принимаемые данные по отрицательному перепаду сигнала REQ#
, но отвечать на них сигналом ACK#
может с некоторым опозданием. Как только отставание числа принятых сигналов ACK#
от числа посланных REQ#
достигнет оговоренного предельного значения (в данном примере — 2), ЦУ приостановит обмен до прихода очередного подтверждения ACK#
. Операция считается завершенной, когда число принятых подтверждений совпадет с числом посланных запросов. При приеме данных ЦУ механизм согласования остается тем же, но данные фиксируются по отрицательному перепаду сигнала ACK#
(рис. 5.6, б).
ВНИМАНИЕ
В спецификации SCSI-1 момент возобновления передачи после устранения отставания описан нечетко, в результате разработчики могли посчитать, что очередной запрос (и данные) может последовать лишь после окончания (положительного перепада) сигналаACK#
. Устройство, на это рассчитанное, может терять данные: для него последний сигналREQ#
(и данные) является неожиданным и выглядит как превышение согласованного смещения.
REQ#
/ACK#
и REQB#
/ACKB#
), поскольку эти кабели могут иметь разную длину.
В фазе Command ЦУ запрашивает от ИУ команду. В фазе Status ЦУ делает запрос на передачу ИУ информации о своем состоянии. В фазах Data IN и Data OUT ЦУ делает запросы на передачу данных к ИУ и от него соответственно. Фазы Message IN и Message OUT служат для передачи сообщений. Фазу Message OUT ЦУ вводит в ответ на условие Attention, порождаемое ИУ сигналом ATN#
, когда оно нуждается в посылке сообщения ЦУ. Фазу Message IN ЦУ вводит при необходимости посылки сообщения ИУ.
Между фазами передачи информации сигналы BSY#
, SEL#
, REQ#
и ACK#
должны оставаться в неизменном состоянии, меняться могут только значения сигналов C/D#
, I/O#
, MSG#
и шины данных.
Сигналы ATN#
и RST#
могут порождать условия Attention и Reset соответственно, причем асинхронно по отношению к фазам шины. Эти условия могут привести к изменению предопределенного порядка фаз. Сигнал ATN#
вводится ИУ во время любой фазы, кроме арбитража и состояния покоя шины. Сигнал RST#
вводится в любой момент любым устройством, и по условию Reset все устройства должны немедленно освободить шину. В зависимости от настройки, принятой для всех устройств конкретной системы, возможно выполнение одного из двух вариантов сброса. «Жесткий» сброс переводит устройства в состояние, принятое по включению питания, сбрасывая все текущие процессы, очереди и т. п. В случае «мягкого» сброса после освобождения шины устройства пытаются завершить начатые операции, сохраняя текущие значения настроек.
Каждый процесс ввода-вывода состоит из следующей последовательности фаз шины: из состояния Bus Free через фазу Arbitration переход к фазе Selection или Reselection. Далее следуют фазы передачи информации (Command, Data, Status, Message), Завершающей фазой является Message In, в которой передается сообщение Disconnect или Command Complete, после чего шина переходит в состояние покоя Bus Free.
Архитектура SCSI обеспечивает для каждого процесса ввода-вывода сохранение набора из трех указателей (saved SCSI pointers): для команды, состояния и данных. ИУ имеет текущий набор указателей (только один), в который копируется сохраненный набор для текущего процесса. Текущие указатели указывают на очередной байт команды, состояния и данных, которые будут передаваться между памятью ИУ и ЦУ. Сохраненные указатели команды и состояния всегда указывают на начала блоков дескрипторов команд и состояния. Сохраненный указатель данных указывает на начало блока данных до тех пор, пока ЦУ не пришлет сообщение Save Data Pointer. По его приему будет сохранен текущий указатель данных. Когда ЦУ отключается от шины, информация о текущем процессе ввода-вывода содержится в сохраненном наборе указателей. При возобновлении процесса ЦУ сообщением Restore Pointers может потребовать у ИУ скопировать сохраненный набор в текущий и продолжить выполнение команд данного процесса ввода-вывода.
ВНИМАНИЕ
Поскольку указатель данных может быть модифицирован ЦУ до завершения ввода-вывода, определение реального количества переданных данных с помощью указателя дает ненадежные результаты.
♦ Питание терминаторов (Terminator power) должно быть включено (джампером или программно) хотя бы на одном устройстве. ♦ Согласование скорости синхронного обмена (SCSI synchronous negotiation). Режим синхронного обмена, обеспечивающий высокую производительность, включается по взаимному согласию устройств. Если хотя бы одно устройство на шине его не поддерживает, рекомендуют запретить согласование на хост-адаптере. Если обмен будет инициирован целевым устройством, поддерживающим синхронный режим, «нормальный» хост-адаптер поддержит этот режим. Целевому устройству можно запретить запрос синхронного режима специальным джампером, который может называться «Enable TI-SDTR» (Target Initiated Synchronous Data Transfer Request Negotiation). ♦ Разрешение отключения (Enable disconnection). Позволяет устройствам отключаться от шины при неготовности данных во время длительных операций с носителем, что весьма эффективно в многозадачном режиме при нескольких ПУ на шине. В случае одного устройства отключение приводит только к дополнительным затратам времени на повторное соединение. ♦ Согласование ширины шины данных тоже выполняется по протоколу шины, исходя из возможностей обоих участников обмена. Целевому устройству можно запретить запрос 16-битного режима специальным джампером, который может называться «Enable TI-WDTR» (Target Initiated Wide Data Transfer Request Negotiation). ♦ Запрет 16-разрядного режима (Disable wide). Позволяет подключить «широкое» устройство к «узкой» шине. ♦ Принудительное переключение в линейный режим (Force SE). Позволяет перевести устройство LVD в режим SE, независимо от состояния линииВНИМАНИЕ
Правильная установка терминаторов крайне существенна — отсутствие/избыток терминаторов может привести к неустойчивости или неработоспособности интерфейса.
DIFFSENS
.
♦ Запрет синхронизации по обоим фронтам (Disable U160). Позволяет принудительно перевести устройство Ultra3 SCSI в режим Ultra2.
♦ Старт по команде (Start on command), или запрет автоматического запуска шпиндельного двигателя (Disable Auto Spin up). При установке этого параметра запуск двигателя устройства выполняется только по команде от хост-адаптера, что позволяет снизить пик нагрузки блока питания в момент включения. Хост будет запускать устройства последовательно.
♦ Задержанный старт (Delayed Start) в сочетании с джамперами выбора задержки позволяет автоматически запускать двигатель через указанный интервал после подачи питания (разным устройствам задают различные значения задержки).
Устройства LVD можно использовать на одной шине с SE, но при этом все устройства перейдут в режим SE, и шина не сможет работать в режиме Ultra2, свойственном устройствам LVD. Интерфейс LVD, являясь дифференциальным, требует, чтобы каждый обратный провод (сигнал +) приходил на вход своего приемника; в версии SE все обратные провода на устройстве соединялись вместе и подключались к шине GND. Если на шине с устройствами LVD имеется хотя бы одно устройство SE, то линияВНИМАНИЕ
Смешивать устройства LVD с HVD на одной шине нельзя!
DIFFSENS
окажется заземленной и все устройства LVD перейдут в режим SE. При конфигурировании устройство LVD может быть принудительно переведено в режим SE установкой джампера «Force SE».
Если на шине присутствуют устройства Ultra160 и Ultra2 (или еще ниже), то шина будет работать в самом низком из этих режимов. Принудительно запретить режим Ultra160 (понизить до Ultra2) можно джампером «Disable U160».
Подключение «узкого» устройства к «узкой» шине — самая простая задача, поскольку здесь обычно встречаются лишь два типа разъемов (не считая Mac SCSI) — внешний (типа Centronics) и внутренний. Устройства должны быть сконфигурированы (см. выше), каждому должен быть назначен уникальный (на шине) идентификатор SCSI ID, формально — любой в диапазоне 0–7. Длина шины не должна превышать допустимого предела, на обоих концах шины (и только там!) должны быть установлены и включены терминаторы. На линию TERMPWR
должно подаваться питание (чаще от хост-адаптера), что можно проверить, замерив напряжение на соответствующих контактах разъема.
Подключение «широкого» устройства к «широкой» шине может оказаться несколько сложнее, поскольку здесь больше разнообразия в разъемах. Из-за этого может потребоваться применение переходных адаптеров от одного типа разъема к другому. Также могут возникнуть сложности с подключением терминаторов, особенно для устройств LVD, среди которых внутренние терминаторы встречаются редко, а внешние могут занимать отдельный разъем на кабеле. Идентификаторы устройств можно задавать в диапазоне 0-15.
Подключение «узкого» устройства к «широкой» шине требует применения переходного адаптера с 68- на 50-контактный разъем. Старший байт в этом адаптере не должен терминироваться, если подключаемое устройство не крайнее на шине. Если же устройство крайнее, то в адаптере старший байт должен терминироваться и на самом устройстве должен быть установлен терминатор. Выбор положения устройства (крайнее или промежуточное) может определяться имеющимся адаптером. Идентификаторы устройств должны устанавливаться в диапазоне 0–7 для всех устройств, поскольку невидимость идентификаторов 8-15 узким устройством не позволит процедуре арбитража работать нормально (см. выше). Поскольку все «узкие» устройства — это SE-устройства, линия DIFFSENS
окажется заземленной и все устройства LVD перейдут в режим SE. Существуют, однако, и адаптеры-мосты, при подключении SE-устройства позволяющие остальным находиться в режиме LVD. Определить режим можно, замерив напряжение на 16-м контакте 68-контактного разъема (46-м 80-контактного).
Подключение «широкого» устройства к «узкой» шине также потребует применения специального адаптера, и на «широком» устройстве следует установить джампер «Disable Wide». Дополнительно может потребоваться терминация старшего байта и относящихся к нему управляющих линий, чтобы обеспечить на них надежное пассивное состояние («висящие» входы восприимчивы к помехам). Некоторые версии встроенного микропрограммного обеспечения позволяют работать устройствам и без дополнительных терминаторов. Идентификаторы всех устройств должны быть в диапазоне 0–7 (по тем же соображениям, что и в предыдущем случае).
Рассмотрим различные конфигурации подключения устройств к контроллеру SCSI (рис. 5.7). Контроллер может быть расположен на карте расширения, устанавливаемой в слот PCI или ISA, или же встроен в системную плату. Устройства, подключаемые к нему, могут быть как внутренними (разного рода дисковые и ленточные устройства), так и внешними (те же, а также сканеры и другие периферийные устройства). Терминаторы расставляются исходя из конкретных условий.
Int 13h
. Расширения, например ASPI (Advanced SCSI Programming Interface), загружаются отдельно. От драйверов сильно зависит производительность устройств SCSI. «Умное» ПО способно эффективно загружать работой устройства, а иногда и «срезать углы» — выполнять копирование данных между устройствами без выхода на системную шину компьютера. Наиболее предпочтительны драйверы, работающие в режиме прямого управления шиной (bus mastering); их применение позволяет реализовать все преимущества SCSI в многозадачных системах.
REQ
/ACK
. Если другой участник обмена поддерживает синхронный режим, он предложит свои параметры. Согласованными параметрами будут максимальный период и минимальное отставание (нулевое отставание эквивалентно асинхронному режиму). Выбранный режим будет относиться только к фазам передачи между данной парой устройств. Отвергнутое сообщение является требованием асинхронного режима. Поскольку старые хост-адаптеры не поддерживали согласование синхронного режима, на ЦУ запрос синхронного режима может быть заблокирован. О возможности работы в синхронном режиме хост может узнать, послав команды Request Sense
и Inquiry
.
Разрядность передач согласуется аналогично посредством сообщений Wide Data Transfer Request. Согласованные режимы будут действовать до сброса устройств по сообщению Bus Device Reset или «жесткого» сброса, что приведет к установке предопределенных режимов по включению. Согласование режимов не должно инициироваться в каждом процессе, поскольку затраты времени на эту процедуру сводят на нет выигрыш в производительности.
Система команд SCSI включает общие команды, применимые для устройств всех классов, и специфические для каждого класса. Любое SCSI-устройство должно поддерживать обязательные команды общего набора и своего класса, чем обеспечивается высокий уровень совместимости. Команда передается ИУ в ЦУ через блок дескриптора команды (command descriptor block), посылаемый в фазе Command. Некоторые команды сопровождаются блоком параметров, следующим за блоком дескриптора в фазе Data. Форматы блоков стандартизованы; длина блока, определяемая кодом операции (первым байтом блока), может составлять б, 10 или 12 байт.
Рассмотрим процесс на шине SCSI на примере одиночной команды чтения Read
. ИУ имеет активный набор указателей и несколько сохраненных наборов, по одному на каждый из допустимого числа одновременных конкурирующих процессов. ИУ восстанавливает указатели процесса в активный набор и, выиграв арбитраж, выбирает ЦУ. Как только ЦУ выбрано, оно берет на себя управление процессом. В фазе Selection ИУ вводит сигнал ATN#
, сообщая о намерении послать сообщение Identify с указанием адресуемого ЛУ. ЦУ переходит в фазу Command и принимает блок дескриптора команды Read
. Интерпретировав команду, ЦУ переходит в фазу Data IN, передает запрошенные данные, затем переводится в фазу Status и посылает состояние Good. Затем в фазе Message IN устройство посылает сообщение Command Complete, после чего освобождает шину (фаза Bus Free). Процесс завершен.
Рассмотрим тот же пример, но при условии отключения от шины (Disconnect) в процессе выполнения команды. Если устройство, получив команду Read
, определит, что для получения затребованных данных необходимо много времени, оно освободит шину, послав сообщение Disconnect. Как только требуемые данные готовы в ЦУ, оно, выиграв арбитраж, выберет ИУ (в фазе Reselect) и в фазе Message IN
пошлет ему сообщение Identify. ИУ вернет соответствующий набор указателей в активное состояние и продолжит выполнение процесса, как описано выше. Если ЦУ хочет отсоединиться, когда часть данных уже передана (например, головка диска дошла до конца цилиндра и требуется время на позиционирование), оно посылает сообщение Save Data Pointer, а затем — Disconnect. После повторного соединения передача данных возобновится с точки, определенной последним сохраненным значением указателя. Если произошла ошибка или исключение, ЦУ может повторить обмен данными, послав сообщение Restore Pointers или отсоединившись без сообщения Save Data Pointers.
Теперь рассмотрим процесс с цепочкой связанных команд. По успешному завершению каждой команды цепочки ЦУ автоматически переходит к исполнению следующей. Все команды цепочки являются частью одного процесса. Команды не являются полностью независимыми — при относительной адресации последний блок, адресованный предыдущей командой, доступен для следующей. Так, например, можно исполнить команду Search Data
, по которой на диске будет найден блок, содержащий информацию, совпадающую с эталоном поиска. Связав с ней команду чтения Read
, можно прочитать этот блок или блок с указанным смещением относительно найденного. По выполнении связанных команд ЦУ посылает сообщения Linked Command Complete (возможно, с флагом), а ИУ обновляет набор сохраненных указателей, так что они указывают на очередную команду цепочки. Команды в цепочке выполняются как одиночные, но с возможностью относительной адресации.
Команды могут исполняться с использованием очередей. ЦУ могут поддерживать немаркированные и маркированные очереди. Поддержка немаркированных очередей, определенная еще в SCSI-1, позволяет любому ЛУ (LUN) или целевой программе, занятым процессом от одного ИУ, принимать команды (начинать процесс) с другими ИУ.
Маркированные очереди (tagged queue) определены в SCSI-2 для ЛУ. Для каждой связи I_T_L (ИУ-ЦУ-ЛУ) существует своя очередь размером до 256 процессов. Каждый процесс, использующий маркированные очереди, идентифицируется связью I_T_L_Q, где Q — однобайтный тег очереди (queue tag). Теги процессам назначаются ИУ, их значения на порядок выполнения операций не влияют.
Постановка в очередь выполняется через механизм сообщений, при этом очередной процесс можно поставить в очередь «по-честному», а можно «пропихнуть» вне очереди: процесс, поставленный в очередь с сообщением Head Of Queue Tag, будет выполняться сразу после завершения текущего активного процесса. Процессы, поставленные в очередь с сообщением Simple Queue Tag, исполняются ЦУ в порядке, который оно сочтет оптимальным. Процесс, поставленный в очередь с сообщением Ordered Queue Tag, будет исполняться последним. ИУ может удалить процесс из очереди, сославшись на него по тегу. Изменение порядка выполнения команд ЦУ не касается порядка в цепочке команд, поскольку цепочка принадлежит одному процессу, а в очередь ставятся именно процессы.
Здесь мы не рассматриваем различные ситуации, приводящие к отклонениям от нормальной последовательности событий интерфейса. К ним относятся некорректные соединения со стороны ИУ, выбор несуществующего ЛУ, неожиданные выборки ИУ, округление параметров, реакция на асинхронные события и т. п.
Шина | Пропускная способность, Мбайт/с¹ | Каналы DMA | Bus-Master | ACFG² | Разрядность данных | Разрядность адреса | Частота, МГЦ |
---|---|---|---|---|---|---|---|
ISA-8 | 4 | 3 | - | - | 8 | 20 | 8 |
ISA-16 | 8 | 7 | + | - | 16 | 24 | 8 |
LPC | 6,7 | 7 | + | - | 8/16/32 | 32 | 33 |
EISA | 33,3 | 7 | + | + | 32 | 32 | 8,33 |
MCA-16 | 16 | - | + | + | 16 | 24 | 10 |
MCA-32 | 20 | - | + | + | 32 | 32 | 10 |
VLB | 132 | - | (+) | - | 32/64 | 32 | 33-50(66) |
PCI | 132/264 | - | + | + | 32/64 | 32 | 33/66 |
PCI–X | 532/1064 | - | + | + | 32/64 | 32/64 | 33/66 |
AGP 1x/2x/4x | 266/532/1064 | - | + | + | 32 | 32/64 | 66 |
PCMCIA | 10/20 | + | - | + | 8/16 | 26 | 10 |
Card Bus | 132 | - | + | + | 32 | 32 | 33 |
А[15:10]
устройствами игнорировались. Таким образом, диапазон адресов устройств шины ISA ограничивается областью 100h–3FFh. Впоследствии стали применять 12-битную адресацию (диапазон 100h-FFFh). При этом приходится учитывать возможность присутствия на шине старых 10-битных адаптеров, которые «отзовутся» на адрес с подходящими ему битами А[9:0]
во всей допустимой области 12-битного адреса четыре раза (у каждого 10-битного адреса будет еще по три 12-битных псевдонима). Полный 16-битный адрес используется только в шинах EISA и PCI.
Шина ISA-8 может предоставить до 6 линий запросов прерываний, ISА-16 — 11. Часть из них могут «отобрать» устройства системной платы или шина PCI.
Шина ISA-8 позволяет использовать до трех 8-битных каналов DMA. На 16-битной шине доступны еще три 16-битных и один 8-битный канал.
Все перечисленные ресурсы шины должны быть бесконфликтно распределены. Бесконфликтность подразумевает выполнение перечисленных ниже условий.
♦ Каждое устройство-исполнитель должно управлять шиной данных только при чтении по его адресам или по используемому им каналу DMA. Области адресов, по которым выполняется чтение регистров различных устройств, не должны пересекаться. Поскольку при записи шиной данных управляет лишь текущий задатчик, возможность конфликтов, приводящих к искажениям данных, исключена. «Подсматривать» операции записи, адресованные не данному устройству, не возбраняется.
♦ Назначенную линию IRQx
или DRQx
устройство должно держать на низком уровне в пассивном состоянии и переводить в высокий уровень для активации запроса. Неиспользуемыми линиями запросов устройство управлять не имеет права, они должны электрически отсоединяться или подключаться к буферу, находящемуся в третьем состоянии. Одной линией запроса может пользоваться только одно устройство. Такая нелепость (с точки зрения схемотехники ТТЛ) была допущена в первых PC и из требований совместимости тиражируется до сих пор.
Задача распределения ресурсов для старых адаптеров решалась с помощью джамперов, затем появились программно конфигурируемые устройства, которые вытесняются автоматически конфигурируемыми платами PnP.
Назначение контактов слотов шин ISA и EISA приведено в табл. 6.2 и 6.3.
Ряд В | № | Ряд А |
---|---|---|
GND | 1 | IOCHK# |
Reset | 2 | SD7 |
+5 В | 3 | SD6 |
IRQ2/9¹ | 4 | SD5 |
-5 В | 5 | SD4 |
DRQ2 | 6 | SD3 |
-12 В | 7 | SD2 |
0WS#² | 8 | SD1 |
+12 В | 9 | SD0 |
GND | 10 | IOCHRDY |
SMEMW# | 11 | AEN |
SMEMR# | 12 | SA19 |
IOWR# | 13 | SA18 |
IORD# | 14 | SA17 |
DACK3# | 15 | SA16 |
DRQ3 | 16 | SA15 |
DACK1# | 17 | SA14 |
DRQ1 | 18 | SA13 |
REFRESH# | 19 | SA12 |
BCLK | 20 | SA11 |
IRQ7 | 21 | SA10 |
IRQ6 | 22 | SA9 |
IRQ5 | 23 | SA8 |
IRQ4 | 24 | SA7 |
IRQ3 | 25 | SA6 |
DACK2# | 26 | SA5 |
TC | 27 | SA4 |
BALE | 28 | SA3 |
+5 В | 29 | SA2 |
Osc | 30 | SA1 |
GND | 31 | SA0 |
Ряд D | № | Ряд С |
---|---|---|
MEMCS16# | 1 | SBHE# |
IOCS16# | 2 | LA23 |
IRQ10 | 3 | LA22 |
IRQ 11 | 4 | LA21 |
IRQ12 | 5 | LA20 |
IRQ 15 | 6 | LA19 |
IRQ14 | 7 | LA18 |
DACK0# | 8 | LA17 |
DRQ0 | 9 | MEMR# |
DACK5# | 10 | MEMW# |
DRQ5 | 11 | SD8 |
DACK6# | 12 | SD9 |
DRQ6 | 13 | SD10 |
DACK7# | 14 | SD11 |
DRQ7 | 15 | SD12 |
+5 B | 16 | SD13 |
MASTER# | 17 | SD14 |
GND | 18 | SD15 |
SD[7:0]
— шина данных. Иное название сигналов — Data
или D
.
♦ SA[19:0]
(Addr[19:0]
, A[19:0]
) — шина адреса.
♦ AEN
— разрешение адресации портов (запрещает ложную дешифрацию адреса в цикле DMA).
♦ IOW#
(IOWC#
, IOWR#
) — запись в порт.
♦ IOR#
(IORC#
, IORD#
) — чтение порта.
♦ SMEMW#
(SMEMWR#
, SMWTC#
) — запись в системную память (в диапазоне адресов 0-FFFFFh).
♦ SMEMR#
(SMEMRD#
, SMRDC#
) — чтение системной памяти (в диапазоне адресов 0-FFFFFh).
Ниже перечислены сигналы, относящиеся к сигналам запросов прерывания и каналам прямого доступа к памяти.
♦ IRQ2/9
, IRQ[3:7]
— запросы прерываний. Положительный перепад сигнала вызывает запрос аппаратного прерывания. Для идентификации источника высокий уровень должен сохраняться до подтверждения прерывания процессором, что затрудняет разделение (совместное использование) прерываний. Линия IRQ2/9 в шинах XT вызывает аппаратное прерывание с номером 2, а в AT — с номером 9.
♦ DRQ[1:3]
— запросы 8-битных каналов DMA (положительным перепадом).
♦ DACK[1:3]#
— подтверждение запросов 8-битных каналов DMA.
♦ TC
— признак завершения счетчика циклов DMA.
Шина имеет и несколько служебных сигналов синхронизации, сброса и регенерации памяти, установленной на адаптерах.
♦ IOCHRDY
(CHRDY
, I/OCHRDY
) — готовность устройства, низкий уровень удлиняет текущий цикл (не более 15 икс).
♦ BALE
(ALE
) — разрешение защелки адреса. После его спада в каждом цикле процессора линии SA[0:19]
гарантированно содержат действительный адрес.
♦ REFRESH#
(REF#
) — цикл регенерации памяти (в XT называется DACK0#
). Сигнал появляется каждые 15 мкс, при этом шина адреса указывает на очередную регенерируемую строку памяти.
♦ IOCHK#
— контроль канала, низкий уровень вызывает NMI CPU (разрешение и индикация в системных портах 061h, 062h).
♦ RESET
(RESDRV
, RESETDRV
) — сигнал аппаратного сброса (активный уровень — высокий).
♦ BCLK
(CLK
) — синхронизация шины с частотой около 8 МГц. ПУ могут не использовать этот сигнал, работая только по управляющим сигналам записи и чтения.
♦ OSC
— несинхронизированная с шиной частота 14,431818 МГц (использовалась старыми дисплейными адаптерами).
Кроме логических сигналов шина имеет контакты для разводки питания +5, -5, +12 и -12 В.
Дополнительный разъем, расширяющий шину до 16-битной, содержит линии данных, адреса, запросов прерываний и каналов прямого доступа.
♦ SD[15:8]
— шина данных.
♦ SBHE#
— признак наличия данных на линиях SD[15:8]
.
♦ LA[23:17]
— нефиксированные сигналы адреса, требующие защелкивания по спаду сигнала BALE
. Такой способ подачи адреса позволяет сократить задержку. Кроме того, схемы дешифратора адреса памяти плат расширения начинают декодирование несколько раньше спада BALE
.
♦ IRQ[10:12]
, IRQ[14:15]
— дополнительные запросы прерываний.
♦ DRQ[5:7]
— запросы 16-битных каналов DMA (положительным перепадом).
♦ DACK[5:7]#
— подтверждение запросов 16-битных каналов DMA.
♦ DRQ0
и DACK0#
— запрос и подтверждение 8-битного канала DMA, освободившегося от регенерации памяти.
Перечисленные ниже сигналы связаны с переключением разрядности данных.
♦ МEMCS16#
(M16#
) — адресуемое устройство поддерживает 16-битные обращения к памяти.
♦ IOCS16#
(I/OCS16#
, IO16#
) — адресуемое устройство поддерживает 16-битные обращения к портам.
К новым управляющим сигналам относятся следующие.
♦ MEMW#
(MWTC#
) — запись в память в любой области до 16 Мбайт.
♦ MEMR#
(MRDC#
) — чтение памяти в любой области до 16 Мбайт.
♦ OWS#
(SRDY#
, NOWS#
, ENDXFR
) — укорочение текущего цикла по инициативе адресованного устройства.
♦ MASTER#
(MASTER16#
) — запрос от устройства, использующего 16-битный канал DMA на управление шиной. При получении подтверждения DACK[5:7]
Bus-Master может захватить шину.
В шине EISA на дополнительных контактах слотов (недоступных картам ISA) располагается расширение шин данных и адреса до 32 бит, а также набор сигналов, обеспечивающих передачу данных в синхронном режиме с возможностью пакетных циклов.
SMEMR#
, MEMR#
— в цикле чтения памяти;
♦ SMEMW#
, MEMW#
— в цикле записи памяти;
♦ IOR#
— в цикле чтения порта ввода-вывода;
♦ IOW#
— в цикле записи порта ввода-вывода.
AEN
имеет низкий уровень. Цикл прямого доступа к памяти, в котором это правило не соблюдается, рассмотрен ниже, и в таком цикле сигнал AEN
будет иметь высокий уровень. Сигналы SMEMR#
и SMEMW#
вырабатываются из сигналов MEMR#
и MEMW#
соответственно, когда адрес принадлежит диапазону 0-FFFFFh. Поэтому сигналы SMEMR#
и SMEMW#
задержаны относительно MEMR#
и MEMW#
на 5-10 нс.
В начале каждого цикла контроллер шины устанавливает адрес обращения: на линиях SA[19:0]
и SBHE#
действительный адрес сохраняется на время всего текущего цикла; на линиях LA[23:17]
адрес действителен только в начале цикла, так что требуется его «защелкивание». Каждое устройство имеет дешифратор адреса — комбинационную схему, срабатывающую только тогда, когда на шине присутствует адрес, относящийся к данному устройству. В фазе адресации устройства еще «не знают», к какому из пространств (памяти или ввода-вывода) относится выставленный адрес. Но дешифраторы адресов уже срабатывают, и, когда в следующей фазе шина управления сообщает тип операции, адресуемое устройство уже оказывается готовым к ее исполнению. Если устройство использует линии LA[23:17]
(они нужны лишь для обращений к памяти выше границы FFFFFh), то они на дешифратор адреса должны проходить через регистр-защелку, «прозрачный» во время действия сигнала BALE
и фиксирующий состояние выходов по его спаду. Это позволяет дешифратору, всегда вносящему некоторую задержку, начинать работу раньше, чем поступит управляющий сигнал чтения или записи. При обращении к портам ввода-вывода сигналы LA[32:17]
не используются.
Если устройство имеет более одного регистра (ячейки), то для выбора конкретного регистра (ячейки) ему требуется несколько линий адреса. Как правило, старшие биты шины адреса поступают на вход дешифраторов адреса, формирующих сигналы выборки устройств, а младшие биты — на адресные входы самих устройств. Тогда каждое устройство в пространстве будет занимать наиболее компактную область смежных адресов размером в 2n байт, где n — номер младшей линии адреса, поступающей на дешифратор. Из них реально необходимы 2m адресов, где m — номер самой старшей линии адреса, участвующей в выборе регистра устройства. В идеале должно быть n=m+1: при большем значении n отведенное (по дешифратору) пространство адресов не будет использовано полностью и регистры устройства будут повторяться в отведенной области 2n-m-1 раз, то есть у них появятся адреса-псевдонимы (alias). Адреса-псевдонимы будут отличаться от истинного адреса (минимального из всех псевдонимов) на K×2m+1, где K — целое число. Меньшее значение n недопустимо, поскольку тогда не все регистры устройства будут доступны задатчику. В принципе можно использовать дешифратор адреса, срабатывающий только на какой-то части адресов из области 2n (не кратной степени двойки), если устройству требуется «неудобное» количество регистров. Однако на практике «фигурное выпиливание» областей из пространства адресов обычно не делают, так что часть адресов может пропадать бесполезно.
Разрядность данных в каждом цикле обращения определяется потребностями текущего задатчика и возможностями исполнителя. В IBM PC/XT и системная шина, и шина ISA были 8-разрядными, так что вопросов согласования разрядности не возникало. В IBM PC/AT286 (и 386-SX) системная шина уже 16-разрядная, и в современных ПК с 32- и 64-разрядными системными шинами контроллер шины ISA является ее 16-разрядным задатчиком. На системной плате имеется «косой буфер», он же перестановщик байтов, который при необходимости транслирует данные с младшего байта шины на старшую или обратно. Логика управления этим буфером использует сигналы SBHE#
, SA0
, IOCS16#
и MEMCS16#
. Поддержка 16-разрядных передач сообщается адресуемым исполнителем сигналами IOCS16#
и MEMCS16#
при срабатывании его дешифратора адреса. Сигнал IOCS16#
влияет только на разрядность обращений к портам, MEMCS16#
— к памяти. Все операции обмена (транзакции) начинаются задатчиком единообразно, поскольку он еще не «знает» возможностей исполнителя. Развитие событий зависит от намерений задатчика и полученных сигналов разрешения 16-битных передач. В чисто 16-разрядных машинах начальный адрес однозначно соответствует передаваемому байту или младшему байту передаваемого слова[3]. В машинах с 32-разрядными процессорами начальный адрес, выставляемый на шине в начале транзакции, зависит от разрядности данных, запланированной задатчиком, и может зависеть от положения адресуемых данных относительно границы двойного слова (32 битного). 16-разрядные передачи выполняются за 1 цикл только при условии передачи по четному адресу (A0=0) и при ответе исполнителя сигналом IOCS16#
или MEMCS16#
, в иных случаях они разбиваются на два цикла. 32-разрядные передачи будут разбиваться на 2 (16+16), 3 (8+16+8) или 4 (8+8+8+8) цикла, в зависимости от возможностей исполнителя и четности адреса. Порядок, в котором передаются байты (во времени), неоднозначен (возможен как инкремент, так и декремент адреса), но в адресном пространстве они раскладываются по своим местам однозначно.
В табл. 6.4 приводятся состояния сигналов шины ISA для различных вариантов записи в порты ввода-вывода, проверенные экспериментальным путем. Вывод 16-разрядных данных выполнялся командой OUT DX, AX
(в DX
— адрес порта, в АХ
— данные; AL
содержит младший байт, АН
— старший), вывод 8-разрядных — командой OUT DX, AL
. Несколько неожиданные (для автора) варианты 3 и 6 с декрементом адреса, возможно, будут иметь место не на всех системных платах, но их следует иметь в виду при проектировании устройств, претендующих на глобальную совместимость. Правда на практике 16-битных передач по нечетным адресам обычно избегают (даже чисто подсознательно), и побочные эффекты от такого порядка маловероятны.
Сигнал (шина) | 1 цикл | 2 цикл |
---|---|---|
1. Вывод 16-разрядных данных в 16-битное устройство по четному адресу | ||
SBHE# | L | - |
SA | DX(A0=0) | - |
D[15:8] | АН | - |
D[7:0] | AL | - |
IOCS16# | L | - |
2. Вывод 16-разрядных данных в 16-битное устройство по нечетному адресу ххх1, ххх5, xxx9, xxxD | ||
SBHE# | L | H |
SA | DX(A0=1) | DX+1 (A0=0) |
D[15:8] | AL | 0 |
D[7:0] | AL | AH |
IOCS16# | L | L |
3. Вывод 16-разрядных данных в 16-битное устройство | ||
SBHE# | H | L |
SA | DX+1 (A0=0) | DX (A0=1) |
D[15:8] | 0 | AL |
D[7:0] | AH | 0 |
IOCS16# | L | L |
4. Вывод 16-разрядных данных в 8-битное устройство по четному адресу | ||
SBHE# | L | L |
SA[1:0] | DX(A0=0) | DX+1 (A0=1) |
D[15:8] | AH | AH |
D[7:0] | AL | AH |
IOCS16# | H | H |
5. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу ххх1, ххх5, xxx9, xxxD | ||
SBHE# | L | H |
SA[1:0] | DX(A0=1) | DX+1 (A0=0) |
D[15:8] | AL | 0 |
D[7:0] | AL | AH |
IOCS16# | H | H |
6. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу xxx3, ххх7, xxxB, xxxF | ||
SBHE# | H | L |
SA[1:0] | DX+1(A0=0) | DX(A0=1) |
D[15:8] | 0 | AL |
D[7:0] | AH | AL |
IOCS16# | H | H |
7. Вывод 8-разрядных данных в 16-битное устройство по четному адресу | ||
SBHE# | H | - |
SA[1:0] | DX(A0=0) | - |
D[15:8] | 0 | - |
D[7:0] | AL | - |
IOCS16# | L | - |
8. Вывод 8-разрядных данных в 16-битное устройство по нечетному адресу | ||
SBHE# | L | - |
SA[1:0] | DX(A0=1) | - |
D[15:8] | AL | - |
D[7:0] | 0(AL?) | - |
IOCS16# | L | - |
SD[15:0]
определяется управляющими сигналами чтения/записи, так что исполнителю не требуется синхронизация с тактовым сигналом шины. В циклах чтения адресованный исполнитель должен выдать данные на шину по началу (спаду) соответствующего сигнала чтения (IOR#
, MEMR#
, SMEMR#
) и удерживать их до конца действия сигнала (пока не произойдет подъем сигнала). В циклах записи задатчик выставляет действительные данные несколько позже начала (спада) сигнала записи (IOW#
, MEMW#
, SMEMW#
). Устройство-исполнитель должно фиксировать для себя эти данные в конце цикла по подъему сигнала записи. От устройства-исполнителя не предусматривается никаких подтверждений исполнения циклов; длительность цикла устанавливает задатчик, но исполнитель может потребовать удлинения или укорочения циклов. С помощью сигнала IOCHRDY
исполнитель может удлинить цикл на произвольное число тактов, при этом задатчик будет вводить дополнительные такты ожидания (wait states). Обычно контроллер шины следит за длительностью цикла и по достижении критического времени принудительно его завершает (по тайм-ауту, возможно, и не сообщая об этом событии). Слишком длинные циклы тормозят работу компьютера, а превышение длительности 15 мкс может привести к сбою регенерации и потере данных в ОЗУ. С помощью сигнала 0W#
исполнитель предлагает задатчику укоротить цикл, исключив такты ожидания. Реакция задатчика на одновременное использование сигналов IOCHRDY
и 0WS#
непредсказуема, этой ситуации следует избегать.
Номинальная длительность цикла определяется чипсетом и может программироваться в BIOS Setup заданием числа тактов ожидания (wait states). При этом циклы обращения к памяти, как правило, короче циклов обращения к портам ввода-вывода. Для управления длительностью цикла используются также сигналы управления разрядностью передачи: если устройство поддерживает 16-битные передачи, предполагается, что оно может работать с меньшим количеством тактов ожидания. Этим объясняется, что в BIOS Setup длительности циклов ISA задаются раздельно как для памяти и ввода-вывода, так и для 8- и 16-битных операций. Кроме длительности цикла, устройства могут быть критичны к времени восстановления (recovery time) — длительности пассивного состояния управляющих сигналов чтения-записи между циклами. Этот параметр также может программироваться в BIOS Setup и тоже раздельно для 8- и 16-разрядных операций. Карты расширения для подключения к шине данных, как правило, используют буферные микросхемы, раздельные для линийВНИМАНИЕ
Некорректное управление сигналомIOCHRDY
(его «залипание» на низком уровне) тормозит работу компьютера.
SD[7:0]
и SD[15:8]
. Здесь широко применяются микросхемы 74ALS245 (1533АП6) — 8-разрядные двунаправленные приемопередатчики. Буфер должен открываться сигналом ОЕ#
(Output Enable — разрешение выхода), когда на шине адреса присутствует адрес, относящийся к диапазону адресов подключаемого устройства. «Дежурным» является направление передачи «от шины — к устройству»; переключение в обратную сторону производится по сигналу IOR#
, если устройство представляет порты ввода-вывода, или MEMRD#
, если устройство приписано к пространству памяти. Таким образом, буферы имеют право передавать данные на шину (управлять шиной данных) только во время действия сигнала чтения, относящегося к зоне адресов данного устройства. Карта расширения может являться комбинацией 8- и 16-битных устройств; например, некогда популярные мультикарты содержали 16-битный адаптер ATA и набор 8-битных контроллеров портов COM, LPT, GAME и контроллера НГМД. В таких картах логика управления буферами и сигналами IOCS16#
и MSC16#
управляется сигналами от дешифратора адреса. Если устройство по данному адресу является 8-разрядным (не формирует сигналы IOCS16#
или MSC16#
), то оно имеет право разрешать чтение только через буфер линий SD[7:0]
, а буфер старших линий SD[15:8]
(если он имеется на карте) должен быть переведен в третье состояние. Если устройство по данному адресу является 16-разрядным, то оно формирует сигнал IOCS16#
или MSC16#
, а разрешением буферов управляют сигналы SBHE#
и SA0
. В этом случае буфер линий SD[7:0]
разрешается только при SA0
=0, а буфер линий SD[15:8]
разрешается только при SBHE#
=L. Некорректное разрешение буферов может приводить к их конфликту с перестановщиком байтов системной платы и искажениям данных.
Восьмиразрядные устройства (например, микросхемы 8255, 8250, 8253 и т. п.) следует подключать только к линиям SD[7:0]
и при обращении к ним не формировать сигналы IOCS16#
или MSC16#
. Никакие «косые» буферы (перестановщики байтов) на интерфейсных картах не нужны.
В одном из источников описывается эффект перестановки байтов при обращении к порту ввода-вывода: «Если прочитать слово из порта по четному адресу, значение одно, а если по нечетному — старшие 8 бит предыдущего значения становятся младшими, а старшие нового = FFh». Первые подозрения падают на ошибку в логике управления буферами. На самом деле все объясняется гораздо проще. Пусть имеется устройство с двухбайтным регистром, младший байт которого имеет адрес R0 (четный), старший — R0+1, а по адресу R+2 устройство (и никакие другие) не откликается. Пусть в данный момент в нем записано число AA55h, тогда чтением порта по команде IN AX, R0
получим в регистрах процессора AL
=55h, AH
=AAh. Теперь если попытаться его «прочитать по нечетному адресу», то есть командой IN АХ, R0+1
, то получим AL
=AAh (содержимое R0+1, к которому мы на самом деле и адресовались!), a AH
=FFh (результат чтения «пустоты»). Так что это не «эффект перестановки», а просто незнание общего правила «интеловской» адресации: адресом слова (двойного, учетверенного…) является адрес его младшего байта. Если в нашем устройстве применяется неполная дешифрация адреса (линия SA1
не используется ни для дешифрации адреса, ни для выбора регистра), то мы увидим полную перестановку байт — в AH
=55h, результат чтения R0 по адресу-псевдониму R0+2. Логика работы контроллера шины вместе со всеми буферами делает обращение к любой ячейке памяти или порту инвариантным к способу программной адресации — что закажешь, то и получишь, но требуется учитывать особенности периферийных устройств, у которых в адресации портов нередко встречаются псевдонимы. Адреса-псевдонимы встречаются и в пространстве памяти (например, копии образов BIOS под границей 1-го и 16-го мегабайтами памяти в «классических» PC/AT).
DRQx
и подтверждение обмена — DACKx#
, где x
— номер используемого канала. На рис. 6.3 приведена диаграмма стандартного цикла передачи байта (для 8-битного канала) или слова (для 16-битного) от ПУ в память по каналу DMA. Цикл передачи блока байтов или слов в память будет выглядеть следующим образом.
1. По сигналу DRQx
контроллер DMA запрашивает управление шиной и дожидается его предоставления процессором (и другими контроллерами шины).
2. Контроллер выставляет адрес ячейки памяти и формирует в одном цикле шины сигналы IOR#
, DACKx#
и MEMW#
. Адрес на всех линиях, включая LA[23:17]
, действителен во время всего цикла (защелкивание не требуется), BALE
=H в течение всего цикла. Сигнал DACKx#
указывает на то, что операция выполняется для канала x, a IOR#
— на направление в канале (для пересылки из памяти в канал использовался бы сигнал IOW#
). Чтобы по сигналу IOR#
не было ложного чтения (по IOW#
— ложной записи) порта, адрес которого совпадает с адресом памяти, присутствующим в цикле DMA, контроллер высоким уровнем сигнала AEN
запрещает портам дешифрацию адреса. Байт, считанный из ПУ, в том же цикле шины записывается в ячейку памяти.
3. Контроллер модифицирует счетчик адреса и повторяет шаги 1–2 для каждого следующего сигнала DRQx
, пока не будет исчерпан счетчик циклов. В последнем цикле обмена контроллер формирует общий сигнал окончания TC
(Terminate Count), который может быть использован устройством для формирования сигнала аппаратного прерывания.
IOR#
будет сигнал MEMR#
, а на месте MEMW#
— сигнал IOW#
. Направление обмена и параметры режима задаются программированием контроллера DMA.
Цикл DMA, и так довольно длинный, может быть растянут устройством с помощью сигнала IOCHRDY
(но сократить его сигналом 0WS#
невозможно). Запрашивать удлинение цикла может только адресованная память — подразумевается, что когда ПУ выставляет запрос DRQx
, оно уже должно быть готово к обмену.
На 16-битной шине ISA доступно 7 каналов DMA: четыре 8-битных (номера 0–3) и три 16-битных (5–7), подключенные к первичному и вторичному контроллерам соответственно. Канал 4 используется для каскадирования (соединения контроллеров). На 8-битном слоте доступны только четыре 8-битных канала (в XT только 3 — канал 0 требовался для регенерации памяти).
Кроме приведенного на рисунке режима одиночной передачи возможны и иные, описанные в п. 12.4.
Напомним, что по 8-битным каналам DMA за один сеанс настройки контроллера можно передавать не более 64К байт данных, начинающихся с любого адреса (но не пересекая границ страниц, см. п. 12.3.2 и 12.5). По 16-битным каналам за сеанс можно передавать не более 64К слов данных, начинающихся с четного адреса, и границы страниц иные. Используя DMA в режимах, отличных от одиночного, длительность непрерывной передачи не должна превышать 15 мкс (для обеспечения регенерации памяти).
DRQx
(x=5…7), по которому контроллер DMA запрашивает управление шиной у центрального процессора. Получив подтверждение от процессора, контроллер устанавливает сигнал AEN
(для блокировки дешифрации адреса портов) и формирует сигнал DACKx
. Получив этот сигнал, устройство устанавливает низкий уровень на линии MASTER#
, по которому контроллер шины DMA снимает сигнал AEN
и освобождает линии командных сигналов. Таким образом, управление шиной переходит к данному устройству до тех пор, пока оно не снимет запрос DRQx
. В режиме прямого управления шиной ISA устройство становится полновластным и бесконтрольным хозяином как самой шины, так и системы в целом (через мост шины). Если шина захватывается более чем на 15 мкс, контроллер устройства должен заботиться о регенерации памяти (см. ниже). Устройства (и память), к которым обращается задатчик шины, могут потребовать введения тактов ожидания сигналом IOCHRDY
, и это требование должно удовлетворяться.
REFRESH#
), диаграмма которого аналогична циклу DMA, но вместо чтения данных выполняется регенерация. В этом цикле считывания данных из микросхем памяти не производится, но стробы строк формируются (подробнее о методах регенерации см. в книге «Аппаратные средства IBM PC. Энциклопедия»). На шине ISA контроллер регенерации работает как нулевой канал DMA (в старых машинах он непосредственно и использовался). Каждые 15 мкс контроллер регенерации формирует сигнал REFRESH#, во время действия которого устанавливается AEN
=H и BALE
=H, формируется сигнал MEMR#
, а на линиях SA[7:0]
устанавливается адрес текущей регенерируемой строки. Диаграмма цикла регенерации аналогична циклу DMA, но сигнал REFRESH#
указывает на то, что вместо чтения данных выполняется регенерация.
Если какое-либо устройство захватывает управление шиной более чем на 15 мкс, оно должно позаботиться о регенерации памяти. Для этого раз в 15 мкс оно должно вырабатывать сигнал REFRESH#
, «отпуская» все адресные и управляющие сигналы. При этом контроллер шины, расположенный на системной плате и отвечающий за регенерацию памяти, сформирует очередной адрес на линиях SA[7:0]
и сигнал MEMR#
, а также установит AEN
=0 и BALE
=1 на все время цикла регенерации. Если устройство, надолго захватившее шину, сигнал регенерации не формирует, то запросы регенерации накапливаются в контроллере регенерации, и, как только управление будет возвращено, эти запросы будут немедленно удовлетворены. Однако число безнаказанно пропущенных запросов ограничено свойствами динамической памяти, и очередь запросов в контроллере регенерации может ограничиваться, например, четырьмя.
IRQ2
-IRQ7
поступают на входы первичного контроллера прерываний, IRQ9
-IRQ15
— на входы вторичного. Контакт B4 (IRQ2/9
) запрос IRQ2
вырабатывал только у машин PX/XT. На всех современных машинах (класса AT) он является запросом IRQ9
, хотя на многих адаптерах (всех 8-битных) он обозначается как IRQ2
. Приоритеты у запросов убывают по порядку IRQ9
…IRQ15
и далее IRQ3
…IRQ7
. Запросы от конкретных линий могут быть замаскированы записью в регистры контроллера (см. п. 12.4), общий запрет/разрешение осуществляется манипулированием флагом разрешения прерываний (IF
) процессора. Устройство может использовать одну или несколько линий запроса прерывания. На используемой линии запроса устройство в покое должно формировать низкий уровень сигнала, а при возникновении условия прерывания устанавливать на нем высокий уровень запроса. Неиспользуемые линии должны быть электрически отключены от шины или же их выходные формирователи должны переводиться в третье состояние. Переход из низкого в высокий уровень является сигналом для контроллера прерываний на формирование запроса прерывания к процессору. Устройство должно удерживать высокий уровень запроса до тех пор, пока к нему не обратится программа-обработчик прерывания, что будет означать не только обнаружение, но и правильную идентификацию источника запроса прерывания. Если запрос снят преждевременно, идентификация будет некорректной. Детально механизм обслуживания прерываний рассмотрен в п. 12.4.
Способ подачи сигнала прерывания, принятый в ISA, — чувствительность к уровню, причем к высокому, — имеет меньшую помехозащищенность, чем срабатывание по отрицательному перепаду, и отрезает путь к нормальному разделению (совместному использованию) линий запросов.
Линия IOCHK#
позволяет вызывать немаскируемое прерывание (NMI), на которое процессор реагирует вне зависимости от каких-либо флагов. Это прерывание принято использовать для сообщения о серьезных ошибках, требующих реакции системы, но не для регулярной работы. Вызов NMI от данной линии разрешается установкой бита 3 (EIC
) системного порта 061h, а признаком того, что прерывание NMI вызвано сигналом IOCHK#
, является единичное значение бита 6 (IOCHK
) того же порта.
MEMCS16#
, IOCS16#
, MASTER#
и 0WS#
должны обеспечивать вытекающий ток до 20 мА, для остальных достаточно 4 мА.
Вид платы PC/104 приведен на рис. 6.4, назначение контактов дано в табл. 6.5 и 6.6. Плата компьютера с шиной PC/104 имеет разъемы-розетки. Плата расширения имеет вилку PC/104, которая вставляется в плату контроллера. Кроме вилки на плате расширения может присутствовать и розетка PC/104 (коннектор двусторонний), так что можно собрать «бутерброд» из нескольких плат (рис. 6.4, а). Для предотвращения неправильного соединения у розеток в позициях B10 и C19 нет ни контактов, ни отверстий; у вилок в этих позициях штырек отсутствует. Если плат более трех, то сверху «бутерброда» устанавливают терминатор. Для фиксации плат стандартизовано расположение крепежных отверстий. Платы скрепляются четырьмя несущими стоечками высотой 0,6" (или длинными винтами с втулками). Отметим особенности коннекторов: J1 — коннектор шины ISA-8, J2 — его расширение до ISA-16; эти коннекторы обычно имеют дюймовый шаг контактов (2,54 мм), но могут встречаться и метрические, с шагом 2,5 мм (они взаимно несовместимы!). Обратим внимание и на специфическую нумерацию рядов контактов В, А, С, D и номеров контактов (у J2 нумерация начинается с нуля, нулевые контакты не используются).
РЯДА | № | Ряд В |
---|---|---|
IOCHK# | 1 | GND |
SD7 | 2 | RESET |
SD6 | 3 | +5 В |
SD5 | 4 | IRQ2/9 |
SD4 | 5 | –5 В |
SD3 | 6 | DRQ2 |
SD2 | 7 | –12 В |
SD1 | 8 | 0WS# |
SD0 | 9 | +12 В |
IOCHRDY | 10 | Ключ |
AEN | 11 | SMEMW# |
SA19 | 12 | SMEMR# |
SA18 | 13 | IOWR# |
SA17 | 14 | IORD# |
SA16 | 15 | DACK3# |
SA15 | 16 | DRQ3 |
SAM | 17 | DACK1# |
SA13 | 18 | DRQ1 |
SA12 | 19 | REFRESH* |
SA11 | 20 | BCLK |
SA10 | 21 | IRQ7 |
SA9 | 22 | IRQ6 |
SA8 | 23 | IRQ5 |
SA7 | 24 | IRQ4 |
SA6 | 25 | IRQ3 |
SA5 | 26 | DACK2# |
SA4 | 27 | TC |
SA3 | 28 | BALE |
SA2 | 29 | +5 В |
SA1 | 30 | OSC |
SA0 | 31 | GND |
GND | 32 | GND |
Ряд C | № | Ряд D |
GND | 0 | GND |
SBHE | 1 | MEMCS16# |
LA23 | 2 | IOCS16# |
LA22 | 3 | IRQ10 |
LA21 | 4 | IRQ11 |
LA20 | 5 | IRQ12 |
LA19 | 6 | IRQ15 |
LA18 | 7 | IRQ14 |
LA17 | 8 | DACK0# |
MEMR# | 9 | DRQ0 |
MEMW# | 10 | DACK5# |
SD8 | 11 | DRQ5 |
SD9 | 12 | DACK6# |
SD10 | 13 | DRQ6 |
SD11 | 14 | DACK7# |
SD12 | 15 | DRQ7 |
SD13 | 16 | +5 В |
SD14 | 17 | MASTER# |
SD15 | 18 | GND |
Ключ | 19 | GND |
AEN
(разрешающим дешифрацию адресов портов ввода-вывода) для каждого слота, причем эта возможность сохраняется и для карт ISA, установленных в слот EISA. В машинах с EISA имеется специальная энергонезависимая память конфигурирования слотов, с которой взаимодействует утилита конфигурирования EQU (EISA Configuration Utility); эта память и утилита могут использоваться и при установке карт ISA в машину EISA. Для шины ISA система автоматического конфигурирования — ISA PnP — была разработана лишь спустя десяток лет после начала массового выпуска компьютеров и карт расширения. Также были расширены функции BIOS — появилась спецификация PnP BIOS. Полная поддержка автоматического конфигурирования карт ISA требует наличия PnP BIOS, карт и/или модулей ISA PnP на системной плате, а также ОС с поддержкой PnP или же специализированного ПО.
Имя порта | Адрес | Тип доступа |
---|---|---|
ADDRESS | 0279h (Printer status port) | Только запись |
WRITE_DATA | 0A79h (Printer status port + 0800h) | Только запись |
READ_DATA | Перемещаемый в диапазоне 0203h-03FFh | Только чтение |
ADDRESS
используется для адресации регистров PnP — в него записывают индекс требуемого регистра (см. ниже пункт «Конфигурирование карт») перед обращением к портам WRITE_DATA
и READ_DATA
. Этот же порт используется и для записи последовательности кодов ключа инициализации. Выбор адреса для него обусловлен тем, что ни одна разумно сделанная карта расширения не будет пытаться задействовать для записи адрес регистра состояния стандартного LPT-порта.
Порты WRITE_DATA
и READ_DATA
используются для обмена данными с регистрами PnP. Адрес порта WRITE_DATA
традиционными картами с 10-битным декодированием будет восприниматься как тот же адрес, что и у предыдущего порта, так что конфликт опять-таки исключен. Перемещаемому адресу порта READ_DATA
программное обеспечение PnP во время исполнения протокола изоляции может легко найти бесконфликтное положение. Адрес этого порта сообщается всем картам записью в их управляющий регистр PnP.
Вышеперечисленные три порта используются только для конфигурирования и управления картами PnP. Для взаимодействия прикладных программ с функциональными устройствами карты используются иные ресурсы, выделенные карте (порты, области памяти, прерывания и каналы DMA). По включению питания или аппаратному сбросу карты настраиваются на стандартную рабочую конфигурацию, принятую для них по умолчанию (она может храниться в энергонезависимой памяти или задаваться джамперами). Это обязательно, по крайней мере для устройств, участвующих в загрузке, — ввод, вывод (экран) и собственно загрузочное устройство. Остальные устройства могут быть и логически отключенными от шины, до тех пор пока они не будут сконфигурированы программными средствами PnP. Карта PnP должна сообщать обо всех используемых ею ресурсах и, по возможности, предлагать альтернативные конфигурирования. Она обязана подчиняться конфигурационным командам PnP, включая команду деактивации (логического отключения от шины); при невозможности принять указанную конфигурацию карта (или ее логическое устройство) должна отключаться. Строгое выполнение данных требований всеми картами делает возможным работу системы PnP на неприспособленной для этого шине ISA. Непременным условием работоспособности является и уникальность идентификаторов карт (см. ниже).
В плане PnP каждая карта может находиться в одном из четырех состояний.
♦ Wait for key (ожидание ключа) — состояние нормального функционирования (или отключения) логических устройств. В это состояние устройство входит при включении питания, по аппаратному сбросу и по завершению его конфигурирования системой PnP. До подачи ключа в этом состоянии конфигурация карты программными обращениями изменена быть не может.
♦ Sleep («спячка») — состояние, в котором карта ожидает пробуждающей команды Wake[CSN]
, переводящей ее либо в состояние изоляции, либо в состояние конфигурирования. При нулевом параметре CSN
в команде все карты с неназначенным номером CSN
переводятся в состояние изоляции. При ненулевом параметре CSN
в команде карта с совпадающим номером CSN
переводится в состояние конфигурирования.
♦ Isolation (изоляция) — карта отвечает только на чтение регистра Serial Isolation
для реализации одноименного протокола (см. далее), с помощью которого ей назначается уникальный номер CSN
. Остальные команды PnP ей недоступны.
♦ Config (конфигурирование) — состояние, в котором карта отвечает на все об ращения к регистрам PnP, позволяя считывать и изменять ее конфигурацию. В этом состоянии может находиться лишь одна карта. По окончании конфигурирования карту переводят в режим ожидания ключа, защищая ее конфигурацию.
ADDRESS
(279h). Аппаратная логика карты, проверяющая ключ, основана на сдвиговом регистре с обратными связями LFSR (Linear Feedback Shift Register), схема которого приведена на рис. 6.5. Во время проверки ключа на вход C1 подается уровень логического нуля, а на вход C2 — стробы записи в порт ADDRESS
. Логика, не показанная на рисунке, сравнивает код в сдвиговом регистре с текущей записью и при несовпадении сбрасывает регистр LFSR в исходное состояние (код 6Ah). В это же состояние регистр может быть переведен двумя последовательными записями нулей в порт ADDRESS
. Сдвиг в регистре происходит при каждой записи в порт ADDRESS
. Если ключ (последовательность из 32 записей требуемых байт) из исходного состояния LFSR будет приложен верно, то после последней записи логика карты перейдет в режим конфигурирования (это еще не состояние config) и подготовится к отработке протокола изоляции. Точная последовательность байт ключа в hex-формате выглядит следующим образом:
6А, B5, DA, ED, F6, FB, 7D, BE, DF, 6F, 37, 1B, 0D, 86, C3, 61, B0, 58,
2С, 16, 8В, 45, A2, D1, E8, 74, 3A, 9D, СЕ, E7, 73, 39
C1
схемы LFSR поступают текущие биты идентификатора, а на вход C2
подаются стробы чтения регистра Serial Isolation
(см. ниже). В тактах передачи контрольной суммы ее биты берутся с выхода сдвигового регистра.
Протокол изоляции может быть программно инициирован в любой момент времени посылкой корректного ключа инициализации, переводящего все карты в конфигурационный режим. В этом режиме каждая карта ожидает 72 пары операций чтения порта READ_DATA
. Ответ каждой карты на эти операции определяется значением очередного бита ее последовательного идентификатора.
Если текущий бит идентификатора карты имеет единичное значение, то ее буфер шины данных в первом чтении пары выводит на шину данных значение 55h. Если текущий бит нулевой, то буфер работает на чтение шины данных и логика карты анализирует ответ других карт — проверяет наличие комбинации «01» в битах D[1:0] (младшие биты числа 55h). В следующем цикле чтения пары карта с единичным битом выводит число AAh, а карта с нулевым текущим битом проверяет наличие комбинации «10».
Если карта, просматривающая вывод данных другими картами, обнаружила корректные коды в обоих циклах чтения пары, она в данной итерации изоляции исключается.
Если карта в текущей паре управляла шиной или карта читала шину, но не обнаружила корректных активных ответов других карт, она сдвигает идентификатор на один бит и готовится к приему следующей пары циклов чтения.
Эта последовательность выполняется для всех 72 бит идентификатора. В конце процесса останется лишь одна карта. Записью в управляющий регистр PnP (индекс 06) ей назначается селективный номер CSN
, по которому она будет использоваться в дальнейших операциях. Карта с назначенным номером CSN
в следующих итерациях протокола изоляции не участвует (на пары чтений не отвечает).
Во время протокола изоляции карты не имеют права удлинять шинные циклы с помощью сигнала IOCHRDY
, поскольку это привело бы к неопределенности результатов наблюдения за «соседями». В других режимах этот сигнал может быть использован без особых ограничений.
Программа конфигурирования проверяет данные, возвращаемые во время всех пар циклов чтения, и побитно собирает прочитанный идентификатор. Если в паре приняты байты 55h и AAh, то соответствующий бит считается единичным, в других случаях он считается нулевым. При приеме идентификатора программа подсчитывает контрольную сумму и сравнивает ее с принятой. Несовпадение контрольной суммы или отсутствие среди принятых байт 55h и AAh указывает на то, что выбранный адрес порта READ_DATA
конфликтует с каким-либо устройством. Тогда программа пробует произвести итерацию, переместив адрес порта READ_DATA
в допустимом диапазоне адресов. Если при переборе нескольких возможных адресов не удается считать корректный идентификатор, то принимается решение об отсутствии карт PnP в системе (вообще или с неназначенными номерами CSN).
Программа должна обеспечивать задержку 1 мс после подачи ключа перед первой парой чтений и 250 мкс между парами чтений. Это дает карте время для доступа к информации, которая может храниться и в медленных устройствах энергонезависимой памяти.
Итак, по завершении протокола изоляции программное обеспечение имеет список идентификаторов обнаруженных карт и присвоенных им селективных номеров, сообщенных и самим картам. Далее общение программы с каждой картой идет по ее селективному номеру CSN, фигурирующему в командах PnP. Нулевой CSN присваивается картам по программному или аппаратному сбросу и используется как широковещательный адрес.
WRITE_DATA
или READ_DATA
соответственно. При этом для указания конкретного регистра PnP используется индекс — номер этого регистра, предварительно записанный в регистр ADDRESS
.
Каждая карта имеет стандартный набор регистров PnP, причем часть из них относится к карте в целом, а часть — к каждому логическому устройству, входящему в карту. Архитектура PnP поддерживает концепцию многофункциональности, согласно которой каждая карта может включать в себя несколько логических устройств. В любой момент времени в индексном пространстве регистров PnP отображаются стандартные регистры управления картой (см. ниже) и регистры только одного логического устройства (рис. 6.6). Выбор логического устройства, с которым производится общение, осуществляется записью в регистр Logical Device Number
, входящий в группу управляющих регистров карты.
Имя | Индекс и тип | Назначение |
---|---|---|
Set RD_DATA Port | 00H, WO | Установка адреса порта для чтения. Биты [7:0] задают значение бит [9:2] адреса порта READ_DATA. Только для записи |
Serial Isolation | 01h, RO | Чтение этого регистра в состоянии Isolation приводит к побитному анализу идентификатора |
Config Control | 02h, WO | Бит [2] — сброс CSN в 0. Бит [1] — возвращение в состояние Wait for Key. Бит [0] — сброс всех логических устройств и перевод конфигурационных регистров в состояние включения питания, но с сохранением номера CSN. Биты не запоминаются, так что необходимости в их программном сбросе нет |
Wake[CSN] | 03h, WO | Запись в этот регистр приведет карту, у которой номер CSN совпадает с записываемым байтом, к переходу из состояния Sleep в состояние Config (если данные не нулевые). Запись нулевого байта переводит все карты с неназначенным номером CSN в состояние Isolation. Указатель последовательно считываемых байт сбрасывается |
Resource Data | 04h, RO | Чтение этого регистра возвращает очередной байт информации о ресурсах. Перед чтением должен опрашиваться регистр Status |
Status | 05h, RO | Регистр состояния. Единичное значение бита [0] указывает на возможность чтения очередного байта ресурсов |
Card Select Number | 06h, RW | Регистр хранения селективного номера CSN, обеспечивающего выбор конкретной карты командой Wake[CSN]. Обнуляется по включению питания и аппаратному сбросу |
Logical Device Number | 07h, RW | Выбор текущего логического устройства, к которому относятся все операции по обмену конфигурационной информацией, проверки диапазона адресов ввода-вывода и активации. Если карта имеет только одно устройство, регистр допускает только чтение и всегда имеет нулевое значение |
Card Level Резерв | 08h-1Fh | Зарезервированы на будущее |
Card Level, Vendor Defined | 20h-2Fh | Используются по усмотрению производителя |
WAKE[CSN]
— записи байта CSN
в регистр с индексом 3. Эта операция переводит карту с указанным номером CSN
в состояние Config (конфигурирование), а остальные карты «засыпают» — переходят в состояние Sleep. Для конфигурируемой карты выполняются операции чтения ее конфигурационной информации (как карты в целом, так и логических устройств) и программирования используемых ресурсов. Программирование каждого логического устройства завершается установкой его бита активации, после чего логическое устройство активизируется на шине ISA (начнет реально использовать назначенные ресурсы). Программирование всей карты завершается переводом ее в состояние Wait for key (ожидание ключа). По окончании конфигурирования все карты PnP должны быть переведены в это состояние, и тогда их случайное реконфигурирование будет блокировано 32-байтным ключом.
Доступ к регистрам PnP через ключ возможен в любое время функционирования, однако запись в них должна производиться в полной уверенности о знании последствий. Возможно даже переназначение CSN
«на ходу», но это требуется лишь в устройствах, допускающих «горячие» включения-выключения (что не приветствуется на шине ISA), док-станциях (Docking Stations) для подключения портативных компьютеров и системах управления энергопотреблением.
Стандартные регистры управления логическим устройством (табл. 6.9) используются для активации карт и проверки отсутствия конфликтов на шине ISA в выбранном диапазоне адресов ввода-вывода. Когда включен режим проверки конфликтов, на чтение по любому адресу установленного диапазона портов ввода-вывода логическое устройство отвечает байтом 55h или AAh в зависимости от состояния бита 0 регистра проверки. Естественно, что в рабочем режиме этот «автоответчик» должен быть отключен.
Имя | Индекс и тип | Назначение |
---|---|---|
Activate | 30h, RW | Регистр активации. Бит [0] единичным значением разрешает активность логического устройства на шине ISA. Биты [7:1] зарезервированы, при чтении должны возвращать нули. Перед активацией должна быть запрещена проверка диапазона адресов ввода-вывода |
I/O Range Check | 31h, RW | Регистр проверки диапазона адресов ввода-вывода. Биты [7:2] зарезервированы, при чтении должны возвращать нули. Бит [1] — разрешение режима проверки. Бит [0] — управление диагностическим ответом: 0 — ответ AAh, 1 — ответ 55h |
Logical Device Control Резерв | 32h-37h | Зарезервированы на будущее |
Logical Device Control Vendor Defined | 38h-3Fh | Используются по усмотрению производителя |
Resource Data
.
♦ Дескрипторы запросов прерываний (2). Неиспользуемый селектор запроса прерывания должен быть нулевым (поскольку нулевой номер запроса недопустим — занят системным таймером). Для линии IRQ2/9
шины ISA применяют номер 9.
♦ Дескрипторы каналов прямого доступа к памяти. Неиспользуемый дескриптор канала прямого доступа должен иметь значение 4 (этот канал недоступен, по скольку задействован для каскадирования контроллеров).
Назначение регистров дескрипторов и их положение в индексном пространстве PnP раскрывает табл. 6.10.
Индекс и тип | Назначение |
---|---|
40h-5Fh — обычные (24-битные) дескрипторы памяти | |
40h, RW | Дескриптор памяти 0: базовый адрес памяти, биты [23:16] |
41h, RW | Дескриптор памяти 0: базовый адрес памяти, биты [15:8] |
42h, RW | Дескриптор памяти 0: управление. Бит [1] — режим обращения: 0–8 бит, 1 — 16 бит. Бит [0] (RO) — способ задания диапазона: 0 — следующее поле воспринимается как маска адреса, 1 —как старший адрес |
43h, RW | Дескриптор памяти 0: маска или максимальный адрес области, биты [23:16]. Единичное значение бита в маске указывает, что соответствующий бит адреса участвует в дешифрации адреса области памяти (старшие биты); нулевое — бит адреса используется для адресации в пределах выделенной области) |
44h, RW | Дескриптор памяти 0: маска или максимальный адрес области, биты [15:8] |
45h-47h | Заполнитель (зарезервировано) |
48h-4Ch | Дескриптор памяти 1 (аналогично предыдущему) |
4Dh-4Fh | Заполнитель (зарезервировано) |
50h-54h | Дескриптор памяти 2 (аналогично предыдущему) |
55h-57h | Заполнитель (зарезервировано) |
58h-5Ch | Дескриптор памяти 3 (аналогично предыдущему) |
5Dh-5Fh | Заполнитель (зарезервировано) |
60h-6Fh — дескрипторы пространства ввода-вывода | |
60h, RW | Дескриптор портов 0: базовый адрес, биты [15:8]. Если логическое устройство использует только 10-битное декодирование адреса, биты [15:10] могут игнорироваться |
61h, RW | Дескриптор портов 0: базовый адрес, биты [7:0] |
62h-63h, RW | Дескриптор портов 1 (аналогично предыдущему) |
64h-65h, RW | Дескриптор портов 2 (аналогично предыдущему) |
66h-67h, RW | Дескриптор портов 3 (аналогично предыдущему) |
68h-69h, RW | Дескриптор портов 4 (аналогично предыдущему) |
6Ah-6Bh, RW | Дескриптор портов 5 (аналогично предыдущему) |
6Ch-6Dh, RW | Дескриптор портов 6 (аналогично предыдущему) |
6Eh-6Fh, RW | Дескриптор портов 7 (аналогично предыдущему) |
70h-73h — дескрипторы запросов прерываний | |
70h, RW | Селектор запроса прерывания 0. Биты [3:0] задают номер IRQ для Interrupt 0 |
71h, RW | Тип сигнала запроса прерывания 0. Бит[1] — активный уровень: 1 — высокий, 0 — низкий. Бит[0] — тип: 1 — уровень, 0 — перепад. Если карта поддерживает только один тип сигнала, регистр может быть типа RO |
72h, 73h RW | Селектор и тип запроса прерывания 1 (аналогично предыдущему) |
74h-75h — дескрипторы каналов прямого доступа | |
74h, RW | Селектор 0 канала DMA. Биты [2:0] задают номер используемого канала (001 — DMA0…, 111 — DMA7) |
75h, RW | Селектор 1 канала DMA (аналогично предыдущему) |
76h-A8h — 32-битные дескрипторы памяти | |
76h, RW | 32-битный дескриптор памяти 0: базовый адрес памяти, биты [31:24] |
77h, RW | 32-битный дескриптор памяти 0: базовый адрес памяти, биты [23:16] |
78h, RW | 32-битный дескриптор памяти 0: базовый адрес памяти, биты [15:8] |
79h, RW | 32-битный дескриптор памяти 0: базовый адрес памяти, биты [7:0] |
7Ah, RW | 32-битный дескриптор памяти 0: управление. Биты [7:3] — зарезервированы, при чтении должны возвращать нули. Биты [2:1] — управление доступом: 00 — 8-битная память, 01 — 16-битная память, 10 — зарезервировано, 11 — 32-битная память. Бит [0] (RO) — способ задания диапазона: 0 — следующее поле воспринимается как размер области, 1 — следующее поле воспринимается как старший адрес |
7Bh, RW | 32-битный дескриптор памяти 0: размер или старший адрес области, биты [31:24] |
7Ch, RW | 32-битный дескриптор памяти 0: размер или старший адрес области, биты [23:16] |
7Dh, RW | 32-битный дескриптор памяти 0: размер или старший адрес области, биты [15:8] |
7Eh, RW | 32-битный дескриптор памяти 0: размер или старший адрес области, биты [7:0] |
7Fh | Заполнитель (зарезервировано) |
80h-88h | 32-битный дескриптор памяти 1 |
89h-8Fh | Заполнитель (зарезервировано) |
90h-98h | 32-битный дескриптор памяти 2 |
99h-9Fh | Заполнитель (зарезервировано) |
A0h-A8h | 32-битный дескриптор памяти 3 |
Resource Data
и использованы для конфигурирования устройств, которое выполняется через регистры, перечисленные в табл. 6.10. Считываться будут данные из карты, находящейся в состоянии config. Если регистр считывается сразу после «победы» карты в протоколе изоляции, считывание начинается с дескриптора версии PnP. Если считывание начинается для карты после ее «пробуждения» командой Wake[CSN]
, сначала будут считаны 8 байт уникального идентификатора, затем байт контрольного кода, который будет недействительным, поскольку генерируется аппаратно регистром LFSR во время побитного считывания идентификатора. Только после этого начнется считывание дескрипторов ресурсов. Порядок считывания дескрипторов существенен — именно в этом порядке должны программироваться регистры дескрипторов ресурсов карты PnP. Последовательность считывания дескрипторов для каждого логического устройства завершается признаком завершения области дескрипторов.
Считав все дескрипторы всех устройств, программа, выполняющая конфигурирование PnP, получает исчерпывающую информацию об устройствах и их потребностях. После этого она пытается найти бесконфликтную конфигурацию для всех устройств, с учетом потребностей установленных устройств, не относящихся к устройствам PnP. В соответствии с принятым планом она конфигурирует все устройства, а те, которым не удается выделить ресурсы, отключает. Данные о принятых настройках передаются «заинтересованному» ПО программным способом.
CLK
. Номинальной частотой синхронизации считается 33 МГц, при необходимости частота может быть понижена (на машинах с процессором 486 использовали частоты 20–33 МГц). Во многих случаях частоту успешно разгоняют и до 41,5 МГц (половина типовой частоты системной шины 83 МГц). Начиная с версии 2.1 допускается повышение частоты до 66 МГц при согласии всех устройств на шине.
Номинальная разрядность шины данных — 32 бита, спецификация определяет и расширение разрядности до 64 бит. При частоте шины 33 МГц теоретическая пропускная способность достигает 132 Мбайт/с для 32-битной шины и 264 Мбайт/с для 64-битной; при частоте синхронизации 66 МГц — 264 и 528 соответственно. Однако эти пиковые значения достигаются лишь во время передачи пакета, а из-за протокольных накладных расходов реальная средняя суммарная (для всех задатчиков) пропускная способность шины оказывается ниже.
С устройствами PCI процессор может взаимодействовать командами обращения к памяти и портам ввода-вывода, адресованным к областям, выделенным каждому такому устройству при конфигурировании. Устройства могут вырабатывать запросы маскируемых и немаскируемых прерываний. Понятия каналов DMA для шины PCI нет, но агент шины может сам выступать в роли задатчика, поддерживая высокопроизводительный обмен с памятью (и не только), не занимая ресурсов центрального процессора. Таким образом, к примеру, может быть реализован обмен в режиме DMA с устройствами AT А, подключенными к контролеру PCI IDE (см. п. 9.2.1). Спецификация PCI требует от устройств способности перемещать все занимаемые ресурсы в пределах доступного пространства адресации. Это позволяет обеспечивать бесконфликтное распределение ресурсов для многих устройств (функций). Для управления устройствами рекомендуется вместо портов ввода-вывода по возможности использовать ячейки памяти. Одно и то же функциональное устройство может быть сконфигурировано по-разному, отображая свои регистры либо на пространство памяти, либо на пространство ввода-вывода. Драйвер может определить текущую настройку, прочитав содержимое регистра базового адреса устройства, — признаком пространства ввода-вывода будет единичное значение бита 0 (см. п. 6.2.12). Драйвер также может определить и номер запроса прерывания, который используется устройством.
AD
в начале каждой транзакции. Для доступа к конфигурационному пространству используются отдельные линии IDSEL
.
Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для идентификации выделенную ей линию IDSEL
, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций. Каждой функции отводится конфигурационное пространство в 256 байт (см. п. 6.2.12). Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна быть обязательно, номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1–7). Простые (однофункциональные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функции, либо только на номер функции 0.
Шина PCI — набор сигнальных линий (см. п. 6.2.2), непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на системной плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI (см. п. 6.2.10). Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя их логически; главный мост соединяет главную шину с ядром системы (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно; главная шина имеет нулевой номер.
С точки зрения конфигурирования, минимальной адресуемой единицей этой иерархии является функция; ее полный адрес состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификации вида PCI0:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI.
В шине PCI принята географическая адресация — номер устройства определяется местом его подключения. Номер устройства (device number или dev) определяется той линией шины AD, к которой подключена линия сигнала IDSEL
данного слота: к AD11 — dev0 (мост), AD12 — dev1 … AD31 — dev20. В соседних слотах PCI, как правило, задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для слотов используются убывающие номера устройств, начиная с 20. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему адресации. Их номера «запаяны намертво», в то время как адреса карт расширения можно изменять перестановкой их в разные слоты.
Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL
. Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост — тоже устройство PCI, к которому и обращаются по линии IDSEL
, выделенной данной карте. Этот мост организует на карте дополнительную шину PCI, к которой можно подключить множество устройств.
С точки зрения обращения к пространствам памяти и ввода-вывода, географический адрес (номер шины и устройства) безразличен (не принимая во внимание разницу в производительности, связанную с подключением устройств к разным шинам PCI). Однако номер устройства определяет номер линии запроса прерывания, которой может пользоваться устройство. Подробнее об этом см. в п. 6.2.6, здесь же отметим, что на одной шине устройства с номерами, отличающимися друг от друга на 4, будут использовать одну и ту же линию прерывания. Возможность развести их по разным линиям прерывания может появиться лишь, если они находятся на разных шинах (это зависит от системной платы).
Разобраться с нумерацией устройств и полученных ими линий прерываний на конкретной плате можно просто: устанавливать одну карту PCI поочередно в каждый из слотов (отключая питание) и смотреть на сообщения об обнаруженных устройствах PCI, выводимых на дисплей в конце теста POST. В этих сообщениях будут фигурировать и устройства PCI, установленные непосредственно на системной плате (и не отключенные параметрами CMOS Setup).
Но чтобы не было иллюзий простоты и прозрачности, отметим, что «особо умные» операционные системы (Windows) не довольствуются полученными назначениями номеров прерывании и изменяют их по своему усмотрению (что никак не может отразиться на разделяемости линий).
Сигнал | Назначение |
---|---|
AD[31:0] | Address/Data — мультиплексированная шина адреса/данных. В начале транзакции передается адрес, в последующих тактах — данные |
C/BE[3:0]# | Command/Byte Enable — команда/разрешение обращения к байтам. Команда, определяющая тип очередного цикла шины, задается четырехбитным кодом в фазе адреса |
FRAME# | Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигнала указывает на то, что последующий цикл передачи данных является последним в транзакции |
DEVSEL# | Device Select — устройство выбрано (ответ ЦУ на адресованную к нему транзакцию) |
IRDY# | Initiator Ready — готовность ведущего устройства к обмену данными |
TRDY# | Target Ready — готовность ЦУ к обмену данными |
STOP# | Запрос ЦУ к ведущему устройству на остановку текущей транзакции |
LOCK# | Сигнал захвата шины для обеспечения целостного выполнения операции. Используется мостом, которому для выполнения одной операции требуется выполнить несколько транзакций PCI |
REQ# | Request — запрос от ведущего устройства на захват шины |
GNT# | Grant — предоставление ведущему устройству управления шиной |
PAR | Parity — общий бит паритета для линий AD[31:0] и C/BE[3:0]# |
PERR# | Parity Error — сигнал об ошибке паритета (для всех циклов, кроме специальных). Вырабатывается любым устройством, обнаружившим ошибку |
PME# | Power Management Event — сигнал о событиях, вызывающих изменение режима потребления (дополнительный сигнал, введенный в PCI 2.2) |
CLKRUN# | Clock running — шина работает на номинальной частоте синхронизации. Снятие сигнала означает замедление или остановку синхронизации с целью снижения потребления (для мобильных применений) |
PRSNT[1,2]# | Present — индикаторы присутствия платы, кодирующие запрос потребляемой мощности. На карте расширения одна или две линии индикаторов соединяются с шиной GND, что воспринимается системной платой |
RST# | Reset — сброс всех регистров в начальное состояние |
IDSEL | Initialization Device Select — выбор устройства в циклах конфигурационного считывания и записи |
SERR# | System Error — системная ошибка. Ошибка паритета адреса данных в специальном цикле или иная катастрофическая ошибка, обнаруженная устройством. Активизируется любым устройством PCI и вызывает NMI |
REQ64# | Request 64 bit — запрос на 64-битный обмен. Сигнал вводится 64-битным инициатором, по времени он совпадает с сигналом FRAME#. Во время окончания сброса (сигналом RST#) сигнализирует 64-битному устройству о том, что оно подключено к 64-битной шине. Если 64-битное устройство не обнаружит этого сигнала, оно должно переконфигурироваться на 32-битный режим, отключив буферные схемы старших байтов |
ACK64# | Подтверждение 64-битного обмена. Сигнал вводится 64-битным ЦУ, опознавшим свой адрес, одновременно с DEVSEL#. Отсутствие этого подтверждения заставит инициатор выполнять обмен с 32-битной разрядностью |
INTA#, INTB#, INTC#, INTD# | Interrupt А, В, С, D — линии запросов прерывания, чувствительность к уровню, активный уровень — низкий, что допускает разделяемость (совместное использование) линий |
CLK | Clock — тактовая частота шины. Должна лежать в пределах 20–33 МГц, в PCI2.1 — до 66 МГц |
M66EN | 66MHz Enable — разрешение частоты синхронизации до 66 МГц |
SDONE | Snoop Done — сигнал завершенности цикла слежения для текущей транзакции. Низкий уровень указывает на незавершенность цикла слежения за когерентностью памяти и кэша. Необязательный сигнал, используется только устройствами шины с кэшируемой памятью |
SBO# | Snoop Backoff — попадание текущего обращения к памяти абонента шины в модифицированную строку кэша. Необязательный сигнал, используется только абонентами шины с кэшируемой памятью при алгоритме обратной записи |
TCK | Test Clock — синхронизация тестового интерфейса JTAG |
TDI | Test Data Input — входные данные тестового интерфейса JTAG |
TDO | Test Data Output — выходные данные тестового интерфейса JTAG |
TMS | Test Mode Select — выбор режима для тестового интерфейса JTAG |
TRST | Test Logic Reset — сброс тестовой логики |
REQ#
для запроса на управление шиной и GNT#
для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал FRAME#
) только при активном полученном сигнале GNT#
. Снятие сигнала GNT#
не позволяет устройству начать следующую транзакцию, а при определенных условиях (см. ниже) заставляет прекратить начатую транзакцию. Арбитражем запросов на использование шины занимается специальный узел, входящий в чипсет системной платы. Схема приоритетов (фиксированный, циклический, комбинированный) определяется программированием арбитра.
Для адреса и данных используются общие мультиплексированные линии AD
. Четыре мультиплексированные линии С/BE[3:0]
обеспечивают кодирование команд в фазе адреса и разрешения байт в фазе данных. В начале транзакции ведущее устройство активизирует сигнал FRAME#
, по шине AD
передает целевой адрес, а по линиям С/BE#
— информацию о типе транзакции (команде). Адресованное ЦУ отзывается сигналом DEVSEL#
. Ведущее устройство указывает на свою готовность к обмену данными сигналом IRDY#
, эта готовность может быть выставлена и раньше получения DEVSEL#. Когда к обмену данными будет готово и ЦУ, оно установит сигнал TRDY#
. Данные по шине AD
передаются только при одновременном наличии сигналов IRDY#
и TRDY#
. С помощью этих сигналов ведущее устройство и ЦУ согласуют свои скорости, вводя такты ожидания. На рис. 6.7 приведена временная диаграмма обмена, в которой и ведущее устройство, и ЦУ вводят такты ожидания. Если бы они оба ввели сигналы готовности в конце фазы адреса и не снимали их до конца обмена, то в каждом такте после фазы адреса передавались бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.
IRDY#
снимает сигнал FRAME#
. В одиночных транзакциях сигнал FRAME#
активен лишь один такт. Если устройство не поддерживает пакетные транзакции в ведомом режиме, то оно должно потребовать прекращения пакетной транзакции во время первой фазы данных (введя сигнал STOP#
одновременно с TRDY#
). В ответ на это ведущее устройство завершит данную транзакцию и продолжит обмен последующей транзакцией с новым значением адреса. После последней фазы данных ведущее устройство снимает сигнал IRDY#
, и шина переходит в состояние покоя (PCI Idle) — оба сигнала FRAME#
и IRDY#
находятся в пассивном состоянии. Инициатор может начать следующую транзакцию и без такта покоя, введя FRAME#
одновременно со снятием IRDY#
. Такие быстрые смежные транзакции (Fast Back-to-Back) могут быть обращены как к одному, так и к разным ЦУ. Первый тип поддерживается всеми устройствами PCI, выступающими в роли ЦУ. На поддержку второго типа (она необязательна) указывает бит 7 регистра состояния (см. п. 6.2.12). Инициатору разрешают (если он умеет) использовать быстрые смежные транзакции с разными устройствами (битом 9 регистра команд), только если все агенты шины допускают быстрые обращения.
Шина позволяет уменьшить мощность (ток), потребляемую устройствами, ценой снижения производительности, применяя пошаговое переключение линий AD[31:0]
и PAR
(address/data stepping). Здесь возможны два варианта.
♦ Плавный шаг (continuous stepping) — начало формирования сигналов слабо точными формирователями за несколько тактов до введения сигнала-квалификатора действительной информации (FRAME#
в фазе адреса, IRDY#
или TRDY#
в фазе данных). За эти несколько тактов сигналы «доползут» до требуемого значения при меньшем токе.
♦ Дискретный шаг (diskrete stepping) — нормальные формирователи срабатывают не все сразу, а группами (например, побайтно), в каждом такте по группе. При этом снижаются броски тока, поскольку одновременно переключается меньше формирователей.
Устройство само может и не пользоваться этими возможностями (см. бит 7 регистра команд), но должно «понимать» такие циклы. Задерживая сигнал FRAME#
, устройство рискует потерять право доступа к шине, если арбитр получит запрос от более приоритетного устройства.
Протокол квитирования обеспечивает надежность обмена — ведущее устройство всегда получает информацию об отработке транзакции ЦУ. Средством повышения надежности (достоверности) является применение контроля паритета: линии AD[31:0]
и С/BE[3:0]#
и в фазе адреса, и в фазе данных защищены битом паритета PAR
(количество единичных бит этих линий, включая PAR
, должно быть четным). Действительное значение PAR
появляется на шине с задержкой в один такт относительно линий AD и С/BE#
. При обнаружении ошибки ЦУ вырабатывается сигнал PERR#
(со сдвигом на такт после действительности бита паритета). В подсчете паритета при передаче данных учитываются все байты, включая и недействительные (отмеченные высоким уровнем сигнала С/ВЕх#
). Состояние бит, даже и в недействительных байтах данных, во время фазы данных должно оставаться стабильным.
Каждая транзакция на шине должна быть завершена планово или прекращена, при этом шина должна перейти в состояние покоя (сигналы FRAME#
и IRDY#
пассивны). Завершение транзакции выполняется либо по инициативе ведущего устройства, либо по инициативе ПУ.
Ведущее устройство может завершить транзакцию одним из следующих способов.
♦ Нормальное завершение (Completion) выполняется по окончании обмена данными.
♦ Завершение по тайм-ауту (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#
был активен). После этого данные уже не передаются. Отказ вводится, когда ЦУ обнаруживает фатальную ошибку или иные условия, по которым оно уже никак не сможет обслужить данный запрос.
Использование трех типов прекращения вовсе не обязательно для всех ЦУ, однако любое ведущее устройство должно быть готово к завершению транзакций по любой из этих причин.
TRDY#
относительно FRAME#
, не должна превышать 16 тактов шины. Если устройство по своей природе иногда может не успевать уложиться в этот интервал, оно должно формировать сигнал STOP#
, прекращая транзакцию. Это заставит ведущее устройство повторить транзакцию, и с большой вероятностью эта попытка окажется успешной. Если устройство медленное и часто не укладывается в 16 тактов, то оно должно откладывать транзакцию (Delayed Transaction). Кроме того, ЦУ имеет инкрементный механизм слежения за длительностью циклов (Incremental Latency Mechanism), который не позволяет интервалу между соседними фазами данных в пакете (target subsequent latency) превышать 8 тактов шины. Если ЦУ не успевает работать в таком темпе, оно обязано остановить транзакцию. Желательно, чтобы устройство сообщало о своем «неуспевании» как можно раньше, не выжидая предельных 16 или 8 тактов, — это экономит полосу пропускания шины.
Инициатор тоже не должен задерживать поток — допустимая задержка от начала FRAME#
до сигнала IRDY#
(master data latency) и между фазами данных не должна превышать 8 тактов. Если ЦУ время от времени отвергает операцию записи в память с запросом повтора (это, к примеру, может происходить при записи в видеопамять), то есть «предел терпения» для завершения операции. Таймер максимального времени исполнения (maximum complete time) имеет порог 10 мкс — 334 такта при 33 МГц или 668 тактов на 66 МГц, за которое инициатор должен иметь возможность «протолкнуть» хоть одну фазу данных. Таймер начинает отсчет с момента запроса повтора операции записи в память и сбрасывается при последующем завершении транзакции записи в память, отличном от запроса повтора. Устройства, не способные выдерживать ограничение на максимальное время исполнения записи в память, должны предоставлять драйверу возможность определять их состояние, в котором достаточно быстрая запись в память невозможна. Драйвер, естественно, должен учитывать это состояние и не «напрягать» шину и устройство бесплодными попытками записи.
Каждое ведущее устройство, способное сформировать пакет с более чем двумя фазами данных, должно иметь собственный программируемый таймер задержки (Latency Timer), регулирующий поведение ведущего устройства, когда у него отбирают право управления шиной. Таймер запускается по каждому сигналу FRAME#
, введенному этим ведущим устройством. Поведение ведущего устройства по достижении порога зависит от типа команды и состояния сигналов FRAME#
и GNT#
на момент срабатывания таймера.
♦ Если ведущее устройство снимает сигнал FRAME#
до срабатывания таймера, транзакция завершается нормально.
♦ Если сигнал GNT#
снят и исполняемая команда не является записью памяти с инвалидацией, то инициатор обязан сократить транзакцию, сняв сигнал FRAME#
. При этом ему позволяется завершить текущую и выполнить еще одну фазу данных.
♦ Если сигнал GNT#
снят и исполняется запись в память с инвалидацией, то инициатор должен завершить транзакцию по концу текущей (если передается непоследнее двойное слово строки) или следующей (если двойное слово — последнее) строки кэша.
Задержка арбитража (arbitration latency) определяется как число тактов от подачи инициатором запроса REQ#
до получения права управления шиной GNT#
. Эта задержка зависит от активности других инициаторов, быстродействия устройств (чем меньше они вводят тактов ожидания, тем лучше) и «проворности» собственно арбитра. В зависимости от исполняемой команды и состояния сигналов ведущее устройство должно либо сократить транзакцию, либо продолжать ее до запланированного завершения.
При конфигурировании ведущие устройства сообщают свои потребности, указывая максимально допустимую задержку предоставления доступа к шине (Max_Lat
) и минимальное время, на которое им должно предоставляться управление шиной (Min_GNT
). Эти потребности определяются присущим устройству темпом передачи данных и его организацией.
Для максимального использования возможностей шины устройства должны иметь буферы, чтобы накапливать в них данные для пакетных транзакций. Рекомендуется для устройств со скоростью передачи данных до 5 Мбайт/с иметь буфер, по крайней мере, на 4 двойных слова. Для более высоких скоростей рекомендуется буфер на 32 двойных слова. Для обмена с системной памятью наиболее эффективны транзакции, работающие с целыми строками кэша, что тоже учитывают при определении размера буфера. Однако увеличение размера буфера может вызвать трудности при обработке ошибок, а также вести к увеличению задержек доставки данных (пока устройство не заполнит определенный объем буфера, оно не начнет передачу этих данных по шине, и их потребители будут ожидать).
В спецификации приводится пример организации карты Fast Ethernet (скорость передачи — 10 Мбайт/с), у которой для каждого направления передачи имеется 64-байтный буфер, поделенный на две половины. Когда адаптер заполняет одну половину буфера приходящим кадром, он выводит в память накопленное содержимое другой половины, после чего они меняются местами. Каждая половина выводится в память за 8 фаз данных (около 0,25 мкс на частоте 33 МГц), что соответствует установке MIN_GNT
=1. При скорости прихода данных 10 Мбайт/с каждая половина заполняется за 3,2 мкс, что соответствует установке МAX_LАТ
=12 (здесь время задается в интервалах по 0,25 мкс).
AD
, несущие действительную информацию, выбираются сигналами С/BE[3:0]#
в фазах данных. Внутри пакета эти сигналы могут менять состояние от фазы к фазе произвольным образом. Разрешенные байты могут быть разрозненными; возможны фазы данных, в которых не разрешено ни одного байта. В отличие от шины ISA, на PCI нет динамического изменения разрядности — все устройства должны подключаться к шине 32-разрядным способом. Если в устройстве PCI применяются функциональные схемы иной разрядности (к примеру, нужно подключить микросхему 8255, имеющую 8-битную шину данных и четыре регистра), то приходится принимать схемотехнические методы преобразования, отображающие все регистры на 32-разрядную шину AD
.
Адресация памяти, портов и конфигурационных регистров различна.
♦ В циклах обращения к памяти адрес, выровненный по границе двойного слова, передается по линиям AD[31:2]
; линии AD[1:0]
задают порядок адресов в пакете:
• 00 — линейное инкрементирование; адрес последующей фазы отличается от предыдущего на число байтов шины (4 для 32-битной и 8 для 64-битной шины).
• 10 — Cache line Wrap mode, сворачивание адресов с учетом длины строки кэш-памяти. В транзакции адрес для очередной фазы увеличивается до достижения границы строки кэша, после чего переходит на начало этой строки и увеличивается до адреса, предшествующего начальному. Если транзакция длиннее строки кэша, то она продолжится в следующей строке с того же смещения, что и началась. Так, при длине строки 16 байт и 32-битной шине транзакция, начавшаяся с адреса xxxxxx08h, будет иметь последующие фазы данных, относящиеся к адресам xxxxxx0Ch, xxxxxx00h, xxxxxx04h; и далее к xxxxxx18h, xxxxxx1Ch, xxxxxx10h, xxxxxx14h. Длина строки кэша прописывается в конфигурационном пространстве устройства (см. п. 6.2.12). Если устройства не имеет регистра Cache Line Size
, то оно должно прекратить транзакцию после первой фазы данных;
• 01 и 11 — зарезервировано, может использоваться как указание на отключение (Disconnect) после первой фазы данных.
♦ В циклах обращения к портам ввода-вывода для адресации любого байта используются все линии AD[31:0]
. При этом биты адреса AD[31:2]
указывают на адрес двойного слова, к которому принадлежат передаваемые данные, а младшие биты адреса AD[1:0]
должны соответствовать байтам, которые могут быть разрешены сигналами С/BE[3:0]#
. При AD[1:0]
=00 допустимо С/BE[3:0]#
=xxx0 или 1111, при AD[1:0]
=01 — С/BE[3:0]#
=xx01 или 1111, при AD[1:0]
=10 — С/BE[3:0]#
=х011 или 1111, при AD[1:0]
=11 — С/BE[3:0]#
=0111 (передается лишь байт 3) или 1111 (ни один байт не разрешен). Эти циклы тоже могут быть пакетными, хотя на практике эта возможность используется редко.
♦ В циклах конфигурационной записи/считывания устройство (карта расширения) выбирается индивидуальным сигналом IDSEL
; функция адресуется битами AD[10:8]
, а конфигурационные регистры (только двойные слова) адресуются битами AD[7:2]
, при этом AD[1:0]
=00.
Команды шины PCI определяются значениями бит С/BE#
в фазе адреса (табл. 6.12).
♦ Команда подтверждения прерывания предназначена для чтения вектора прерываний. По протоколу она выглядит как команда чтения, неявно адресованная к системному контроллеру прерываний. Здесь в фазе адреса по шине AD
полезная информация не передается, но ее инициатор (главный мост) должен обеспечить стабильность сигналов и корректность паритета. В PC 8-битный вектор передается в байте 0 по готовности контроллера прерываний (по сигналу TRDY#
). Подтверждение прерываний выполняется за один цикл (первый холостой цикл, который процессоры х86 делают в дань совместимости со стариной, мостом подавляется).
♦ Специальный цикл отличается от всех других тем, что является широковещательным. Однако ни один агент на него не отвечает, а главный мост или иное устройство, вводящее этот цикл, всегда завершает его способом Master Abort (на него требуется 6 тактов шины). Специальный цикл предназначен для генерации широковещательных сообщений — их могут читать любые «заинтересованные» агенты шины. Тип сообщения декодируется содержимым линий AD[15:0]
, на линиях AD[31:16]
могут помещаться данные, передаваемые в сообщении. Фаза адреса в этом цикле для обычных устройств отсутствует, но мосты используют ее информацию для управления распространением сообщения. Сообщения с кодами 0000h, 0001h и 0002h требуются для указания на отключение (Shutdown
), остановку (Halt
) процессора или специфические функции процессора x86, связанные с кэшем и трассировкой. Коды 0003-FFFFh зарезервированы. Специальный цикл может генерироваться тем же аппаратно-программным механизмом, что и конфигурационные циклы (см. п. 6.2.11), но со специфическим значением адреса.
♦ Команды чтения и записи ввода-вывода служат для обращения к пространству портов. Линии AD
содержат адрес байта, причем декодированию подлежат и биты AD0
и AD1
(несмотря на то, что имеются сигналы ВЕх#
). Порты PCI могут быть 16- или 32-битными. Для адресации портов на шине PCI доступны все 32 бита адреса, но процессоры х86 могут использовать только младшие 16 бит.
♦ Команды обращения к памяти, кроме обычного чтения и записи, включают чтение строк кэш-памяти, множественное чтение (нескольких строк), запись с инвалидацией.
♦ Команды конфигурационного чтения и записи адресуются к конфигурационному пространству устройств (см. п. 6.2.12). Обращение производится только двойными словами. Структура содержит идентификатор устройства и производите для, состояние и команду, информацию о занимаемых ресурсах и ограничения на использование шины. Для генерации данных команд требуется специальный аппаратно-программный механизм (см. п. 6.2.11).
♦ Чтение строк памяти применяется, когда в транзакции планируется более двух 32-битных передач (обычно это чтение до конца строки кэша).
♦ Множественное чтение памяти используется для транзакций, пересекающих границы строк кэш-памяти.
♦ Запись с инвалидацией применяется к целым строкам кэша и позволяет оптимизировать циклы обратной записи «грязных» строк кэша.
♦ Двухадресный цикл позволяет по 32-битной шине обращаться к устройствам с 64-битной адресацией. В этом случае младшие 32 бита адреса передаются в цикле данного типа, а за ним следует обычный цикл, определяющий тип обмена и несущий старшие 32 бита адреса. Шина PCI допускает 64-битную адресацию портов ввода-вывода (для х86 это бесполезно, но PCI существует и на других платформах).
С/BE[3:0] | Тип команды |
---|---|
0000 | Interrupt Acknowledge — подтверждение прерывания |
0001 | Special Cycle — специальный цикл |
0010 | I/O Read — чтение порта ввода-вывода |
0011 | I/O Write — запись в порт ввода-вывода |
0100 | Зарезервировано |
0101 | Зарезервировано |
0110 | Memory Read — чтение памяти |
0111 | Memory Write — запись в память |
1000 | Зарезервировано |
1001 | Зарезервировано |
1010 | Configuration Read — конфигурационное считывание |
1011 | Configuration Write — конфигурационная запись |
1100 | Multiple Memory Read — множественное чтение памяти |
1101 | Dual Address Cycle (DAC) — двухадресный цикл |
1110 | Memory-Read Line — чтение строки памяти |
1111 | Memory Write and Invalidate — запись с инвалидацией |
MOVSD
, используя префикс повтора REP
. Тот же эффект даст и цикл последовательных операций LODSW
, STOSW
(и иных инструкциях обращения к памяти). Поскольку у современных процессоров ядро исполняет инструкции гораздо быстрее, чем шина способна вывести их результаты, между инструкциями, порождающими объединяемые записи, процессор может успеть выполнить еще несколько операций. Однако если пересылка данных организуется директивой языка высокого уровня, которая ради универсальности работает гораздо сложнее вышеприведенных ассемблерных примитивов, транзакции, скорее всего, будут уже одиночными (у буферов записи процессора не хватит «терпения» придержать один 32-битный запрос до появления следующего, или же произойдет принудительная выгрузка буферов записи процессора или моста по запросу чтения, см. п. 6.2.10).
Что касается чтения из устройства PCI, то здесь пакетный режим организовать сложнее. Буферизации чтения у процессора, естественно, нет (операцию чтения можно считать выполненной лишь по получению реальных данных), и даже строковые инструкции будут порождать одиночные циклы. Однако у современных процессоров имеются возможности генерации запросов чтения более 4 байт. Для этого можно использовать инструкции загрузки данных в регистры MMX (8 байт) или XMM (16 байт), а из них уже выгружать данные в ОЗУ (которое работает много быстрее устройств PCI).
Строковые инструкции ввода-вывода (INSW
, OUTSW
с префиксом повторения REP
), используемые для программированного ввода-вывода блоков данных (PIO), порождают серии одиночных транзакций, поскольку все данные блока относятся к одному адресу PCI.
Посмотреть, каким образом происходит обращение к устройству, несложно при наличии осциллографа: в одиночных транзакциях сигнал FRAME#
активен всего 1 такт, в пакетных он длиннее. Число фаз данных в пакете соответствует числу тактов, во время которых активны оба сигнала IRDY#
и TRDY#
.
Стремиться к пакетизации транзакций записи стоит только в том случае, если устройство PCI поддерживает пакетные передачи в ведомом (target) режиме. Если это не так, то попытка пакетизации приведет даже к небольшой потере производительности, поскольку транзакция будет завершаться по инициативе ведомого устройства (сигналом STOP#
), а не инициатора обмена, на чем теряется один такт шины. Так, к примеру, можно наблюдать, как при записи массива в память PCI, выполняемой директивой языка высокого уровня, устройство среднего быстродействия (вводящее лишь 3 такта ожидания готовности) принимает данные каждые 7 тактов, что при частоте 33 МГц и разрядности 32 бита дает скорость 33×4/7=18,8 Мбайт/с. Здесь 4 такта занимает активная часть транзакции (от сигнала FRAME#
до снятия сигнала IRDY#
) и 3 такта паузы. То же устройство по инструкции MOVSD
принимает данные каждые 8 тактов шины (33×4/8=16,5 Мбайт/с). Эти данные — результат наблюдения работы PCI-ядра, выполненного на основе микросхемы FPGA фирмы Altera, не поддерживающего пакетные транзакции в ведомом режиме. То же самое устройство при чтении памяти PCI работает существенно медленнее — инструкцией REP MOVSW
с него удалось получать данные каждые 19–21 тактов шины (скорость 33×4/20=6,6 Мбайт/с). Здесь сказывается и большая задержка устройства (оно выдает данные лишь в 8 такте после появления сигнала FRAME#
), и то, что процессор начинает следующую пересылку лишь дождавшись данных от предыдущей. Трюк с использованием регистра XMM здесь дает положительный эффект, несмотря на потерю такта (на прекращение транзакции непакетным устройством), поскольку каждый 64-битный запрос процессора выполняется парой смежных транзакций PCI, между которыми пауза всего в пару тактов.
Для определения теоретического предела пропускной способности вернемся к рис. 6.7, чтобы определить минимальное время (число тактов) транзакций чтения и записи. В транзакции чтения после подачи команды и адреса инициатором (такт 1) меняется текущий «владелец» шины AD
. На этот «разворот», или «пируэт» (turnaround), уходит такт 2, что обусловливается задержкой сигнала TRDY#
целевым устройством. Далее может следовать фаза данных (такт 3), если целевое устройство достаточно расторопно. После последней фазы данных требуется еще 1 такт на обратный «пируэт» шины AD
(в нашем случае это такт 4). Таким образом, чтение одного слова (4 байта) занимает минимум 4 такта по 30 не (33 МГц). Если эти транзакции следуют непосредственно друг за другом (если на такое способен инициатор и у него не отбирают право на управление шиной), то можно говорить о максимальной скорости чтения в 33 Мбайт/с при одиночных транзакциях. В транзакциях записи шиной AD
все время управляет инициатор, так что здесь нет потери тактов на «пируэт». При расторопном целевом устройстве, не вносящем дополнительных тактов ожидания, скорость записи может достигать 66 Мбайт/с.
Скорость, соизмеримую с максимальной пиковой, можно получить только при пакетных передачах, когда имеют место дополнительные 3 такта при чтении и 1 при записи. Так, для чтения пакета с числом фаз данных 4 требуется 7 тактов (V= 16/(7×30) байт/нс = 76 Мбайт/с), а для записи — 5 (V= 16/(5×30) байт/нс = 106,6 Мбайт/с). При числе фаз данных в 16 скорость чтения может достигать 112 Мбайт/с, а записи — 125 Мбайт/с.
В этих выкладках не учитывались потери времени, связанны со сменой инициатора. Инициатор может начинать транзакцию по получении сигнала GNT#
, только убедившись в том, что шина находится в покое (сигналы FRAME#
и IRDY#
пассивны); на фиксацию покоя уходит один такт. Как видно, захватывать для одного инициатора большую часть пропускной способности шины можно, увеличивая длину пакета. Однако при этом возрастет задержка получения управления шиной для других устройств, что не всегда допустимо. Отметим также, что далеко не все устройства способны отвечать на транзакции без тактов ожидания, так что реальные цифры будут скромнее.
Итак, для выхода на максимальную производительность обмена устройства PCI сами должны быть ведущими устройствами шины, причем способными генерировать пакетные циклы. Поддержку пакетного режима имеют далеко не все устройства PCI, а у имеющих, как правило, есть существенные ограничения на максимальную длину пакета. Радикально повысить пропускную способность позволяет переход на частоту 66 МГц и разрядность 64 бита, что обходится недешево. Для того, чтобы на шине могли нормально работать устройства, критичные к времени доставки данных (сетевые адаптеры, устройства, участвующие в записи и воспроизведении аудио-видеоданных и др.), не следует пытаться выжать из шины ее декларированную полосу пропускания полностью. Перегрузка шины может привести, например, к потере пакетов из-за несвоевременности доставки данных. Заметим, что адаптер Fast Ethernet (100 Мбит/с) в полудуплексном режиме занимает полосу около 13 Мбайт/с (10 % декларируемой полосы обычной шины), а в полнодуплексном — уже 26 Мбайт/с. Адаптер Gigabit Ethernet даже в полудуплексном режиме вписывается в полосу шины уже с натяжкой (он «выживает» лишь за счет больших внутренних буферов), для него больше подходит 64 бит/66 МГц.
INTA#
, INTB#
, INTC#
или INTD#
. Этот сигнал должен удерживаться до тех пор, пока программный драйвер, вызванный по прерыванию, не сбросит запрос прерывания, обратившись по шине к данному устройству. Если после этого контроллер прерываний снова обнаруживает низкий уровень на линии запроса, это означает, что запрос на ту же линию ввело другое устройство, разделяющее данную линию с первым, и оно тоже требует обслуживания. Линии запросов от слотов PCI и PCI-устройств системной платы коммутируются на входы контроллеров прерываний относительно произвольно. Конфигурационное ПО может определить и указать занятые линии запросов и номер входа контроллера прерываний обращением к конфигурационному пространству устройства (см. п. 6.2.12). Программный драйвер, прочитав конфигурационные регистры, тоже может определить эти параметры для того, чтобы установить обработчик прерываний на нужный вектор и при обслуживании сбрасывать запрос с требуемой линии. К сожалению, в конфигурационных регистрах не нашлось стандартного места для бита, индицирующего введение запроса прерывания данным устройством, — тогда бы в прерываниях для PCI не было бы проблем с унификацией поддержки разделяемых прерываний.
Каждая функция устройства PCI может задействовать свою линию запроса прерывания, но должно быть готовым к ее разделению (совместному использованию) с другими устройствами. Если устройству требуется только одна линия запроса, то оно должно занимать линию INTA#
, если две — INTA#
и INTB#
, и так далее. С учетом циклического сдвига линий запроса это правило позволяет установить в 4 соседних слота 4 простых устройства, и каждое из них будет занимать отдельную линию запроса прерывания. Если какой-то карте требуется две линии, то для монопольного использования прерываний нужно оставить соседний слот свободным. PCI-устройства системной платы тоже задействуют прерывания с той же закономерностью (кроме контроллера IDE, который, к счастью, держится особняком).
Назначение прерываний устройствам (функциям) выполняет процедура POST, и этот процесс управляем лишь частично. Параметрами CMOS Setup (PCI/PNP Configuration) пользователь определяет номера запросов прерываний, доступных шине PCI. В зависимости от версии BIOS это может выглядеть по- разному; либо каждой линии INTA#
…INTD#
явно назначается свой номер, либо ряд номеров отдается «на откуп» устройствам PCI вместе с устройствами ISA PnP (в противоположность устройствам «Legacy ISA»). В итоге POST определяет соответствие линий INTA#
…INTD#
номерам запросов контроллера и соответствующим образом программирует коммутатор запросов. По воле пользователя может оказаться так, что не каждой линии запроса шины PCI достается отдельный вход контроллера прерываний. Тогда коммутатор организует объединение нескольких линий запросов PCI на один вход контроллера, то есть разделяемые прерывания. В самом худшем случае устройствам PCI не достанется ни одного входа контроллера прерываний. Заметим, что BIOS вряд ли отдаст шине PCI прерывания 14 и 15 (их забирает контроллер IDE, если он не отключен), а также 3 и 4 (СОМ-порты).
Драйвер (или иное ПО), работающий с устройством PCI, определяет вектор прерывания, доставшийся устройству (точнее, функции), чтением конфигурационного регистра Interrupt Line
. В этом регистре указывается номер входа контроллера прерывания (255 — номер не назначен), и по нему определяется вектор (см. п. 12.4). Номер входа каждому устройству заносит тест POST. Для этого он считывает регистр Interrupt Pin
каждой обнаруженной функции и по адресу устройства (!) определяет, какая из линий (PCI_1…PCI_4) используется. Заметим, что правила, по которым на системной плате определяется соответствие между Interrupt Pin
и входными линиями коммутатора запросов в зависимости от номера устройства, строго не регламентированы (деление номера устройства на 4 — это всего лишь рекомендация), но их твердо знает версия BIOS данной системной платы. К этому моменту тест POST уже определил таблицу соответствия этих линий номерам входов; пользуясь этой таблицей, он записывает нужное значение в конфигурационный регистр Interrupt Line
. Определить, есть ли еще претенденты на тот же номер прерывания, можно, лишь просмотрев конфигурационные регистры функций всех устройств, обнаруженных на шине (это не так уж сложно сделать, пользуясь функциями PCI BIOS). «Прелести» разделяемых прерываний обсуждаются в п. 12.4.1.
Спасением от бед «разделяемости» может быть перестановка карт в подходящий слот. Однако попадаются «подарки разработчиков» интегрированных плат, у которых из нескольких слотов PCI неразделяемая линия прерывания есть только у одного (а то и нет вообще). Такие недуги без скальпеля и паяльника, как правило, не лечатся.
На шине PCI имеется и иной механизм оповещения об асинхронных событиях, основанный на передаче сообщений (PCI Message-Based Interrupts). Для сигнализации запроса прерывания устройство запрашивает управление шиной и, получив его, выполняет запись номера прерывания по заранее оговоренному адресу.
Этот механизм может использоваться на системных платах, имеющих «продвинутый» контроллер прерываний APIC. Запись номера запроса производится в соответствующий регистр APIC. Для системных плат на чипсете с хабом ICH2 82801 этот регистр находится по адресу памяти FEC00020h, а номер прерывания может быть в диапазоне 0-23h. Однако одновременно оба механизма работать не могут; если разрешена работа APIC, то логика контроллеров 8259 не используется, и наоборот.
REQi#
и GNTi#
для заранее выбранного агента шины, являющегося «проводником» DMA. Этот агент имеет внешние (по отношению к шине PCI) пары сигналов DRQx#
и DACKx#
с логикой, аналогичной одноименным сигналам ISA (см. п. 6.1), а линии REQi#
и GNTi#
в процессе запроса управления шиной использует особым образом. Когда агент получает запрос DRQx
(один или несколько), он по линии REQi#
передает в последовательном коде номера активных линий запросов DRQx
, с синхронизацией по линии CLK
. В первом такте CLK
передается старт-бит — низкий уровень REQi#
, во втором — активность запроса DRQ0
, затем DRQ1
и так далее до DRQ7
, после чего сохраняется низкий уровень REQ#
. На это сообщение арбитр ответит по линии GNTi#
посылкой, также начинающейся со старт-бита, за которой последуют три бита кода номера канала, которому дается подтверждение DACK# для передачи данных в этой транзакции. Агент должен сообщать арбитру обо всех изменениях линий запроса, в том числе и о снятии сигналов запроса. Механизм PC/PCI DMA может быть реализован только в чипсете системной платы.
Параметр | 5 В | 3,3 В |
---|---|---|
Входное напряжение низкого уровня, В | –0,5<UIL<0,8 | –0,5<UIL≤0,3×VCC |
Входное напряжение высокого уровня, В | 2≤UIH≤VCC+0,5 | VCC/2≤UIH≤VCC+0,5 |
Выходное напряжение низкого уровня, В | UIL≤0,55 | UOL≤0,1×VCC |
Выходное напряжение высокого уровня, В | UOH≥0,8 | UOH≥0,9×VCC |
Напряжение питания VCC, В | 4,75≤UCC≤5,25 | 3,3≤UCC≤3,6 |
FRAME#
, TRDY#
, IRDY#
, DEVSEL#
, STOP#
, SERR#
, PERR#
, LOCK#
, INTA#
, INTB#
, INTC#
, INTD#
, REQ64#
и ACK64#
на системной плате подтягиваются к шине питания резисторами (типично 2,7 кОм для версии 5 В и 8,2 кОм для 3,3 В), чтобы не было ложных срабатываний при пассивности всех агентов шины.
Электрическая спецификация рассчитана на два предельных варианта нагрузки одной шины: 2 устройства PCI на системной плате плюс 4 слота или 4 устройства и 2 слота. При этом подразумевается, что одно устройство на каждую линию шины PCI дает только единичную КМОП-нагрузку. В слоты могут устанавливаться карты, тоже дающие только единичную нагрузку. На длину проводников, а также топологию расположения элементов и проводников на картах расширения накладываются жесткие ограничения. Из-за этого изготовление самодельных карт PCI на логических микросхемах средней степени интеграции становится проблематичным.
Слоты PCI представляют собой щелевые разъемы, имеющие контакты с шагом 0,05 дюйма. Слоты расположены несколько дальше от задней панели, чем ISA/EISA или MCA. Компоненты карт PCI расположены на левой поверхности плат. По этой причине крайний PCI-слот обычно совместно использует посадочное место адаптера (прорезь на задней стенке корпуса) с соседним ISA-слотом. Такой слот называют разделяемым (shared slot), в него может устанавливаться либо карта ISA, либо PCI.
Карты 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
:
♦ на слоте «5 В» на линии +V I/O
подается +5 В;
♦ на слоте «3,3 В» на линии +V I/O
подается +(3,3–3,6) В;
♦ на карте «5 В» буферные микросхемы рассчитаны только на питание +5 В;
♦ на карте «3,3 В» буферные микросхемы рассчитаны только на питание +(3,3–3,6) В;
♦ на универсальной карте буферные микросхемы допускают оба варианта питания и будут нормально формировать и воспринимать сигналы по спецификациям 5 или 3,3 В, в зависимости от типа слота, в который установлена карта.
На слотах обоих типов присутствуют питающие напряжения +3,3, +5, +12 и -12В на одноименных линиях. В PCI 2.2 определена дополнительная линия 3.3Vaux
— «дежурное» питание +3,3 В для устройств, формирующих сигнал РМЕ#
при отключенном основном питании.
На системных платах чаще всего встречаются 5-вольтовые 32-битные слоты, заканчивающиеся контактами А62/В62; 64-битные слоты встречаются реже, они длиннее и заканчиваются контактами А94/В94. Конструкция разъемов и протокол позволяют устанавливать 64-битные карты и в 32-битные разъемы, и наоборот, но при этом, естественно, обмен будет в 32-битном режиме.
Тактовая частота шины определяется по возможностям чипсета и всех абонентов шины. Высокая частота 66 МГц может устанавливаться тактовым генератором только при высоком уровне на линии M66EN
. Таким образом, установка любой карты, не поддерживающей 66 МГц (с заземленным контактом B49), приведет к понижению частоты, шины до 33 МГц. Серверные системные платы, на которых имеется несколько шин PCI, позволяют использовать на разных шинах разные частоты (66 и 33 МГц). Так, например, можно на 64-битных слотах использовать частоту 66 МГц, а на 32-битных — 33. Разгон нормальной частоты 33 МГц до 40–50 МГц аппаратно не контролируется, но может приводить к ошибкам работы карт расширения.
На рис. 6.8 изображена 32-битная карта максимального размера (Long Card), длина короткой платы (Short Card) — 175 мм, но многие карты имеют и меньшие размеры. Карта имеет обрамление (скобку), стандартное для конструктива ISA (раньше встречались карты и с обрамлением в стиле MCA IBM PS/2). Назначение выводов универсального разъема приведено в табл. 6.14.
Ряд В | № | Ряд A | Ряд В | № | Ряд A |
---|---|---|---|---|---|
-12В | 1 | TRST# | GND/M66EN¹ | 49 | AD9 |
TCK | 2 | +12В | GND/Ключ 5 В | 50 | GND/Ключ 5 В |
GND | 3 | TMS | GND/Ключ 5 В | 51 | GND/Ключ 5 В |
TDO | 4 | TDI | AD 8 | 52 | С/ВЕ0# |
+5 8 | 5 | +5 В | AD 7 | 53 | +3,3 В |
+5 В | 6 | INTA# | +3,38 | 54 | AD 6 |
INTB# | 7 | INTC# | AD 5 | 55 | AD 4 |
INTD# | 8 | +5 В | AD 3 | 56 | GND |
PRSNT1# | 9 | Резерв | GND | 57 | AD 2 |
Резерв | 10 | +V I/O | AD 1 | 58 | AD 0 |
PRSNT2# | 11 | Резерв | +V I/O | 59 | +V I/O |
GND/Ключ 3,3 | В 12 | GND/Ключ 3,3В | ACK64# | 60 | REQ64# |
GND/Ключ 3,3 В | 13 | GND/Ключ 3,3 В | +5 В | 61 | +5 В |
Резерв | 14 | 3.3Vaux² | +5 В | 62 | +5 В |
GND | 15 | RST# | Конец 32-битного разъема | ||
CLK | 16 | +V I/O | Резерв | 63 | |
GND | 17 | GNT# | GND | 64 | C/BE7# |
REQ# | 18 | GND | С/ВЕ6# | 65 | C/BE5# |
+V I/O | 19 | PME#² | С/BE4# | 66 | +V I/O |
AD 31 | 20 | AD 30 | GND | 67 | PAR64 |
AD 29 | 21 | +3,3 В | AD 63 | 68 | AD 62 |
GND | 22 | AD 28 | AD 61 | 69 | GND |
AD 27 | 23 | AD 26 | +V I/O | 70 | AD 60 |
AD 25 | 24 | GND | AD 59 | 71 | AD 58 |
+3,3 В | 25 | AD 24 | AD 57 | 72 | GND |
C/BE3# | 26 | IDSEL | GND | 73 | AD 56 |
AD 23 | 27 | +3,3 8 | AD 55 | 74 | AD 54 |
GND | 28 | AD 22 | AD 53 | 75 | +V I/O |
AD 21 | 29 | AD 20 | GND | 76 | AD 52 |
AD 19 | 30 | GND | AD 51 | 77 | AD 50 |
+3.3 В | 31 | AD 18 | AD 49 | 78 | GND |
AD 17 | 32 | AD 16 | +V I/O | 79 | AD 48 |
С/BE2# | 33 | +3,3 В | AD 47 | 80 | AD 46 |
GND | 34 | FRAME# | AD 45 | 81 | GND |
IRDY# | 35 | GND | GND | 82 | AD 44 |
+3,3 В | 36 | TRDY# | AD 43 | 83 | AD 42 |
DEVSEL# | 37 | GND | AD 41 | 84 | +V I/O |
GND | 38 | STOP# | GND | 85 | AD 40 |
LOCK# | 39 | +3,3 В | AD 39 | 86 | AD 38 |
PERR# | 40 | (SDONE#)³ | AD 37 | 87 | GND |
+3,3 В | 41 | (SBOFF#)³ | +V I/O | 88 | AD 36 |
SERR# | 42 | GND | AD 35 | 89 | AD 34 |
+3,3 В | 43 | PAR | AD 33 | 90 | GND |
C/BE1# | 44 | AD 15 | GND | 91 | AD 32 |
AD 14 | 45 | +3,3 В | Резерв | 92 | Резерв |
GND | 46 | AD 13 | Резерв | 93 | GND |
AD 12 | 47 | AD 11 | GND | 94 | Резерв |
AD 10 | 48 | GND | Конец 64-битного разъема |
TCK
, TDI
, TDO
, TMS
и TRST#
). На системной плате эти сигналы задействованы не всегда, но они могут и организовывать логическую цепочку тестируемых адаптеров, к которой можно подключить внешнее тестовое оборудование. Для непрерывности цепочки на карте, не использующей JTAG, должна быть связь TDI
-TDO
.
На некоторых старых системных платах позади одного из слотов PCI имеется разъем Media Bus, на который выводятся сигналы ISA. Он предназначен для размещения на графическом адаптере PCI звукового чипсета, предназначенного для шины ISA.
CLKRUN
, с помощью которого хост и устройства могут управлять частотой синхронизации в интересах энергосбережения. По размерам карта SPCI совпадает с PC Card и Card Bus, но специальные ключи предотвращают ошибки подключения. Для подключения карт SPCI на системной плате устанавливается двухрядный 108-контактный штырьковый разъем с шагом контактов 2 мм. Карта расширения может подключаться к нему непосредственно, но также может использоваться переходник с двусторонними ленточными контактами с шагом 0,8 мм. Шина SPCI является внутренней (карты расширения находятся под крышкой корпуса и устанавливаются изготовителем при выключенном питании) и поэтому не нацелена на замену Card BUS (шина для внешних подключений с возможностью горячей замены). Карты SPCI могут быть трех видов: с питанием 5 В, 3,3 В и универсальные 5/3,3 В. Благодаря уменьшению размеров (длины проводников) понижены требования к мощности сигналов. Карты SPCI позволяют использовать преимущества модульных решений (можно разгрузить системную плату), обеспечивая высокую производительность обмена (чего не обеспечивает Card Bus).
Mini PCI Specification — малогабаритный вариант карт PCI (2,75"×1,81"×0,22"). Логически и электрически соответствует PCI (32 бит), дополнительно используя сигнал CLKRUN
для снижения энергопотребления и без сигналов JTAG. Имеет дополнительные сигналы для аудио- и видеоприменений.
PCI–X — спецификация шины с высокой пропускной способностью, достигающей 1 Гбайт/с: тактовая частота 133 МГц и разрядность 64 бит. Разработана с учетом совместимости шины со старыми устройствами и новыми устройствами с обычной шиной PCI, для чего при наличии в системе хоть одного из «тихоходных» компонентов частота понижается до обычных 66 или 33 МГц. Кроме повышения тактовой частоты, имеются нововведения в протоколе шины (например, расщепленные транзакции), повышающие эффективность ее использования.
Для устройств промышленного назначения в начале 1995 года был принят стандарт Compact PCI. Шина Compact PCI (cPCI) разрабатывалась на основе спецификации PCI 2.1. Этот стандарт принят организацией производителей промышленных компьютеров PCIMG (PCI Industrial Computer Manufacturers Group). Шина отличается большим количеством поддерживаемых слотов: 8 против 4. Появились новые 4 пары сигналов запросов и предоставления управления шиной.
Шина поддерживает 32-битный и 64-битный обмен (с индивидуальным разрешением байт). При частоте шины 33 МГц максимальная пропускная способность составляет 133 Мбайт/с для 32 бит и 266 Мбайт/с для 64 бит (в середине пакетного цикла). Возможна работа на частоте 66 МГц. Шина поддерживает спецификацию PnP. Кроме того, в шине возможно применение географической адресации, при этом адрес модуля (на который он отзывается при программном обращении) определяется его положением в каркасе. Для этого на коннекторе J1 имеются контакты GA0…GA4, коммутацией которых на «землю» для каждого слота задается его двоичный адрес. Географическая адресация позволяет переставлять однотипные модули, не заботясь о конфигурировании их адресов (хорошая альтернатива системе PnP — модуль «встанет» всегда в одни и те же адреса, которые без физического вмешательства больше не изменятся). Конструктивно платы Compact PCI представляют собой еврокарты высотой 3U (100×160 мм) с одним коннектором (J1) или 6U (233×160 мм) с двумя коннекторами (J1 и J2). Коннекторы — 7-рядные штырьковые разъемы с шагом 2 мм между контактами, на кросс-плате — вилка, на модулях — розетки. Контакты коннекторов имеют разную длину: более длинные контакты цепей питания при установке модуля соединяются раньше, а при вынимании разъединяются позже, чем сигнальные. Такое решение позволяет производить «горячую» замену модулей. Собственно шина использует только один коннектор (J1), причем в 32-битном варианте не полностью — часть контактов может задействовать пользователь. 64-битная шина использует коннектор полностью. Одно посадочное место на кросс-плате резервируется под контроллер шины, на который возлагаются функции арбитража и синхронизации. На его коннекторе шиной используется большее число контактов, чем на остальных. У больших плат коннектор J2 предоставляется пользователю, а между коннекторами J1 и J2 может устанавливаться 95-контактный коннектор J3. Конструкция коннекторов позволяет для J2 применять специфические модификации (например, с разделяющим экраном и механическими ключами). В шине предусматривается наличие независимых источников питания +5 В, +3,3 В и ±12 В.
На базе шины Compact PCI фирмой National Instruments разработана спецификация PXI (PCI extensions for Instrumentation — расширение PCI для инструментальных систем) в тех же конструктивах. В шине PXI часть контактов, определенных в Compact PCI как свободные, предназначаются для дополнительных шин. Шина Trigger Bus (8 линий) звездообразно соединяет слот своего контроллера (первый после системного контроллера PCI) с остальными слотами. Шина позволяет осуществлять синхронизацию разных модулей, что зачастую требуется в измерительных системах. Для прецизионной синхронизации имеется сигнал опорной частоты 10 МГц PXI_CLK
, который звездообразно (с одинаковыми задержками распространения сигнала) разводится по слотам. В PXI определены локальные шины, предназначенные для связи соседних пар слотов. Каждая локальная шина имеет 13 линий, которые могут использоваться как для цифровых, так и аналоговых (до 48 В) сигналов. Локальные шины объединяют смежные слоты попарно (исключая слот системного контроллера), образуя цепочку. Кроме механических и электрических характеристик PXI определяет ПО модулей: основной ОС считается Windows NT/95, и модули должны поставляться с соответствующими драйверами. Это экономит время, необходимое для системной интеграции. Модули PXI совместимы с шиной Compact PCI, и модули Compact PCI — с шиной PXI. Однако все преимущества спецификации реализуются только при установке модулей PXI в шину PXI.
DEVSEL#
. Обращения, не востребованные абонентами PCI, могут быть перенаправлены, например, на шину ISA/EISA.
С мостами связаны понятия позитивного и субтрактивного декодирования адресов. Рядовые агенты PCI (устройства и мосты) отзываются только на обращения по адресам, принадлежащим областям, описанным в их конфигурационном пространстве (через базовые адреса и диапазоны памяти или ввода-вывода). Такой способ декодирования называется позитивным. Мост с позитивным декодированием (positive decoding) пропускает через себя только обращения, принадлежащие определенному списку, заданному в его конфигурационных регистрах. Мост с субтрактивным декодированием (subtractive decoding) пропускает через себя обращения, не относящиеся к другим устройствам. Его области прозрачности формируются вычитанием (откуда и название) из общего пространства областей, описанных списком. Возможность субтрактивного декодирования имеется только у мостов определенного типа, и она является дополнением к позитивному декодированию.
Позитивное и субтрактивное декодирование относится только к обращениям, направленным в пространства памяти и ввода-вывода. Конфигурационные обращения маршрутизируются с помощью номера шины, передаваемого в циклах типа 1 (см. п. 6.2.11): каждый мост «знает» номера всех шин, его окружающих.
На каждой шине PCI должно присутствовать центральное устройство, выполняющее следующие функции:
♦ централизованный арбитраж — прием сигналов запроса REQx#
от ведущих устройств шины и предоставление им права на управление шиной сигналами GNTx#
;
♦ «подтягивание» управляющих сигналов к высокому уровню;
♦ субтрактивное декодирование адресов;
♦ генерация конфигурационных и специальных циклов по командам процессора (с формированием индивидуальных сигналов IDSEL
к адресуемому устройству PCI);
♦ формирование сигнала REQ64#
в момент окончания сброса в качестве признака 64-битной шины (если она таковая).
Эти функции, как правило, возлагаются на мост, соединяющий данную шину с более высокими уровнями иерархии шин PCI. Кроме выполнения этих функций, обслуживающих конкретную шину, мосты решают задачи оптимизации передачи данных между подсистемами компьютера, и от качества решения этих задач существенно зависит общая производительность системы.
Одной из особенностей применения шины PCI с ее мостовыми соединениями является возможность действительно одновременного выполнения более одного обмена данными по непересекающимся путям — Concurrent PCI Transferring или PCI Concurrency. Например, во время взаимодействия процессора с памятью ведущее устройство шины PCI может обмениваться данными с другим устройством PCI. Этот пример одновременности обмена скорее теоретический, поскольку ведущее устройство шины PCI, как правило, обменивается данными с системной памятью. Более интересный случай — обмен графического адаптера, подключенного к порту AGP (родственнику PCI, см. п. 6.3), с памятью одновременно с обменом процессора с устройством PCI или, наоборот, загрузка данных процессором в графический адаптер одновременно с обменом между ведущим устройством шины PCI и системной памятью. Одновременность требует довольно сложной логики централизованного арбитража запросов всех агентов системы и различных ухищрений в буферизации данных. Одновременность реализуется не всеми чипсетами (в описаниях она всегда специально подчеркивается) и может быть запрещена настройками CMOS Setup.
Для экономии полосы пропускания шины (уменьшения числа бесполезно занятых тактов) при обращениях к устройствам медленных шин (например, ISA) мост может выполнять отложенные транзакции (delayed transaction). Работает этот механизм следующим образом. Инициатор, расположенный на «быстрой» шине (это может быть и главный мост), обращается к ЦУ на медленной шине, выставляя адрес и команду, а в командах записи еще и данные. Мост сохраняет эту информацию в своих внутренних регистрах и «от имени ЦУ» вводит сигнал STOP#
(прекращение типа «повтор»), что вынуждает инициатор быстро освободить шину. Тем временем мост выполняет транзакцию с настоящим ЦУ и сохраняет у себя результат ее выполнения (для команд чтения это будут данные). Инициатор, получивший ответ «повтор», вынужден снова начать точно ту же транзакцию, и теперь на нее мост быстро ответит истинным результатом, полученным от ЦУ. В то время как мост выполняет длительную операцию обмена с медленным устройством, быстрая шина остается свободной для обслуживания других инициаторов. Если по каким-либо причинам ведущее устройство «забудет» выполнить повтор транзакции, мост должен аннулировать полученные результаты. Аннулирование выполняется по таймеру (discard timer), отсчитывающему время от начала отложенной транзакции до ее повтора. Отложенные транзакции применимы к командам обращения к портам, конфигурационному пространству, подтверждению прерывания и к обычным обращениям к памяти.
Выделение специальных циклов чтения строк, множественного чтения и записи с инвалидацией позволяет контроллеру памяти предпринять определенные меры для оптимизации данных передач. Однако эти инструкции применяют только для обращений к памяти в «чистом виде» (имеющей свойство Prefetchable
). Когда инициатор обращается к источнику данных, отделенному мостом, командами чтения строки или множественного чтения, мост может считать из источника данных больше, чем инициатор заберет от него в данной транзакции. Однако в конце транзакции лишние данные в буфере моста проще всего аннулировать, поскольку до возможного последующего востребования в их реальном источнике они могут быть уже модифицированы. Более сложный мост может отслеживать и эти изменения, аннулируя лишь модифицированные данные. Обращения командами обычного чтения памяти разрешают мосту считать только точно затребованное количество данных. При этом возможности ускорения передач меньше, но не возникнет побочных эффектов от лишних чтений (чтение управляющих регистров, отображенных на память, может изменять их состояние).
Мосты, инициированные на одной стороне и обращающиеся к целевому устройству на другой стороне, могут выполнять задержку передачи записи в память (posted write). При этом данные принимаются в буферы моста, и для инициатора транзакция завершится раньше, чем данные дойдут до реального получателя. Мост начнет транзакцию их доставки в удобное для другой стороны время. Порядок и количество байт, переданных получателем, обязательно должны совпадать с соответствующими данными инициатора обмена. Кроме того, сохраняется очередность операций записи и чтения. Обращение по чтению через мост вызывает принудительное освобождение буферов отложенной записи. Таким образом, инициатор имеет возможность принудительно вызвать доставку задержанных данных записи, выполняя операцию чтения «из-за моста». Записи в порты ввода-вывода откладывать имеет право только главный мост, но только для транзакций, инициированных центральным процессором. Операции чтения, естественно, выполняются сразу, поскольку без получения данных они бессмысленны.
Мосты могут преобразовывать транслируемые ими транзакции записи в память с целью оптимизации пропускной способности шины. Так, несколько последовательных транзакций записи могут объединяться в одну пакетную, в которой лишние записи могут блокироваться с помощью сигналов разрешения байтов. Например, последовательность одиночных записей двойных слов по адресам 0, 4, Ch может быть скомбинирована (write combining) в один пакет с начальным адресом 0, а во время третьей фазы данных (когда предполагается не требуемый адрес 8) все сигналы С/BE[3:0]#
пассивны. Записи отдельных байтов в определенных случаях могут быть объединены (byte merging) в одну транзакцию. Так, например, последовательность записей байтов по адресам 3, 1, 0 и 2 может быть объединена в одну запись двойного слова, поскольку эти байты принадлежат одному адресуемому двойному слову. Комбинирование и объединение могут работать независимо (объединенные транзакции могут комбинироваться), однако эти преобразования не изменяют порядок следования физических записей в устройства. Наличие этих возможностей не обязательно — оно зависит от «ловкости» мостов. Цель преобразований — сократить число отдельных транзакций (каждая имеет по крайней мере одну «лишнюю» фазу адреса) и, по возможности, фаз данных. Устройства PCI должны нормально отрабатывать комбинирование записей — если устройство не допускает комбинирования, оно неправильно спроектировано. Если устройство не допускает объединения байтов, то оно в описании своей памяти должно иметь обнуленным бит Prefetchable
.
С мостами PCI связано понятие VGA Palette Snooping — слежение за записью в палитры VGA, являющееся исключением из правила однозначной маршрутизации обращений к памяти и вводу-выводу. Графическая карта в компьютере с шиной PCI обычно устанавливается в эту шину или в порт AGP, что логически эквивалентно установке в шину PCI. На VGA-карте имеются регистры палитр (Palette Registers), традиционно приписанные к пространству ввода-вывода. Если графическая система содержит еще и карту смешения сигналов графического адаптера с сигналом «живого видео», перехватывая двоичную информацию о цвете текущего пиксела по шине VESA Feature Connector (снимаемую до регистра палитр), цветовая гамма будет определяться регистром палитр, размещенным на этой дополнительной карте. Возникает ситуация, когда операция записи в регистр палитр должна отрабатываться одновременно и в графическом адаптере (на шине PCI или AGP), и в карте видеорасширения, которая может размещаться даже на другой шине (в том числе и ISA). В CMOS Setup может присутствовать параметр PCI VGA Palette Snoop
. При его включении запись в порты ввода-вывода по адресу регистра палитр будет вызывать транзакцию не только на той шине, на которой установлен графический адаптер, но и на других шинах. Чтение же по этим адресам будет выполняться только с самим графическим адаптером. Реализация может возлагаться на графическую карту PCI. Для этого она во время записи в регистр палитр фиксирует данные, но сигналы квитирования DEVSEL#
и TRDY#
не вырабатывает, в результате мост распространяет этот неопознанный запрос на шину ISA. В других реализациях мосту явно указывают на данное исключение, и он сам распространяет запись в регистры палитр на другие шины.
IDSEL
(единичное значение). Номер функции и адрес регистра декодируется самим устройством. Поскольку сигнал IDSEL
воспринимается устройством только в фазе адреса, для него используют позиционное кодирование в линиях старших битов шины AD
(конфигурационное пространство всех устройств занимает лишь малую часть пространства с 32-битной адресацией). На этих линиях в фазе адреса конфигурационного обращения может быть лишь один единичный бит, остальные — нулевые. Таким образом, только одно устройство будет выбрано сигналом IDSEL
.
Для работы механизма № 1 в пространстве ввода-вывода зарезервированы 32-битные порты с адресами 0CF8H и 0CFCh, входящие в главный мост. Для обращения к конфигурационному пространству в порт CONFIG_ADDRESS
(RW, адрес CF8h) заносят 32-разрядный адрес, декодируемый в соответствии с рис. 6.9, а. После занесения адреса обращением к порту CONFIG_DATA
(RW, адрес CFCh) можно прочитать или записать содержимое требуемого конфигурационного регистра. В регистре CONFIG_ADDRESS
бит 31 является разрешением формирования конфигурационных и специальных циклов. В зависимости от номера шины, указанного в этом регистре, главный мост генерирует конфигурационные циклы одного из двух типов.
Для обращения к устройству, находящемуся на нулевой шине (подключенной к главному мосту), используется цикл типа 0 (биты 1:0=00). Главный мост декодирует поле номера устройства в позиционный код, помещаемый на линии AD[31:11]
; номер адресуемой функции, адрес регистра и биты 1:0=00 передаются на шину прозрачно (рис. 6.9, б). Устройству 0 соответствует бит AD11, устройству 1 — AD12, устройству 20 — AD31. Поскольку нулевым устройством является главный мост, который и осуществляет декодирование, на шину единичное значение AD11 в цикле типа 0 не выводится. Устройства PCI, расположенные в микросхеме главного моста, могут использовать номера 21–31, для которых линий AD уже не хватает. На системной плате вход IDSEL
каждого слота или микросхемы PCI-устройства соединяется со своей линией адреса. Как правило, слоты подключаются, начиная с линии AD31 (и «вниз»), микросхемы устройств PCI, расположенные на системной плате, подключаются, начиная с AD12 (и «вверх»), но может быть и иной порядок. Цикл типа 0 игнорируется всеми другими мостами, подключенными к нулевой шине.
Для обращения к устройству, находящемуся на ненулевой шине, используется цикл типа 1. Здесь главный мост передает адресную часть регистра CONFIG_ADDRESS
на главную шину PCI, обнуляя старшие биты (31:24) и устанавливая в битах 1:0 признак типа «01» (рис. 6.9, в). Мост, опознавший номер подключаемой им шины, передает транзакцию на эту шину, декодируя поле номера устройства в позиционный код (как это делал главный мост для своей шины) и обнуляя биты AD[1:0]
.
CONFIG_ADDRESS
, б — формат адреса на шине в цикле типа 0, в — формат адреса на шине в цикле типа 1
Если конфигурационный цикл не воспринимается ни одним из устройств, мосты могут эту ситуацию отрабатывать двояко: фиксировать отсутствие устройства (сработает Master Abort) или же выполнять операции вхолостую. Однако в любом случае чтение конфигурационного регистра несуществующего устройства (функции) должно возвращать значение FFFFFFFFh (это будет безопасной информацией, поскольку даст недопустимое значение идентификатора устройства).
Если главный мост подключает несколько равноранговых шин (peer buses), то одна из них назначается условно главной, так что вышеописанная логика сохраняется. Чтобы не заботиться об изучении реальной топологии шин, для конфигурационных обращений программам удобно использовать вызовы PCI BIOS, которые имеются для всех режимов процессора (оптимизировать быстродействие здесь не приходится, поскольку эти обращения выполняются не так уж и часто).
Специальный цикл генерируется при записи в CONFIG_DATA
, когда в регистре CONFIG_ADDRESS
все биты [15:8] единичные, [7:0] нулевые, номер шины, на которой формируется цикл, задается битами [23:16]. В специальном цикле адресная информация не передается (он широковещательный), но путем задания номера шины можно управлять его распространением. Если хост генерирует специальный цикл с нулевым адресом шины, то на главную шину этот цикл выйдет как цикл типа 0 и всеми остальными мостами распространяться не будет. Если требуется полная широковещательность, то хост должен записать ненулевой адрес шины; тогда на главную шину специальный цикл выйдет с типом 1, и все остальные мосты пропустят его на свои шины. Специальный цикл, генерируемый ведущим устройством шины, действует только на шине этого устройства и не распространяется через мосты. Если требуется полная широковещательность, это ведущее устройство должно генерировать специальный цикл посредством записей в регистры CONFIG_ADDRESS
и CONFIG_DATA
, задавая ненулевой номер шины.
Для работы механизма № 2 в пространстве ввода-вывода зарезервированы два 8-битных порта с адресами 0CF8H и 0CFAh, входящие в главный мост. Этот механизм использует отображение конфигурационного пространства устройств PCI на область C000-CFFF пространства ввода-вывода. Поскольку этой области (4 К портов) недостаточно для отображения конфигурационного пространства всех устройств всех шин PCI, формирование адреса выполняется весьма замысловатым образом. В регистре CSE (Configuration Space Enable) с адресом 0CFSh биты 7:4 являются ключом разрешения отображения: при нулевом ключе область С000-CFFFh остается нормальной частью пространства ввода-вывода, а при ненулевом — отображается на конфигурационное пространство. Биты [3:1] несут номер функции, к пространству которой адресуются обращения. Единичное значение бита 1 вызывает формирование специального цикла (Special Cycle Enable, SCE). При обращении к конфигурационному пространству устройств нулевой шины чтение или запись двойного слова в порт по адресу C000-CFFCh генерирует конфигурационный цикл, в котором из адреса порта биты [2:7] поступают на шину AD[2:7] как индекс регистра конфигурационного пространства, а биты [11:8] декодируются в позиционный код выбора устройства (линии IDSEL
) на линиях AD[31:16]. Номер функции на линии AD[10:8] поступает из регистра CSE, линии AD[1:0] нулевые. Для обращения к устройствам ненулевой шины служит регистр перенаправления (Forward Register) с адресом 0CFAh, в который помещают номер шины (по сбросу этот регистр обнуляется). Если номер шины ненулевой, то генерируется цикл типа 1 (см. рис. 6.9, в), в котором номер функции поступает из регистра CSE, младшие 4 бита номера устройства поступают с битов адреса (AD15=0), а номер шины — из регистра перенаправления (биты AD[1:0]=01 и AD[31:24]=0 формируются аппаратно).
Для генерации специального цикла по этому механизму в регистре CSE устанавливается ненулевой ключ, номер функции 111 и SCE=1, после чего выполняется запись по адресу порта CF00h. В зависимости от содержимого регистра перенаправления будет сгенерирован специальный цикл типа 0 или типа 1 (см. выше).
IDSEL
и сообщают о потребностях в ресурсах и возможных вариантах конфигурирования. После распределения ресурсов, выполняемого программой конфигурирования (во время теста POST), в конфигурационные регистры устройства записываются параметры конфигурирования. Только после этого к устройствам становится возможным доступ по командам обращения к памяти и портам ввода-вывода. Для того чтобы всегда можно было найти работоспособную конфигурацию, все ресурсы, занимаемые картами, должны быть перемещаемыми в своих пространствах. Для многофункциональных карт каждая функция должна иметь собственное конфигурационное пространство.
Конфигурационное пространство устройства начинается со стандартного заголовка, в котором содержатся идентификаторы производителя, устройства и его класса, а также описание требуемых и занимаемых системных ресурсов. После заголовка могут располагаться регистры, специфичные для устройства; они могут занимать адреса конфигурационного пространства в пределах 40-FFh.
Формат заголовка приведен на рис. 6.10. Серым цветом здесь выделены поля, обязательные для всех устройств.
Deviсе ID
— идентификатор устройства, назначаемый производителем.
♦ Vendor ID
— идентификатор производителя микросхемы PCI, назначенный PCI SIG. Идентификатор FFFFh является недопустимым; это значение должно возвращаться при чтении конфигурационного пространства несуществующего устройства.
♦ Revision ID
— версия продукта, назначенная производителем. Используется как расширение поля Device ID
.
♦ Header Type
— тип заголовка (биты 6:0), определяющий формат ячеек в диапазоне 10-3Fh и несущий признак многофункционального устройства (если бит 7=1). На рисунке приведен формат заголовка типа 0, относящийся именно к устройствам PCI. Тип 01 относится к мостам PCI-PCI; тип 02 относится к мостам для CardBus.
♦ Class Code
— код класса, определяющий основную функцию устройства, а иногда и его программный интерфейс (см. п. 6.2.13). Старший байт (адрес 0Bh) определяет базовый класс, средний — подкласс, младший — программный интерфейс (если он стандартизован).
Остальные поля заголовка являются регистрами устройств, допускающими как запись, так и чтение.
♦ Command
(RW) — регистр команд, управляющий поведением устройства на шине PCI. Регистр допускает как запись, так и чтение. После аппаратного сброса все биты регистра (кроме специально оговоренных исключений) обнулены. Назначение бит регистра команд:
• бит 0 — IO Space
— разрешение ответа на обращения к пространству ввода-вывода;
• бит 1 — Memory Space
— разрешение ответа на обращения к пространству памяти;
• бит 2 — Bus Master
— разрешение работы инициатором (в режиме управления шиной);
• бит 3 — Special Cycles
— разрешение реакции на специальные циклы;
• бит 4 — Memory Write and Invalidate enable
— разрешение использовать команды «запись с инвалидацией» при работе инициатором (если бит обнулен, то вместо этих команд должна использоваться обычная запись в память);
• бит 5 — VGA palette snoop
— разрешение слежения за записью в регистр палитр;
• бит 6 — Parity Error Response
— разрешение нормальной реакции (вырабатывать сигнал PERR#
) на обнаруженную ошибку паритета (если бит обнулен, то устройство должно только фиксировать ошибку в регистре состояния, в то время как генерация бита паритета устройством выполняется всегда);
• бит 7 — Stepping Control
— возможность пошагового переключения (address/data stepping) линий (если устройство никогда этого не делает, бит регистра «запаян» в «0», если делает всегда — в «1», устройство с такой возможностью по сбросу устанавливает этот бит в «1»);
• бит 8 — SERR# Enable
— разрешение генерации сигнала ошибки SERR#
(ошибка паритета адреса сообщается, когда этот бит и бит 6=1);
• бит 9 — Fast Back-to-Back Enable
(необязательный) — разрешение ведущему устройству использовать быстрые смежные обращения к разным устройствам (если бит обнулен, быстрые обращения допустимы лишь для транзакций с одним агентом);
• биты 10–15 — резерв.
♦ Status
— регистр состояния, допускающий кроме чтения еще и запись. Однако запись выполняется специфично — с ее помощью можно только обнулять биты, но не устанавливать. Биты, помеченные как RO, допускают только считывание. При записи в позиции обнуляемых бит устанавливаются единичные значения. Назначение бит регистра состояния:
• биты 0–3 — резерв;
• бит 4 — Capability List
(RO, необязательный) — указание на наличие указателя новых возможностей (смещение 34h в заголовке);
• бит 5 — 66 MHz Capable
(RO, необязательный) — поддержка частоты 66 МГц;
• бит 6 — резерв;
• бит 7 — Fast Back-to-Back Capable
(RO, необязательный) — поддержка быстрых смежных транзакций (fast back-to-back) с разными устройствами;
• бит 8 — Master Data Parity Error
(только для устройств с прямым управлением) — устанавливается, когда устройство с установленным битом 6 в регистре команд, являясь инициатором, само ввело (при чтении) или обнаружило (при записи) сигнал PERR#
;
• биты 10:9 — DEVSEL Timing
— скорость выборки: 00 — быстрая, 01 — средняя, 10 — низкая (определяет самую медленную реакцию DEVSEL#
на все команды, кроме Configuration Read
и Configuration Write
);
• бит 11 — Signaled Target Abort
—устанавливается целевым устройством, когда оно отвергает транзакцию;
• бит 12 — Received Target Abort
— устанавливается инициатором, когда он обнаруживает отвергнутую транзакцию;
• бит 13 — Received Master Abort
— устанавливается ведущим устройством, когда оно отвергает транзакцию (кроме специального цикла);
• бит 14 — Signaled System Error
— устанавливается устройством, подавшим сигнал SERR#;
• бит 15 — Detected Parity Error
— устанавливается устройством, обнаружившим ошибку паритета.
♦ Cache Line Size
(RW) — размер строки кэша (0-128, допустимые значения 2n, иные трактуются как 0). По этому параметру инициатор определяет, какой командой чтения воспользоваться (обычное чтение, чтение строки или множественное чтение). Ведомое устройство использует этот параметр для поддержки пересечения границ строк при пакетных обращениях к памяти. По сбросу регистр обнуляется.
♦ Latency Timer
(RW) — значение таймера задержки (см. п. 6.2.4) в тактах шины. Часть битов может не допускать изменения (обычно младшие три бита неизменны, так что таймер программируется с дискретностью в 8 тактов).
♦ BIST
(RW) — регистр управления встроенным самотестированием. Назначение бит регистра:
• бит 7 — возможность BIST;
• бит 6 — запуск теста: запись единицы инициирует тест, по окончании устройство сбрасывает бит (тест должен быть завершен не более чем за 2 с);
• биты 5:4 — резерв (0);
• биты 3:0 — код завершения теста: 0 — тест прошел успешно.
♦ Card Bus CIS Pointer
(необязательный) — указатель на структуру описателя Card Bus для комбинированного устройства PCI+Card Bus.
♦ Interrupt Line
(RW) — номер входа контроллера прерывания для используемой линии запроса (0-15 — IRQ0-IRQ15, 255 — неизвестный или не используется).
♦ Interrupt Pin
(RO) — контакт, используемый для запроса прерывания: 0 — не используется, 1 — INTA#
, 2 — INTB#
, 3 — INTC#
, 4 — INTD#
, 5-FFh — резерв.
♦ Min_GNT
(RO) — минимальное время, на которое ведущему устройству должно предоставляться управление шиной из расчета на частоту 33 МГц, в интервалах по 0,25 мкс.
♦ Max_Lat
(RO) — максимально допустимая задержка предоставления ведущему устройству доступа к шине, в интервалах по 0,25 мкс (0 — нет специальных требований).
♦ Subsystem ID
(задается производителем) и Subsystem Vendor ID
(производитель получает в PCI SIG) — идентификаторы, позволяющие точно идентифицировать карты и устройства (в системе могут быть установлены несколько карт с совпадающими идентификаторами устройства и производителя Deviсе ID
и Vendor ID
). В поле 2Ch ставится идентификатор производителя карты PCI (может совпадать со значением в поле 0, если фирма выпускает и микросхемы, и карты).
♦ Capability Pointer
(CAP_PTR
) — указатель на список возможностей (свойств), описанных в конфигурационном пространстве (биты 1:0=00). Каждый элемент списка начинается с байта идентификатора типа элемента (CAP_ID
, определенного PCI SIG), за которым следует указатель на следующий элемент списка (нулевой указатель является признаком конца списка), после чего расположены байты описаний самих свойств. Все элементы выравниваются по границе двойного слова.
♦ Base Address Registers
— базовые адреса областей памяти и портов ввода-вывода. Для областей памяти бит 0=0. Биты 2:1 — тип: 00 — располагаются в 32-битном адресном пространстве, 10 — в 64-битном (в этом случае регистр расширяется следующим за ним 4-байтным словом), 01 и 11 — резерв (01 в прежних версиях предназначались для памяти в пределах первого мегабайта). Бит 3 (Prefetchable
) устанавливается, если чтение памяти не приводит к побочным эффектам, все байты считываются независимо от сигналов BE[3:0]#
и отдельные записи мостом могут быть объединены (то есть это память в чистом виде); в иных случаях бит обнулен. Биты 31:4 — базовый адрес памяти. Для портов бит 0=1; бит 1=0 (резерв); биты 31:2 — базовый адрес блока портов. Конфигурирующая программа может определить размеры требуемых областей. Для этого после аппаратного сброса она должна считать и сохранить значения базовых адресов (это будут адреса по умолчанию), записать в каждый регистр FFFFFFFFh и снова считать их значение. В полученных словах нужно обнулить биты декодирования типа (биты 3:0 для памяти и биты 1:0 для ввода-вывода), инвертировать и инкрементировать полученное 32-битное слово — результатом будет длина области (для портов биты 31:16 игнорировать). Метод подразумевает, что длина области выражается числом 2n и область выровнена естественным образом.
♦ Expansion ROM Base Address
— базовый адрес ПЗУ программной поддержки карты. Бит 0 — разрешение использования ПЗУ; биты 1-10 — резерв; биты 11–31 — базовый адрес. Размер ПЗУ определяется так же, как и в регистрах базовых адресов (см. выше). Обращение к ПЗУ возможно лишь при разрешенном использовании памяти (бит 1 в регистре команд).
Int 1Ah
. Номер функции задается при вызове в регистре АХ
. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик Int 1Ah
) с предварительным занесением в стек регистра флагов. Для 32-разрядных вызовов защищенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов, при этом назначение входных и выходных регистров и флага CF
сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Вызовы требуют глубокого стека (до 1024 байт).
Функции PCI BIOS:
♦ АХ
= B101h — проверка присутствия PCI BIOS;
♦ АХ
= B102h — поиск устройства по идентификатору;
♦ АХ
= B103h — поиск устройства по коду класса;
♦ АХ
= В106h — генерация специального цикла PCI;
♦ АХ
= B108, B109 и B10Ah — чтение байта, слова и двойного слова конфигурационного пространства устройства PCI;
♦ АХ
= Brahe, B10C, B10Dh — запись байта, слова и двойного слова конфигурационного пространства устройства PCI.
AD
.
Порт AGP предназначен только для интеллектуального графического адаптера, имеющего SD-ускоритель (для краткости здесь этот адаптер будем называть просто ускорителем). Системная логика порта AGP отличается сложным контроллером памяти, который выполняет глубокую буферизацию и высокопроизводительное обслуживание запросов AGP (от адаптера) и других своих клиентов — центрального процессора (одного или нескольких) и шины PCI. AGP может реализовать всю пропускную способность 64-битной системы памяти компьютера на процессорах Pentium и выше. При этом возможны конкурирующие обращения к памяти как со стороны процессора, так и со стороны мостов шин PCI. Фирма Intel ввела поддержку AGP в чипсеты для процессоров P6, однако нет «противопоказаний» для применения AGP и с Pentium.
Отметим, что многие преимущества AGP носят потенциальный характер и могут быть реализованы лишь при поддержке аппаратных средств графического адаптера и ПО. Графический адаптер с интерфейсом AGP может реально вести себя по-разному:
♦ не задействовать конвейеризацию, а использовать только быструю запись PCI (Fast Write);
♦ не работать с текстурами, расположенными в системной памяти, но использовать более быстрый обмен данными между памятью и локальным буфером;
♦ использовать оптимальное распределение текстур между локальной и систем ной памятью, избегая конфликтов с обращениями к памяти от процессора.
Порт AGP содержит практически полный набор сигналов шины PCI и дополнительные сигналы AGP. Устройство, подключаемое к порту AGP, может предназначаться как исключительно для операций AGP, так и быть комбинацией AGP+PCI. Устройство обязательно должно выполнять функции ведущего устройства AGP (иначе порт AGP для него теряет смысл) и функции ведомого устройства PCI со всеми его атрибутами (конфигурационными регистрами и т.п.); дополнительно оно может быть и ведущим устройством PCI. Для транзакций в режиме AGP ему доступно только системное ОЗУ. В режиме PCI обращения возможны как к пространству памяти, так и к пространству ввода-вывода и конфигурационному пространству.
Транзакции в режиме PCI, инициируемые ускорителем, начинаются с подачи сигнала FRAME#
и выполняются обычным для PCI способом (см. п. 6.2). Заметим, что при этом на все время транзакции шина AD занята, причем транзакции чтения памяти занимают шину на большее число тактов, чем транзакции записи, — после подачи адреса неизбежны такты ожидания на время доступа к памяти. Запись на шине происходит быстрее — данные записи задатчик посылает сразу за адресом, а на время доступа к памяти они «оседают» в буфере контроллера памяти. Контроллер памяти позволяет завершить транзакцию и освободить шину до физической записи в память. Обращения со стороны процессора (или задатчиков шины PCI) отрабатываются адаптером так же, как обычным устройством PCI.
Конвейерные транзакции AGP (команды AGP) инициируются только ускорителем; логикой AGP они ставятся в очереди на обслуживание и исполняются в зависимости от приоритета, порядка поступления запросов и готовности данных. Эти транзакции могут быть адресованы ускорителем только к системному ОЗУ. Если устройству AGP требуется обратиться к локальной памяти каких-либо устройств PCI, то оно должно выполнять эти транзакции в режиме PCI. Транзакции, адресованные к устройству AGP, отрабатываются им как ведомым устройством PCI, однако имеется возможность быстрой записи в локальную память FW (Fast Write), в которой данные передаются на скорости AGP (2х или 4х), и управление потоком их передач ближе к протоколу AGP, нежели PCI. Транзакции FW обычно инициируются процессором и предназначены для принудительного «заталкивания» данных в локальную память ускорителя.
Концепцию конвейера AGP иллюстрирует рис. 6.12. Порт AGP может находиться в одном из четырех состояний:
♦ IDLE — покой;
♦ DATA — передача данных конвейеризированных транзакций;
♦ AGP — постановка в очередь команды AGP;
♦ PCI — выполнение транзакции в режиме PCI.
PIPE#
или через порт SBA), ставящейся в очередь; несколько запросов могут следовать сразу друг за другом. В состояние DATA порт переходит, когда у него в очереди имеется необслуженная команда, готовая к исполнению. В этом состоянии происходит передача данных для команд, стоящих в очереди. Это состояние может прерываться запросами PCI (для выполнения целой транзакции) ил и AGP (для постановки в очередь новой команды), но прерывание возможно только на границах данных транзакций AGP. Когда порт AGP обслужит все команды, он снова переходит в состояние покоя. Все переходы происходят под управлением арбитра порта AGP, реагирующего на поступающие запросы (REQ# от ускорителя и внешние обращения от процессора или других устройств PCI) и ответы контроллера памяти.
Транзакции AGP некоторыми моментами отличаются от транзакций PCI.
♦ Фаза данных отделена от фазы адреса, чем и обеспечивается конвейеризация.
♦ Используется собственный набор команд.
♦ Транзакции адресуются только к системной памяти, используя то же пространство физических адресов, что и PCI. Транзакции могут иметь длину, кратную 8 байтам, и начинаться только по 8-байтной границе. Транзакции чтения иного размера должны выполняться только в режиме PCI; транзакции записи могут использовать сигналы С/BE[3:0]#
для маскирования лишних байтов.
♦ Длина транзакции явно указывается в запросе.
♦ Конвейерные запросы не гарантируют когерентность памяти и кэша. Для операций, требующих когерентности, должны использоваться транзакции PCI.
Возможны два способа подачи команд AGP (постановки запросов в очередь), из которых в текущей конфигурации выбирается один, причем изменение способа «на ходу» не допускается.
♦ Запросы вводятся по шине AD[31:0]
и С/BE[3:0]
с помощью сигнала PIPE#
, по каждому фронту CLK
ведущее устройство передает очередное двойное слово запроса вместе с кодом команды.
♦ Команды подаются через внеполосные (sideband) линии адреса SBA[7:0]
. «Внеполосность» означает, что эти сигналы используются независимо от занятости шины AD
. Синхронизация подачи запросов зависит от режима (1х, 2х или 4х).
При подаче команд по шине AD во время активности сигнала PIPE#
код команды AGP (CCCC) кодируется сигналами С/BE[3:0]
, при этом на шине AD
помещается начальный адрес (на AD[31:3]) и длина n (на AD[2:0]) запрашиваемого блока данных. Определены следующие команды:
♦ 0000 (Read) — чтение из памяти (n+1) учетверенных слов (по 8 байт) данных, начиная с указанного адреса;
♦ 0001 (HP Read) — чтение с высоким приоритетом;
♦ 0100 (Write) — запись в память;
♦ 0101 (HP Write) — запись с высоким приоритетом;
♦ 1000 (Long Read) — «длинное» чтение (n+1)×4 учетверенных слов (до 256 байт данных);
♦ 1001 (HP Long Read) — «длинное» чтение с высоким приоритетом;
♦ 1010 (Flush) — очистка, выгрузка данных всех предыдущих команд записи по адресам назначения (на порте AGP выглядит как чтение, возвращающее произвольное учетверенное слово в качестве подтверждения исполнения; адрес и длина, указанные в запросе, значения не имеют);
♦ 1100 (Fence) — установка «ограждений», позволяющих низкоприоритетному потоку записей не пропускать чтения;
♦ 1101 (Dual Address Cycle, DAC) — двухадресный цикл для 64-битной адресации: в первом такте по AD
передается младшая часть адреса и длина запроса, а во втором — старшая часть адреса (по AD
) и код исполняемой команды (по С/BE[3:0]
).
При внеполосной подаче команд по шине SBA[7:0] передаются 16-битные посылки четырех типов. Каждая посылка передается за два приема, по фронту и спаду синхросигнала. Тип посылки кодируется старшими битами:
♦ тип 1: 0ААА AAAA AAAA ALLL — поле длины (LLL) и младшие биты адреса (А[14:03]);
♦ тип 2: 10СС CCRA AAAA АААА — код команды (CCCC) и средние биты адреса (А[23:15]);
♦ тип 3: 110R AAAA АААА AAAA — старшие биты адреса (А [35:24]);
♦ тип 4: 1110 AAAA АААА AAAA — дополнительные старшие биты адреса, если требуется 64-битная адресация.
Посылка из всех единиц является пустой командой (NOP
); они посылаются в покое шины SBA. Биты «R» зарезервированы. Посылки типов 2, 3 и 4 являются «липкими» (sticky) — значения, ими определяемые, сохраняются до введения новой посылки того же типа. Постановку команды в очередь инициирует посылка типа 1, задающая длину транзакции и ее младшие адреса, — код команды и остальная часть адреса должны быть определены ранее введенными посылками типов 2–4. Такой способ очень экономно использует такты шины для подачи команд при пересылках массивов. Синхронизация данных на SBA зависит от режима порта.
♦ В режиме 1х каждая часть передается по фронту CLK; начало посылки (старшая часть) определяется по получению байта, отличного от 11111111b, по последующему фронту передается младшая часть. Очередная команда может вводиться за каждую пару тактов CLK (когда код команды и старший адрес уже введены).
♦ В режиме 2х для SBA используется отдельный строб SB_STB
, по его спаду передается старшая часть, а по последующему фронту — младшая. Частота этого строба (но не фаза) совпадает с CLK, так что очередная команда может вводиться в каждом такте CLK.
♦ В режиме 4х используется еще и дополнительный (инверсный) строб SB_STB#
. Старшая часть фиксируется по спаду SB_STB
, а младшая — по последующему спаду SB_STB#
. Частота стробов в два раза выше, чем CLK, так что в каждом такте CLK может вводиться пара команд.
Конечно, полный цикл введения команд (с посылками всех четырех типов) с учетом посылки NOP оказывается больше — 10, 5 и 2,5 тактов частоты CLK для режимов 1х, 2х и 4х соответственно.
В ответ на полученные команды порт AGP выполняет передачи данных, причем фаза данных AGP явно не привязана к фазе команды/адреса. Фазы данных вводит порт AGP (системная логика), исходя из порядка ранее пришедших к нему команд от ускорителя.
Передачи данных AGP выполняются, когда шина находится в состоянии DATA. Как говорилось выше, фаза данных AGP явно не привязана к фазе команды/адреса. Фазы данных вводит порт AGP (системная логика), исходя из порядка ранее пришедших к нему команд от ускорителя. Ускоритель узнает о назначении шины AD в последующей транзакции по сигналам ST[2:0]
(действительны только во время сигнала GNT#
, коды 100–110 зарезервированы):
♦ 000 — ведущему устройству будут передаваться данные низкоприоритетного запроса чтения, ранее поставленного в очередь (или выполняется очистка);
♦ 001 — ведущему устройству будут передаваться данные высокоприоритетного запроса чтения;
♦ 010 — ведущее устройство должно будет предоставлять данные низкоприоритетного запроса записи;
♦ 011 — ведущее устройство должно будет предоставлять данные высокоприоритетного запроса записи;
♦ 111 — ведущему устройству разрешается поставить в очередь команду AGP (сигналом PIPE#
) или начать транзакцию PCI (сигналом FRAME#
).
Ускоритель узнает лишь тип и приоритет команды, результаты которой последуют в данной транзакции. Какую именно команду из очереди отрабатывает порт, ускоритель определяет сам, так как именно он ставил их в очередь (ему известен порядок). Никаких тегов транзакций (как, например, в системной шине процессоров P6) в интерфейсе AGP нет. Имеется только 4 независимых очереди для каждого типа команд (чтение низкоприоритетное, чтение высокоприоритетное, запись низкоприоритетная, запись высокоприоритетная). Фазы исполнения команд разных очередей могут чередоваться произвольным образом; порт имеет право исполнять их в порядке, оптимальном с точки зрения производительности. Реальный порядок исполнения команд (чтения и записи памяти) тоже может изменяться. Однако для каждой очереди порядок выполнения всегда совпадает с порядком подачи команд (об этом знают и ускоритель, и порт).
Запросы AGP с высоким приоритетом для арбитра системной логики являются более приоритетными, чем запросы от центрального процессора и ведущих устройств шины PCI. Запросы AGP с низким приоритетом для арбитра имеют приоритет ниже, чем от процессора, но выше, чем от остальных ведущих устройств. Хотя принятый протокол никак явно не ограничивает глубину очередей, спецификация AGP формально ее ограничивает до 256 запросов. На этапе конфигурирования устройства система PnP устанавливает реальное ограничение (в конфигурационном регистре ускорителя) в соответствии с его возможностями и возможностями системной платы. Программы, работающие с ускорителем (исполняемые и локальным, и центральным процессорами), не должны допускать превышения числа необслуженных команд в очереди (у них для этого имеется вся необходимая информация).
При передаче данных AGP управляющие сигналы, заимствованные от PCI, имеют почти такое же назначение, что и в PCI. Передача данных AGP в режиме 1х очень похожа на циклы PCI, но немного упрощена процедура квитирования (поскольку это выделенный порт и обмен выполняется только с быстрым контроллером системной памяти). В режимах 2х и 4х имеется специфика стробирования.
♦ В режиме 1х данные (4 байта на AD[31:0]
) фиксируются получателем по положительному перепаду каждого такта CLK
, что обеспечивает пиковую пропускную способность 66,6×4 = 266 Мбайт/с.
♦ В режиме 2х используются стробы данных AD_STB0
и AD_STB1
для линий AD[0:15]
и AD[16:31]
соответственно. Стробы формируются источником данных, приемник фиксирует данные и по спаду, и по фронту строба. Частота стробов совпадает с частотой CLK
, что и обеспечивает пиковую пропускную способность 66,6×2×4 = 533 Мбайт/с.
♦ В режиме 4х используются еще и дополнительные (инверсные) стробы AD_STB0#
и AD_STB1#
. Данные фиксируются по спадам и прямых, и инверсных стробов. Частота стробов в два раза выше, чем CLK, что и обеспечивает пиковую пропускную способность 66,6×2×2×4 = 1066 Мбайт/с.
Порт AGP должен отслеживать состояние готовности буферов ускорителя к посылке или получению данных транзакций, поставленных в очередь. Сигналом RBF#
(Read Buffer Full) ускоритель может информировать порт о неготовности к приему данных низкоприоритетных транзакций чтения (к приему высокоприоритетных он должен быть всегда готов). Сигналом WBF#
(Write Buffer Full) он информирует о неспособности принять первую порцию данных быстрой записи (Fast Write, FW).
Конфигурирование устройств с интерфейсом AGP выполняется так же, как и обычных устройств PCI, — через обращения к регистрам конфигурационного пространства (см. п. 6.2.12). При этом AGP-устройства не требуют внешней линии IDSEL
— у них внутренний сигнал разрешения доступа к конфигурационным регистрам соединен с линией AD16, так что обращение к конфигурационным регистрам AGP обеспечивается при AD16
=1.
В процессе инициализации процедура POST только распределяет системные ресурсы, но операции AGP оставляет запрещенными. Работу AGP разрешает загруженная ОС, предварительно установив требуемые параметры AGP: режим обмена, поддержку быстрой записи, адресации свыше 4 Гбайт, способ подачи и допустимое число запросов. Для этого параметры устройств считываются из регистра состояния AGP, а согласованные параметры записываются в регистр команд AGP, расположенный в конфигурационном пространстве. Параметры настройки порта задаются через конфигурационные регистры чипсета системной платы (главного моста).
Регистр состояния AGP сообщает свойства порта: допустимое число запросов в очередях, поддержку внеполосной адресации, быстрой записи, адресации свыше 4 Гбайт, режимы 1х, 2х, 4х. В конфигурационном пространстве устройства AGP регистр, на который указывает CAP_PTR
, содержит CAP_ID
=02 (биты [7:0]) и номер версии спецификации AGP (биты [23:20] — старшая цифра, биты [19:16] — младшая).
Регистр состояния AGP (адрес CAP_PTR
+4) содержит следующие поля:
♦ биты [31:24] — RQ
, допустимое суммарное число запросов, находящихся в очередях: 0–1 команда, 255–256 команд;
♦ биты [23:10] — резерв (0);
♦ бит 9 — SBA
, поддержка внеполосной подачи команд;
♦ биты [8:6] — резерв (0);
♦ бит 5 — 4G
, поддержка адресации памяти свыше 4 Гбайт;
♦ бит 4 — FW
, поддержка быстрой записи;
♦ биты 3 — резерв (0);
♦ биты [2:0] — RATE
, поддерживаемые режимы обмена по AD и SBA: бит 0–1 x, бит 1 — 2х, бит 2 — 4х.
Регистр команд AGP служит для разрешения этих свойств. Регистр команд AGP (адрес CAP_PTR
+8) содержит следующие поля:
♦ биты [31:24] — RQ_DEPTH
, глубина очереди команд;
♦ биты [23:10] — резерв (0);
♦ бит 9 — SBA_ENABLE
, установка внеполосной подачи команд;
♦ бит 8 — AGP_ENABLE
, разрешение операций AGP;
♦ биты [7:6] — резерв (0);
♦ бит 5 — 4G
, разрешение адресации памяти свыше 4 Гбайт (двухадресных циклов и посылок 4-го типа по SBA);
♦ бит 4 — FW_Enable
, разрешение быстрой записи;
♦ биты 3 — резерв (0);
♦ биты [2:0] — DATA_RATE
, установка режима обмена: бит 0 — 1х, бит 1 — 2х, бит 2 — 4х (должен быть установлен лишь один бит).
Графический адаптер с интерфейсом AGP может быть встроен в системную плату, а может располагаться и на карте расширения, установленной в слот AGP. Внешне карты с портом AGP похожи на PCI (рис. 6.13), но у них используется разъем повышенной плотности с «двухэтажным» (как у EISA) расположением ламелей. Сам разъем находится дальше от задней кромки платы, чем разъем PCI.
RST#
и CLK
всегда равны 3,3 В). Снижение напряжения питания буферных схем позволяет повысить достижимую частоту переключений. Для режимов 1х и 2х может использоваться любой из номиналов питания буферов, для режима 4х — только 1,5 В. Для работы в режимах 2х и 4х приемникам требуется опорное напряжение Vref. Его номинал для 3,3 В составляет 0,4×Vddq, для 1,5 В — 0,5×Vddq. Опорное напряжение для приемников генерируется на стороне передатчиков. На контакт А66 (Vrefgc) графическое устройство подает сигнал для порта, на контакт B66 (Vrefcg) порт (чипсет) подает напряжение для устройства AGP.
По уровню питания буферов карты и порты AGP могут быть трех типов: 3,3 В, 1,5 В и универсальные, причем имеются механические ключи, предотвращающие ошибочные подключения. Слот и карта 3,3 В имеют ключи на месте контактов 22–25 (перегородка в слоте, см. рис. 6.13, а, вырез на разъеме карты); слот и карта 1,5 В — на месте контактов 42–45. Универсальный слот не имеет перегородок, а универсальная карта имеет оба выреза. Универсальная системная плата узнает о номинале питания буферов установленной карты по сигналу TYPEDET#
— на картах 3,3 В контакт свободен, на картах 1,5 В и универсальных — заземлен. Универсальная карта узнает о номинале питания буферов по уровню напряжения на контактах Vddq (3,3 или 1,5 В). Таким образом и обеспечивается согласование.
Назначение контактов слота AGP приведено в табл. 6.15, в позициях ключей через дробь указано назначение для карт 3,3/1,5 В. На универсальном слоте присутствуют все эти цепи, на универсальных картах все цепи, назначенные ключам, отсутствуют. Из-за двух ключей на универсальной карте теряется пара контактов для подачи питания VCC3.3
, и их остается только 4, что ограничивает потребляемый ток (допустимый ток для каждого контакта — 1 А). На универсальной карте также нет дополнительного питания 3,3Vaux, используемого для питания цепей формирования сигнала РМЕ#
в режиме «сна».
Ряд В | N | Ряд A | Ряд В | N | Ряд A |
---|---|---|---|---|---|
12V | 1 | OVRCNT# | Vddq | 34 | Vddq |
TYPEDET# | 2 | 5.0V | AD22 | 35 | AD21 |
Резерв | 3 | 5.0V | AD20 | 36 | AD19 |
USB- | 4 | USB+ | GND | 37 | GND |
GND | 5 | GND | AD18 | 38 | AD17 |
INTA# | 6 | INTB# | AD16 | 39 | C/BE2# |
RST# | 7 | CLK | Vddq | 40 | Vddq |
GNT# | 8 | REQ# | FRAME# | 41 | IRDY# |
VCC3.3 | 9 | VCC3.3 | Резерв/Ключ 1,5 В | 42 | 3,3Vaux/Ключ 1,5 В |
ST1 | 10 | ST0 | GND/Ключ 1,5B | 43 | GND/Ключ 1,5 В |
Резерв | 11 | ST2 | Резерв/Ключ 1,5 В | 44 | Резерв/Ключ 1,5 В |
PIPE# | 12 | RBF# | VCC3.3/Ключ 1,5В | 45 | VCC3.3/Ключ 1,5В |
GND | 13 | GND | TRDY# | 46 | DEVSEL# |
Резерв | 14 | Резерв | STOP# | 47 | Vddq3.3 |
SBA1 | 15 | SBA0 | РМЕ# | 48 | PERR# |
VCC3.3 | 16 | VCC3.3 | GND | 49 | GND |
SBA3 | 17 | SBA2 | PAR | 50 | SERR# |
SB_STB#¹ | 18 | SB_STB | AD15 | 51 | C/BE1# |
GND | 19 | GND | Vddq | 52 | Vddq |
SBA5 | 20 | SBA4 | AD13 | 53 | AD14 |
SBA7 | 21 | SBA6 | AD11 | 54 | AD12 |
Ключ 3,3 В/резерв | 22 | Ключ 3,3 В/резерв | GND | 55 | GND |
Ключ 3,3 B/GND | 23 | Ключ 3,3 B/GND | AD9 | 56 | AD10 |
Ключ 3,3 В/резерв | 24 | Ключ 3,3 B/3,3Vaux | C/BE0# | 57 | AD8 |
Ключ 3,3 B/VCC3.3 | 25 | Ключ 3,3 B/3,3Vaux | Vddq | 58 | Vddq |
AD30 | 26 | AD31 | AD_STB0#¹ | 59 | AD_STB0 |
АD28 | 27 | AD29 | AD6 | 60 | AD7 |
VCC3.3 | 28 | VCC3.3 | GND | 61 | GND |
AD26 | 29 | AD27 | AD4 | 62 | ADS |
AD24 | 30 | AD25 | AD2 | 63 | AD3 |
GND | 31 | GND | Vddq | 64 | Vddq |
AD_STB1#¹ | 32 | AD_STB1 | ADO | 65 | AD1 |
С/ВЕЗ# | 33 | AD23 | Vrefgc² | 66 | Vrefcg² |
OVRCNT#
, которым сообщается о перегрузке по току линии питания +5 В, выводимой в монитор).
Сигнал РМЕ#
относится к интерфейсу управления энергопотреблением (Power Management Interface). При наличии дополнительного питания 3,3Vaux
этим сигналом карта может инициировать «пробуждение».
Спецификация AGP Pro описывает более мощный коннектор, позволяющий в 4 раза повысить мощность, подводимую к графической карте. При этом сохраняется односторонняя совместимость: карты AGP могут устанавливаться в слот AGP Pro, но не наоборот. Коннектор AGP Pro имеет дополнительные контакты с обеих сторон обычного коннектора AGP (рис. 6.14) для линий GND и питания 3,3 и 12 В, назначение этих контактов приведено в табл. 6.16. Для правильной установки обычной карты со стороны задней кромки системной платы дополнительная часть слота AGP Pro закрывается съемной пластмассовой заглушкой. Карта AGP Pro может также использовать 1–2 соседних слота PCI: чисто механически (как точки опоры и место), как дополнительные коннекторы для подачи питания, как функциональные коннекторы PCI.
Ряд D | Контакт | Ряд C |
---|---|---|
VCC3.3 | 1 | VCC3.3 |
VCC3.3 | 2 | GND |
VCC3.3 | 3 | VCC3.3 |
VCC3.3 | 4 | GND |
VCC3.3 | 5 | GND |
VCC3.3 | 6 | GND |
VCC3.3 | 7 | GND |
VCC3.3 | 8 | GND |
PRSNT2# | 9 | Резерв |
PRSNT1# | 10 | Резерв |
Ряд E | Контакт | Ряд F |
Резерв | 1 | Резерв |
Резерв | 2 | Резерв |
GND | 3 | VCC12 |
GND | 4 | VCC12 |
GND | 5 | VCC12 |
GND | 6 | VCC12 |
GND | 7 | VCC12 |
GND | 8 | VCC12 |
GND | 9 | VCC12 |
GND | 10 | VCC12 |
GND | 11 | VCC12 |
GND | 12 | VCC12 |
GND | 13 | VCC12 |
GND | 14 | VCC12 |
PRSNT1#
служит признаком наличия карты (контакт заземлен), a PRSNT2#
— признаком потребляемой мощности (до 50 Вт — контакт свободен, до 110 Вт — заземлен).
В спецификации AGP8X предполагаются следующие основные отличия:
♦ введен новый режим передачи по шинам AD и SBA — 8х, обеспечивающий пиковую производительность 2,132 Гбайт/с;
♦ исключены команды длинного чтения и записи;
♦ исключены команды высокого приоритета (и упразднены сами понятия низ кого и высокого приоритета);
♦ исключена возможность подачи команд с помощью сигнала РIРЕ#
;
♦ предпринимаются меры по обеспечению когерентности при обращениях к памяти, не лежащей в области GART;
♦ несколько изменены протоколы передачи данных, применяется динамическое инвертирование шины данных для минимизации переключений.
Дополнительно предполагается введение поддержки изохронных передач; возможность установки нескольких портов AGP; возможность поддержки разных размеров страниц, описанных в GART; обеспечение когерентности при обращениях к определенным страницам.
LAD[3:0]
— двунаправленная мультиплексированная шина данных;
♦ LFRAME#
— индикатор начала и конца цикла, управляемый хостом;
♦ LRESET#
— сигнал сброса, тот же, что и RST#
на шине PCI;
♦ LCLK
— синхронизация (33 Мгц), тот же сигнал, что и CLK
на шине PCI;
Дополнительные сигналы интерфейса LPC:
♦ LDRQ#
— кодированный запрос DMA/Bus Master от периферии;
♦ SERIRQ
— линия запросов прерывания (в последовательном коде), используется, если нет стандартных линий запросов IRQ в стиле ISA;
♦ CLKRUN#
— сигнал, используемый для указания на остановку шины (в мобильных системах), требуется только для устройств, нуждающихся в DMA/BusMaster в системах, способных останавливать шину PCI;
♦ РМЕ#
— событие системы управления потреблением (Power Management Event), может вводиться периферией, как и в PCI;
♦ LPCPD#
— Power Down, указание от хоста устройствам на подготовку к выключению питания;
♦ LSMI#
— запрос прерывания SMI#
для повтора инструкции ввода-вывода.
Сигналы LFRAME#
и LAD[3:0]
синхронизированы (являются действительными) по фронту LCLK
. По шине LAD[3:0]
в каждом такте цикла передаются поля элементов протокола. Обобщенная временная диаграмма цикла обмена по LPC приведена на рис. 6.15. Начало каждого цикла хост отмечает сигналом LFRAME#
, помещая на шину LAD[3:0]
поле START
. По сигналу LFRAME#
все ПУ должны прекратить управление шиной LAD[3:0]
, а по коду поля START
они должны декодировать последующие события как цикл шины. В следующем такте хост снимет сигнал LFRAME#
и поместит на шину LAD[3:0]
код типа цикла CYCTYPE
. Сигнал LFRAME#
может длиться и более одного такта, но признаком начала цикла (поля START
) является последний такт перед снятием сигнала. С помощью сигнала LFRAME#
хост может принудительно прервать цикл (например, по ошибке тайм-аута), выставив соответствующий код.
START
возможны следующие коды:
♦ 0000 — начало цикла обращения хоста к устройству;
♦ 0010 — предоставление доступа ведущему устройству 0;
♦ 0011 — предоставление доступа ведущему устройству 1;
♦ 1111 — принудительное завершение цикла (abort).
Остальные коды зарезервированы.
Поле CYCTYPE
задает тип и направление передачи. Бит 0 задает направление (0 — чтение, 1 — запись), биты [2:1] — тип обращения (00 — порт, 01 — память, 10 — DMA, 11 — резерв), бит 3 — резерв (0).
Поле TAR
(Turn-Around) служит для смены «владельца» шины LAD[3:0]
, оно занимает 2 такта. В первом такте прежний владелец помещает код 1111, во втором переводит буферы в третье состояние.
Поле ADDR
служит для передачи адреса. В цикле памяти оно занимает 8 тактов (32 бита), в цикле ввода-вывода — 4 такта. Передача адреса начинается со старших битов (чтобы раньше срабатывал дешифратор адреса).
В поле DATA
передаются данные. На каждый байт требуется 2 такта, передача начинается с младшей тетрады. Многобайтные передачи начинаются с младшего байта.
Поле SYNC
служит для введения тактов ожидания устройством, к которому выполняется обращение. Оно может содержать следующие коды (остальные зарезервированы):
♦ 0000 — готовность (без ошибок), для DMA означает снятие запроса для данного канала;
♦ 0101 — короткое ожидание (несколько тактов);
♦ 0110 — длинное ожидание;
♦ 1001 — готовность и присутствие запроса для канала DMA (для других типов обращения недопустимо);
♦ 1010 — ошибка: данные переданы, но возникли условия, при которых на шинах PCI или ISA выработался бы сигнал SERR#
или IOCHK#
(для DMA также означает снятие сигнала запроса).
Поле синхронизации обеспечивает контроль передачи, введение тактов ожидания и механизм тайм-аутов. Начав цикл, хост читает поле синхронизации. Если в течение трех тактов адресованное устройство не ответит, хост считает, что его нет на шине, и прекращает транзакцию. Если приходит код короткого ожидания, хост дожидается его смены на готовность или ошибку, но после 8 тактов ожидания он прервет транзакцию по тайм-ауту. Код длинного ожидания может приходить сколь угодно долго, ответственность за отсутствие зависания ложится на адресованное устройство. При прямом управлении поле SYNC
выставляется хостом, и устройство должно терпеливо ожидать готовности, без каких-либо тайм-аутов. В самом быстром варианте (без тактов ожидания) поле SYNC
занимает один такт.
На рис. 6.16 приведена последовательность полей при обращениях хоста к памяти или портам (серым цветом помечены поля, вводимые устройством). Во всех этих обращениях передается по одному байту. Для чтения памяти, предполагая 5 тактов поля SYNC
(время доступа к EPROM 120 нс), требуется 21 такт (0,63 мкс), что обеспечивает скорость чтения памяти 1,59 Мбайт/с. Если память конвейеризирована, то последующие обращения будут быстрее. Для записи в память поле SYNC
займет 1 такт, а весь цикл — 17 тактов (0,51 мкс), что дает скорость записи 1,96 Мбайт/с. Обращения к портам за счет более короткой адресации и без тактов ожидания (1 такт SYNC) занимают по 13 тактов (0,39 мкс), что дает скорость 2,56 Мбайт/с для чтения и записи.
LDRQ#
для каждого подключенного устройства, использующего эти функции. По этой линии устройство передает состояние запросов каналов DMA в последовательном коде, как показано на рис. 6.17. Посылка начинается со старт-бита, за которой следуют код номера канала и бит запроса ACT: 1 (высокий уровень) — запрос активен, 0 — пассивен. Номер канала 4 (код 100) зарезервирован для прямого управления (он соответствует традиционно недоступному каналу DMA). Посылка передается при каждой смене состояния запросов. Нормально таким способом передается лишь запрос, а снятие его сигнализируется полем SYNC
.
SIZE
определяет размер передачи: 0000 — 1 байт, 0001 — 2 байта, 0011 — 4 байта, остальные значения зарезервированы;
♦ поле CHANNEL
служит для передачи хостом номера канала DMA (биты [2;0]) и признака конца цикла (TC, бит 3).
START
задает номер мастера, который позже определит тип цикла (рис. 6.19). Прямое управление подразумевает обращение к ресурсам хоста (системной памяти, устройству PCI). Данные в 2- и 4-байтных передачах следуют друг за другом без зазора, но в циклах чтения памяти и портов всегда будут такты ожидания, поскольку потребуется время на арбитраж шины PCI или доступ к контроллеру памяти. Из расчета 6 тактов (меньше — вряд ли, возможно и больше) поля SYNC
, циклы обращения к памяти (и чтения, и записи) потребуют 25, 27 или 31 такт (0,75, 0,81 или 0,93 мкс), что обеспечивает производительность 1,33, 2,47 или 4,30 Мбайт/с. За счет более короткой адресации обращение к портам быстрее — 21, 23 или 27 тактов (0,63, 0,69 или 0,81 мкс), что обеспечивает производительность 1,59, 2,90 или 4,94 Мбайт/с.
LAD[3:0]
, LFRAME#
, LDRQ#
и SERIRQ
соответствует спецификации PCI 2.1 для питания 3,3 В. Остальные сигналы в зависимости от системной платы могут быть с уровнями как 5 В, так и 3,3 В.
Конфигурирование устройств LPC не предусматривает использования протоколов PCI или ISA PnP, поскольку все устройства LPC априорно известны системной BIOS. Для обращения к устройствам LPC хост должен декодировать их адреса и направлять обращения по ним на контроллер LPC.
PC Card | Small PC Card | |
---|---|---|
Длина | 85,6 | 45,0 |
Ширина | 54,0 | 42,8 |
Высота | 3,3/5,0/10,5 | 3,3/5,0/10,5 |
Коннектор | Штырьковый | Штырьковый |
Число контактов | 68 | 68 |
Интерфейсы | Память, ввод-вывод, CardBus | Память, ввод-вывод |
№ | Тип интерфейса | № | Тип интерфейса | ||||
---|---|---|---|---|---|---|---|
16 бит | 32 бита | 16 бит | 32 бита | ||||
Mem | I/O+Mem | CardBus | Mem | I/O+Mem | CardBus | ||
1 | GND | GND | GND | 35 | GND | GND | GND |
2 | D3 | D3 | CAD0 | 36 | CD1# | CD1# | CCD1# |
3 | D4 | D4 | CAD1 | 37 | D11 | D11 | CAD2 |
4 | D5 | D5 | CAD3 | 38 | D12 | D12 | CAD4 |
5 | D6 | D6 | CAD5 | 39 | D13 | D13 | CAD6 |
6 | D7 | D7 | CAD7 | 40 | D14 | D14 | Резерв |
7 | СЕ1# | CE1# | CCBE0# | 41 | D15 | D15 | CAD8 |
8 | А10 | A10 | CAD9 | 42 | CE2# | CE2# | CAD10 |
9 | ОЕ# | OE# | CAD11 | 43 | VS1# | VS1# | CVS1 |
10 | А11 | A11 | CAD12 | 44 | Резерв | IORD# | CAD13 |
11 | А9 | A9 | CAD14 | 45 | Резерв | IOWR# | CAD15 |
12 | А8 | A8 | CCBE1# | 46 | A17 | A17 | CAD16 |
13 | А13 | A13 | CPAR | 47 | A18 | A18 | Резерв |
14 | А14 | A14 | CPERR# | 48 | A19 | A19 | CBLOCK# |
15 | WE# | WE# | CGNT# | 49 | A20 | A20 | CSTOP# |
16 | READY | IREQ# | CINT# | 50 | A21 | A21 | CDEVSEL# |
17 | Vcc | Vcc | Vcc | 51 | Vcc | Vcc | Vcc |
18 | Vpp1 | Vpp1 | Vpp1 | 52 | Vpp2 | Vpp2 | Vpp2 |
19 | A16 | A16 | CCLK | 53 | A22 | A22 | CTRDY# |
20 | A15 | A15 | CIRDY# | 54 | A23 | A23 | CFRAME# |
21 | A12 | A12 | CCBE2# | 55 | A24 | A24 | CAD17 |
22 | A7 | A7 | CAD 18 | 56 | A25 | A25 | CAD19 |
23 | A6 | A6 | CAD20 | 57 | VS2# | VS2# | CVS2 |
24 | A5 | A5 | CAD21 | 58 | RESET | RESET | CRST# |
25 | A4 | A4 | CAD22 | 59 | WAIT# | WAIT# | CSERR# |
26 | A3 | A3 | CAD23 | 60 | Резерв | INPACK# | CREQ# |
27 | A2 | A2 | CAD24 | 61 | REG# | REG# | CCBE3# |
28 | A1 | A1 | CAD25 | 62 | BVD2 | SPKR# | CAUDIO |
29 | А0 | А0 | CAD26 | 63 | BVD1 | STSCHG# | CSTSCHG |
30 | D0 | D0 | CAD27 | 64 | D8 | D8 | CAD28 |
31 | D1 | D1 | CAD29 | 65 | D9 | D9 | CAD30 |
32 | D2 | D2 | Резерв | 66 | D10 | D10 | CAD31 |
33 | WP | IOIS16# | CCLKRUN# | 67 | CD2# | CD2# | CCD2# |
34 | GND | GND | GND | 68 | GND | GND | GND |
Сигнал | I/O | Назначение |
---|---|---|
А[10:0] | I | Линии шины адреса |
BVD1, BVD2 | I/O | Battery Volt Detection — идентификаторы батарейного питания |
STSCHG# | I/O | (IO) Сигнализация хосту о смене состояния RDY/BSY# и Write Protect. Использование этого сигнала контролируется регистром управления и состояния карты Card Config and Status Register (IO) |
SPKR# | O | (IO) Дискретный аудиовыход (на динамик) |
CD1#, CD2# | O | Card Detect — сигналы обнаружения (заземлены на карте), по которым хост определяет, что карта полностью вставлена в слот |
СЕ1#, СЕ2# | I | (IO, Mem) Card Enable — выбор (разрешение) карты и определение разрядности передачи. Сигнал СЕ2# всегда относится к нечетному байту, СЕ1 # — к четному или нечетному, в зависимости от А0 и СЕ2#. С помощью этих сигналов 8-битный хост может обмениваться с 16-битными картами по линиям D[7:0] |
D[15:0] | I/O | Шина данных (у 8-битных сигналы D[15:8] отсутствуют) |
INPACK# | O | (IO) Input Acknowledge — подтверждение ввода, ответ карты на сигнал IORD# (по этому сигналу хост открывает свои буферы данных) |
IORD# | I | Строб команды чтения портов |
IOWR# | I | Строб команды записи портов (данные должны фиксироваться по положительному перепаду) |
OE# | I | Чтение данных из памяти, конфигурационных регистров и CIS |
RDY/BSY# | I | Готовность карты к обмену данными (при высоком уровне) |
IREQ# | O | Запрос прерывания (низким уровнем) |
INTRQ | O | Запрос прерывания (высоким уровнем) |
REG# | I | Выбор памяти атрибутов (Mem). Для карт IO сигнал должен быть активен в циклах команд ввода-вывода. В режиме IDE пассивен (соединен с Vcc на стороне хоста) |
RESET | I | Сброс (высоким уровнем) |
VS1#, VS2# | O | Voltage Sense — сигналы определения номинала питания. Заземленный сигнал VS1# означает способность чтения карты при питании 3,3 В |
WAIT# | O | Запрос (низким уровнем) на продление цикла обращения |
WE# | I | Строб записи в память и конфигурационные регистры (в IDE не используется, соединяется хостом с Vcc) |
WP | O | Write Protect — защита от записи (для карт памяти), запись в память возможна при низком уровне |
IOCS16# | O | Разрешение 16-битного обмена |
СЕ#
, действующими одновременно с установленным адресом. Чтение памяти и конфигурационных регистров выполняется по сигналу ОЕ#
, запись — по сигналу WE#
. Признаком, разделяющим в этих обращениях основную память и конфигурационные регистры, принадлежащие области памяти атрибутов карты, является сигнал REG#
, действующий одновременно с СЕ#
и адресом. Для обращения к портам ввода-вывода служат отдельные сигналы IORD#
и IOWR#
; во время их действия должен быть активен и сигнал REG#
. В процессе обращения к портам карта может выдать признак возможности 16-битных обращений сигналом IOSC16#
(как на шине ISA). Чтение порта устройство должно подтверждать сигналом INPACK#
, устанавливаемым и снимаемым картой по сигналу СЕ#
. Благодаря этому сигналу хост может убедиться в том, что он читает не пустой слот.
Слоты PC Card могут предоставлять возможность прямого доступа к памяти (DMA). Реализация DMA — самый дешевый способ разгрузки процессора, но такая реализация имеется не на всех хостах, а только на простых, основанных на шине ISA. Для систем с шиной PCI более естественно прямое управление шиной CardBus, правда, для карт реализация прямого управления обходится не дешево.
Для мультимедийных карт имеется возможность переключения интерфейса в специальный режим ZVPort (Zoomed Video), в котором организуется отдельный двухточечный интерфейс передачи данных между картой и хост-системой. По смыслу интерфейс напоминает коннектор VFC графических карт — выделенная шина для передачи видеоданных, не связанная с остальными шинами (и не загружающая их), но имеет иной протокол. В режиме ZV Port адресные линии А[25:4]
, а также линии BVD2/SPKR#
, INPACK#
и I0IS16#
получают иное назначение — по ним передаются видеоданные и 4 цифровых аудиоканала. Для обычного интерфейса остаются лишь 4 адресные линии, позволяющие адресоваться к 16 байтам общей памяти и атрибутов карты.
Интерфейс порта ZV соответствует временным диаграммам CCIR601, что позволяет декодеру NTSC в реальном времени доставлять видеоданные с карты в экранный буфер VGA. Видеоданные могут поступать на карту как с внешнего видеовхода, так и с декодера MPEG.
Карты имеют специальное выделенное пространство памяти атрибутов, в котором находятся конфигурационные и управляющие регистры карты, предназначенные для автоконфигурирования. Стандартом описан формат информационной структуры карты (Card Information Structure, CIS). Карты могут быть многофункциональными (например, комбинация модема и сетевого адаптера). В спецификации MFPC (Multiple Function PC Cards) для каждой функции предусматриваются отдельные конфигурационные регистры и определяются правила разделения (совместного использования) линии запроса прерывания.
Для устройств внешней памяти стандарт описывает форматы хранения данных, совместимые с FAT MS-DOS, а также ориентированные на флэш-память как основной носитель информации. Для непосредственного исполнения модулей ПО, хранящихся в ПЗУ карты, имеется спецификация XIP (eXecute In Place), описывающая программный интерфейс вызова этих модулей (вместо загрузки ПО в ОЗУ).
Стандарт описывает программный интерфейс сервисов карт (Card Services), обеспечивающий унификацию взаимодействия его клиентов (драйверов, прикладного ПО и утилит) с устройствами. Имеется также и интерфейс сервисов сокета (Socket Services), с помощью которого выполняются операции, связанные с обнаружением фактов подключения-отключения карт, их идентификации, конфигурирования питания и аппаратного интерфейса.
В стандарте имеются описания специфических особенностей, свойственных двум организациям, ведущим стандарт PC Card.
♦ PCMCIA описывает автоиндексируемую массовую память (AIMS) для хранения больших массивов данных (изображений, мультимедийных данных) на блочно-ориентированных устройствах. Имеется также спецификация 15-контактного экранированного разъема для подключения модемов и адаптеров локальной сети (15-pin Shielded Modem I/O connector) и 7-контактного для подключения модемов (7-pin Modem I/O connector).
♦ JEDIA для карт памяти предлагает формат файлов Small Block Flash Format, упрощающий файловую систему. Формат SISRIF (Still Image, Sound and Related Information Format) предназначен для записи изображений и звука на карты памяти. Имеется и спецификация для карт динамической памяти.
Большинство адаптеров выпускается с поддержкой технологии PnP и предусматривает «горячее» подключение — интерфейсные карты могут вставляться и выниматься без выключения компьютера. Для этого контакты шин питания имеют большую длину, чем сигнальные, обеспечивая их упреждающее подключение и запаздывающее отключение. Два контакта обнаружения карты CD1#
и CD2#
(Card Detect) короче остальных — их замыкание для хоста означает, что карта полностью вставлена в слот. Несмотря на возможность динамического конфигурирования, в некоторых случаях при изменении конфигурации требуется перезагрузка системы.
Первоначально карты и хост-системы использовали напряжение питания логики +5 В. Для перехода на низковольтное питание (3,3 В) был введен механический ключ, не допускающий установки карты на 3,3 В в слот, дающий только 5 В. Кроме того, были определены контакты 43 (VS1#
) и 57 (VS2#
) для выбора питающего напряжения. На картах с питанием 5 В они оба свободны; на картах 3,3 В контакт VS1#
заземлен, a VS2#
свободен. По этим линиям хост, допускающий оба варианта напряжения питания, определяет потребности установленной карты и подает соответствующее напряжение. Если хост не способен обеспечить требуемый номинал, он должен не подавать питание, а выдать сообщение об ошибке подключения. Карты обычно поддерживают управление энергопотреблением (АРМ), что особо актуально при автономном питании компьютера.
В стандарте PC Card выпускают самые разнообразные устройства — память, устройства хранения, коммуникационные средства, интерфейсные порты, игровые адаптеры, мультимедийные устройства и т. п., правда, все они существенно дороже своих крупногабаритных аналогов. Через слот PC Card портативные компьютеры могут подключаться к док-станциям, в которые может быть установлена обычная периферия. Недостаточно строгое следование производителей стандарту иногда приводит к проблемам совместимости.
Слоты PC Card подключаются к системной шине блокнотного ПК через мост; для компьютеров с внутренней шиной PCI это будет мост PCI-PC Card. В блокнотных ПК могут быть и слоты Small PCI (SPCI, см. п. 6.2.9), но они недоступны без вскрытия корпуса и не допускают «горячей» замены устройств.
MA
(Multiplexed Address) и стробируются по спаду импульсов RAS#
(Row Access Strobe) и CAS#
(Column Access Strobe). Состав сигналов микросхем динамической памяти приведен в табл. 7.1.
Сигнал | Назначение |
---|---|
RAS# | Row Access Strobe — строб выборки адреса строки. По спаду сигнала начинается любой цикл обращения; низкий уровень сохраняется на все время цикла. Перед началом следующего цикла сигнал должен находиться в неактивном состоянии (высокий уровень) не менее, чем время предварительного заряда RAS (TRP — RAS precharge time) |
CAS# | Column Access Strobe — строб выборки адреса столбца. По спаду сигнала начинается цикл записи или чтения; минимальная длительность (TCAS) определяется спецификацией быстродействия памяти. Минимальная длительность неактивного состояния между циклами (высокий уровень) должна быть не менее, чем время предварительного заряда CAS (TCP — CAS precharge time) |
MAi | Multiplexed Address — мультиплексированные линии адреса. Во время спада сигнала RAS# на этих линиях присутствует адрес строки, во время спада CAS# — адрес столбца. Адрес должен устанавливаться до спада соответствующего строба и удерживаться после него еще некоторое время. Микросхемы с объемом 4 М ячеек могут быть с симметричной организацией — 11 бит адреса строк и 11 бит адреса колонок или асимметричными — 12×10 бит соответственно |
WE# | Write Enable — разрешение записи. Данные записываются в выбранную ячейку либо по спаду CAS# при низком уровне WE# (Early Write — ранняя запись, обычный вариант), либо по спаду WE# при низком уровне CAS# (Delayed Write — задержанная запись). Переход WE# в низкий уровень и обратно при высоком уровне CAS# записи не вызывает, а только переводит выходной буфер EDO DRAM в высокоимпедансное состояние |
ОЕ# | Output Enable — разрешение открытия выходного буфера при операции чтения. Высокий уровень сигнала в любой момент переводит выходной буфер в высокоимпедансное состояние |
DB-In | Data Bit Input — входные данные (только для микросхем с однобитной организацией) |
DB-Out | Data Bit Output — выходные данные (только для микросхем с однобитной организацией). Выходные буферы стандартных микросхем открыты только при сочетании низкого уровня сигналов RAS#, CAS#, OE# и высокого уровня WE#; при невыполнении любого из этих условий буферы переходят в высокоимпедансное состояние. У микросхем EDO выходные буферы открыты и после подъема CAS#. Логика управления предусматривает возможность непосредственного объединения выходов нескольких микросхем |
DQx | Data Bit — объединенные внутри микросхемы входные и выходные сигналы данных (объединение экономит количество выводов для микросхем с многобитной организацией) |
N.C. | No Connection — свободный вывод |
RAS#
приходит сигнал CAS#
(тоже низким уровнем). Тип обращения определяется сигналами WE#
и CAS#
. Временная диаграмма «классических» циклов записи и чтения приведена на рис. 7.1. Как из нее видно, при чтении данные на выходе относительно начала цикла (сигнала RAS#
) появятся не раньше, чем через интервал TRAC, который и является временем доступа.
CAS#
) в страничном режиме TPC (Page CAS Time — см. п. 7.1.1).
♦ Длительность сигналов RAS#
и CAS#
— TRAS и TCAS — минимальная длительность активной части (низкого уровня) стробирующих сигналов (см. рисунок).
♦ Время предварительного заряда RAS и CAS TRP, и TCP (RAS и CAS Precharge Time) — минимальное время нахождения соответствующих сигналов в высоком состоянии.
♦ Время задержки между импульсами RAS#
и CAS#
TRCD (RAS to CAS Delay).
♦ Задержка данных относительно импульса CAS#
(TCAC).
Все эти параметры и определяют предел производительности памяти. В табл. 7.2 приведены типовые значения временных параметров, отвечающих конкретной спецификации быстродействия. На них можно ориентироваться при задании циклов обращений к памяти в CMOS Setup, но при этом необходимо учитывать, что микросхемы различных производителей могут несколько отличаться друг от друга по отдельным параметрам.
Спецификация быстродействия | TRC, нс | TRAC, нс | TPC, нс | TCAS, нс | TCP, нс |
---|---|---|---|---|---|
-4 | 75 | 40 | 15 | 6 | 6 |
-5 | 100 | 50 | 20 | 8 | 8 |
-6 | 104 | 60 | 25 | 10 | 10 |
-7 | 110 | 70 | 30 | 12 | 12 |
CAS#
, сокращенно именуемый ROR (RAS Only Refresh — регенерация только импульсом RAS#
). Другой вариант — цикл CBR (CAS Before RAS), поддерживаемый практически всеми современными микросхемами памяти. В этом цикле регенерации спад импульса RAS#
осуществляется при низком уровне сигнала CAS#
(в обычном цикле обращения такой ситуации не возникает). Адрес регенерируемой строки для цикла COR генерирует контроллер памяти, для CBR этот адрес берется из внутреннего счетчика каждой микросхемы памяти. Цикл скрытой регенерации (hidden refresh) является разновидностью цикла CBR.
Микросхемы синхронной динамической памяти выполняют циклы CBR по команде Auto Refresh. А по команде Self Refresh или Sleep Mode они выполняют автономную регенерацию в энергосберегающем режиме.
RAS#
удерживается на низком уровне на время всех последующих циклов обращений, которые могут быть как циклами записи, так и чтения. Такой режим обращения называется режимом быстрого страничного обмена FPM (Fast Page Mode), или просто режимом страничного обмена (Page Mode), его временная диаграмма приведена на рис. 7.2. Понятие «страница» на самом деле относится к строке (row), а состояние с низким уровнем сигнала RAS#
называется «открытой страницей». Преимущество данного режима заключается в экономии времени за счет исключения фазы выдачи адреса строки из циклов, следующих за первым, что позволяет повысить производительность памяти. Режим FPM поддерживает и самая обычная асинхронная память, называемая стандартной (Std).
CAS#
, а по его подъему фиксирует текущее значение выходных данных до следующего его спада. Перевести выходные буферы в высокоимпедансное состояние можно либо подъемом сигнала ОЕ#
(Output Enable), либо одновременным подъемом сигналов CAS#
и RAS#
, либо импульсом WE#
, который при высоком уровне CAS#
не вызывает записи (в PC управление по входу ОЕ#
практически не используют).
Временная диаграмма работы с EDO-памятью в режиме страничного обмена приведена на рис. 7.3; этот режим иногда называют гиперстраничным режимом обмена НРМ (Hyper Page mode). Его отличие от стандартного заключается в подъеме импульса CAS#
до появления действительных данных на выходе микросхемы. Считывание выходных данных может производиться внешними схемами вплоть до спада следующего импульса CAS#
, что позволяет экономить время за счет сокращения длительности импульса CAS#
. Время цикла внутри страницы уменьшается, повышая производительность в страничном режиме на 40 %.
WE#
, не вызывающий записи во время неактивной фазы CAS#
(рис. 7.4, кривая а). По окончании цикла буферы отключаются лишь по снятию сигнала RAS#
(рис. 7.4, кривая б).
CAS#
, содержится еще и внутренний счетчик адреса колонок для пакетного цикла. Это позволяет выставлять адрес колонки только в начале пакетного цикла (рис. 7.5), а во 2-й, 3-й и 4-й передачах импульсы CAS#
только запрашивают очередные данные. В результате удлинения конвейера выходные данные как бы отстают на один такт сигнала CAS#
, зато следующие данные появляются без тактов ожидания процессора, чем обеспечивается лучший цикл чтения. Задержка появления первых данных пакетного цикла окупается повышенной частотой приема последующих. BEDO-память применяется в модулях SIMM-72 и DIMM, но поддерживается далеко не всеми чипсетами.
RAS#
и CAS#
, а завершаются через какой-то определенный (для данных микросхем) интервал. На время этих процессоров шина памяти оказывается занятой, причем в основном ожиданием данных.
RAS#
, CAS#
, WE#
(разрешение записи) и CS#
(выбор микросхемы) и линии данных (табл. 7.3). Все сигналы стробируются по положительному перепаду синхроимпульсов, комбинация управляющих сигналов в каждом такте кодирует определенную команду. С помощью этих команд организуется та же последовательность внутренних сигналов RAS
и CAS
, которая рассматривалась и для памяти FPM.
Сигнал | I/O | Назначение |
---|---|---|
CLK | I | Clock Input — синхронизация, действует по положительному перепаду |
CKE | I | Clock Enable — разрешение синхронизации (высоким уровнем). Низкий уровень переводит микросхему в режим Power Down, Suspend или Self Refresh |
CS# | I | Chip Select — разрешение декодирования команд (низким уровнем). При высоком уровне новые команды не декодируются, но выполнение начатых продолжается |
RAS#, CAS#, WE# | I | Row Address Strobe, Column Address Strobe, Write Enable — сигналы, определяющие операцию (код команды) |
BS0, BS1 или BA0, BA1 | I | Bank Selects или Bank Address — выбор банка, к которому адресуется команда |
А[0:12] | I | Address — мультиплексированная шина адреса. В циклах Bank Activate определяют адрес строки. В циклах Read/Write линии A[0:9] и А11 задают адрес столбца. Линия А10 в циклах Read/Write включает режим автопредзаряда (при А10=1), в цикле Precharge A10=1 задает предзаряд всех банков (независимо от BS0, BS1) |
DQx | I/O | Data Input/Output — двунаправленные линии данных |
DQM | I | Data Mask — маскирование данных. В цикле чтения высокий уровень переводит шину данных в высокоимпедансное состояние (действует через 2 такта). В цикле записи высокий уровень запрещает запись текущих данных, низкий — разрешает (действует без задержки) |
VSS, VDD | – | Общий провод и питание ядра |
VSSQ, VDDQ | – | Общий провод и питание выходных буферов. Изолированы от питания ядра для снижения помех |
WR
. Данные для остальных передач пакета передаются в следующих тактах. Первые данные пакета чтения появляются на шине через определенное количество тактов после команды. Это число, называемое CAS Latency (CL), определяется временем доступа TCAC и тактовой частотой. Остальные данные пакета выдаются в последующих тактах. Временные диаграммы работы SDRAM приведены на рис. 7.6. Здесь показана команда записи WR
, за которой следует команда чтения RD
из той же страницы, предварительно открытой командой ACT
. Далее страница закрывается командой PRE
. Длина пакета 2, CL = 3.
REF
, которую можно вводить только при состоянии покоя (idle) всех банков.
Микросхемы SDRAM оптимизированы для пакетной передачи. У них при инициализации программируется длина пакета (burst length=1, 2, 4, 8 элементов), порядок адресов в пакете (wrap mode: interleave/linear — чередующийся/линейный) и операционный режим. Пакетный режим может включаться как для всех операций (normal), так и только для чтения (Multiple Burst with Single Write). Этот выбор позволяет оптимизировать память для работы либо с WB, либо с WT-кэшем.
Обратим внимание, что внутренний счетчик адреса работает по модулю, равному запрограммированной длине пакетного цикла (например, при burst length=4 он не позволяет перейти границу обычного четырехэлементного пакетного цикла).
Пакетные циклы могут прерываться (принудительно завершаться) последующими командами. При этом оставшиеся адреса отбрасываются, и прерывающий пакет будет иметь полную длину (если его самого не прервут).
В команде Write
имеется возможность блокирования записи данных любого элемента пакета — для этого достаточно в его такте установить высокий уровень сигнала DQM
. Этот же сигнал используется и для перевода в высокоимпедансное состояния буферов данных при операции чтения.
Микросхемы SDRAM имеют средства энергосбережения, для управления ими используется вход разрешения синхронизации CKE.
В режиме саморегенерации (Self Refresh) микросхемы периодически выполняют циклы регенерации по внутреннему таймеру и не реагируют на внешние сигналы, поэтому внешняя синхронизация может быть остановлена.
Режимы пониженного потребления (Power Down Mode) устанавливаются при переводе CKE
в низкий уровень командой NOP
или INHBT
. В этих режимах микросхема не воспринимает команд. Поскольку в данных режимах регенерация не выполняется, длительность пребывания в них ограничена периодом регенерации.
Если во время выполнения команды чтения или записи установить CKE
=L, то микросхема перейдет в режим Clock Suspend Mode, в котором «замораживается» внутренняя синхронизация (нет продвижения данных) и не воспринимаются новые команды.
Для памяти SDRAM ключевыми параметрами являются:
♦ допустимая тактовая частота;
♦ CL (Cas Latency) — число скрытых тактов (2 или 3);
♦ TRCD — задержка RAS-CAS, выраженная в тактах (2 или 3);
♦ TRP — время предварительного заряда RAS;
♦ TRC — минимальное время цикла обращений к строкам одного банка;
♦ TAC — время задержки появления данных на выходе относительно фронта синхросигнала.
По тактовой частоте для SDRAM, применяемой в качестве ОЗУ PC-совместимых компьютеров, имеется три градации: PC66 (поначалу ее так не называли, поскольку другой и не было), PC100 и PC133 для максимальных частот 66,6, 100 и 133 МГц соответственно. Их ключевые параметры приведены в табл. 7.4. В обозначении быстродействия микросхем SDRAM обычно фигурирует TAC; период частоты синхронизации, естественно, не может быть меньше этой задержки. Микросхемы со спецификацией -10 могут устойчиво работать в модулях лишь на частоте 66 МГц. Микросхемы -8 могут работать на частоте 100 МГц, но, в зависимости от модификации, с разной латентностью. Так, например, для памяти Micron микросхемы с маркировкой -8А…-8С могут работать на частоте 100 МГц с CL = 3, a -8D или -8Е — с CL = 2.
Спецификация | CL | TRCD | TRP | TRC | Примечание |
---|---|---|---|---|---|
PC66 | 3 | 2 | 3 | 8 | Медленный вариант |
2 | 2 | 2 | 7 | Самый быстрый вариант | |
PC100 | 3 | 3 | 3 | 8 | Медленный вариант |
3 | 2 | 2 | 7 | Средний вариант | |
2 | 2 | 2 | 7 | Самый быстрый вариант | |
PC133 | 3 | 3 | 3 | 9 | Медленный вариант |
3 | 2 | 2 | 8 | Средний вариант | |
2 | 3 | 2 | 8 | Средний вариант | |
2 | 2 | 2 | 8 | Самый быстрый вариант |
CLK
и CLK#
(Differential clock inputs). Это позволяет снизить влияние смещения уровней на точность определения момента синхронизации — дифференциальный приемник срабатывает в момент равенства уровней напряжения.
♦ Для синхронизации данных в интерфейс введен новый двунаправленный стробирующий сигнал DQS
. Стробы генерируются источником данных: при операциях чтения DQS
генерируется микросхемой памяти, при записи — контроллером памяти (чипсетом). При чтении фронты и спады этого сигнала точно центруются в моменты смены данных, приемник должен стробировать данные с небольшой задержкой относительно переключений DQS
. При записи фронты и спады центруются точно посередине окна действительности данных и масок DQM
.
♦ Для синхронизации DQS
с системной тактовой частотой (CLK
) микросхемы имеют встроенные схемы DLL (Delay Locked Loop) для автоподстройки задержки сигнала DQS
относительно CLK
. Эта схема работает наподобие фазовой автоподстройки и способна выполнять синхронизацию (обеспечивать совпадение фронтов DQS
и CLK
) лишь в некотором ограниченном диапазоне частот синхронизации.
DQS
не привязаны к синхросигналу CLK
, и у разных микросхем, работающих в одной системе, они будут иметь разные частоты.
В отличие от обычных микросхем SDRAM, у которых данные для записи передаются одновременно с командой, в DDR SDRAM данные для записи (и маски DQM)
подаются с задержкой на один такт (write latency). Значение CAS Latency может быть и дробным (CL = 2, 2,5, 3).
В перспективе ожидается появление микросхемы DDR-II SDRAM, в которой обмен будет на четырехкратной частоте синхронизации.
Перед «штатным» использованием микросхем SDRAM их требуется инициализировать. После подачи питания и установления синхросигнала должен быть выполнен предварительный заряд всех банков, после чего запрограммирован регистр режима. Параметр CL (CAS Latency) выбирают, исходя из спецификации микросхем и тактовой частоты так, чтобы задержка, обусловленная CL, была бы минимальной, но не меньше TCAC. В DDR SDRAM возможны и дробные значения CL, так что настройка может быть более тонкой. В DDR SDRAM из-за необходимости настройки DLL программирование сложнее.
По причине существенного отличия интерфейса от традиционной асинхронной памяти микросхемы SDRAM не могут быть установлены в модули SIMM; они применяются в DIMM или устанавливаются прямо на системную (или графическую) плату. Интерфейс DDR SDRAM сильно отличается и от обычных микросхем SDRAM. Возможность использования этих типов памяти определяется чипсетом системной платы. Память SDRAM в конце 90-х годов стала самой распространенной, поддержка DDR SDRAM появилась лишь сравнительно недавно.
RAS
и CAS
. В современных RDRAM применяются ячейки памяти с временем доступа 40–53 нс.
Канал RDRAM (Rambus Channel) представляет собой последовательно-параллельную шину. Такая организация позволяет ограничить количество линий интерфейса, что, в свою очередь, позволяет упорядочить разводку проводников ради повышения частоты передачи сигналов. Небольшое количество сигналов дает возможность выровнять задержки распространения сигналов по разным линиям и применить сверхбыстродействующие интерфейсные схемы. Тактовая частота канала — до 400 МГц, стробирование информации осуществляется по обоим фронтам синхросигнала. Таким образом, пропускная способность одной линии составляет 800 Мбит/с. Канал состоит из 30 основных линий с интерфейсом RSL (Rambus System Logic) и 4 вспомогательных линий КМОП, используемых для инициализации микросхем. Структура канала изображена на рис. 7.8. На канале может быть установлено до 32 микросхем, все микросхемы соединяются параллельно. Для того чтобы контроллер мог адресоваться к определенной микросхеме, каждой из них назначается уникальный адрес DEVID
. Нумерация микросхем (Device Enumeration) осуществляется в процессе инициализации, который выполняется с использованием вспомогательного последовательного КМОП-интерфейса. Этот интерфейс имеет линии синхронизации SCK
, команд CMD
, данных SIO
.
СТМ
(Clock To Master). По этому сигналу микросхемы памяти стробируют данные, посылаемые к контроллеру (при чтении). Дойдя до контроллера, синхросигнал выходит на линию CFM
(Clock From Master) и идет по каналу до терминатора, установленного на конце. По этой линии синхронизируется информация, посылаемая от контроллера к микросхемам памяти. Микросхемы привязывают данные чтения к синхросигналу с помощью встроенных схем DLL (Delay Locked Loop) для автоподстройки задержки сигнала DQS
относительно CLK
.
Физический уровень интерфейса учитывает волновой характер процессов распространения сигналов в канале. Интерфейс RSL имеет малый размах сигнала: уровню логический 0 соответствует потенциал терминаторов VTERM = 1,8 В, лог. 1 — потенциал 1,0 В. Передатчики имеют выход типа «открытый сток N-МОП» и активны при передаче логической единицы. Передатчики управляют значением генерируемого тока с тем, чтобы обеспечить требуемый уровень сигнала (падение напряжения на сопротивлении терминатора). Уровень переключения приемника VREF = 1,4 В задается делителем напряжения VTERM. Сигнал синхронизации передается в дифференциальной форме по линиям СТМ
, CTMN
к контроллеру и по линиям CFM
, CFMN
от него. Дифференциальная форма снижает погрешность стробирования, вызванную смещением уровней сигналов.
Канал разделен на три независимые шины: 3-битная шина строк ROW[2:0]
, 5-битная шина колонок COL[4:0]
и двухбайтная (2×9 бит) шина данных DQA[8:0]
и DQB[8:0]
. Дополнительный бит байта данных (имеется не у всех микросхем RDRAM) может использоваться для контроля достоверности. По каждой шине информация передается пакетами, занимающими 4 такта (8 интервалов) синхронизации (10 нс). Пакет содержит 8 элементов; пакет строк имеет емкость 24 бит, колонок — 40 бит и данных — 16 байт по 8 или 9 бит.
Высокая производительность шины управления (строк и колонок) позволяет отказаться от пакетных (в терминологии BEDO и SDRAM) передач и упростить протокол шины. Память может одновременно обслуживать до четырех транзакций на полной скорости передачи данных.
Транзакции чтения приведены на рис. 7.9, по виду они аналогичны транзакциям SDRAM с тем лишь отличием, что за время одного такта (SDRAM) передается пакет. Пакет ROW
для второй транзакции пропущен, поскольку страницу оставили открытой. Транзакция чтения со стороны контроллера представляет собой петлю: он посылает пакеты ROWA
и COLC
, которые за некоторое время достигают целевой микросхемы и ею обрабатываются за время TCAC. Далее микросхема отвечает пакетом данных, которому для достижения контроллера также требуется некоторое время. Пакетам для путешествий к дальним микросхемам и от них требуется больше времени, чем для путешествий к ближним, и эта разница оказывается большей, чем длительность периода синхронизации. Для того чтобы контроллер получал ответ на транзакцию чтения от любой микросхемы через одно и то же число тактов, у микросхем памяти устанавливают разную задержку данных относительно пакетов COLC
. Группы соседних микросхем, у которых программируется одинаковая задержка, называют доменами синхронизации. В канале может быть несколько доменов синхронизации.
COLC
на TCWD (несколько тактов). Эта задержка соответствует задержке между пакетами COLC
и данными при чтении (на стороне контроллера). Задержка записи позволяет сократить вынужденные простои шины данных при переключении с записи на чтение (в SDRAM они равны CAS Latency и длятся 2–3 такта по 10 нс). Контроллер может посылать данные для записи уже в такте, следующим за последними данными предыдущей транзакции чтения. Однако если за записью следует чтение, то на шине данных будет вынужденная пауза в 1–5 тактов в зависимости от длины канала. За это время последние данные записи дойдут от контроллера до самой дальней микросхемы памяти.
D
) сначала помещаются в буфер, из которого несколько позже они выгружаются в усилители считывания-записи (sens amp) по явной команде выгрузки (retire) или автоматически. Буфер записи хранит сами данные, а также номер банка и адрес столбца (но не строки). Буферизация записи позволяет контроллеру посылать команду записи на TRTR раньше, чем этого требует параметр TRCD, что повышает коэффициент использования шины.
Конвейерное выполнение операций RDRAM обеспечивается многобанковой организацией с отдельными усилителями считывания. Пакеты команд по линиям ROW и COL могут идти сплошным потоком, при этом на шине может присутствовать до четырех транзакций. При произвольных обращениях увеличению производительности способствует большое количество банков, практически недостижимое в памяти SDRAM.
Регенерация осуществляется по команде, адресуемой к определенному банку одной или всех микросхем; за период регенерации эта команда должна выдаваться для всех банков.
Память RDRAM отличается высоким энергопотреблением. Средства управления энергопотреблением отключают питание неиспользуемых узлов, однако за 100-кратное снижение мощности в самом экономичном режиме приходится расплачиваться 250-кратным увеличением времени доступа. Микросхемы RDRAM требуют периодической (раз в 100 мс) подстройки выходного тока и термокалибровки; для этих целей имеются специальные команды. Во время подстройки тока микросхемы способны сообщать о своем перегреве.
Вспомогательная шина с сигналами SCK
, CMD
и SIO
служит для обмена данными с управляющими регистрами и вывода микросхем из состояний пониженного потребления (PDN и NAP). Информация по этой шине тоже передается пакетами.
Управляющие регистры хранят информацию об адресе микросхемы, управляют работой микросхемы в различных режимах, содержат счетчики регенерации для банков и строк, параметры настройки временных циклов. В них же можно прочитать информацию о конкретной микросхеме — организация, версия протокола и т. п. В составе управляющих есть и тестовые регистры.
Инициализация памяти включает определение наличия микросхем на шине, назначение им идентификаторов и программирование их параметров. После сброса микросхемы не имеют собственных адресов, а линии SIO0
и SIO1
у них соединены. В таком состоянии контроллер по шине CMD
посылает широковещательную команду на разъединение линий, после чего для него по линии SIO
оказывается доступной только ближайшая микросхема канала. Ей назначается адрес (SDEVID
) и дается команда на соединение линий, в результате к контроллеру подключается вторая микросхема. Она будет пронумерована очередной командой, заставляющей все доступные ненумерованные микросхемы (то есть именно ее) принять указанный номер. Далее замыкаются ее линии SIO
, и этот процесс продолжается до самой дальней микросхемы.
После завершения этого «переучета» включается нормальная синхронизация, и дается время для установления режима схем DLL. После двукратной активации и предварительного заряда каждого банка каждой микросхемы память готова к определению доменов синхронизации и назначению каждой микросхеме соответствующих параметров задержек. Также им должны быть присвоены идентификаторы в канале (DEVID
), которые могут и не совпадать со значениями SDEVID
(идентификатором на последовательной шине).
Обязательным «фирменным» компонентом ОЗУ на RDRAM является контроллер памяти. В его задачу входит обслуживание микросхем памяти, установленных в канале, по запросам, поступающим со стороны интерфейса системной шины компьютера. Часть контроллера, обращенная к каналу, инвариантна к архитектуре компьютера. Именно она «знает» протокол RDRAM и является продуктом фирмы Rambus. Контроллер RDRAM встраивается в чипсеты для процессоров P6 (например, 1820, 1840), Pentium 4 (1850 с 32-разрядным каналом, то есть уже под пары модулей RIMM) и других архитектурных линий.
В соответствии со спецификацией RDRAM в одном канале может быть до трех слотов под RIMM, и их интерфейсные линии соединяются змейкой. В слоты могут устанавливаться RIMM различной емкости (сейчас они выпускаются на 64, 96, 128 и 256 Мбайт). Однако пока что фирме Intel не удалось достичь устойчивой работы канала с тремя модулями и пришлось ограничиться двумя. Теперь в памяти появился новый элемент-пустышка Continuity module. Это как бы модуль RIMM, но без микросхем памяти, и нужен он для того, чтобы замыкать цепь канала Rambus. Такая «заглушка» должна устанавливаться во все слоты канала, не занятые под модули RIMM. Если используются не все слоты, то память выгоднее ставить ближе к контроллеру — она будет работать быстрее (см. выше).
PRF
(Prefetch — чтение массива в буфер) и RST
(Restore — сохранение буфера в массиве), в которых микросхеме указывается номер банка, номер сегмента и номер канала. Предварительно командой ACT
должна быть активирована требуемая строка матрицы (при подаче этой команды задается банк и адрес строки). Деактивация строк (предварительный заряд) может быть автоматической, сразу после выполнения обращений к массиву (для этого имеются специальные команды предвыборки и сохранения — PRFA
и RSTA
) или же по специальным командам, деактивирующим выбранный банк или оба банка сразу.
«Фасадный» обмен с канальными буферами выполняется по командам чтения и записи (READ
и WRITE
), в которых указывается номер канала и часть адреса, соответствующая адресу колонки в обычной микросхеме DRAM или SDRAM. Этот обмен выполняется в пакетном режиме, длина пакета программируется (1,2,4,8 или 16 передач), но пакет может быть укорочен подачей следующей команды обращения к каналу. Первые данные при чтении канала появляются с задержкой (Read Latency) в 2 такта относительно команды чтения, следующие идут в каждом такте. В некоторых моделях микросхем имеется поддержка комбинированной команды PFR
(перед которой тоже должна быть команда ACT
) — предвыборка с автопредзарядом и чтение буфера. После подачи этой команды первые данные появляются на 4-м такте — не раньше и не позже, чем при последовательной подаче команд PRF(А)
и READ
.
Регенерация VC DRAM выполняется так же, как и в SDRAM, — либо периодической подачей команд REF
(авторегенерация по внутреннему счетчику адреса регенерируемых строк), либо в энергосберегающем режиме саморегенерации, в который микросхемы переходят по команде SELF
.
Как видно из этого описания, работа VC DRAM очень похожа на работу SDRAM, но операции обмена данными разделены на две сравнительно независимые фазы. Активация-деактивация банков выглядит так же, но при чтении VC DRAM данные появляются даже позже, чем в SDRAM: у SDRAM эта задержка, CL (CAS Latency), составляет 2–3 такта, а у VC DRAM — 4 такта. Тем не менее применение VC DRAM дает прирост производительности памяти почти по всем тестам. Этот выигрыш получается за счет поддержки многозадачности в самих микросхемах и в контроллере памяти. Для работы с VC DRAM контроллер памяти должен «знать» ее систему команд, не имеющую прямой совместимости с командами SDRAM. Поддержка VC DRAM имеется далеко не во всех чипсетах — ее вводят, например, VIA и SiS, но фирма Intel эту память игнорирует. Механически и электрически модули VC DRAM совместимы с обычными модулями DRAM. Во время начального тестирования (POST) модули VC DRAM могут быть опознаны по информации, хранящейся в микросхеме EEPROM последовательной идентификации модуля, либо по поведению после инициализации.
Память VC DRAM по сравнению с другими типами динамической памяти обеспечивает меньшее среднее время задержки данных в многозадачных системах. Однако по пиковой скорости передачи она не имеет преимуществ перед SDRAM и проигрывает RDRAM и DDR SDRAM.
CAS#
.
♦ Модули с контролем паритета (Parity) имеют разрядность 9, 36 или 72 бита и также допускают независимое побайтное обращение, контрольные биты по обращению приписаны к соответствующим байтам.
♦ Модули с генератором паритета (Fake Parity, Parity Generator, Logical Parity) так же допускают независимое побайтное обращение, логические генераторы паритета по чтению приписаны к соответствующим байтам. Действительного контроля памяти они не обеспечивают.
♦ Модули с контролем по схеме ЕСС имеют разрядность 36, 40, 72 или 80 бит. Обычно они допускают побайтное обращение к информационным битам, но контрольные биты у них привязаны к одному или нескольким сигналам CAS#
, поскольку ЕСС подразумевает обращение сразу к целому слову.
♦ ECC-Optimized — модули, оптимизированные под режим ЕСС. От обычных модулей ЕСС они отличаются тем, что могут не обеспечивать побайтное обращение к информационным битам.
ECC-on-Simm (EOS) — модули со встроенной схемой исправления ошибок. Каждый байт модуля имеет встроенные средства контроля и исправления ошибок, работающие прозрачно. Для системы модули функционируют как обычные паритетные — в случае обнаружения неисправимой ошибки они генерируют ошибочный бит паритета. Эти модули обеспечивают отказоустойчивость по памяти (Kill Protected Memory) для системных плат, поддерживающих только контроль паритета. По «благородству» поведения (делают больше, чем «говорят») они являются прямой противоположностью модулям с генератором паритета.
Набор сигналов модуля SIMM в основном совпадает с сигналами одиночных микросхем динамической памяти. Основные характеристики распространенных модулей приведены в табл. 7.5, более подробное описание — в следующих разделах.
Модуль | Разрядность¹, бит | Объем, Мбайт | Тип | Питание, В | Спецификация |
---|---|---|---|---|---|
SIMM-30, SIPP | 8 (9) | 0,25-4 | FPM, EDO | 5 | 60, 70, 80 нс |
SIMM-72 | 32 (36) | 1-32 | FPM, EDO, BEDO | 5 | 50, 60, 70 нс |
DIMM-168-I | 64 (72,80) | 8-256 | FPM, EDO | 5 | 50, 60, 70 нс |
DIMM-168-II | 64 (72, 80) | 8-512 | FPM, EDO | 5, 3,3 | 50, 60, 70 нс |
DIMM-168-II | 64 (72, 80) | 8-1024 | SDRAM | 3,3 | PC66, РС100, PC133 |
DIMM-184 | 64 (72, 80) | 128, 256… | DDR SDRAM | 2,5 | PC1600, PC2100 |
AIMM | 32 | 4 | SDRAM | 3,3 | 166 МГц |
100-Pin DIMM | 32 | 4-128 | SDRAM | 3,3 | 100,125 МГц |
100-Pin DIMM | 32 | 4-32 | FPM, EDO | 3,3 | 50, 60 нс |
SO DIMM-72 | 32 (36) | 4-32 | FPM, EDO | 3,3 | 50, 60 нс |
SO DIMM-144 | 64 (72) | 32,64 | FPM, EDO | 3,3 | 50, 60 нс |
SO DIMM-144 | 64 (72) | 32-256 | SDRAM | 3,3 | 66, 100, 125, 133 МГц |
RIMM | 16 (18) | 64, 96, 128, 256 | RDRAM | 2,5 | PC600, PC700, PC800 |
Байт | Назначение |
---|---|
Стандартизованная информация о микросхеме | |
0 | Число записанных байт конфигурационной памяти |
1 | Разрядность адреса микросхемы Serial PD (определяет объем конфигурационной памяти: 1–2 байта, 2–4 байта, 0Dh — 8 Кбайт) |
2 | Тип памяти: 00 — резерв, 01 — Std FPM, 02 — EDO, 03 — Pipelined Nibble (BEDO), 04 —SDRAM |
3 | Количество бит адреса строк в банке 1 (биты 0–3) и банке 2 (биты 4–7) по модулю 16 (0 — не определено, 1–1 или 16,2–2 или 17 и т. д.) Если банки одинаковые, то биты 4–7 нулевые |
4 | Количество бит адреса столбцов (аналогично предыдущему) |
5 | Количество банков (рядов микросхем) |
6-7 | Разрядность данных с учетом контрольных бит (если менее 255, байт 7–0) |
8 | Уровень напряжения интерфейса: 0 — 7TL/5B, 01 —LVTTL (не допускает 5 В), 02 — HSTL 1.5, 03 — SSTL 3.3,04 — SSTL 2.5 |
9 | Для DRAM — RAS Access time (в наносекундах). Для SDRAM — минимальное время цикла (Tclk) для максимального значения CL (десятые доли не в BCD-коде) |
10 | Для DRAM — CAS Access time (в наносекундах). Для SDRAM — время доступа относительно тактового импульса (Тас) аналогично предыдущему |
11 | Схема контроля: 00 — Non-Parity, 01 — Parity, 02 — ЕСС |
12 | Частота (тип) регенерации: 00 — Normal (распределенный цикл 156 мкс), 01 — Reduced 0.25х (39 мкс), 02 — Reduced 0.5х (78 мкс), 03 — Extended 2x (313 мкс), 04 — Extended 4x (625 мкс), 05 — Extended 8x (125 мкс). Бит 7 является признаком саморегенерации (биты 6:0 кодируют те же периоды) |
13 | Разрядность микросхем основной памяти, бит. Бит 7 равен 1, если имеется второй банк с удвоенной разрядностью микросхем. Если банк один или оба банка одинаковы, бит 7 равен 0 |
14 | Разрядность микросхем контрольных разрядов, бит (аналогично) |
15-30 | Детальное описание временных и организационных параметров SDRAM |
31 | Объемы банков (рядов микросхем): бит 0–4 Мбайт, бит 1–8 Мбайт, бит 7 — 512 Мбайт, единичное значение устанавливается в одном или нескольких (двух) битах |
32-35 | Время предварительной установки и удержания входных сигналов |
36-61 | Резерв |
62 | Ревизия SPD (две BCD-цифры) |
63 | Контрольная сумма байт 0-62 по модулю 256 |
Информация изготовителя | |
64-71 | Идентификатор производителя по JEDEC |
72 | Код страны производителя |
73-90 | Код изделия (ASCII) |
91-92 | Код модификации |
93-94 | Дата изготовления (wwyy — неделя, год) |
95-98 | Серийный номер |
99-127 | Специальные данные изготовителя |
126 | Спецификация частоты (для Intel) DIMM SDRAM. Частота 66 МГц задается кодом 66h, более высокие значения — числом МГц (100 = 64h) |
127 | Детализация для SDRAM 100 МГц (для Intel) |
CAS#
для каждого байта. Распространенные модули имеют напряжение питания 5 В, их параметры приведены в табл. 7.7.
Емкость, Мбайт | С паритетом | Без паритета | ||
---|---|---|---|---|
30-pin | 72-pin | 30-pin | 72-pin | |
256 Кбайт | 256 К×9 | - | 256 К×8 | - |
1 | 1 М×9 | 256 К×36 | 1 М×8 | 256 К×32 |
2 | - | 512 К×36 | - | 512 К×32 |
4 | 4 М×9 | 1 М×36 | 4 М×8 | 1 М×32 |
8 | - | 2 М×36 | - | 2 М×32 |
16 | - | 4 М×36 | - | 4 М×32 |
32 | - | 8 М×36 | - | 8 М×32 |
64 | - | 16 М×36 | - | 16 М×32 |
Контакт | STD | IBM | Контакт | STD¹ | IBM² |
---|---|---|---|---|---|
1 | +5 В | +5 В | 16 | DQ4 | DQ4 |
2 | CAS# | CAS# | 17 | МА8 | MAS |
3 | DQ0 | DQ0 | 18 | МА9 | MA9 |
4 | MA0 | MA0 | 19 | MA0 | RAS1# |
5 | MA1 | MA1 | 20 | DQ5 | DQ5 |
6 | DQ1 | DQ1 | 21 | WE# | WE# |
7 | MA2 | MA2 | 22 | GND | GND |
8 | MA3 | MA3 | 23 | DQ6 | DQ6 |
9 | GND | GND | 24 | N.C. | PD(GND) |
10 | DQ2 | DQ2 | 25 | DQ7 | DQ7 |
11 | MA4 | MA4 | 26 | PB-Out | PD(1M=GND) |
12 | MA5 | MA5 | 27 | RAS# | RAS0# |
13 | DQ3 | DQ3 | 28 | CAS-Parity# | N.C. |
14 | MA6 | MA6 | 29 | PB-In | PB-(In/Out) |
15 | MA7 | MA7 | 30 | +5B | +5B |
CASx#
. По сигналам выборки строк биты данных делятся на два слова, DQ[0:15]
выбираются сигналом RAS0#
для первого банка и RAS1#
для второго, DQ[16:31]
выбираются соответственно сигналом RAS2#
и RAS3#
. В односторонних модулях (1, 4, 16, 64 Мбайт — 1 банк) используется только одна пара сигналов выборки RAS0#
и RAS2#, в двусторонних (2, 8, 32 Мбайт — 2 банка) — две пары сигналов RAS#
. Заметим, что использование всеми модулями обеих дар линий RAS# поддерживается не всеми системными платами. Контрольные биты модулей с паритетом по выборке приписываются к соответствующим байтам, в ЕСС-модулях возможны различные варианты. Модули без паритета имеют разрядность 32 бит, с паритетом — 36 бит, модули ЕСС — 36 или 40 бит. Модули ЕСС-36 и ЕСС-40 (ECC-optimised) не допускают побайтного обращения и существенно отличаются от 32-битных и паритетных модулей.
Контакт | Назначение для модулей x32, Parity/ECC¹ | Контакт | Назначение для модулей x32, Parity/ECC¹ |
---|---|---|---|
1 | GND | 37 | PQ1/DQ19 |
2 | DQ0/DQ0 | 38 | PQ3/DQ20 |
3 | DQ16/DQ1 | 39 | GND |
4 | DQ1/DQ2 | 40 | CAS0# |
5 | DQ17/DQ3 | 41² | CAS2#/MA10 |
6 | DQ2/DQ4 | 42² | CAS3#/MA11 |
7 | DQ18/DQ5 | 43 | CAS1# |
8 | DQ3/DQ6 | 44 | RAS0# |
9 | DQ19/DQ7 | 45 | RAS1# |
10 | +5В | 46² | (OE1#)/DQ21 |
11² | (CAS-Parity#)/PD5 | 47 | WE# |
12 | MA0 | 48² | Reserved/ECC |
13 | MA1 | 49 | DQ8/DQ22 |
14 | MA2 | 50 | DQ24/DQ23 |
15 | MA3 | 51 | DQ9/DQ24 |
16 | MA4 | 52 | DQ25/DQ25 |
17 | MA5 | 53 | DQ10/DQ26 |
18 | MA6 | 54 | DQ26/DQ27 |
19² | МА10/ОЕ# | 55 | DQ11/DQ28 |
20 | DQ4/DQ8 | 56 | DQ27/DQ29 |
21 | DQ20/DQ9 | 57 | DQ12/DQ30 |
22 | DQ5/DQ10 | 58 | DQ28/DQ31 |
23 | DQ21/DQ11 | 59 | +5B |
24 | DQ6/DQ12 | 60 | DQ29/DQ32 |
25 | DQ22/DQ13 | 61 | DQ13/DQ33 |
26 | DQ7/DQ14 | 62 | DQ30/DQ34 |
27 | DQ23/DQ15 | 63 | DQ14/DQ35 |
28 | MA7 | 64² | DQ31/DQ36 |
29² | MA11(OE0#)/DQ16 | 65² | DQ15/DQ37 |
30 | +5В | 66² | (OE2#)/DQ38 |
31 | МА8 | 67 | PD1 |
32 | МА9 | 68 | PD2 |
33² | RAS3#/NC | 69 | PD3 |
34² | RAS2#/NC | 70 | PD4 |
35 | PQ2/DQ17 | 71² | (OE3#)/DQ39 |
36 | PQ0/DQ18 | 72 | GND |
PD[1:5]
. По заземленным (на модуле) сигналам системная плата может распознать быстродействие (тип) и объем установленной памяти. Стандарт JEDEC для SIMM-72 определяет следующее назначение выводов (0 — заземлен, 1 — свободен):
♦ сигналы PD[1:2]
(контакты 67, 68) — объем памяти модуля, Мбайт: 00=4, 11=8, 01=16, 10=32;
♦ сигналы PD[3:4]
(контакты 69, 70) — время доступа, нс: 00=100, 10=80, 01=70, 11=60;
♦ сигнал PD5
может являться признаком ECC-модуля (заземленный контакт).
Сигнал | Назначение |
---|---|
MAi | Multiplexed Address — мультиплексированные линии адреса. Во время спада сигнала RAS# на этих линиях присутствует адрес строки, во время спада CAS# — адрес столбца. Модули SIMM объемом 16 Мбайт могут быть с симметричной (square — квадратной) организацией — 11 бит адреса строк и 11 бит адреса колонок или асимметричной — 12×10 бит соответственно |
DQx | Data Bit — биты данных (объединенные входы и выходы) |
PQx | Parity Bit — бит паритета x-го байта |
PB-In, PB-Out | Parity Bit Input, Output — вход и выход микросхемы бита паритета (для SIPP PB-Out и SIMM-30). Для хранения паритета в этих модулях всегда используются микросхемы с однобитной организацией, у которых вход и выход разделен. Обычно эти контакты на модуле соединены |
WE# | Write Enable — разрешение записи. При низком уровне сигнала во время спада CAS# выполняется запись в ячейку. Переход WE# в низкий уровень и обратно при высоком уровне CAS# переводит выходной буфер EDO DRAM в высокоимпедансное состояние |
RASx# | Стробы выборки строк. Сигналы RAS0# и RAS1# используются соответственно для бит [0:15] и [16:31] первого банка, RAS1# и RAS3# — для бит [0:15] и [16:31] второго банка |
CASx# | Стробы выборки столбцов, отдельные для каждого байта: CAS0# — DQ[0:7], PQ0; CAS1# — DQ[8:15], PQ1; CAS2# — DQ[16:23], PQ2; CAS3# — DQ[24:31], PQ3. В ECC-модулях возможно обращение только ко всему модулю по сигналам CAS0# и CAS1# |
CAS-Parity# | Строб выборки столбцов для контрольных разрядов (редко используемый вариант) |
OEx# | Output Enable — разрешение открытия выходного буфера. Эти выводы на системной плате обычно соединяются с логическим нулем, а для управления буфером используются сигналы RAS#, CAS# и WE#. На некоторых модулях SIMM могут отсутствовать |
PD[1:5] | Presence Detect — индикаторы присутствия (обычно не используются) |
N.C. | No Connection — свободный вывод |
CAS#
. Также удвоено число сигналов разрешения записи и разрешения выходных буферов, что позволяет организовывать модули в виде двух 4-байтных банков с возможностью их чередования (Bank Interleaving). Модули могут иметь разрядность 64, 72 или 80 бит, дополнительные разряды 72-битных модулей организуются либо по схеме контроля паритета (приписываясь к соответствующим байтам), либо по схеме ЕСС; 80-битные — только по схеме ЕСС.
Модули DIMM первого поколения (по IBM) были ориентированы на асинхронную память (FPM, EDO и BEDO); по архитектуре они напоминают SIMM-72. В модулях применяется параллельная идентификация — параметры быстродействия и объема передаются через 8 буферизованных выводов идентификации (Presence Detect pins). Модули первого поколения не получили широкого распространения, поскольку не принесли принципиальных новшеств в подсистему памяти.
Модули второго поколения отличаются тем, что позволяют использовать микросхемы как асинхронной (FPM и EDO), так и синхронной динамической памяти (SDRAM). Внешне они похожи на модули первого поколения, но отличаются ключом, не допускающим ошибочную установку. Унифицированное назначение выводов позволяет в одни и те же слоты устанавливать как модули DRAM; так и SDRAM. Нумерация бит данных единая для всех типов организации — контрольные биты CBx имеют отдельную нумерацию, их наличие зависит от организации (паритет, ЕСС-72, ЕСС-80).
Модули с любой организацией используют побайтное распределение информационных бит по сигналам CASx#
(табл. 7.11), распределение контрольных бит представлено в табл. 7.12. Младший бит адреса приходит по одной линии на все микросхемы модуля. Сигналы управления модулей SDRAM значительно отличаются от модулей DRAM. Исполняемая операция SDRAM определяется сигналами RAS#
, CAS#
и WE#
, синхронизируемыми по фронту соответствующих сигналов CKx
. Назначение сигналов модулей приведено в табл. 7.13, назначение выводов модулей DRAM — в табл. 7.14, SDRAM — в табл. 7.15.
Линии CAS# (DQMB для SDRAM) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Биты данных | 0-7 | 8-15 | 16-23 | 24-31 | 32-39 | 40-47 | 48-55 | 56-63 |
Сигналы для банка 0 DRAM | OE0#, WE0#, RAS0# | ОЕ2#, WE2#, RAS2# | ||||||
Сигналы для банка 1 DRAM | OE0#, WE0#, RAS1# | ОЕ2#, WE2#, RAS3# | ||||||
Сигналы для банка 0 SDRAM | CKE0 | CKE0 | CKE0 | CKE0 | CKE0 | CKE0 | CKE0 | CKE0 |
S0# | S0# | S2# | S2# | S0# | S0# | S2# | S2# | |
CK0 | CK1 | CK2 | CK3 | CK0 | CK1 | CK2 | CK3 | |
Сигналы для банка 1 SDRAM | CKE1 | CKE1 | CKE1 | CKE1 | CKE1 | CKE1 | CKE1 | CKE1 |
S1# | S1# | S3# | S3# | S1# | S1# | S3# | S3# | |
CK0 | CK1 | CK2 | CK3 | CK0 | CK1 | CK2 | CK3 |
Организация (разрядность микросхем DRAM) | Линии CAS# (DQMB для SDRAM) | |||||||
---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Контрольные биты | ||||||||
72-бит Parity | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
72-бит ЕСС, (x4 x16/x4) | - | 0-3 | - | - | - | 4-7 | - | - |
72-бит ЕСС, (x8) | - | 0-7 | - | - | - | - | - | - |
72-бит ЕСС, (x18) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
80-бит ЕСС, (x4) | - | 0-3 | 8-11 | - | - | 4-7 | 12-15 | 1 |
80-бит ЕСС, (x8, х16) | - | 0-7 | - | - | - | 8-15 | - | - |
Сигнал | Назначение |
---|---|
Общие сигналы для FPM, EDO, BEDO и SDRAM | |
RAS[0:3]#, RAS# | Row Address Strobe — стробы выборки строк |
CAS[0:7]# CAS# | Column Address Strobe — стробы выборки столбцов |
WE0#, WE2# | Read/Write Input — сигналы разрешения записи, раздельные для банков |
OE0#, OE2# | Output Enable — сигналы разрешения выходных буферов, раздельные для банков |
A[0:13] | Address Inputs — мультиплексированная шина адреса |
DQ[0:63] | Data Input/Output — биты данных |
CB[0:15] | Check Bit Data Input/Output — контрольные биты, отсутствуют в 64-битных модулях. В 72-битных модулях отсутствуют CB[8:15] |
SCL | Serial Presence Detect Clock синхронизация интерфейса идентификации I²C |
SDA | Serial Presence Detect Data — данные интерфейса идентификации I²C |
SA[0:2] | Serial Presence Detect Address — адрес модуля в интерфейсе I²C, задается коммутацией выводов гнезд для модулей на уровни логических «0» и «1» |
WP | Write Protect — защита записи в EEPROM |
VCC | Power — питание (+5 или +3,3 В) |
VSS | Ground — общий провод |
NC | No Connect — неиспользуемый (свободный) контакт |
DU | Don't Use — запрещенный к использованию контакт |
Специфические сигналы SDRAM | |
DQMB0-DQMB7 | Data Mash Byte — маски байт (синхронизируются по фронту CK). Высокий уровень во время операции чтения переводит выходные буферы соответствующего байта в высокоимпедансное состояние с задержкой на 2 такта, операция записи блокируется без задержки |
S0#, S1#, S2#, S3# | Select — разрешение (низким уровнем) декодирования команд микросхемами SDRAM соответствующих банков. При высоком уровне новые команды игнорируются, но выполнение предыдущей не прерывается |
CK[0:3] | Clock Inputs — тактовые импульсы системной шины, положительный перепад синхронизируют все входные сигналы (кроме CKE) |
CKE0, CKE1 | Clock Enables — разрешение синхронизации (высокий уровень) для банков микросхем. Низкий уровень переводит в режим пониженного потребления или саморегенерации |
A[0:9], А[11:13] A10/АР | Address Inputs, Address Input 10/Autoprecharge — в цикле команды активации банка А[0:13] определяют адрес строки (по подъему CK). В цикле команды чтения или записи А[0:8] определяют адрес столбца, АР используется для указания (высоким уровнем) на операцию автопредзаряда (autoprecharge) банка А (BA0=0) или В (BA1=1) по окончании текущего пакетного цикла. В цикле команды предзаряда при высоком уровне АР предзаряд осуществляется в обоих банках, при низком — только в банке, определяемом линией BA0 |
BA0, BA1 | SDRAM Bank Address — выбор внутреннего банка микросхемы SDRAM (использует линии, назначенные на адреса А11, A12 модулей DRAM) |
REGE | Register Enable — разрешение синхронной работы регистров управляющих и адресных сигналов. При высоком уровне регистр защелкивает сигналы по фронту CK, а микросхемы памяти зафиксируют эти значения в следующем такте. При низком уровне регистр работает в режиме буфера (допустимо лишь для 66 МГц) |
Дополнительные сигналы модулей DOR SDRAM | |
DQS[0:17] | Двунаправленные стробы данных, формируемые источником |
CK# | Инверсный вход синхронизации (пара к CK) |
VREF | Вход опорного напряжения интерфейса SSTL_2 |
RESET# | Вход асинхронного сброса регистра |
VDDQ | Питание выходных буферов микросхем |
VDD | Питание ядра микросхем |
VDDSPD | Питание микросхемы последовательной идентификации |
VDDID | Вход VDD identification flag |
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|---|---|
1 | VSS | 85 | VSS | 43 | VSS | 127 | VSS |
2 | DQ0 | 86 | DQ32 | 44 | OE2# | 128 | DU |
3 | DQ1 | 87 | DQ33 | 45 | RAS2# | 129 | RAS3# |
4 | DQ2 | 88 | DQ34 | 46 | CAS2# | 130 | CAS6# |
5 | DQ3 | 89 | DQ35 | 47 | CAS3# | 131 | CAS7# |
6 | VCC | 90 | VCC | 48 | WE2# | 132 | DU |
7 | DQ4 | 91 | DQ36 | 49 | VCC | 133 | VCC |
8 | DQ5 | 92 | DQ37 | 50 | CB10 | 134 | CB14 |
9 | DQ6 | 93 | DQ38 | 51 | CB11 | 135 | CB15 |
10 | DQ7 | 94 | DQ39 | 52 | CB2 | 136 | CB6 |
11 | DQ8 | 95 | DQ40 | 53 | CB3 | 137 | CB7 |
12 | VSS | 96 | VSS | 54 | VSS | 138 | VSS |
13 | DQ9 | 97 | DQ41 | 55 | DQ16 | 139 | DQ48 |
14 | DQ10 | 98 | DQ42 | 56 | DQ17 | 140 | DQ49 |
15 | DQ11 | 99 | DQ43 | 57 | DQ18 | 141 | DQ50 |
16 | DQ12 | 100 | DQ44 | 58 | DQ19 | 142 | DQ51 |
17 | DQ13 | 101 | DQ45 | 59 | VCC | 143 | VCC |
18 | VCC | 102 | VCC | 60 | DQ20 | 144 | DQ52 |
19 | DQ14 | 103 | DQ46 | 61 | NC¹ | 145 | NC¹ |
20 | DQ15 | 104 | DQ47 | 62 | DU | 146 | DU |
21 | СВ0 | 105 | CB4 | 63 | NC | 147 | NC |
22 | CB1 | 106 | CB5 | 64 | VSS | 148 | VSS |
23 | VSS | 107 | VSS | 65 | DQ21 | 149 | DQ53 |
24 | CB8 | 108 | CB12 | 66 | DQ22 | 150 | DQ54 |
25 | CB9 | 109 | CB13 | 67 | DQ23 | 151 | DQ55 |
26 | VCC | 110 | VCC | 68 | VSS | 152 | VSS |
27 | WE0# | 111 | DU | 69 | DQ24 | 153 | DQ56 |
28 | CAS0# | 112 | CAS4# | 70 | DQ25 | 154 | DQ57 |
29 | CAS1# | 113 | CAS5# | 71 | DQ26 | 155 | DQ58 |
30 | RAS0# | 114 | RAS1# | 72 | DQ27 | 156 | DQ59 |
31 | OE0# | 115 | DU | 73 | VCC | 157 | VCC |
32 | VSS | 116 | VSS | 74 | DQ28 | 158 | DQ60 |
33 | А0 | 117 | A1 | 75 | DQ29 | 159 | DQ61 |
34 | A2 | 118 | A3 | 76 | DQ30 | 160 | DQ62 |
35 | A4 | 119 | A5 | 77 | DQ31 | 161 | DQ63 |
36 | A6 | 120 | A7 | 78 | VSS | 162 | VSS |
37 | A8 | 121 | A9 | 79 | NC | 163 | NC |
38 | A10 | 122 | A11 | 80 | NC | 164 | NC |
39 | A12 | 123 | A13 | 81 | NC | 165 | SA0 |
40 | VCC | 124 | VCC | 82 | SDA | 166 | SA1 |
41 | VCC | 125 | DU | 83 | SCL | 167 | SA2 |
42 | DU | 126 | DU | 84 | VCC | 168 | VCC |
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|---|---|
1 | VSS | 85 | VSS | 43 | VSS | 127 | VSS |
2 | DQ0 | 86 | DQ32 | 44 | DU² | 128 | CKE0 |
3 | DQ1 | 87 | DQ33 | 45 | S2# | 129 | S3# |
4 | DQ2 | 88 | DQ34 | 46 | DQMB2 | 130 | DQMB6 |
5 | DQ3 | 89 | DQ35 | 47 | DQMB3 | 131 | DQMB7 |
6 | VCC | 90 | VCC | 48 | DU² | 132 | A13 |
7 | DQ4 | 91 | DQ36 | 49 | VCC | 133 | VCC |
8 | DQ5 | 92 | DQ37 | 50 | CB10 | 134 | CB14 |
9 | DQ6 | 93 | DQ38 | 51 | CB11 | 135 | CB15 |
10 | DQ7 | 94 | DQ39 | 52 | CB2 | 136 | CB6 |
11 | DQ8 | 95 | DQ40 | 53 | CB3 | 137 | CB7 |
12 | VSS | 96 | VSS | 54 | VSS | 138 | VSS |
13 | DQ9 | 97 | DQ41 | 55 | DQ16 | 139 | DQ48 |
14 | DQ10 | 98 | DQ42 | 56 | DQ17 | 140 | DQ49 |
15 | DQ11 | 99 | DQ43 | 57 | DQ18 | 141 | DQ50 |
16 | DQ12 | 100 | DQ44 | 58 | DQ19 | 142 | DQ51 |
17 | DQ13 | 101 | DQ45 | 59 | VCC | 143 | VCC |
18 | VCC | 102 | VCC | 60 | DQ20 | 144 | DQ52 |
19 | DQ14 | 103 | DQ46 | 61 | NC¹ | 145 | NC¹ |
20 | DQ15 | 104 | DQ47 | 62 | Vref | 146 | Vref |
21 | СВ0 | 105 | CB4 | 63 | CKE1 | 147 | REGE |
22 | CB1 | 106 | CB5 | 64 | VSS | 148 | VSS |
23 | VSS | 107 | VSS | 65 | DQ21 | 149 | DQ53 |
24 | CB8 | 108 | CB12 | 66 | DQ22 | 150 | DQ54 |
25 | CB9 | 109 | CB13 | 67 | DQ23 | 151 | DQ55 |
26 | VCC | 110 | VCC | 68 | VSS | 152 | VSS |
27 | WE# | 111 | CAS# | 69 | DQ24 | 153 | DQ56 |
28 | DQMB0 | 112 | DQMB4 | 70 | DQ25 | 154 | DQ57 |
29 | DQMB1 | 113 | DQMB5 | 71 | DQ26 | 155 | DQ58 |
30 | S0# | 114 | S1# | 72 | DQ27 | 156 | DQ59 |
31 | DU² | 115 | RAS# | 73 | VCC | 157 | VCC |
32 | VSS | 116 | VSS | 74 | DQ28 | 158 | DQ60 |
33 | А0 | 117 | A1 | 75 | DQ29 | 159 | DQ61 |
34 | A2 | 118 | A3 | 76 | DQ30 | 160 | DQ62 |
35 | A4 | 119 | AS | 77 | DQ31 | 161 | DQ63 |
36 | A6 | 120 | A7 | 78 | VSS | 162 | VSS |
37 | AS | 121 | A9 | 79 | CK2 | 163 | CK3 |
38 | A10(AP) | 122 | BA0 | 80 | NC¹ | 164 | NC¹ |
39 | BA1 | 123 | A11 | 81 | WP | 165 | SA0 |
40 | VCC | 124 | VCC | 82 | SDA | 166 | SA1 |
41 | VCC | 125 | CK1 | 83 | SCL | 167 | SA2 |
42 | CK0 | 126 | A12 | 84 | VCC | 168 | VCC |
RAS[0:3]#
для выбора банков (рядов микросхем) используются сигналы S0#
, S1#
, S2#
и S3#
; вместо CAS[0:7]#
для выбора байтов — сигналы DQMB0
-DQMB7
; сигналы WE2#
, OE0#
и ОЕ2#
не используются.
В модулях, начиная со второго поколения, применена последовательная идентификация параметров на двухпроводном интерфейсе (I²C) для чтения атрибутов (идентификации) из специальной конфигурационной памяти (обычно EEPROM 24С02), установленной на модулях.
168-pin Unbuffered DIMM — модули, у которых все цепи не буферизованы (одноименные адресные и управляющие сигналы микросхем соединены параллельно и заводятся прямо с контактов модуля). Эти модули сильнее нагружают шину памяти, но позволяют добиться максимального быстродействия. Они предназначены для системных плат с небольшим (1–4) количеством слотов DIMM или имеющих шину памяти, буферизованную на плате. Модули выполняются на микросхемах DRAM или SDRAM. Высота модулей не превышает 51 мм. Объем 8–512 Мбайт.
168-pin Registered DIMM — модули синхронной памяти (SDRAM), у которых адресные и управляющие сигналы буферизованы регистрами, синхронизируемыми тактовыми импульсами системной шины. По виду этот тип DIMM легко отличим — кроме микросхем памяти и EEPROM на них установлено несколько микросхем регистров-защелок. За счет регистров эти модули меньше нагружают шину памяти, что позволяет набирать больший объем памяти. Применение регистров повышает точность синхронизации и, следовательно, — тактовую частоту. Однако регистр вносит дополнительный такт задержки. Кроме того, на модулях может быть установлена микросхема ФАПЧ (PLL), формирующая тактовые сигналы для микросхем памяти и регистров-защелок. Это делается для разгрузки линий синхронизации, причем в отличие от обычной буферизации сигнала, вводящей задержку между входом и выходом, схема PLL обеспечивает синфазность выходных сигналов (их на выходе PLL несколько, каждый для своей группы микросхем) с опорным сигналом (линия CK0
). Модули на 64 Мбайт могут быть и без схем PLL — в них линии CK[0:3]
разводятся прямо на свои группы микросхем памяти. Регистры могут быть переведены в режим асинхронных буферов (только на 66 МГц), для чего на вход REGE
нужно подать низкий уровень. Для модулей на 66 МГц возможна замена регистров асинхронными буферами.
Модули DIMM-184 предназначены для микросхем DDR SDRAM. По габаритам они аналогичны модулям DIMM-168, но у них имеются дополнительные вырезы по бокам (см. рис. 7.13, г) и отсутствует левый ключ. Разрядность — 64 или 72 бит (ЕСС), имеются варианты с регистрами в адресных и управляющих цепях (Registered DDR SDRAM) и без них. Напряжение питания — 2,5 В. Идентификация последовательная. Состав сигналов в основном повторяет набор для DIMM SDRAM, назначение выводов приведено табл. 7.16. Модули отличаются большим количеством стробирующих сигналов DQSx
— по линии на каждые 4 бита данных (DQS8
и DQS17
используются для стробирования контрольных битов). Вход тактовой частоты только один, но дифференциальный — раздачу сигналов по микросхемам памяти и регистрам осуществляет микросхема DLL.
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|---|---|
1 | VREF | 47 | DQS8 | 93 | VSS | 139 | VSS |
2 | DQ0 | 48 | АО | 94 | DQ4 | 140 | DQS17 |
3 | VSS | 49 | CB2 | 95 | DQ5 | 141 | A10 |
4 | DQ1 | 50 | VSS | 96 | VDDQ | 142 | CB6 |
5 | DQS0 | 51 | CB3 | 97 | DQS9 | 143 | VDDQ |
6 | DQ2 | 52 | BA1 | 98 | DQ6 | 144 | CB7 |
7 | VDD | 53 | DQ32 | 99 | DQ7 | 145 | VSS |
8 | DQ3 | 54 | VDDQ | 100 | VSS | 146 | DQ36 |
9 | NC | 55 | DQ33 | 101 | NC | 147 | DQ37 |
10 | RESET# | 56 | DQS4 | 102 | NC | 148 | VDD |
11 | VSS | 57 | DQ34 | 103 | A13 | 149 | DQS13 |
12 | DQ8 | 58 | VSS | 104 | VDDQ | 150 | DQ38 |
13 | DQ9 | 59 | BA0 | 105 | DQ12 | 151 | DQ39 |
14 | DQS1 | 60 | DQ35 | 106 | DQ13 | 152 | VSS |
15 | VDDQ | 61 | DQ40 | 107 | DQS10 | 153 | DQ44 |
16 | DU | 62 | VDDQ | 108 | VDD | 154 | RAS# |
17 | DU | 63 | WE# | 109 | DQ14 | 155 | DQ45 |
18 | VSS | 64 | DQ41 | 110 | DQ15 | 156 | VDDQ |
19 | DQ10 | 65 | CAS# | 111 | CKE1 | 157 | S0# |
20 | DQ11 | 66 | VSS | 112 | VDDQ | 158 | S1# |
21 | CKE0 | 67 | DQS5 | 113 | BA2 | 159 | DQS14 |
22 | VDDQ | 68 | DQ42 | 114 | DQ20 | 160 | VSS |
23 | DQ16 | 69 | DQ43 | 115 | A12 | 161 | DQ46 |
24 | DQ17 | 70 | VDD | 116 | VSS | 162 | DQ47 |
25 | DQS2 | 71 | DU | 117 | DQ21 | 163 | DU |
26 | VSS | 72 | DQ48 | 118 | A11 | 164 | VDDQ |
27 | A9 | 73 | DQ49 | 119 | DQS11 | 165 | DQ52 |
28 | DQ18 | 74 | VSS | 120 | VDD | 166 | DQ53 |
29 | A7 | 75 | DU | 121 | DQ22 | 167 | FETEN |
30 | VDDQ | 76 | DU | 122 | A8 | 168 | VDD |
31 | DQ19 | 77 | VDDQ | 123 | DQ23 | 169 | DQS15 |
32 | A5 | 78 | DQS6 | 124 | VSS | 170 | DQ54 |
33 | DQ24 | 79 | DQS0 | 125 | A6 | 171 | DQ55 |
34 | VSS | 80 | DQ51 | 126 | DQ28 | 172 | VDDQ |
35 | DQ25 | 81 | VSS | 127 | DQ29 | 173 | NC |
36 | DQS3 | 82 | VDDID | 128 | VDDQ | 174 | DQ60 |
37 | A4 | 83 | DQ56 | 129 | DQS12 | 175 | DQ61 |
38 | VDD | 84 | DQ57 | 130 | A3 | 176 | VSS |
39 | DQ26 | 85 | VDD | 131 | DQS0 | 177 | DOS16 |
40 | DQ27 | 86 | DQS7 | 132 | VSS | 178 | DQ62 |
41 | A2 | 87 | DQ58 | 133 | DQ31 | 179 | DQ63 |
42 | VSS | 88 | DQ59 | 134 | CB4 | 180 | VDDQ |
43 | A1 | 89 | VSS | 135 | CB5 | 181 | SA0 |
44 | CB0 | 90 | WP | 136 | VDDQ | 182 | SA1 |
45 | CB1 | 91 | SDA | 137 | CK0 | 183 | SA2 |
46 | VDD | 92 | SCL | 138 | CK0# | 184 | VDDSPD |
Контакт | Цепь | Тип | Назначение |
---|---|---|---|
116, 32 | SIO0, SIO1 | I/O CMOS | Serial I/O — последовательные данные обмена с управляющими регистрами |
34, 35, 42, 51, 53, 118, 119, 126, 135, 137 | VDD | Питание +2,5 В | |
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 37, 38, 39, 41, 45, 48, 49, 52, 54, 56, 53, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 121, 123, 125, 129, 132, 133, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168 | GND | Общий | |
2, 86, 4, 88, 6, 90, 8, 92, 10 | LDQA8…LDQA0 | I/O RSL | Шина данных A |
94 | LCFM | I RSL | Синхронизация (+) от ведущего устройства (для приема данных) |
96 | LCFMN | I RSL | Синхронизация (-) от ведущего устройства (для приема данных) |
40, 12 | VREF | Пороговый уровень сигналов RSL (1,8 В) | |
12 | LCTMN | I RSL | Синхронизация (-) к ведущему устройству (для передачи данных) |
14 | LCTM | I RSL | Синхронизация (+) к ведущему устройству (для передачи данных) |
98, 16, 100 | LROW2…LROW0 | I RSL | Шина строк (для управляющей и адресной информации) |
18, 102, 20, 104, 22 | LCOL4…LCOL0 | I RSL | Шина столбцов (для управляющей и адресной информации) |
114, 30, 112, 28, 110, 26, 108, 24, 106 | LOQB8…LOQB0 | I/O RSL | Шина данных В |
120 | LCMD | I CMOS | Последовательные команды (для обмена с управляющими регистрами). Используется и для управления энергопотреблением |
36 | LSCK | I CMOS | Синхронизация последовательных команд и данных (для обмена с управляющими регистрами) |
83, 167, 81, 165, 79, | RDQA8…RDQA0 | I/O RSL | Шина данных А |
159 | RCFM | I RSL | Синхронизация (+) от ведущего устройства (для приема данных) |
157 | RCFMN | I RSL | Синхронизация (-) от ведущего устройства (для приема данных) |
73 | RCTMN | I RSL | Синхронизация (-) к ведущему устройству (для передачи данных) |
71 | RCTM | I RSL | Синхронизация (+) к ведущему устройству (для передачи данных) |
155, 69, 153 | RROW2…RROW0 | I RSL | Шина строк (для управляющей и адресной информации) |
67, 151, 65, 148, 63 | RCOL4…RCOL0 | I RSL | Шина столбцов (для управляющей и адресной информации) |
139, 55, 141, 57, 143, 59, 145, 61, 147 | RDQB8…RDQB0 | I/O RSL | Шина данных В |
134 | RCMD | I CMOS | Последовательные команды (для обмена с управляющими регистрами). Используется и для управления энергопотреблением |
50 | RSCK | I CMOS | Синхронизация последовательных команд и данных (для обмена с управляющими регистрами) |
46 | SCL | I CMOS | Синхронизация последовательной идентификации |
47 | SDA | I/O CMOS | Данные последовательной идентификации |
131, 130 | SA1, SA0 | I CMOS | Адрес последовательной идентификации |
43, 44, 127, 128 | VT | Питание терминаторов (1,4 В) |
PQx
. Память организована в виде двух двухбайтных слов с возможностью побайтного обращения и предназначена для двух- и четырехбайтных применений. Информация об объеме, организации, адресации, быстродействии и регенерации передается через семь линий параллельной идентификации:
♦ PD7 — регенерация: 1=стандартная, 0=расширенная или саморегенерация;
♦ PD6, PD5 — время доступа: 00=50 нс, 10=70 нс, 11=60 нс;
♦ PD[4:1] — организация.
Линии CAS# | CAS0# | CAS1# | CAS2# | CAS3# |
---|---|---|---|---|
Биты данных и паритета | DQ[0:7], PQ8 | DQ[9:15], PQ17 | DQ[18:25], PQ26 | DQ[27:34], PQ35 |
Выбор банка 0 | RAS0# | RAS2# | ||
Выбор банка 1 | RAS1# | RAS3# |
Контакт | Цепь | Контакт | Цепь |
---|---|---|---|
1 | VSS | 2 | DQ0 |
3 | DQ1 | 4 | DQ2 |
5 | DQ3 | 6 | DQ4 |
7 | DQ5 | 8 | DQ6 |
9 | DQ7 | 10 | VCC |
11 | PD1 | 12 | A0 |
13 | A1 | 14 | A2 |
15 | A3 | 16 | A4 |
17 | A5 | 18 | A6 |
19 | А10 | 20¹ | PQ8 |
21 | DQ9 | 22 | DQ10 |
23 | DQ11 | 24 | DQ12 |
25 | DQ13 | 26 | DQ14 |
27 | DQ15 | 28 | A7 |
29 | А11 | 30 | VCC |
31 | А8 | 32 | A9 |
33 | RAS3# | 34 | RAS2# |
35 | DQ16 | 36¹ | PQ17 |
37 | DQ18 | 38 | DQ19 |
39 | VSS | 40 | CAS0# |
41 | CAS2# | 42 | CAS3# |
43 | CAS1# | 44 | RAS0# |
45 | RAS1# | 46 | A12 |
47 | WE# | 48 | A13 |
49 | DQ20 | 50 | DQ21 |
51 | DQ22 | 52 | DQ23 |
53 | DQ24 | 54 | DQ25 |
55¹ | PQ26 | 56 | DQ27 |
57 | DQ28 | 58 | DQ29 |
59 | DQ31 | 60 | DQ30 |
61 | VCC | 62 | DQ32 |
63 | DQ33 | 64 | DQ34 |
65¹ | PQ35 | 66 | PD2 |
67 | PD3 | 68 | PD4 |
69 | PD5 | 70 | PD6 |
71 | PD7 | 72 | VSS |
CAS[0:7]#
, сигнал RAS0#
выбирает банк 0, сигнал RAS1#
— банк 1 (при его наличии). Напряжение питания — 5 или 3,3 В, механический ключ напряжения питания расположен между контактами 59–60 и 61–62. Нечетные контакты находятся с фронтальной стороны, четные — с тыльной. Идентификация последовательная. Модули могут содержать микросхемы как DRAM, так и SDRAM, объем 8-256 Мбайт.
Контакт | Цепь¹ | Контакт | Цепь¹ | Контакт | Цепь¹ | Контакт | Цепь¹ |
---|---|---|---|---|---|---|---|
1 | VSS | 2 | VSS | 71 | RAS1# | 72 | NC |
3 | DQ0 | 4 | DQ32 | 73 | OE | 74 | NC |
5 | DQ1 | 6 | DQ33 | 75 | VSS | 76 | VSS |
7 | DQ2 | 8 | DQ34 | 77 | CB2 | 78 | CB6 |
9 | DQ3 | 10 | DQ35 | 79 | CB3 | 80 | CB7 |
11 | VCC | 12 | VCC | 81 | VCC | 82 | VCC |
13 | DQ4 | 14 | DQ36 | 83 | DQ16 | 84 | DQ48 |
15 | DQ5 | 16 | DQ37 | 85 | DQ17 | 86 | DQ49 |
17 | DQ6 | 18 | DQ38 | 87 | DQ18 | 88 | DQ50 |
19 | DQ7 | 20 | DQ39 | 89 | DQ19 | 90 | DQ51 |
21 | VSS | 22 | VSS | 91 | VSS | 92 | VSS |
23 | CAS0#/DQMB0 | 24 | CAS4#/DQMB4 | 93 | DQ20 | 94 | DQ52 |
25 | CAS1#/DQMB1 | 26 | CAS5#/DQMB5 | 95 | DQ21 | 96 | DQ53 |
27 | VCC | 28 | VCC | 97 | DQ22 | 98 | DQ54 |
29 | А0 | 30 | A3 | 99 | DQ23 | 100 | DQ55 |
31 | A1 | 32 | A4 | 101 | VCC | 102 | VCC |
33 | A2 | 34 | A5 | 103 | A6 | 104 | A7 |
35 | VSS | 36 | VSS | 105 | A8 | 106 | A11 |
37 | DQ8 | 38 | DQ40 | 107 | VSS | 108 | VSS |
39 | DQ9 | 40 | DQ41 | 109 | A9 | 110 | A12 |
41 | DQ10 | 42 | DQ42 | 111 | A10 | 112 | A13 |
43 | DQ11 | 44 | DQ43 | 113 | VCC | 114 | VCC |
45 | VCC | 46 | VCC | 115 | CAS2#/DQMB1 | 116 | CAS6#/DQMB6 |
47 | DQ12 | 48 | DQ44 | 117 | CAS3#/DQMB3 | 118 | CAS7#/DQMB7 |
49 | DQ13 | 50 | DQ45 | 119 | VSS | 120 | VSS |
51 | DQ14 | 52 | DQ46 | 121 | DQ24 | 122 | DQ56 |
53 | DQ15 | 54 | DQ47 | 123 | DQ25 | 124 | DQ57 |
55 | VSS | 56 | VSS | 125 | DQ26 | 126 | DQ58 |
57 | CB0 | 58 | CB4 | 127 | DQ27 | 128 | DQ59 |
59 | CB1 | 60 | CB5 | 129 | VCC | 130 | VCC |
Ключ напряжения питания | 131 | DQ28 | 132 | DQ60 | |||
Ключ напряжения питания | 133 | DQ29 | 134 | DQ61 | |||
61 | DU/CLK0 | 62 | DU/CKE0 | 135 | DQ30 | 136 | DQ62 |
63 | VCC | 64 | VCC | 137 | DQ31 | 138 | DQ63 |
65 | DU/RAS# | 66 | DU/CAS# | 139 | VSS | 140 | VSS |
67 | WE# | 68 | NC/CKE1 | 141 | SDA | 142 | SCL |
69 | RAS0#/S0# | 70 | NC/A12 | 143 | VCC | 144 | VCC |
CS#
, ОЕ#
и WE#
. Микросхема выбирается низким уровнем сигнала CS#
(Chip select), низкий уровень сигнала ОЕ#
(Output Enable) открывает выходные буферы для считывания данных, WE#
(Write Enable) низким уровнем разрешает запись. Временные диаграммы циклов обращения приведены на рис. 7.17. При операции записи управление выходными буферами может производиться как сигналом ОЕ#
(цикл 1), так и сигналом WE#
(цикл 2). Для удобства объединения микросхем внутренний сигнал CS#
может собираться по схеме «И» из нескольких внешних, например CS0#
, CS1#
и CS2#
— в таком случае микросхема будет выбрана при сочетании логических сигналов 0, 1, 0 на соответствующих входах.
CS#
, OE#
и WE#
), синхронная память использует сигнал CLC
(Clock) для синхронизации с системной шиной и сигналы управления пакетным циклом ADSP#
, CADS#
и ADV#
. Сигналы CADS#
(Cache ADdress Strobe) и ADSP#
(ADdress Status of Processor), которыми процессор или кэш-контроллер отмечает фазу адреса очередного цикла, являются стробами записи начального адреса цикла во внутренний регистр адреса. Любой из этих сигналов инициирует цикл обращения, одиночный (single) или пакетный (burst), а сигнал ADV#
(ADVance) используется для перехода к следующему адресу пакетного цикла. Все сигналы, кроме сигнала управления выходными буферами ОЕ#
, синхронизируются по положительному перепаду сигнала CLK
. Это означает, что значение входных сигналов должно установиться до перепада и удерживаться после него еще некоторое время. Выходные данные при считывании будут также действительны во время этого перепада. Микросхемы синхронной статической памяти, как и SDRAM, обычно имеют сигнал, выбирающий режим счета адреса: чередование (для процессоров Intel) или последовательный счет (для Power PC).
Конвейерно-пакетная статическая память, PB SRAM (Pipelined Burst SRAM), — усовершенствование синхронной памяти (слово «синхронная» из ее названия для краткости изъяли, но оно обязательно подразумевается). Конвейером является дополнительный внутренний регистр данных, который, требуя дополнительного такта в первой пересылке цикла, позволяет остальные данные получать без тактов ожидания даже на частотах выше 75 МГц. Задержка данных относительно синхронизирующего перепада у современных микросхем PB SRAM составляет 4,5–8 нс! Но, как и в случае Sync Burst SRAM, этот параметр не является временем доступа в чистом виде (не следует забывать о двух-трех тактах в первой передаче), а отражает появление действительных данных относительно очередного перепада сигнала синхронизации. Интерфейс PB SRAM аналогичен интерфейсу Sync Burst SRAM.
Микросхема и организация | Корпус | Рисунок | Примечание |
---|---|---|---|
2716 — 2 К×8 | DIP-24 | 7.18, а | 20 = ОЕ#; 21 = Vpp |
2732 — 4 К×8 | DIP-24 | 7.18, а | 20 = OE#/Vpp, 21=A11 |
2764 — 8 К×8 | DIP-28 | 7.18, б | 1 = Vpp, 22 = OE#; 26 = NC, 27 = PGM# |
27128 — 16 К×8 | DIP-28 | 7.18, б | 1 = Vpp, 22 = OE#; 26 = A13, 27 = PGM# |
27256 — 32 К×8 | DIP-28 | 7.18, б | 1 = Vpp, 22 = OE#; 26 = A13, 27 = A14 |
27512 — 64 К×8 | DIP-28 | 7.18, б | 1 = A15, 22 = OE#/Vpp, 26 = A13, 27 = A14 |
27010 — 128 К×8 | DIP-32 | 7.18, б | 30 = NC |
27010 — 128 К×8 | TSOP-32 | 7.19, а | 6 = NC |
27010 — 128 К×8 | PLCC-32 | 7.19, б | 30 = NC |
27020 — 256 К×8 | DIP-32 | 7.18, в | - |
27020 — 256 К×8 | TSOP-32 | 7.19, а | - |
27020 — 256 К×8 | PLCC-32 | 7.19, б | - |
Сигнал | Назначение |
---|---|
СЕ# | Chip Enable — разрешение доступа. Низкий уровень разрешает обращение |
к микросхеме, высокий уровень переводит микросхему в режим пониженного потребления | |
ОЕ# | Output Enable — разрешение выходных буферов. Низкий уровень при низком уровне СЕ# разрешает чтение данных из микросхемы. У некоторых типов микросхем на этот же вывод в режиме программирования подается напряжение VPP |
DQx | Data Input/Output — двунаправленные линии шины данных. Время доступа при чтении отсчитывается от установки действительного адреса или сигнала СЕ# (в зависимости от того, что происходит позднее) |
Ах | Address — входные линии шины адреса. Линия А9 допускает подачу высокого (12В) напряжения для чтения кода производителя (А0 = 0) и устройства (А0 = 1), при этом на остальные адресные линии подается логический ноль |
PGM# | Programm — импульс программирования (некоторые микросхемы не имеют этого сигнала, их программирование осуществляется по сигналу СЕ# при высоком уровне VPP) |
VPP | Программирующее напряжение питания (для некоторых типов — импульс) |
VCC | Питание (+5 В) |
CLK
. Адрес начала пакета передается вместе с сигналом ADV#
(фиксируются по положительному перепаду CLK
). Первые данные на выходе появятся через 3 такта, после чего в каждом следующем такте будут выдаваться очередные данные.
Синхронная флэш-память имеет интерфейс (и даже упаковку в корпуса), совпадающий с SDRAM. В настоящее время выпускаются микросхемы с частотой 66 МГц (например, MT28S4M16LC — 1 М×16×4 банка), ожидаются микросхемы и на 133 МГц. Такая память удобна для встраиваемых компьютеров для хранения ПО, исполняемого прямо на месте (без копирования в ОЗУ).
Микросхемы флэш-памяти с симметричной архитектурой выпускаются и с интерфейсом DRAM (динамической памяти) — с мультиплексированной шиной памяти, стробируемой сигналами RAS#
и CAS#
. Они предназначены для применения в модулях SIMM или DIMM, устанавливаемых в гнезда для обычной динамической памяти. Таким образом реализуются, например, модули PostScript для лазерных принтеров и любые резидентные программные модули. Эти модули, естественно, не будут определяться системой как основная память — на попытку обычной записи и считывания, предпринимаемую в тесте POST при определении установленной памяти, они ответят весьма своеобразно. Также они не будут восприниматься и как модули дополнительной системы BIOS, поскольку займут неподходящие для этого физические адреса. Использоваться эти модули смогут только с помощью специального драйвера, который «объяснит» чипсету, какому диапазону адресов пространства памяти соответствуют сигналы выборки банков флэш-памяти. Поскольку интерфейс модулей SIMM и DIMM не предполагает сигналов защиты записи, системного сброса и дополнительного питания +12 В, все вопросы, связанные с программированием и защитой, решаются дополнительными элементами, устанавливаемыми на модулях. При использовании 16-битных микросхем такие модули непосредственно не обеспечивают независимую побайтную запись, но она может обеспечиваться программно, маскированием (записью 0FFh) немодифицируемых байт.
Для хранения BIOS появились микросхемы флэш-памяти с интерфейсом LPC, называемые хабами (firmware hub).
Для некоторых сфер применения требуются специальные меры по блокированию изменения информации пользователем. Так, Intel в некоторые микросхемы вводит однократно записываемые регистры OTP (One-Time-Programmable). Один 64-битный регистр содержит уникальный заводской номер, другой может программироваться пользователем (изготовителем устройства) только однажды.
Фирма Intel выпускает микросхемы «Wireless Flash Memory» — за интригующим названием скрывается, конечно же, «нормальный» электрический интерфейс с проводами (wireless — без проводов). Однако они ориентированы на применение в средствах беспроводной связи (сотовые телефоны с доступом к Интернету): питание 1,85 В, наличие регистров OTP для защиты от мошенничества и т.п.
Сигнал | Назначение |
---|---|
СЕ# | Chip Enable — разрешение доступа. Низкий уровень разрешает обращение к микросхеме, высокий уровень переводит микросхему в режим пониженного потребления. Доступ к микросхеме, имеющей два входа (СЕ1# и СЕ2#), возможен при низком уровне на обоих входах |
ОЕ# | Output Enable — разрешение выходных буферов. Низкий уровень при низком уровне сигнала СЕ# разрешает чтение данных из микросхемы. Подача высокого (12В) напряжения во время подачи команды стирания или программирования позволяет модифицировать и Boot-блок (этот метод используется редко, поскольку требует не-ТТЛ сигнала) |
WE# | Write Enable — разрешение записи. Низкий уровень при низком уровне сигнала СЕ# разрешает запись и переводит выходные буферы в высокоимпедансное состояние независимо от сигнала ОЕ#. Временные диаграммы шинного цикла записи аналогичны обычной статической памяти, что позволяет подключать флэш-память непосредственно к системной шине процессора. Допустимы оба способа управления — как с помощью сигнала WE# на фоне низкого уровня СЕ#, так и наоборот. Минимальная длительность импульса записи совпадает со временем доступа |
DQx | Data Input/Output — двунаправленные линии шины данных. Время доступа при чтении отсчитывается от установки действительного адреса или сигнала СЕ# (в зависимости от того, что происходит позднее). Фиксация данных при записи происходит по положительному перепаду WE# или СЕ# в зависимости оттого, что происходит раньше |
BYTE# | Управляющий сигнал для выбора режима обращения к микросхемам с 8/16-битной организацией. Они имеют два 8-битных банка, и их ячейки памяти адресуются 16-битными словами. Низкий уровень сигнала BYTE# задает восьмибитный режим обмена по линиям DQ[0:7], при этом линия DQ15/A-1 становится самой младшей линией адреса, переключающей банки, а линии DQ[8:14] переходят в высокоимпедансное состояние |
Ах | Address — входные линии шины адреса. Линия А9 допускает подачу высокого (12В) напряжения (как и EPROM) для чтения кода производителя (А0=0) и устройства (А0=1), при этом на остальные адресные линии подается логический «0» |
RP# (PWD#) | Reset/Power Down, раньше обозначался PWD# (PowerDown). Низкий уровень сбрасывает регистр команд и переводит микросхемы в режим «глубокого сна» (Deep Powerdown) с минимальным (доли микроампера) потреблением питания. Перевод сигнала в высокий логический уровень «пробуждает» микросхему (примерно за 0,3–0,8 мкс), после чего она переходит в режим чтения данных. Подача высокого (12В) напряжения разрешает программирование даже защищенного Boot-блока |
WP# | Write Protect — защита записи. При низком уровне WP# модификация Boot-блока или других блоков с установленным битом защиты возможна только при наличии высокого (12В) напряжения на входе RP#. При высоком уровне защита блоков игнорируется |
RY/BY# | Ready/Busy# — сигнал готовности (высокий уровень) микросхемы к очередной операции программирования или стирания. Низкий уровень указывает на занятость управляющего автомата (WSM) выполнением операции стирания или программирования. Выход обычно не управляется сигналами ОЕ# и СЕ#. В микросхемах 28F016SA и выше выход имеет тип «открытый коллектор», запираемый по команде, и программируемое назначение |
3/5# | Сигнал, переключающий режим работы микросхемы в зависимости от питающего напряжения, введен для оптимизации быстродействия или потребления |
Обозначение | Организация¹ |
---|---|
256 | 32 К×8 BE |
512 | 64 К×8 BE |
010 | 128 К×8 BE |
020 | 256 К×8 BE |
001 | 128 К×8 BB |
002 | 256 К×8 BB |
004 | 512 К×8 BB, SA |
008 | 1 М×8 BB, SA |
016 | 2 М×8 BB, SA |
200 | 256 К×8/128 К×16 BB |
400 | 512 К×8/256 К×16 BB |
800 | 1024 К×8/512 К×16 BB |
160 | 2 М×8/1 M×16 SA, BB |
320 | 4 M×8/2 M×16 SA |
640 | 8 M×8/4 M×16 SA |
СЕ#
(выбор) и WE#
(запись). Последующие обращения к этой области как по записи (W), так и по чтению (R) должны соответствовать исполняемой команде (табл. 7.25). В шинном цикле записи адрес (если он требуется для данной команды) фиксируется по спаду сигнала WE#
, фиксация данных выполнения команды происходит по фронту WE#
. Большинство команд подается безадресно (по любому адресу, принадлежащему данной микросхеме); команда верификации стирания и второй цикл команды программирования подаются по адресу требуемой ячейки. Результаты стирания и программирования считываются по адресу конкретной интересующей ячейки.
Команда | Число циклов шины | Первый цикл шины¹ | Второй (третий) цикл шины¹ | ||||
---|---|---|---|---|---|---|---|
R/W | Адрес | Данные | R/W | Адрес | Данные | ||
Read Memory | 1 | W | X | 00h | - | - | - |
Read ID | 3 | W | X | 90h | R | 0(1) | M_Id (D_Id) |
Set-up Erase/Erase | 2 | W | X | 20h | W | X | 20h |
Erase Verify | 2 | W | EA | A0h | R | X | EVD |
Set-up Program/Program 2 | 2 | W | X | 40h | W | PA | PD |
Program Verify | 2 | W | X | C0h | R | X | PVD |
Reset | 2 | W | X | FFh | W | X | FFh |
Read Memory
— команда чтения данных, переводящая микросхему в режим чтения, совместимый по интерфейсу с EPROM.
♦ Read ID
— команда чтения идентификаторов. В последующих шинных циклах чтения по адресу 0 считывается M_Id
(Manufacturer Identifier — идентификатор производителя, 89h), по адресу 1 — D_Id
(Device Identifier — идентификатор устройства, для микросхем 8F256, 28F512, 28F010, 28F020 это B9h, B8h, B4h и BDh соответственно). Из этого режима микросхема выходит по записи любой другой действительной команды. Идентификаторы можно читать и путем подачи высокого напряжения на А9
(как и для EPROM).
♦ Set-up Erase
/Erase
— подготовка и собственно стирание. Внутренний цикл стирания начинается по подъему сигнала WE#
во втором шинном цикле и завершается по последующему шинному циклу записи или по внутреннему таймеру (Stop Timer). Последующей командой обычно является верификация стирания. Два шинных цикла записи, необходимые для выполнения команды, Снижают вероятность случайного стирания и позволяют отказаться от выполнения стирания посылкой команды Reset
. Наличие внутреннего таймера позволяет не заботиться о точной выдержке времени для стирания, необходимо только выдержать минимальный интервал (около 10 мс). Перед стиранием все биты микросхемы должны быть предварительно запрограммированы в нули.
♦ Erase Verify
— верификация стирания. Отличается от обычного считывания тем, что проверяемая ячейка ставится в более жесткие условия считывания для повышения достоверности контроля стирания. Между шинными циклами команды верификации должна быть пауза не менее 6 мкс. Алгоритм быстрого стирания (Quick-Erase) предусматривает предварительное обнуление всех ячеек (командами программирования) и выполнение команды стирания, сопровождаемой верификацией. Команды верификации последовательно выполняются для каждой ячейки микросхемы. Если результат считывания отличается от FFh, производится повторное стирание (длительностью 10 мс), и последующая верификация может начинаться с первой ранее не стертой ячейки. Если количество повторов стирания превышает 3 000, фиксируется ошибка стирания и микросхема признается негодной. Алгоритм позволяет выполнить полное стирание микросхемы менее чем за секунду.
♦ Set-up Program
/Program
— подготовка и собственно программирование. Команда выполняется аналогично стиранию, но во втором шинном цикле передается адрес и данные программируемой ячейки, а последующая выдержка должна составлять не менее 10 мкс.
♦ Program Verify
— верификация программирования (аналогично верификации стирания), обычно следующая после команды программирования. Между шинными циклами команды верификации должна быть пауза не менее 6 мкс. Алгоритм быстрого программирования (Quick-Pulse Programming) предусматривает формирование внутреннего цикла программирования длительностью 10 мкс с последующей верификацией. В случае несовпадения результата выполняется повторное программирование (до 25 раз для каждой ячейки), а если и это не помогает — фиксируется отказ микросхемы.
♦ Reset
— команда сброса, прерывающая команду программирования или стирания. Эта команда не меняет содержимое памяти; после нее требуется подача другой действительной команды.
По включении питания внутренний регистр команд обнуляется, что соответствует команде чтения, и микросхема работает как обычная микросхема PROM или EPROM. Это позволяет устанавливать микросхемы флэш-памяти вместо EPROM аналогичной емкости. При подаче на вход VPP низкого напряжения (0–6,5 В) стирание и программирование невозможны, и микросхема ведет себя как обычная EPROM.
Микросхемы второго поколения секторированы — ячейки группируются в блоки, допускающие независимое стирание (асимметричное разбиение — Boot Block и симметричное — Flash File). Длительная операция стирания одного блока может прерываться для считывания данных других блоков, что значительно повышает гибкость и производительность устройства. Микросхемы имеют более сложный внутренний управляющий автомат и в них введен регистр состояния, что позволяет разгрузить внешний процессор и программу от забот по отслеживанию длительности операций программирования и стирания, а также упростить эти процедуры.
В отличие от микросхем первого поколения, в шинном цикле записи адрес и данные фиксируются по положительному перепаду WE#
. Низкий уровень дополнительного управляющего сигнала RP#
(в первых версиях обозначался как PWD#
) предназначен для перевода микросхемы в режим с минимальным потреблением. В этом режиме модификация содержимого памяти невозможна. Соединение этого вывода в нормальном режиме (когда не требуется перезапись Boot-блока) с системным сигналом RESET#
предохраняет микросхему от выполнения ложных команд, которые могут появиться в процессе подачи питания.
Внутренние операции стирания и программирования выполняются после посылки соответствующих кодов во внутренний регистр команд. Команды приведены в табл. 7.26. Как и в первом поколении, этот регистр для большинства команд безадресный, но команды программирования и стирания посылаются по требуемому адресу ячейки (блока). Отработка операций внутренним управляющим автоматом отображается соответствующими битами регистра состояния SR
(Status Register), по значению которых внешняя программа может получить информацию о результате выполнения и возможности посылки следующих команд. Чтение регистра SR
выполняется по специальной команде; есть и команда его очистки. Назначение бит регистра состояния описано ниже.
♦ SR.7
— WSMS
(Write State Machine Status) — состояние управляющего автомата:
• 0 — Busy (занят операцией стирания или программирования);
• 1 — Ready (свободен).
♦ SR.6
— ESS
(Erase Suspend Status) — состояние операции стирания:
• 0 — стирание завершено или выполняется;
• 1 — стирание приостановлено.
♦ SR.5
— ES
(Erase Status) — результат стирания блока:
• 0 — блок стерт успешно;
• 1 — ошибка стирания.
♦ SR.4
— PS
(Program Status) — результат программирования байта:
• 0 — байт записан успешно;
• 1 — ошибка записи.
♦ SR.3
— VPPS
(VPP Status) — состояние VPP во время программирования или стирания:
• 0 — напряжение было в норме;
• 1 — зафиксировано понижение напряжения, и операция прервана.
♦ SR[2:0]
— зарезервированы.
Команда | Число циклов шины | Первый цикл шины¹ | Второй (третий) цикл шины¹ | ||||
---|---|---|---|---|---|---|---|
R/W | Адрес | Данные | R/W | Адрес | Данные | ||
Read Array/Reset | 1 | W | X | FFh | - | - | _ |
Read ID (D_Id) | 3 | W | X | 90h | R | 0(1) | M_Id |
Read Status Register | 2 | W | X | 70h | R | X | SRD |
Clear Status Register | 1 | W | X | 50h | - | - | - |
Erase Setup/Erase Confirm | 2 | W | BA | 20h | W | BA | D0h |
Erase Suspend/Erase Resume | 2 | W | X | B0h | W | X | D0h |
Program Setup/Program | 2 | W | PA | 40h | W | PA | PD |
Alternate Program Setup/Program² | 2 | W | PA | 10h | W | PA | PD |
Read Array
/Reset
— чтение массива памяти (перевод в режим, совместимый с EPROM) и прерывание операций стирания и программирования.
♦ Read ID
— чтение идентификаторов производителя и устройства.
♦ Read Status Register
— чтение регистра состояния.
♦ Clear Status Register
— сброс регистра состояния.
♦ Erase Setup/Erase Confirm
— подготовка и стирание блока. В отличие от микросхем первого поколения, все внутренние операции, необходимые для стирания (обнуление ячеек блока, стирание и верификация), выполняются автоматически. При получении команды в регистре состояния устанавливается признак занятости (SR.7
=0) и любая шинная операция чтения микросхемы будет передавать данные этого регистра. Внешняя программа, периодически опрашивая регистр состояния, дожидается окончания выполнения стирания (когда SR.7
=1). Результат стирания определяется по значению бит 3, 4, 5 (их нулевое значение соответствует успешному выполнению операции).
♦ Erase Suspend
/Erase Resume
— приостановка/продолжение стирания. Операцию стирания блока (как самую длительную) можно приостановить для чтения данных из других блоков. После выполнения команды Erase Suspend
(код B0h) необходимо дождаться признака приостановки стирания (SR.6
=1), после чего, подав команду Read Array
, можно считывать данные другого блока. По окончании считывания подается команда Erase Resume
(код D0h), которая продолжает процесс стирания и снова переводит микросхему в режим чтения регистра состояния.
♦ Program Setup
/Program
— подготовка и программирование ячейки. Эта команда выполняется аналогично подготовке и выполнению стирания, но не может быть приостановлена. Команда выполняет сразу и программирование, и верификацию.
Команды стирания блока и программирования можно подавать, только когда управляющий автомат свободен (бит SR.7
=1). Во время этих операций микросхема следит за уровнем напряжения VPP, и, если оно понижается до порога VPPLK) этот факт регистрируется в регистре состояния и операция прерывается. Также операция прерывается при понижении напряжения питания VCC до 2,5 В.
При считывании регистра состояния его мгновенное значение фиксируется по спаду сигнала СЕ#
или ОЕ#
(самого позднего из них в шинном цикле считывания).
Программирование и стирание Boot-блока отличаются от операций с другими блоками тем, что для них требуется подача высокого потенциала VHH (не ТТЛ, а +12 В) на вход PWD#
перед выдачей команды стирания или программирования и удержание его до успешного завершения операции. Альтернативный способ — подача такого же потенциала, но на вход ОЕ#
на время пар шинных циклов записи команд стирания или программирования. Попытка программирования Boot-блока без выполнения этих условий не удается, а в регистре состояния одновременно устанавливаются единичные значения бит ES
и PS
, что индицирует попытку модификации защищенного блока.
Микросхемы Flash-file организованы в виде набора одинаковых блоков, равноправных (симметричных) по защите (Symmetrical Architecture, SA), Защита от модификации для 28F008SA может осуществляться только для всей микросхемы подачей низкого напряжения на вход VPP. По интерфейсу и командам микросхемы совпадают с микросхемами Boot Block (исключая специфику Boot-блока).
Архитектура микросхем 28F016SA существенно изменена, что значительно повышает производительность программирования (до 28,6 Мбайт/с в пакетном режиме) и обеспечивает поблочную защиту. Микросхема имеет два буфера данных для записи по 256 Кбайт. Флэш-память организована как 32 блока по 64 Кбайт, допускающих однобайтное или двухбайтное обращение. С каждым блоком связан собственный 8-битный регистр состояния блока BSRx
(Block Status Register). Адреса регистров смещены относительно начального адреса блока на 2 или 1 для режимов обращения x8 или x16 соответственно. Назначение бит BSR
описано ниже.
♦ BSR.7
— BS
(Block Status) — состояние блока:
• 1 — готов;
• 0 — занят.
♦ B5R.6
— BLS
(Block-Lock Status) — состояние защиты блока:
• 1 — программирование и стирание запрещены;
• 0 — блок не защищен.
♦ BSR.5
— BOS
(Block Operation Status) — состояние операции с блоком:
• 1 — операция завершена безуспешно;
• 0 — операция успешно завершена или выполняется.
♦ BSR.4
— BOAS
(Block Operation Abort Status) — состояние отмены операции с блоком:
• 1 — операция отменена;
• 0 — операция не отменялась.
♦ BSR.3
— QS
(Queue Status) — состояние очереди:
• 1 — очередь заполнена;
• 0 — очередь доступна.
♦ BSR.2
— VPPS
(VPP Status) — состояние VPP:
• 1 — обнаружен низкий уровень, операция прервана;
• 0 — VPP в норме.
♦ BSR[1:0]
— зарезервированы.
Глобальный регистр состояния GSR
(Global Status Register) несет информацию о состоянии микросхемы в целом. К GSR
можно обращаться по адресу, смещенному относительно начального адреса любого блока на 4 или 2 для режимов обращения x8 или x16 соответственно. Назначение бит GSR
описано ниже.
♦ GSR.7
— WSMS
(Write State Machine Status) — состояние автомата записи (и завершенности внутренних операций):
• 1 — занят;
• 0 — свободен.
♦ GSR.6
— OSS
(Operation Suspend Status) — состояние приостановки операции:
• 1 — операция приостановлена;
• 0 — операция выполняется или завершена.
♦ GSR.5
— DOS
(Device Operation Status) — состояние операции (копирует бит регистра состояния текущего блока):
• 1 — операция завершена неудачно;
• 0 — операция успешно завершена или выполняется.
♦ GSR.4
— DSS
(Device Sleep Status) — состояние ожидания:
• 1 — ожидание (Sleep);
• 0 — нормальный режим.
♦ GSR.3
— QS
(Queue Status) — состояние очереди:
• 1 — очередь заполнена;
• 0 — очередь доступна.
♦ GSR.2
— PBAS
(Page Buffer Available Status) — состояние буферов записи:
• 1 — есть свободный буфер;
• 0 — нет свободного буфера.
♦ GSR.1
— PBS
(Page Buffer Status) — состояние выбранного буфера записи:
• 1 — выбранный буфер свободен;
• 0 — буфер занят операцией с WSM.
♦ GSR.0
— PBSS
(Page Buffer Select Status) — номер выбранного буфера:
• 1 — выбран буфер 1;
• 0 — выбран буфер 0.
Для сохранения программной совместимости имеется безадресный регистр CSR
(Compatible Status Register), полностью совпадающий с регистром состояния 28F008SA и микросхем с архитектурой Boot Block. Все команды этих микросхем доступны. Введены новые команды (табл. 7.27), обеспечивающие расширение функций. Ниже перечислены дополнительные возможности микросхем.
♦ Буферированное страничное программирование. Кроме обычного побайтного или двухбайтного программирования возможно быстрое заполнение буфера шинными циклами записи. Далее переписывание его содержимого (всего или фрагмента) во флэш-память выполняется одной командой. Содержимое буфера может быть считано после подачи соответствующей команды.
♦ Двухбайтное программирование при 8-битном использовании.
♦ Поддержка очереди команд позволяет при наличии свободного места в очереди подавать последующие команды стирания или программирования, не дожидаясь освобождения автомата WSM. Признак готовности WSM установится только после выполнения всех команд очереди.
♦ Автоматическая запись из буфера во флэш-массив во время стирания другого блока. Программная защита позволяет для любого блока установить бит защиты в специальную энергонезависимую область. Запись и стирание защищенного блока может осуществляться только после снятия общей защиты записи по сигналу WP#
. Сброс бита защиты блока осуществляется только при его успешном стирании или перезаписи.
♦ Стирание всех незащищенных блоков может выполняться одной командой.
♦ Программирование использования сигнала RY/BY#
. Возможно разрешение отображения бита готовности глобального регистра состояния, подачи импульсного сигнала по завершении программирования или стирания (на выбор), а также запрет его формирования.
♦ Перевод микросхемы в режим ожидания (Sleep) с пониженным потреблением В этом режиме возможно считывание состояния и получение команд.
Команда | Первый цикл шины | Второй цикл шины | Третий цикл шины | ||||||
---|---|---|---|---|---|---|---|---|---|
R/W | Адрес¹ | Данные² | R/W | Адрес¹ | Данные² | R/W | Адрес¹ | Данные² | |
Read Extended Status Register (чтение дополнительных регистров) | W | X | xx71h | R | RA | GSRD BSRD | - | - | - |
Page Buffer Swap (смена буфера) | W | X | xx72h | - | - | - | - | - | - |
Read Page Buffer (чтение буфера) | W | X | xx75h | R | РВА | PBD | - | - | - |
Single Load to Page Buffer (одиночная запись в буфер) | W | X | xx74h | W | РВА | PBD | - | - | - |
Sequential Load to Page Buffer x8/x16 (последовательная запись в буфер) | W | X | xxE0h | W | X | BCL/WCL³ | W | X | BCH/WCH³ |
Page Buffer Write to Flash x8/х16 (перепись буфера в массив) | W | X | xx0Ch | W | A0 | BC(LH)/WCL³ | W | X | BC(HL)/WCH³ |
Two-Byte Write x8 (двухбайтное программирование в режиме x8) | W | X | xxFBh | W | A0 | WD(L,H)³ | W | WA | WD(H,L)³ |
Lock Block/Confirm (защита блока) | W | X | xx77h | W | BA | xxD0h | - | - | - |
Upload Status Bits/Confirm (выгрузка состояния блока в GSR) | W | X | xx97h | W | X | xxD0h | - | - | - |
Upload Device Information (выгрузка информации об устройстве) | W | X | xx99h | W | X | xxD0h | - | - | - |
Erase All Unlocked Blocks/Confirm (стирание всех незащищенных блоков) | W | X | xxA7h | W | X | xx00h | - | - | - |
RY/BY# Enable to Level-Mode (разрешение отображения GSR.7 потенциалом) | W | X | xx96h | W | X | xx01h | - | - | - |
RY/BY# Pulse-On-Write (импульс по окончании программирования) | W | X | xx96h | W | X | xx02h | - | - | - |
RY/BY# Pulse-On-Erase (импульс по окончании стирания) | W | X | xx96h | W | X | xx03h | - | - | - |
RY/BY# Disable (запрет сигнала RY/BY#) | W | X | xx96h | W | X | xx04h | - | - | - |
Sleep (режим ожидания) | W | X | xxF0h | - | - | - | - | - | - |
Abort (отмена операции) | W | X | xx80h | - | - | - | - | - | - |
СЕ#
одного из них соединены с выводами СЕ0#
и СЕ1#
, второго — с СЕ0#
и СЕ2#
.
Третье поколение — современные микросхемы, выполненные по технологии SmartVoltage, допускают стирание и программирование при напряжении VPP как 12 В, так и 5 В. В последнем случае эти операции занимают больше времени. Кроме того, операции чтения возможны при пониженном (3,3 и даже 2,7 В) напряжении питания VCC, при этом снижается потребление, но увеличивается время доступа.
Для управления защитой данных введен логический сигнал WP#
(Write Protect). При его высоком уровне программирование и стирание защищенных блоков выполняются так же, как и остальных. При низком уровне WP#
модификация защищенных блоков возможна только при наличии высокого (12 В) напряжения на входе RP#
.
Для полной защиты от стирания и программирования на вход VPP должен подаваться низкий логический уровень (или 0 В), а не 5 В, как у микросхем с программированием напряжением 12 В.
Настройка (оптимизация потребления и быстродействия) происходит по уровню напряжения на выводе VCC по включении питания, переход на другое значение должен производиться через выключение питания.
D6
, который при каждом шинном цикле считывания во время выполнения операции меняет свое значение на противоположное. По окончании операции он остановится в каком-либо состоянии, при этом об успешности можно судить по биту 7. Единичное значение бита D5
— Exceeded Timing Limits — указывает на превышение допустимого времени выполнения операции.
Команда | Reset/Read | Autoselect | Byte Program | Chip Erase | Sector Erase | |
---|---|---|---|---|---|---|
Количество циклов | 3 | 3 | 4 | 6 | 6 | |
1-й цикл | Addr | 5555h | 5555h | 5555h | 5555h | 5555h |
Data | AAh | AAh | AAh | AAh | AAh | |
2-й цикл | Addr | 2AAAh | 2AAAh | 2AAAh | 2AAAh | 2AAAh |
Data | 55h | 55h | 55h | 55h | 55h | |
3-й цикл | Addr | 5555h | 5555h | 5555h | 5555h | 5555h |
Data | F0h | 90h | A0h | 80h | 80h | |
4-й цикл | Addr | - | XX00h/XX01h | PA¹ | 5555h | 5555h |
Data | - | 01h/20h | PD² | AAh | AAh | |
5-й цикл | Addr | - | - | - | 2AAAh | 2AAAh |
Data | - | - | - | 55h | 55h | |
6-й цикл | Addr | - | - | - | 5555h | SA³ |
Data | - | - | - | 10h | 30h |
A15
, A16
существенно только при задании адреса ячейки. Ниже описано назначение команд.
♦ Reset
/Read
— сброс и перевод в режим считывания массива. Производится автоматически по включении питания и при получении некорректной команды (или адреса) в цепочке.
♦ Autоsеlесt
— чтение кодов идентификации производителя (А
=0), устройства (А
=1) или состояния защиты сектора (биты A16
-А14
задают адрес сектора, A2
=1, остальные биты адреса — нулевые). Результат считывания состояния защищенного сектора — 01h, незащищенного — 00h. Идентификаторы и состояние защиты могут быть считаны и путем подачи высокого напряжения на вход А9
в шинном цикле считывания.
♦ Byte Program
— программирование байта. После четвертого цикла шины начинается внутреннее выполнение программирования, при этом чтение по адресу программируемой ячейки выводит биты состояния.
♦ Chip Erase
— стирание всех незащищенных секторов. На время выполнения стирания чтение по любому адресу (кроме адресов, принадлежащих защищенным секторам) выводит биты состояния.
♦ Sector Erase
— стирание сектора или группы секторов. Стирание начинается через 80 мкс после окончания последнего шинного цикла цепочки. До этого момента можно посылать цепочки команд стирания других секторов, выполнение начнется через 80 мкс после окончания последней цепочки. Если среди указанных секторов имеется защищенный, его стирание не выполняется. На время выполнения стирания чтение по адресу любого из стираемых секторов (кроме защищенных) выводит биты состояния. Бит DQ3
— Sector Erase Timer — указывает на начало выполнения стирания сектора (очередную последовательность команд стирания сектора можно начинать, пока бит 3=0).
Следующим этапом стала секторированная флэш-память Am29LVxxx с одним питающим напряжением (3,0 В) для всех операций. У этих микросхем защита любого сектора также устанавливается с помощью программатора стандартной микросхемы EPROM, а также возможно временное снятие защиты в целевой системе. Кроме программной индикации окончания операции (биты 5–7, считанные по адресу ячейки), имеется и аппаратная (сигнал RY
/BY#
). Также имеется сигнал аппаратного сброса, переводящий в режим чтения.
Вышеперечисленные микросхемы имеют традиционную архитектуру NOR. От них значительно отличается микросхема Am30LV0064D — 64 Мбит (8 М×8) с архитектурой UltraNAND, обеспечивающей быстрый последовательный доступ к данным выбранной страницы. Каждая страница имеет 512 байт данных и 16 дополнительных байт, используемых, например, для хранения ЕСС-кода. Для выбора страницы при чтении (загрузки во внутренний 528-байтный регистр) требуется около 7 мкс, после чего данные считываются последовательно со скоростью до 20 Мбайт/с (50 нс/байт). Таким образом, среднее время на чтение одного байта составляет всего 65 нс. Для записи данные (страница полностью или частично) загружаются в регистр с той же скоростью, после чего запись их в массив хранящих ячеек требует всего 200 мкс. Таким образом, среднее время на запись одного байта составляет всего 430 нс — в 20 раз быстрее обычной (NOR) флэш-памяти (скорость записи 2,3 Мбайт/с). Стирание выполняется блоками по 8 Кбайт за 2 мс (в обычной — 600 мс). Микросхема питается от 3 В. Планируется достижение объема микросхемы до 1 Гбит. Надежность хранения — 10 лет, 104 циклов безошибочного программирования, более 106 циклов программирования с коррекцией ошибок. Применение — «твердые диски», цифровые камеры, диктофоны и т. п.
QUERY
. В первом шинном цикле в микросхему по адресу 55h посылается код 98h (микросхема может и игнорировать адрес, «отзываясь» только на код данных 98h). Во втором шинном цикле, адресованном к этой микросхеме, выполняется чтение данных идентификационной структуры (на шину адреса микросхемы подается адрес интересующего байта структуры). Этими парами циклов структура может быть считана в произвольном порядке. Идентификационная структура содержит:
♦ ключ-признак наличия структуры — цепочка символов «QRY»;
♦ идентификатор (2 байта) первичного набора команд и интерфейса программирования;
♦ указатель на таблицу параметров для программирования (и саму таблицу);
♦ идентификатор, указатель и таблицу параметров альтернативного набора команд и интерфейса (если имеется);
♦ минимальные и максимальные значения напряжений питания (основного и программирующего);
♦ значение тайм-аутов для операций стирания (блока и всей микросхемы) и записи (байта, слова, буфера);
♦ объем памяти;
♦ максимальное число байтов для многобайтной записи;
♦ описания независимо стираемых блоков.
Для перевода в режим чтения массива микросхемы должны воспринимать команду чтения массива Read Array
— запись кода FFh (F0h) по любому адресу в микросхеме.
Для большинства изделий справедливы тенденции, описанные при рассмотрении микросхем Intel и AMD, а именно — повышение объема, снижение напряжений питания и потребляемой мощности, повышение производительности и упрощение внешнего интерфейса для операций стирания и программирования. По интерфейсу программирования микросхемы, у которых в начальной части обозначения стоит число «28», как правило, близки к флэш- памяти Intel, а с числом «29» — к флэш-памяти AMD.
Микросхемы с буферированным программированием или страничной записью (Fast Page Write) могут не иметь в своей системе команд отдельной операции стирания сектора. Внутренняя операция стирания (и предварительного обнуления сектора) выполняется при страничном программировании.
Для защиты от случайного выполнения ключевые последовательности команд содержат от 2 до 6 шинных циклов, причем у них может быть важен и адрес (как в микросхемах AMD). Методы защиты секторов имеют различную как программную, так и аппаратную реализацию. Для временного снятия защиты используют различные способы, одним из которых является ключевая последовательность семи шинных циклов чтения.
Микросхемы флэш-памяти Micron совместимы с Intel и обозначаются аналогично, но начинаются с признака MT28F. Среди них есть и особенные, например: MT28F321P2FG — 2 М×16 Page Flash Memory, MT28F322D18FH — 2 М×16 Burst Flash Memory.
Фирма Silicon Storage Technology выпускает разнообразные микросхемы флэш-памяти с одним напряжением питания для всех операций. Их свойства можно определить по обозначению вида SST xx YY zzz
— ttt
, где xx
— семейство:
♦ 28 — побайтное программирование, посекторное стирание;
♦ 29 — страничное программирование с прозрачным стиранием (команда стирания сектора отсутствует, внутренняя операция выполняется автоматически перед записью страницы в массив).
Элемент YY
задает функциональный тип и напряжение питания:
♦ ЕЕ — EEPROM-совместимые, выполнение одной инструкции, VCC = 5 В;
♦ LE — то же, что и ЕЕ, VCC = 3 В;
♦ VE — то же, что и ЕЕ, VCC = 2,7 В;
♦ SF — операции Super Flash Command Register, VCC = 5 В;
♦ LF — то же, что и SF, VCC = 3 В;
♦ VF — то же, что и SF, VCC = 2,7 В;
♦ DM — Disk Media (для флэш-дисков, требует внешнего контроллера), VCC = 5 В;
♦ LM — то же, что и DM, VCC = 3 В;
♦ VM — то же, что и DM, VCC = 2,7 B;
♦ PC — PCMCIA (интерфейс и протоколы), VCC = 5 В.
Элемент zzz
задает объем микросхемы:
♦ 512 — 512 Кбит (64 К×8);
♦ 010 — 1 Мбит (128 К×8);
♦ 040 — 4 Мбит (512 К×8);
♦ 080 — 8 Мбит (1 М×8);
♦ 016 — 16 Мбит (2 М×8);
♦ 032 — 32 Мбит (4 М×8).
Элемент ttt
задает время доступа при чтении.
Микросхемы SST29EE010, 29LE010 и 29VE010, часто применяемые в качестве носителя флэш-BIOS, организованы как 1024 страницы по 128 байт с программной и аппаратной защитой. Каждая страница может быть защищена независимо от других. Временные диаграммы стирания и программирования, а также необходимое напряжение программирования генерируются внутри микросхемы. Окончание операции определяется по алгоритму Toggle Bit или Data# Polling.
Аналогичные параметры имеют микросхемы 29ЕЕ011, 29LE011, 29VE011 фирмы Winbond.
WP#
— Write Protect, WC
— Write Control, PP
— Programm Protect. Для выбора микросхемы используются либо входы задания внутреннего адреса А[0:2]
, либо сигнал выборки CS#
, с помощью которого контроллер может обратиться к одному из требуемых устройств. Для упрощения внешних схем могут использоваться и несколько сигналов выборки S[0:2]
, один из которых (S1
) иногда инвертирован.
Микросхема | Организация | Рисунок | Примечание |
---|---|---|---|
24С001, 24С01 | 16×8, 128×8 | 7.23, а | I²C. Выводы 1, 2, 3, 7 = NC |
24С02, 24С164 | 256×8, 2 К×8 | 7.23, а | I²C |
24F016 | 2 К×8 | 7.23, б | I²C |
24F128 | 16 К×8 | 7.23, в | I²C |
X76F041 | 512×8 | 7.23, г | I²C |
FM24C04, FM24C16, FM24C64, FM24C256 | 512×8, 2 К×8, 8 К×8, 32 К×8 | 7.24, а | I²C |
FM25040, FM25160, FM25256 | 512×8, 2 К×8, 64 К×8 | 7.24, б | SPI |
RW
и ожидает подтверждения. При операции записи следующей посылкой от ведущего устройства будет 8-битный адрес записываемой ячейки, а за ней — байт данных (для микросхем объемом памяти более 256 байт адрес ячейки посылается двумя байтами). Получив подтверждения, ведущее устройство завершает цикл условием Stop, а адресованное устройство может начать свой внутренний цикл записи, во время которого не реагирует на сигналы интерфейса. Ведущее устройство может проверять готовность устройства к следующей операции посылкой команды записи (байт адреса устройства) и анализом бита подтверждения, формируя затем условие Stop. Если устройство откликнулось битом подтверждения, значит, оно завершило внутренний цикл и готово к следующей операции.
RW
=1. Возможно чтение по заданному адресу, по текущему адресу или последовательное. Текущий адрес хранится во внутреннем счетчике микросхемы памяти; он содержит увеличенный на единицу адрес ячейки, участвовавшей в последней операции. Получив команду чтения, устройство дает бит подтверждения и посылает байт данных, соответствующий текущему адресу. Контроллер может ответить подтверждением, тогда устройство пошлет следующий байт (последовательное чтение). Если на принятый байт данных контроллер ответит условием Stop, операция чтения завершается. Начальный адрес для считывания контроллер задает фиктивной операцией записи, в которой передается адрес устройства и адрес ячейки, а после подтверждения приема адреса ячейки формируется повторный старт (Sr
) и передается адрес устройства, но уже с указанием на операцию чтения. Так реализуется считывание произвольной ячейки (или последовательности ячеек). Отметим, что спецификация на интерфейс I²C не оговаривает правил модификации адреса данных при последовательных обращениях — их определяет разработчик устройства в соответствии с его функциями. Для памяти вышеописанный автоинкремент адреса упрощает последовательные обращения.
Заметим, что последовательная память малого объема может использовать и упрощенный вариант интерфейса, правда, и не называемого I²C. Так, например, память Atmel AT24C01 объемом 128 байт используют упрощенную систему адресации: адрес ячейки передается вместо 7-битного адреса устройства I²C, а в остальном операции записи и чтения выполняются по тем же правилам. При этом шина вырождается в двухточечный интерфейс, но в ряде случаев этого и достаточно. Специальные адреса здесь не требуются, так что все 128 значений 7-битного адреса доступны для адресации памяти. Микросхемы той же фирмы объемом 256 байт используют вышеприведенный механизм адресации устройств I²C с возможностью объединения до 8 устройств. А в микросхемах объемом 512, 1024 и 2048 байт 1, 2 или все 3 бита номера устройства в адресе отбираются под адрес 256-байтной страницы памяти. Память большего объема использует 7-битную адресацию устройств, обычную для I²C, а адрес ячейки задается последующими двумя байтами (сначала старшим, затем младшим).
CS#
, начинается с подачи по линии SI 8-битного кода команды. В команде записи за кодом команды следует адрес ячейки, за которым следуют байты данных. Команда чтения начинается так же, но после приема адреса в следующем же такте по линии SO
начинается вывод данных. Есть и специальные безадресные команды, например, разрешение/запрет записи и стирания. Микросхемы памяти с SPI имеют регистр состояния, доступ к которому обеспечивается специальными командами. В этом регистре отражается состояние управляющего автомата записи (занят/свободен), в нем же могут присутствовать и биты управления защитой записи (в регистр состояния возможна и запись). Состав регистров и набор команд зависит от модели устройства.
KB-Data
и KB-Clock
. Обе линии на системной плате подтягиваются резисторами к шине +5 В. На обеих сторонах интерфейса выходные сигналы низкого уровня формируются выходами элементов с открытым коллектором (стоком), а состояние линий может быть прочитано через входные линии контроллеров. Вид разъемов (со стороны задней панели) и назначение контактов приведены на рис. 8.1. Конструктивно возможны два варианта разъема — обычная 5-контактная розетка DIN (клавиатура AT) или малогабаритная розетка mini-DIN (PS/2). На этот же разъем через плавкий предохранитель поступает напряжение питания клавиатуры +5 В.
Процессор общается с клавиатурой через контроллер интерфейса клавиатуры — микроконтроллер 8042 или программно-совместимый с ним, установленный на системной плате. Для обмена информацией в основном используется порт 60h, из которого принимаются скан-коды. О необходимости чтения скан-кода контроллер сигнализирует процессору через аппаратное прерывание IRQ1, сигнал которого вырабатывается по каждому событию клавиатуры (нажатию и отпусканию клавиши). Задание параметров автоповтора, выбор таблиц скан-кодов, управление светодиодными индикаторами, а также управление режимом сканирования матрицы клавиш и запуск диагностического теста осуществляется командами, посылаемыми в этот же порт. Контроллер транслирует команды в посылки, направляемые к клавиатуре. Работу двунаправленного интерфейса иллюстрирует рис. 8.2, а, где серым цветом помечены сигналы, формируемые контроллером, а черным — клавиатурой. В исходном состоянии обе линии «отпущены» выходными формирователями в состояние с высоким уровнем. Клавиатура может начать передачу данных в произвольный момент, когда интерфейс находится в покое. Клавиатура формирует стартовый бит (низкий уровень) на линииВНИМАНИЕ
Питание от разъема клавиатуры часто используется такими устройствами, как внешние накопители или адаптеры локальных сетей, подключаемыми к параллельному порту. Плавкий предохранитель, установленный на системной плате, может не выдержать броска тока, потребляемого этими устройствами. При этом откажется работать и клавиатура — ее индикаторы даже и не мигнут при включении.
KB-Data
и первый импульс KB-Clock
, что является сигналом контроллеру о необходимости начала приема. После подъема KB-Clock
она выводит 0-й бит данных на линию KB-Data
, а затем и следующий импульс KB-Clock
. Контроллер должен «защелкивать» принятый бит данных по спаду KB-Clock
. Так передаются все 8 бит данных и бит паритета, дополняющий число единичных бит до нечетного. После синхроимпульса бита паритета контроллер клавиатуры должен сформировать импульс KB-Clock
, подтверждающий прием байта (Ack). Если весь байт с битом паритета не будет получен контроллером за 2 мс, контроллер прекращает прием данного байта и фиксирует ошибку тайм-аута.
KB-Clock
на 250 мкс и формирует старт-бит (низкий уровень) — это сигнал клавиатуре на прием команды. На него клавиатура должна ответить серией из 11 импульсов KB-Clock
. По спаду очередного синхроимпульса контроллер выставляет очередной бит данных, а клавиатура его «защелкивает» по фронту формируемого ею же синхроимпульса. После бита паритета (9-й импульс) и единичного стоп-бита (10-й) на 11-м импульсе клавиатура формирует нулевой бит подтверждения (Ack). После этого контроллер формирует импульс KB-Clock
(60 мкс), который является запросом на прием ответа клавиатуры. Контроллер ожидает окончания ответа на этот запрос не долее 20 мс и, если ответ не придет за это время, сформирует ошибку тайм-аута. Ошибка будет также в случае, если клавиатура не введет первый синхроимпульс за 15 мс от начала запроса или контроллер не примет данные, включая стоп-бит, за 2 мс с момента появления синхроимпульса бита 0.
На системной плате PC/XT контроллера 8042 не было, а интерфейс клавиатуры (однонаправленный) был реализован аппаратной логикой — регистром сдвига, параллельный выход которого подключается к входам порта А системного интерфейса 18255. По приему байта от клавиатуры вырабатывается аппаратное прерывание IRQ1
, обработчик которого может прочитать принятый байт из порта 60h. С помощью бит 7 и 6 порта 61h возможны программная блокировка и сброс клавиатуры соответственно. Сброс клавиатуры XT осуществляется обнулением линии KB-Clock
.
CS#
от дешифратора адреса, срабатывающего по адресам 0060h и 0064h; внутренние регистры контроллера выбираются линией SA2
системной шины адреса. Чтение и запись выполняется по сигналам IORD#
и IOWR#
, генерируемых при выполнении процессором инструкций IN
и OUT
. Таким образом, контроллер располагается в пространстве ввода-вывода CPU по адресам 60h (регистр данных) и 64h (регистр состояния и команд), назначение регистров приведено в табл. 8.1. Из регистра данных считываются данные, принимаемые по интерфейсам от клавиатуры и мыши, а также данные, возвращаемые контроллером в ответ на адресованные ему команды. Запись в регистр данных используется для подачи команд и данных, адресованных к клавиатуре и мыши, а также данных для команд, адресованных контроллеру. В регистр команд записываются команды, адресованные контроллеру. Режим работы контроллера (разрешение работы интерфейсов клавиатуры и мыши и прерываний от них, трансляция скан-кодов и другие параметры) задается командным байтом, посылаемым в контроллер по специальной команде. Перед любой записью в контроллер необходимо убедиться в его готовности. Признаком готовности/занятости контроллера является значение бита 1 регистра состояния (порт 064h).
Порт, R/W | Назначение |
---|---|
060 RW | Порт данных 8042 |
064 R | Регистр состояния 8042 (R/O): бит 7 — ошибка четности при последнем обмене с клавиатурой; бит 6 — тайм-аут приемника/общий тайм-аут¹; бит 5 — тайм-аут передатчика/выходной буфер интерфейса мыши полон (Mouse_OBF)¹; бит 4: 0 — клавиатура на замке; бит 3:1 — последняя запись была командой, 0 — данными; бит 2: системный флаг, устанавливается в 0 по включении питания, в 1 — программно (что означает состояние завершения системного сброса Reset OK); бит 1: 1 — входной буфер интерфейса клавиатуры полон, 0 — готовность к приему команды/данных; бит 0: 1— выходной буфер интерфейса клавиатуры полон (OBF) |
064 W | Регистр команд 8042 |
T0
и T1
, которые могут считываться его микропрограммой и использоваться в качестве источников его внутренних прерываний (это не прерывания CPU). Каждая из двунаправленных интерфейсных линий KB-Data
, KB-Clock
, MS-Data
и MS-Clock
реализуется битом порта вывода и битом ввода. В режиме PS/2 для чтения линий KB-Clock
и MS-Clock
используются входы T0
и T1
, в режиме AT вход T1
используется для линии KB-Data
.
Порт ввода P1
доступен по команде C0h
; в режиме PS/2 имеет следующее назначение бит:
♦ бит 7 — ключ блокировки клавиатуры (Keylock): 0 — клавиатура заблокирована;
♦ бит 6 — перемычка установки видеорежима: 0 — цветной (Color), 1 — монохромный (Mono);
♦ бит 5 — системная перемычка: 0 —замкнута;
♦ бит 4 — перемычка задания объема ОЗУ: 0 — 256 Кбайт, 1 — 512 Кбайт и более;
♦ биты 3, 2 — не используются;
♦ бит 1 — линия MS-Data
;
♦ бит 0 — линия KB-Data
.
В современных ПК используются только биты 0, 1 и 7; в режиме AT биты 0 и 1 не используются.
Порт вывода (P2), доступный для записи и чтения по командам D1h и D0h соответственно, имеет следующее назначение бит:
♦ бит 7 — линия KB-Data
;
♦ бит 6 — линия KB-Clk
;
♦ бит 5 — запрос прерывания от дополнительного интерфейса (IRQ12
), в режиме AT не используется;
♦ бит 4 — запрос прерывания от клавиатуры (IRQ1
);
♦ бит 3 — линия MS-Clk
, в режиме AT не используется;
♦ бит 2 — линия MS-Data
, в режиме AT не используется;
♦ бит 1 — вентиль линии адреса A20 (Gate A20, см. п. 12.3): 0 — A20 обнулен, 1 — управляется выводом процессора;
♦ бит 0 — альтернативный сброс процессора (сигнала INIT
, без формирования общего сигнала сброса).
Приняв посылку от клавиатуры, контроллер выполняет внутреннюю трансляцию скан-кода (если это не запрещено командным байтом) и устанавливает в регистре состояния OBF
=1, что приводит к генерации запроса прерывания IRQ1
(если это не запрещено командным байтом). В ответ на это хост должен считать данные (транслированный скан-код, префиксы и т.п.) из порта данных (60h). Трансляция обеспечивает программную совместимость клавиатур XT и AT (см. ниже) по чтению скан-кодов из порта 60h. При получении посылки от мыши контроллер не выполняет никаких преобразований и устанавливает в регистре состояния Mouse_OВF
=1, что приводит к генерации запроса прерывания IRQ12
(если это не запрещено командным байтом). По этому сигналу данные от мыши должны быть считаны хостом из того же порта 60h. To же самое происходит и при программной записи байта в выходной буфер клавиатуры (код D2h) или мыши (код D3h), с установкой соответствующих битов состояния и генерацией запросов IRQ1
или IRQ12
.
После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния OBF
=1, что приводит к генерации запроса прерывания IRQ1
(если это не запрещено командным байтом). После этого данные должны быть считаны из порта данных (по адресу 60h). Если команда возвращает несколько байтов данных, прерывание генерируется для каждого байта.
Взаимодействие с контроллером осуществляется подачей команд — записью в регистр команд (по адресу 064h). Перед посылкой команды необходимо убедиться в готовности контроллера к ее приему — бит 1 порта 64h должен иметь нулевое значение. Подробно команды контроллера описаны в литературе [2, 8]. Контроллеры клавиатуры различаются версиями встроенного ПО, поэтому замена контроллера другим, с отличающейся версией ПО (KBC BIOS), может оказаться проблематичной — микросхема BIOS системной платы должна знать особенности контроллера клавиатуры.
IRQ1
(вектор 09h). Результат обработки помещается в клавиатурный буфер, из которого по программному прерыванию Int 16h
этот результат для дальнейшей обработки может быть извлечен значительно позже. Нажатие «системной» комбинации Ctrl+Alt+Del
, клавиши PrintScreen
(SysRq
) и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры. Прикладной программе, для которой требуется нестандартное использование клавиатуры (например, в качестве музыкальной), придется самой заниматься обработкой аппаратного прерывания IRQ1
, перехватывая вектор Int 09h
. Перехват этого вектора требуется и для вызова каких-либо функций резидентных программ по «горячим» клавишам.
При начальном тестировании процедура POST инициализирует клавиатуру (и ее контроллер) и запускает диагностический тест. Во время этого теста клавиатура мигнет всеми индикаторами, после чего может остаться включенным только индикатор NumLock
(зависит от установки в BIOS Setup). В случае обнаружения ошибки клавиатуры на консоль выводится сообщение с возможным указанием скан-кода залипшей клавиши и обычно предлагается нажать клавишу F1
для продолжения. То же самое произойдет, если тест не обнаружит клавиатуру (например, из-за вывалившегося разъема или перегоревшего предохранителя), но в этом случае нажатия клавиши F1
будет уже недостаточно. Ошибку диагностики даст и подключение к компьютеру AT клавиатуры от XT, обратное «скрещивание» тоже неработоспособно. Чтобы начальная загрузка не останавливалась по ошибке (отсутствию) клавиатуры (POST будет дожидаться получения кода клавиши F1
), тестирование клавиатуры может быть отменено настройкой CMOS Setup.
Для обслуживания клавиатуры используются ячейки ОЗУ из области данных BIOS (BIOS Data Area):
♦ 0:0417, 0:418 — флаги клавиатуры;
♦ 0:0419 — аккумулятор кода Alt-набора;
♦ 0:041A — указатель головы буфера (Buffer Head), 2 байта (модифицируется при помещении символа в буфер);
♦ 0:041C — указатель хвоста буфера (Buffer Tail), 2 байта (модифицируется при извлечении символа из буфера);
♦ 0:041E-0:042D — область кольцевого буфера (16 слов).
IRQ4
для COM1 и IRQ3
для COM2). Конечно, то, что для использования мыши порту COM1 требуется именно прерывание IRQ4
, является недостатком не самой мыши, а ее программного драйвера, но для пользователя, не увлекающегося написанием «мышиных» драйверов, важен только факт этого ограничения. Две основные разновидности — MS Mouse (Microsoft Mouse) и PC Mouse (Mouse Systems Mouse) — требуют разных драйверов, многие мыши имеют переключатель MS/PC. Эти два типа «мышей» при одинаковой скорости 1200 бит/с, одном стоп-бите и отсутствии контроля паритета используют различные форматы посылок.
♦ MS Mouse: 1 бит данных, трехбайтный пакет (в «классическом» варианте), положительным значениям соответствует перемещение по координате X вправо, а по координате Y вниз. Для трехкнопочных мышей добавляется четвертый байт, передаваемый только при изменении состояния средней кнопки. Для 3D-мыши четвертый байт имеет иное назначение.
♦ PC Mouse: 8 бит данных, пятибайтный пакет, положительным значениям соответствует перемещение по координате X вправо, а по координате Y вверх.
Сигнал | Контакт DB9 | Контакт DB25 | Цепь COM-порта |
---|---|---|---|
Data | 2 | 3 | RxD |
GND | 5 | 7 | GND |
+V(питание) | 7,(4) | 4, (20) | RTS, (DTR) |
-V (питание) | 3 | 2 | TxD |
Int 33h
), драйвер мыши — загружаемый или встроенный в ОС. BIOS мышь не поддерживает, даже если и пользуется ею для навигации в BIOS Setup. Еще раз подчеркнем, что для работы мыши обязательно требуется линия аппаратного прерывания — IRQ4
или IRQ3
для последовательных мышей на портах COM1 или COM2 соответственно.
Mouse_OBF
и вырабатывает прерывание IRQ12
, если оно не запрещено командным байтом 8242.
Устройства-указатели с интерфейсом PS/2 (мышь PS/2) имеют поддержку BIOS, обеспечивающую настройку параметров мыши (посылку вышеперечисленных команд). Собственно драйвер мыши (обработчик прерывания по вектору 74h от запроса IRQ12
), обрабатывающий ее информационные посылки, входит лишь в состав ОС или загружается отдельно. Поддержка мыши вызывается через BIOS Int 15h
с кодами функций C200
-C209h
.
Int 17h
или непосредственно с регистрами LPT-порта, например для приглашения к подаче бланков, не могут работать с принтером USB даже в среде ОС, поддерживающих USB в полном объеме. Что касается скорости передачи данных, то у USB 1.0 со скоростью 12 Мбит/с скорость передачи данных отнюдь не достигает 1,5 Мбайт/с (12:8) хотя бы из-за накладных расходов шины. В USB 2.0, которая сейчас выходит на рынок, пиковая скорость может достигать 50 Кбайт/с (скорость в шине — 480 Мбит/с), что для принтера пока что более чем достаточно. Однако для этого и принтер, и компьютер должны поддерживать USB 2.0, и между ними не должно быть старых (USB 1.0) хабов.
Принтеры могут иметь интерфейс SCSI (редкий вариант), а также подключаться не к компьютеру, а к локальной сети по интерфейсу Ethernet (10 или 100 Мбит/с). Такое подключение удобно для принтеров коллективного пользования, и при грамотно построенной сети оно не доставляет забот пользователям. Шина Fire Wire для принтеров применяется пока очень сдержанно.
Сигнал | I/O¹ | Контакт | Назначение |
---|---|---|---|
Strobe# | I | 1 | Строб данных. Данные фиксируются по низкому уровню сигнала |
Data [0:7] | I | 2-9 | Линии данных. Data 0 (контакт 2) — младший бит |
Ack# | O | 10 | Acknowledge — импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования запроса прерывания |
Busy | O | 11 | Занято. Прием данных возможен только при низком уровне сигнала |
PaperEnd | O | 12 | Высокий уровень сигнализирует о конце бумаги |
Select | O | 13 | Сигнализирует о включении принтера (обычно в принтере соединяется резистором с цепью + 5 В) |
Auto LF# | I | 14 | Автоматический перевод строки. При низком уровне принтер, получив символ CR (Carriage Return — возврат каретки), автоматически выполняет и функцию LF (Line Feed — перевод строки) |
Error# | O | 32 | Ошибка: конец бумаги, состояние OFF-Line или внутренняя ошибка принтера |
Init# | I | 31 | Инициализация: сброс в режим параметров умолчания, возврат к началу строки и страницы |
Select In# | I | 36 | Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса |
GND | - | 19-30, 33 | Общий провод интерфейса |
Busy
. Строб данных может быть коротким — доли микросекунды, и порт заканчивает его формирование, не обращая внимания на сигнал Busy
. Во время строба данные должны быть действительными. Подтверждением приема байта (символа) является сигнал Ack#
, который вырабатывается после приема строба через неопределенное время (за это время принтер может выполнять какую-либо длительную операцию, например прогон бумаги). Импульс Ack#
является запросом принтера на прием следующего байта, его задействуют для формирования сигнала прерывания от порта принтера. Если прерывания не используются, то сигнал Ack#
игнорируется и весь обмен управляется парой сигналов Strobe#
и Busy
. Свое состояние принтер может сообщить порту по линиям Select
, Error#
, PaperEnd
— по ним можно определить, включен ли принтер, исправен ли он и есть ли бумага. Формированием импульса на линии Init#
принтер можно проинициализировать (при этом он очистит и весь свой буфер данных). Режимом автоматического перевода строки, как правило, не пользуются, и сигнал AutoLF#
имеет высокий уровень. Сигнал SelectIn#
позволяет логически отключать принтер от интерфейса.
Через параллельный порт (LPT) протокол Centronics может быть реализован чисто программно, используя стандартный режим порта (SPP), достигая скорости передачи до 150 Кбайт/с при полной загрузке процессора. Благодаря «продвинутым» режимам порта протокол может быть реализован и аппаратно (Fast Centronics), при этом скорость до 2 Мбайт/с достигается при меньшей загрузке процессора.
Большинство современных принтеров с параллельным интерфейсом поддерживают и стандарт IEEE 1284, в котором оптимальным режимом передачи является ECP (см. п. 1.3.4).
Для подключения принтера требуется кабель Centronics, пригодный для любых режимов параллельного интерфейса. Простейший вариант кабеля — 18-проводный с неперевитыми проводами — может использоваться для работы в режиме SPP. При длине более 2 м желательно, чтобы хотя бы линии Strobe#
и Busy
были перевиты с отдельными общими проводами. Для скоростных режимов (Fast Centronics, ECP) такой кабель может оказаться непригодным — возможны нерегулярные ошибки передачи, возникающие лишь при определенных последовательностях передаваемых кодов. Встречаются кабели Centronics, у которых отсутствует связь контакта 17 разъема PC с контактом 36 разъема принтера. При попытке подключения таким кабелем принтера, работающего в стандарте 1284, появится сообщение о необходимости применения «двунаправленного кабеля». Принтер не может сообщить системе о поддержке расширенных режимов, на что рассчитывает драйвер принтера. Другое проявление отсутствующей связи — «зависание» принтера по окончании печати задания из Windows. Эту связь можно организовать подпайкой дополнительного провода или же просто заменить кабель.
Неплохие электрические свойства имеют ленточные кабели, у которых сигнальные цепи (управляющих сигналов) чередуются с общими проводами. Но их применение в качестве внешнего интерфейса непрактично (нет второго защитного слоя изоляции, высокая уязвимость) и неэстетично (круглые кабели смотрятся лучше).
Идеальным вариантом являются кабели, в которых все сигнальные линии перевиты с общими проводами и заключены в общий экран — то, что требует IEEE 1248. Такие кабели гарантированно работают на скоростях до 2 Мбайт/с при длине до 10 м.
В табл. 8.4 приводится распайка кабеля подключения принтера с разъемом X1 типа А (DB25-P) со стороны PC и X2 типа В (Centronics-36) или типа С (миниатюрный) со стороны принтера. Использование общих проводов (GND
) зависит от качества кабеля (см. выше). В простейшем случае (18-проводный кабель) все сигналы GND
объединяются в один провод. Качественные кабели требуют отдельного обратного провода для каждой сигнальной линии, однако в разъемах типа А и В для этого недостаточно контактов (в табл. 8.4 в скобках указаны номера контактов разъема PC типа А, которым соответствуют обратные провода). В разъеме типа С обратный провод (GND
) имеется для каждой сигнальной цепи; сигнальным контактам 1-17 этого разъема соответствуют контакты GND 19–35.
X1, разъем PC типа А | Сигнал | X2, разъем PRN типа В | X2, разъем PRN типа С |
---|---|---|---|
1 | Strobe# | 1 | 15 |
2 | Data0 | 2 | 6 |
3 | Data1 | 3 | 7 |
4 | Data2 | 4 | 8 |
5 | Data3 | 5 | 9 |
6 | Data4 | 6 | 10 |
7 | Data5 | 7 | 11 |
8 | Data6 | 8 | 12 |
9 | Data7 | 9 | 13 |
10 | Ack# | 10 | 3 |
11 | Busy | 11 | 1 |
12 | PaperEnd | 12 | 5 |
13 | Select | 13 | 2 |
14 | Auto LF# | 14 | 17 |
15 | Error# | 32 | 4 |
16 | Init# | 31 | 14 |
17 | Select In# | 36 | 16 |
18 | GND(1) | 19 | 33 |
19 | GND(2 3) | 20 21 | 24 25 |
20 | GND(4 5) | 22 23 | 26 27 |
21 | GND(6 7) | 24 25 | 28 29 |
22 | GND(8 9) | 26 27 | 30 31 |
23 | GND(11 15) | 29 | 19 22 |
24 | GND(10 12 13) | 28 | 20 21 23 |
25 | GND(14 16 17) | 30 | 32 34 35 |
XON
/XOFF
или аппаратный RTS
/CTS
. Подключение принтеров и плоттеров к СОМ-порту требует применения кабеля, соответствующего выбранному протоколу, схемы кабелей приведены на рис. 8.6 и 8.7. Аппаратный протокол предпочтительнее — стандартный драйвер СОМ-порта пользуется именно им. Естественно, параметры интерфейса принтера должны соответствовать параметрам, заданным для задействованного СОМ-порта. Порт конфигурируется, например, DOS-командой MODE
. Заметим, что при печати средствами DOS (командами COPY
или PRINT
) прерывания от порта не используются.
Int 17h
обеспечивают инициализацию, вывод байта данных и опрос состояния принтера. Перехват прерывания Int 17h
является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсом ИРПР или необходимости перекодировки символов.
Печать содержимого экрана (Print Screen) поддерживается прерыванием BIOS Int 05h
. Обработчик этого прерывания посимвольно выводит содержимое видеопамяти (в текстовом режиме) на порт LPT1. Обработчик пользуется ячейкой 0050:0000 для отражения своего текущего состояния: 00 — неактивен, 01 — выполняется печать, FF — во время последнего вызова произошла ошибка ввода-вывода. Прерывание Int 05h
вызывается обработчиком аппаратного прерывания от клавиатуры (Int 09h
), когда обнаруживается нажатие клавиши PrintScreen
(PrtSc
).
Video
(включить/выключить луч) и Intens
(повышенная яркость). В цветных мониторах класса CD
(ColorDisplay) для адаптеров CGA используется по одному сигналу для включения каждого луча и общий сигнал повышенной яркости. Таким образом можно было задать 16 цветов. В улучшенном цветном дисплее ECD (Enhanced Color Display) для адаптера EGA требуются два сигнала на каждый базисный цвет: RED
, GREEN
, BLUE
и Red
, Green
, Blue
— соответственно старшие и младшие биты базисных цветов. Таким образом можно задавать 64 цвета.
Контакт | Монитор | ||
---|---|---|---|
Mono | Color | Enhanced Color/Mono | |
1 | GND | GND | GND |
2 | GND | GND | Red |
3 | – | RED | RED |
4 | – | GREEN | GREEN |
5 | – | BLUE | BLUE |
6 | Intens. | Intensiv. | Green/Intens. |
7 | Video | Резерв | Blue/Video |
8 | +H.Sync. | +H.Sync. | +H.Sync. |
9 | –V.Sync. | +V.Sync. | –(+)V.Sync. |
H.Sync
и V.Sync
. Монохромные адаптеры MDA и HGC, работающие с высоким разрешением (720×350 пикселов), используют высокую частоту развертки. Адаптер CGA работает с низкими частотами (параметры синхронизации близки к телевизионным). Адаптеры и мониторы EGA могут работать с любыми из этих частот. Для облегчения переключения режимов генератора развертки монитора задействуют сигнал V.Sync
: полярность импульсов определяет диапазон частот развертки текущего видеорежима.
Return
). Для согласования с кабелем в мониторе каждая сигнальная пара нагружается резистором. Черному цвету соответствует нулевой потенциал на линиях всех цветов, полной яркости каждого цвета соответствует уровень +0,7 В (не все графические адаптеры обеспечивают полную амплитуду сигнала). Сигналы управления, состояния и синхронизации передаются сигналами ТТЛ. Временные диаграммы интерфейса RGB (они применимы и к интерфейсу RGB TTL) иллюстрирует рис. 8.9. Сигналы R
, G
, В
здесь показаны условно — изображены интервалы, во время которых сигналы отображаются засветкой точек экрана (видимая часть изображения — в областях пересечения отображения по кадру и по строке, в остальное время луч принудительно гасится). На рисунке показаны основные временные параметры сигналов. Стандарт VESA DMT (Discrete Monitor Timing, 1994–1998 гг.) задает дискретный ряд вариантов параметров для различных режимов разрешения. Несколько более поздний стандарт VESA GTF (Generalized Timing Formula Standard) задает формулы для определения всех параметров синхронизации, исходными данными для расчета являются следующие:
♦ формат экрана в пикселах (например, 800×600);
♦ необходимость дополнительного видимого обрамления (overscan borders);
♦ тип развертки — построчная (non-interlaced) или чересстрочная (interlaced);
♦ одна из заданных частот: кадров, строк или пикселов.
Режим VESA | Частота кадров, Гц | Частота строк, кГц | Частота пикселов, МГц | Строчная развертка, мкс | Кадровая развертка, строк | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Fv | Fh | Fp | A | b | с | d | e | f | g | h | |
640×480 VGA (60Hz) | 59.9 | 31.5 | 25.2 | 3.8 | 1.9 | 25.4 | 0.6 | 2 | 33 | 480 | 10 |
640×480 VGA (72Hz) | 72.8 | 37.9 | 31.5 | 1.3 | 3.8 | 20.3 | 1.0 | 3 | 28 | 480 | 9 |
640×480 VGA (85Hz) | 85.0 | 43.3 | 35.9 | 1.6 | 2.2 | 17.8 | 1.6 | 3 | 25 | 480 | 1 |
800×600 SVGA (60Hz) | 60.3 | 37.9 | 40.0 | 3.2 | 2.2 | 20.0 | 1.0 | 4 | 23 | 600 | 1 |
800×600 SVGA (85Hz) | 85.1 | 53.7 | 56.3 | 1.1 | 2.7 | 14.2 | 0.6 | 3 | 27 | 600 | 1 |
1024×768 XGA (60Hz) | 60.0 | 48.4 | 64.8 | 2.1 | 2.5 | 15.8 | 0.4 | 6 | 29 | 768 | 3 |
1024×768 XGA (85Hz) | 85.0 | 68.7 | 94.8 | 1.0 | 2.2 | 10.8 | 0.5 | 3 | 36 | 768 | 1 |
1152×864 (85Hz) | 85.0 | 77.5 | |||||||||
1280×1024 SXGA (60Hz) | 60.0 | 64.0 | 107.6 | 1.0 | 2.3 | 11.9 | 0.4 | 3 | 38 | 1024 | 1 |
1280×1024 SXGA (75Hz) | 75.0 | 79.9 | 135 | ||||||||
1280×1024 SXGA (85Hz) | 85.0 | 91.1 | |||||||||
1600×1024 (60Hz) | 60.0 | 63.6 | |||||||||
1600×1024 (85Hz) | 85.0 | 91.4 | |||||||||
1600×1200 (85Hz) | 85.0 | 106.3 | |||||||||
1920×1200 (60Hz) | 60.0 | 74.5 | |||||||||
1920×1200 (85Hz) | 85.0 | 107.1 | |||||||||
2048×1536 (75Hz) | 75.0 | 120.2 | |||||||||
2304×1440 (80Hz) | 80.0 | 120.6 |
(H+V)Sync.
; этот режим поддерживают и многие современные мониторы.
Контакт | Сигнал |
---|---|
1 | Red |
2 | Green |
3 | Blue |
4 | (H+V)Sync |
5 | Mode Control |
6 | Red Return |
7 | Green Return |
8 | Blue Return |
9 | GND |
Контакт DB-15 | Видеоадаптер МCGA/VGA/SVGA/XGA | Монитор | |
---|---|---|---|
Mono | Color | ||
1 | Red | - | Red |
2 | Green | Video | Green |
3 | Blue | - | Blue |
4 | ID2 | - | - |
5 | GND/DDC Return¹ | SelfTest/DDC Return | SelfTest/DDC Return |
6 | Red Return | Key | Red Return |
7 | Green Return | Video Return | Green Return |
8 | Blue Return | - | Blue Return |
9 | Ключ (нет контакта)¹ | -¹ | _¹ |
10 | GND (Sync Return) | GND (Sync Return) | GND (Sync Return) |
11 | ID0 | - | GND |
12 | ID1/SDA¹ | -/SDA¹ | GND/SDA¹ |
13 | H.Sync/(H+V)Sync² | H.Sync/(H+V)Sync² | H.Sync/(H+V)Sync² |
14 | V.Sync | V.Sync | V.Sync |
15 | ID3/SCL¹ | ID3/SCL¹ | ID3/SCL¹ |
Контакт DB9 | Сигнал | Контакт DB15 |
---|---|---|
1 | Red | 1 |
2 | Green | 2 |
3 | Blue | 3 |
4 | H.Sync | 13 |
5 | V.Sync | 14 |
6 | Red Return | 6 |
7 | Green Return | 7 |
8 | Blue Return | 8 |
9 | GND | 10, 11 |
Контакт | Сигнал |
---|---|
1 | Red Return |
2 | Red |
3 | Comp.Sync |
4 | ID0 |
5 | Green |
6 | Green Return |
7 | ID1 |
8 | He используется |
9 | Blue |
10 | ID2 |
11 | Sync.GND |
12 | V.Sync |
13 | Blue Return |
14 | H.SyncGND |
15 | H.Sync |
ID0
-ID3
, по которым адаптер мог определить тип подключенного монитора IBM. Со стороны монитора эти линии либо подключались к шине GND
, либо оставлялись неподключенными. Однако из этой системы идентификации использовали лишь сигнал ID1
, по которому определяют факт подключения монохромного монитора. Монохромный монитор может быть опознан адаптером и иначе — по отсутствию нагрузки на линиях Red
и Blue
.
Параллельную идентификацию мониторов заменила последовательная по каналу цифрового интерфейса VESA DDC (Display Data Channel). Этот канал построен на интерфейсах I²C (DDC2B) или ACCESS.Bus (DDC2AB), которые требуют всего два ТТЛ-сигнала SCL
и SDA
. Интерфейс DDC1 является однонаправленным — монитор посылает адаптеру блок своих параметров по линии SDA
(контакт 12), которые синхронизируются сигналом V.Sync
(контакт 14). На время приема блока параметров адаптер может повысить частоту V.Sync
до 25 кГц (генератор кадровой развертки по такой высокой частоте синхронизироваться не будет). Интерфейс DDC2 является двунаправленным; для синхронизации используется выделенный сигнал SCL
(контакт 15). Интерфейс DDC2AB отличается тем, что допускает подключение ПУ, не требующих высокой скорости обмена, к компьютеру по последовательной шине ACCESS.Bus (см. п. 11.1.2).
Блок параметров расширенной идентификации дисплея EDID (Extended Display Identification) имеет одну и ту же структуру для любой реализации DDC (табл. 8.11).
Смещение, байт | Длина, байт | Назначение |
---|---|---|
0 | 8 | Заголовок (индикатор начала потока EDID) |
8 | 10 | Идентификатор изделия (назначается производителем) |
18 | 2 | Версия EDID |
20 | 15 | Основные параметры и возможности дисплея |
35 | 19 | Установленные параметры синхронизации |
54 | 72 | Дескрипторы параметров синхронизации (байты 4-18) |
126 | 1 | Флаг расширения |
127 | 1 | Контрольная сумма |
Режим | H.Sync | V.Sync |
---|---|---|
On | Активен | Активен |
Standby | Неактивен | Активен |
Suspend | Активен | Неактивен |
Off | Неактивен | Неактивен |
R
, G
, В
и синхросигнала пикселов PX Clock
. Синхросигнал пикселов «интересен» матричным дисплеям (с их цифровой природой), его использование позволяет уменьшить погрешности передачи видеоинформации. Частота этого сигнала равна либо частоте сканирования пикселов, либо ее половине (на высокой частоте нужна двойная синхронизация, по фронту и спаду, что уравнивает требования к полосе пропускания для линий цветовых данных и линии синхронизации пикселов).
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|
1 | Audio Output, Right | 11 | Charging power input, + | 21 | Audio input, left |
2 | Audio Output, Left | 12 | Charging power input, - | 22 | Audio input, right |
3 | Audio Output, Return | 13 | Video input, Y или composite in | 23 | Audio input, return |
4 | Sync Return | 14 | Video input, return | 24 | Stereo sync (TTL) |
5 | Horizontal Sync (TTL) | 15 | Video input, С in | 25 | DDC return |
6 | Vertical Sync (TTL) | 16 | USB Data + | 26 | DDC Data (SDA) |
7 | Резерв | 17 | USB Data - | 27 | DDC Clock (SCL) |
8 | Резерв | 18 | USB/1394 common mode shield | 28 | +5 В |
9 | 1394 TPA- | 19 | 1394 VG | 29 | 1394 TPB+ |
10 | 1394 TPA+ | 20 | 1394 VP | 30 | 1394 TPB- |
C1 | R (аналог.) | C3 | PX Clock | ||
C2 | G (аналог.) | C5 | GND (для R, G, B) | C4 | В (аналог.) |
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|
1 | Data 2+ | 11 | Data 1+ | 21 | Data 0- |
2 | Data 2- | 12 | Data 1- | 22 | Data 0+ |
3 | Экран 2 | 13 | Экран 1 | 23 | Экран 0 |
4 | Sync Rtn | 14 | Clock+ | 24 | Stereo Sync TTL |
5 | H.Sync TTL | 15 | Clock- | 25 | DDC Return |
6 | V.Sync TTL | 16 | USB Data+ | 26 | DDC Data |
7 | Экран Clock | 17 | USB Data- | 27 | DDC Clock |
8 | CHRG+ | 18 | 1394 Экран/CHRG- | 28 | +5V |
9 | 1394 TPA- | 19 | 1394 VG | 29 | 1394 TPB+, CLOCK+ |
10 | 1394 TPA+ | 20 | 1394 VP | 30 | 1394 TPB-, CLOCK- |
C1 | R (аналог.) | C3 | PX Clock | ||
C2 | G (аналог.) | C5 | GND (для R, G, B) | C4 | В (аналог.) |
Контакт | Цепь | Контакт | Цепь |
---|---|---|---|
1 | TX1+ | 11 | TX2+ |
2 | TX1- | 12 | TX2- |
3 | SHLD1 | 13 | SHLD2 |
4 | SHLDC | 14 | SHLD0 |
5 | TXC+ | 15 | TX0+ |
6 | TXC- | 16 | TX0- |
7 | GND | 17 | NC |
8 | +5V | 18 | HPD |
9 | NC | 19 | DDC_DAT |
10 | NC | 20 | DDC_CLK |
DDC Data
и DDC Clock
, а также линия питания +5 В, по которой от видеокарты питаются цепи DDC, позволяя обмениваться конфигурационной информацией даже с выключенным монитором. Конфигурационная информация позволяет системе определить возможности монитора и должным образом сконфигурировать имеющиеся каналы данных, согласуя возможности и видеокарты, и дисплея. Имеется также сигнал HPD (Hot Plug Detect), с помощью которого система может следить за подключением/отключением дисплея. «Горячее» подключение обеспечивается также и механическими особенностями разъемов, поддерживающих требуемую последовательность соединения/рассоединения разных групп контактов. Таким образом, дисплеи с DVI обеспечивают все необходимые функции для реализации принципов PnP. Интерфейс и дисплеи с DVI должны обеспечивать стандартные (VESA) графические режимы, начиная от 640×480/60 Гц (частота пикселов 22,175 МГц). Его предел — 2048×1536 пикселов (частота 330 МГц). Интерфейс поддерживает сигнализацию управления энергопотреблением (DPMS).
Вид коннекторов DVI приведен на рис. 8.13, расположение сигнальных контактов дано в табл. 8.16.
Контакт | Цепь | Контакт | Цепь | Контакт | Цепь |
---|---|---|---|---|---|
1 | Data2- | 9 | Data1- | 17 | Data0- |
2 | Data2+ | 10 | Data1+ | 18 | Data0+ |
3 | Экран 2/4 | 11 | Экран 1/3 | 19 | Экран 0/5 |
4 | Data4- | 12 | Data3- | 20 | Data5- |
5 | Data4+ | 13 | Data3+ | 21 | Data5+ |
6 | DDC Clock | 14 | +5 В | 22 | Экран Clock |
7 | DDC Data | 15 | GND (для +5 В, HSync и VSync) | 23 | Clock+ |
8 | VSync (ТТЛ) | 16 | HPD | 24 | Clock- |
C1 | R (аналог.) | C3 | B (аналог.) | ||
C2 | G (аналог.) | C5 | GND (для R, G, B) | C4 | HSync (ТТЛ) |
Data Enable
, видеоплата может заставить графическую карту принимать пикселы; сигнал Sync Enable
переключает графический адаптер на прием сигналов строчной и кадровой синхронизации; сигнал PCLK Enable
переключает графический адаптер на работу от внешнего сигнала синхронизации пикселов.
Сигнал | Контакт | Контакт | Сигнал |
---|---|---|---|
GND | 2 | 1 | Data 0 |
GND | 4 | 3 | Data 1 |
GND | 6 | 5 | Data 2 |
Data enable | 8 | 7 | Data 3 |
Sync. enable | 10 | 9 | Data 4 |
PCLK enable | 12 | 11 | Data 5 |
(Vcc) | 14 | 13 | Data 6 |
GND | 16 | 15 | Data 7 |
GND | 18 | 17 | PCLK |
GND | 20 | 19 | BLANK |
GND | 22 | 21 | HSYNC |
(Vcc) | 24 | 23 | VSYNC |
(GND) | 26 | 25 | GND |
GRDY
и VRDY
означают готовность (способность генерировать данные пикселов) графического адаптера и видеосистемы соответственно, а направлением передачи данных управляет сигнал EVID#
.
Контакт | Сигнал | Назначение | Контакт | Сигнал | Назначение |
---|---|---|---|---|---|
1 | RSRV0 | Резерв | 41 | GND | Ground |
2 | RSRV1 | Резерв | 42 | GND | Ground |
3 | GENCLK | Genclock input | 43 | GND | Ground |
4 | OFFSET0 | Pixel offset 2 | 44 | GND | Ground |
5 | OFFSET1 | Pixel offset 1 | 45 | GND | Ground |
6 | FSTAT | FIFO buffer status | 46 | GND | Ground |
7 | VRDY | Video ready | 47 | GND | Ground |
8 | GRDY | Graphics ready | 48 | GND | Ground |
9 | BLANK# | Blanking | 49 | GND | Ground |
10 | VSYNC | Vertical sync | 50 | GND | Ground |
11 | HSYNC | Horizontal sync | 51 | GND | Ground |
12 | EGEN# | Enable genclock | 52 | GND | Ground |
13 | VCLK | Graphics data clock | 53 | GND | Ground |
14 | RSRV2 | Резерв | 54 | GND | Ground |
15 | DCLK (PCLK) | Video data (Pixel) clock | 55 | GND | Ground |
16 | EVIDEO# | Video data direction control | 56 | GND | Ground |
17 | P0 | Video data 0 | 57 | P1 | Video data 1 |
18 | GND | Ground | 58 | P2 | Video data 2 |
19 | P3 | Video data 3 | 59 | GND | Ground |
20 | Р4 | Video data 4 | 60 | P5 | Video data 5 |
21 | GND | Ground | 61 | P6 | Video data 6 |
22 | Р7 | Video data 7 | 62 | GND | Ground |
23 | Р8 | Video data 8 | 63 | P9 | Video data 9 |
24 | GND | Ground | 64 | P10 | Video data 10 |
25 | Р11 | Video data 11 | 65 | GND | Ground |
26 | Р12 | Video data 12 | 66 | P13 | Video data 13 |
27 | GND | Ground | 67 | P14 | Video data 14 |
28 | Р15 | Video data 15 | 68 | GND | Ground |
29 | Р16 | Video data 16 | 69 | P17 | Video data 17 |
30 | GND | Ground | 70 | P18 | Video data 18 |
31 | Р19 | Video data 19 | 71 | GND | Ground |
32 | Р20 | Video data 20 | 72 | P21 | Video data 21 |
33 | GND | Ground | 73 | P22 | Video data 22 |
34 | Р23 | Video data 23 | 74 | GND | Ground |
35 | Р24 | Video data 24 | 75 | P25 | Video data 25 |
36 | GND | Ground | 76 | P26 | Video data 26 |
37 | Р27 | Video data 27 | 77 | GND | Ground |
38 | P28 | Video data 28 | 78 | P29 | Video data 29 |
39 | GND | Ground | 79 | P30 | Video data 30 |
40 | P31 | Video data 31 | 80 | GND | Ground |
MPU
(обычно 330h) и MPU+1
.
♦ Порт DATA
(адрес MPU+0
) — запись и считывание байт, передаваемых и принимаемых по интерфейсу MIDI. В интеллектуальном режиме через этот же порт считываются и вспомогательные данные от MPU (не относящиеся к потоку MIDI).
♦ Порт STATUS/COMMAND
(адрес MPU+1
) — чтение состояния/запись команд (запись — только для интеллектуального режима). В байте состояния определены следующие биты:
• бит 7 — DSR
(Data Set Ready) — готовность (DSR
=0) принятых данных для чтения (бит устанавливается в единицу, когда все принятые байты считаны из регистра данных);
• бит 6 — DRR
(Data Read Ready) — готовность (DRR
=0) UART к записи в регистр данных или команд (условие готовности к записи не возникнет, если приемник имеет непрочитанный байт данных).
По включении питания «настоящая» карта MPU-401 устанавливается в интеллектуальный режим, из которого в режим UART ее можно перевести командой с кодом 3Fh. Программный сброс MPU-401 (опять-таки в интеллектуальный режим) осуществляется командой RESET
(код FFh), на эту команду MPU ответит подтверждением ACK
(FEh). Байт подтверждения извлекается из регистра данных, до его прихода следующую команду MPU не воспримет. На команду с кодом 3Fh MPU подтверждением не отвечает (некоторые эмуляторы отвечают и на эту команду).
Ввод данных может осуществляться по программному опросу бита DSR
или по прерываниям. Аппаратные прерывания от MPU в режиме UART вырабатываются по приему байта. Обработчик прерывания должен считать все поступившие байты, проверив перед выходом, что DSR
=1 (иначе возможны потери принятых байт).
Вывод данных разрешается битом DRR
, прерывания по готовности вывода не вырабатываются.
Совместимость с MPU-401, имеющаяся у большинства современных звуковых карт с интерфейсом MIDI, означает наличие приемопередатчика, программно совместимого с MPU-401 в режиме UART; функции интеллектуального режима обычно не поддерживаются.
На некоторых системных платах применяются БИС контроллеров интерфейсов, в которых режим UART, используемый для СОМ-порта, конфигурированием через BIOS SETUP может быть переведен в режим MIDI-порта.
Для подключения к компьютеру большого числа устройств MIDI можно использовать шину USB. Для этого, например, фирма Roland выпускает 64-канальный процессорный блок S-MPU64, который кроме шины USB имеет 4 входных и 4 выходных порта MIDI. Программное обеспечение допускает объединение до 4 блоков на одной шине USB, что увеличивает число каналов до 256.
AG
) отделена от цифровой (DG
). Дополнительно может использоваться и вход MIDI (тоже ТТЛ). Разъем может обозначаться и как WT (Wavetable) Connector, Waveblaster Connector.
Контакт | Цепь | Контакт | Цепь |
---|---|---|---|
1 | DG | 2 | |
3 | DG | 4 | MIDI_Out# |
5 | DG | 6 | +5 В |
7 | DG | 8 | MIDI_In# (необязательный) |
9 | DG | 10 | +5 В |
11 | DG | 12 | |
13 | 14 | +5 В | |
15 | AG | 16 | |
17 | AG | 18 | +12 В |
19 | AG | 20 | Audio (R) |
21 | AG | 22 | –12 В |
23 | AG | 24 | Audio (L) |
25 | AG | 26 | Reset# |
GND
или цепь измеряемого сопротивления разорвана, соответствующий бит не обнулится. Поэтому в программе преобразования должен быть предусмотрен тайм-аут. Для измеряемых сопротивлений в диапазоне 0-100 кОм время определяется по формуле
T(мкс)=24,2+11×R(кОм).
Точность и линейность преобразования невысока, преобразование выполняется не быстро (до 1,12 мс) и сильно загружает процессор. Однако в отличие от «настоящих» аналого-цифровых преобразователей, этот достается даром — игровой адаптер входит в состав практически всех комбинированных плат последовательных и параллельных портов и звуковых карт.
GND
(рис. 8.20). Замыканию кнопок соответствуют нули в битах 5–7. Аналоговые каналы можно использовать для дискретного ввода, если их входы подключить к кнопкам, замыкающим их на шину GND
, и к резисторам, «подтягивающим» их к уровню + 5 В. Два джойстика (А и В) подключаются через Y-образный переходник-разветвитель. На звуковых картах через разъем «Game» вместе с джойстиками могут подключаться и внешние MIDI-устройства, используя специальный кабель-адаптер, обеспечивающий гальваническую развязку входного сигнала и ограничение выходного тока (см. рис. 8.18). Для интерфейса MIDI используются контакты 12 и 15, ранее предназначавшиеся для шин GND
и +5V
. Такое назначение делает безопасным подключение адаптера MIDI к «чистому» игровому порту и обычного джойстика к игровому порту с сигналами MIDI.
Бит | Назначение | Контакт |
---|---|---|
7 | Джойстик В кнопка #2 | 14 |
6 | Джойстик В кнопка #1 | 10 |
5 | Джойстик А кнопка #2 | 7 |
4 | Джойстик А кнопка #1 | 2 |
3 | Джойстик В Y-координата (Y2) | 13 |
2 | Джойстик В X-координата (X2) | 11 |
1 | Джойстик А Y-координата (Y1) | 6 |
0 | Джойстик А X-координата (X1) | 3 |
- | GND | 4, 5, (12) |
- | +5 В | 1, 8, 9, (15) |
- | MIDI In (Rx) — вход (на звуковой карте) | 15 |
- | MIDI Out (Tx) — выход (на звуковой карте) | 12 |
Int 15h
при AH
=84h. При вызове в DX задается код подфункции:
♦ DX
=0 — опрос кнопок, возвращает в AL[7:4]
состояние кнопок (соответствует битам порта 201h);
♦ DX
=1 — чтение координат X, Y джойстика А (в регистры АХ
, BX
) и В (в СХ
, DX
).
При ошибочном задании кода в DX
устанавливается CF
=1. Стандартный джойстик поддерживается и ОС Windows.
Drive Sel
и запустить мотор шпинделя сигналом Motor On
. Для выборки накопитель имеет четыре сигнала DS0
…DS3
, но отзывается только на один из них, определенный установкой джамперов. Выбранный накопитель воспринимает управляющие сигналы от контроллера и передает контроллеру свои выходные сигналы. О том, что накопитель выбран, свидетельствует светодиодный индикатор на его лицевой панели.
Для перемещения головок на один шаг контроллер должен подать импульс Step
; направление перемещения определяется уровнем сигнала Direction
: при низком уровне (сигнал активен) перемещение происходит в сторону центра диска (номер трека увеличивается). Нулевой трек контроллер находит, перемещая головки от центра до появления сигнала Track 00
. Выбор номера головки производится сигналом Side 1
. Начало трека накопитель отмечает импульсом Index
, который вырабатывается при прохождении индексного отверстия вращающейся дискеты мимо датчика. Считываемые данные в закодированном (MFM) виде (но усиленные и сформированные в ТТЛ-сигнал) поступают от накопителя по линии Read Data
. Для включения режима записи служит сигнал Write Gate
, закодированные данные в цифровом виде поступают от контроллера по линии Write Data
. Если установлена дискета, защищенная от записи, накопитель сообщит об этом сигналом Write Protect
. Для снижения тока записи, которое требуется при работе накопителей HD с дискетами DD и QD, предназначен сигнал Reduce Write
, его иное название — Low Current
или FDHDIN
. Для переключения головок на «вертикальную запись» (для дискет 2,88 Мбайт) служит сигнал FDEDIN
. Оба эти сигнала вырабатываются контроллером, но для самого дисковода они дублируются сигналами от датчиков типа дискеты (сигнал FDEDIN
необязателен, дисковод сам переключится по сигналу от датчика). Некоторые модели дисководов позволяют изменить описанный способ работы датчиков типа дискеты, принятый для PC-совместимых ПК, — они могут быть отключены или выполнять информирование контроллера. Однако практически все контроллеры сами управляют линиями интерфейса, соответствующими сигналам от этих датчиков. В этом управлении учитывается тип дисковода, описанный в CMOS Setup, и заказанный формат дискеты. Сигнал Reduce Write
(низкий уровень) формируется контроллером при любом обращении к дисководу, описанному в CMOS как HD (High Density — высокая плотность, емкость 1,2 или 1,44 Мбайт), для работы с дискетами DD или QD (360 или 720 Кбайт). В некоторых контроллерах этот сигнал формировался, только когда контроллер настроен на скорость 300 Кбит/с (дискета 360/720 Кбайт в дисководе на 1,2 Мбайт). Такой контроллер может надежно форматировать и записывать дискеты 720 Кбайт в приводе на 1,44 Мбайт только при наличии правильно сконфигурированного датчика HD, иначе он все 3,5" дискеты будет записывать с высоким током записи, недопустимым для дискет QD.
Накопители HD при смене дискеты устанавливают сигнал Disk Changed
, который сбрасывается после обращения к этому накопителю. Этот сигнал заслуживает особого внимания. Он имеется только у дисководов HD и ED (Extra High Density, малораспространенные дисководы на 2,88 Мбайт), причем способ использования этого контакта может определяться джамперами дисковода. В PC соответствующий джампер устанавливается в положение DC
(Disk Change). Альтернативное использование этой линии — сигнализация готовности устройства, что может обозначаться как RY
, RDY
или SR
, — для PC непригодно.
Заметим, что в интерфейсе нет никаких сигналов, прямо информирующих контроллер о готовности — наличии установленной дискеты. Контроллер может определить готовность, лишь выбрав накопитель и запустив мотор. Тогда отсутствие импульсов Index будет означать неготовность — нет дискеты или она не зафиксирована на шпинделе, или же не подключен дисковод (интерфейс или питание). Наличие дисковода контроллер может определить с помощью команды рекалибровки (см. ниже) — при ее выполнении дисковод должен подать сигнал Track00
.
Все НГМД, применяемые в PC, независимо от типа и размера имеют одинаковый интерфейс и унифицированные 34-контактные разъемы двух типов: с печатными двусторонними ламелями у устройств 5" и двухрядными штырьковыми контактами у устройств 3,5". Используемый в PC кабель-шлейф имеет перевернутый фрагмент из 7 проводов с номерами 10–16 (рис. 9.1). Этот поворот позволяет подключать к контроллеру одним шлейфом до двух НГМД, причем адрес накопителя определяется его положением на шлейфе: для привода А: фрагмент перевернут, для В: — нет. Универсальный шлейф с пятью разъемами, изображенный на рисунке, позволяет подключать пару любых дисководов, которые должны располагаться в разных зонах шлейфа. Некоторые разъемы могут и отсутствовать, что сковывает свободу конфигурирования дисководов. В табл. 9.1 описан интерфейсный кабель с сигналами, приходящими на разные накопители. Направление сигналов (I/O — ввод-вывод) указано относительно контроллера.
Контроллер | Дисковод В: | Дисковод A: | ||||
---|---|---|---|---|---|---|
Контакт¹ | Сигнал | I/O | Контакт¹ | Сигнал | Контакт¹ | Сигнал |
2 | FDHDIN (Reduce Write) | О | 2 | Low Current | 2 | Low Current |
4 | Резерв | - | 4 | Резерв | 4 | Резерв |
6 | FDEDEIN | - | 6 | FDEDIN (DS3) | 6 | FDEDIN (DS3) |
8 | Index | I | 8 | Index | 8 | Index |
10 | Motor On A | O | 10 | DS0 | 16 | Motor² |
12 | Drive Sel 1 | O | 12 | DS11 | 14 | DS2 |
14 | Drive Sel 0 | О | 14 | DS2 | 12 | DS11 |
16 | Motor On В | О | 16 | Motor² | 10 | DS0 |
18 | Direction | О | 18 | Direction | 18 | Direction |
20 | Step | О | 20 | Step | 20 | Step |
22 | Write Data | О | 22 | WData | 22 | Wdata |
24 | Write Gate | О | 24 | WGate | 24 | Wgate |
26 | Track 00 | I | 26 | TR 00 | 26 | TR 00 |
28 | Write Protect | I | 28 | WProt | 28 | WProt |
30 | Read Data | I | 30 | RData | 30 | Rdata |
32 | Side 1 | O | 32 | Side 1 | 32 | Side 1 |
34³ | Disk Changed | I | 34³ | DC | 34³ | DC |
Drive Sel 0
и Motor On А
для накопителя А:
и Drive Sel 1
и Motor On В
для накопителя В:
. При этом на обоих накопителях джамперы устанавливаются так, что они отзываются на сигнал DS 1
(контакт 12 разъема). Обычно джамперы на дисководе обозначаются DS0
/DS1
/DS2
/DS3
, и следует установить джампер DS1
. Если джамперы обозначаются как DS1
/DS2
/DS3
/DS4
, что встречается нечасто, то следует установить DS2
. Принятая система выборки позволяет все дисководы конфигурировать однотипно, а адрес задавать положением на шлейфе. В некоторых специфических клонах PC применяют иную систему выборки накопителей и «прямой» кабель-шлейф. При этом используется выборка устройства сигналом DS0
, ко переключение выборки на эту линию некоторыми накопителями не поддерживается, в результате замена накопителей в этих «фирменных» машинах может стать хлопотным делом, особенно при отсутствии технической документации.
Int 13h
(см. 12.8.1) и ОС. Игнорирование сервисов BIOS и даже ОС оправданно в основном лишь для нетривиальных задач типа работы с ключевыми дискетами и т. п.
Все контроллеры, применяемые в IBM PC, обеспечивают совместимость с «исторической» микросхемой контроллера NEC PD765, которая является аналогом i8272. Контроллер FDC АТ поддерживает два накопителя; он позволяет работать со скоростями передачи данных 250 Кбит/с (для работы с дискетами SD, DD и QD в старых дисководах 5"), 500 Кбит/с для плотности HD (1,2 и 1,44 Мбайт), а также 300 Кбит/с для работы с дискетами SD, DD и QD в приводах HD 5". Современные контроллеры, поддерживающие накопители ED (2,88 Мбайт), должны обеспечивать и скорость 1000 Кбит/с. Режимы контроллеров, соответствующие скоростям 250/300, 500 и 1000 Кбит/с, обозначаются соответственно 1М, 2М и 4М. В режиме 1М на одном треке умещается 9 секторов (по 512 байт); для этого при частоте вращения 300 об/мин требуется скорость 250 Кбит/с, а при 360 об/мин — 300 Кбит/с. В режиме 2М при частоте вращения 300 об/мин (у дисководов HD 3,5") на одном треке умещается 18 секторов, а при частоте вращения 360 об/мин (у дисководов HD 5") — 15 секторов. Режим 4М, похоже, так и останется невостребованным. Выбор скорости задает частоту синхронизации при записи и форматировании, а также настраивает цепи ФАПЧ сепаратора данных контроллера. Сепаратор данных способен устойчиво выделять данные и синхросигнал из сигнала, принятого с головки, лишь при небольших (порядка ±10%) отклонениях скорости от номинала, поэтому скорость должна быть правильно выбрана для всех операций обмена данными с диском.
В карте ресурсов AT имеется место под два контроллера НГМД:
♦ FDC АТ#1 (стандартный или основной) занимает порты с адресами 3F0h-3F7h (как и FDC XT);
♦ FDC AT#2 (дополнительный) занимает порты с адресами 370h-377h.
Контроллеры вырабатывают запрос аппаратного прерывания IRQ6
(BIOS Int 0Eh
) по окончании выполнения внутренних операций. Для обмена данными может использоваться канал DMA2
. Назначение регистров контроллера приведено в табл. 9.2.
Адрес | Назначение (R — чтение, W — запись) |
---|---|
3F2 (372) | RW: DOR (Digital Output Register) — регистр управления: биты [4:7] — включение моторов А, В, С, D: 1 — включен; бит 3:1 — разрешение использования DMA2 и IRQ6; бит 2:0 — сброс, 1 — разрешение контроллера; биты [1:0] — номер выбранного привода 0–3. В AT биты 6, 7 и 1 не используются |
3F3 (373) | RW: TDR (Tape Drive Register) — регистр стриммера: биты [1:0] — номер устройства, которому соответствует стриммер. По сбросу устанавливается 00, но это означает отсутствие стриммера (вместо дисковода А: стриммер не поставить) |
3F4 (374) | R: MSR (Main State Register) — главный регистр состояния: бит 7 (DQM) — запрос: 1 — готов к приему/передаче байта; бит 6 (DIO) — направление данных: 1 — FDC → CPU; бит 5 (NON DMA) — использование DMA: 1 — DMA не используется; бит 4 (CMDBSY): 1 — контроллер занят выполнением команды; биты [0:3] — привод А:, В:, С:, D: занят (в AT используются только биты 0, 1) |
3F4 (374)¹ | W: DSR (Datarate Select Register) — регистр выбора скорости: бит 7: 1 — сброс контроллера (обнуляется автоматически); бит 6: 1 — отключение питания контроллера; бит 5: 1 — разрешение внешней ФАПЧ (должен быть 0); биты [4:2] — выбор времени предкомпенсации записи (000 — предкомпенсация по умолчанию); биты [1:0] — скорость обмена (00 — 500 Кбит/с, 01 — 300 Кбит/с, 10 —250 Кбит/с, 11 —1 Мбит/с) |
3F5 (375) | RW: DR (Data Register) — регистр команд/данных |
3F7 (377) | W: CCR (Configuration Control Register) — регистр параметров контроллера (AT): биты [7:2] — не используются; биты [1:0] — скорость обмена (00 — 500 Кбит/с, 01 — 300 Кбит/с, 10 — 250 Кбит/с, 11— 1 Мбит/с) |
3F7 (377) | R: DIR (Digital Input Register) — регистр состояния (только в AT): бит 7: 1=смена носителя (чтение инвертированной линии DC); биты [6:0] — не используются, при чтении не выводятся на шину данных |
TDR
(Tape Drive Register), пара младших битов которого задает номер устройства, которому соответствует стриммер (для него иначе настраиваются цепи ФАПЧ сепаратора данных).
Все операции с дискетами выполняются по командам, посылаемым хостом в регистр DR
(3F5) согласно состоянию битов регистра MSR
(3F4). Запись байта команды или данных в регистр DR разрешается лишь при текущем значении MSR
=10xxxxxxb, чтение — при MSR
=11xxxxxxb. Для записи/чтения этого регистра приходится использовать отдельные подпрограммы, не только дожидающиеся разрешающих значений MSR
, но и имеющие аварийный выход по тайм-ауту. Хост также выполняет запись в регистр DOR
(3F2) для запуска/останова дисковода, а также в CCR
(3F7) или DSR
(3F4) для выбора скорости передачи данных. В операциях обмена данными с дискетами обычно участвует контроллер DMA
, и он должен быть своевременно проинициализирован. Сигнал TC
(завершение цикла DMA) используется как признак завершения фазы данных. В общем виде процедура обмена данными состоит из следующих шагов.
1. Запуск мотора и выбор дисковода (записью в регистр DOR
).
2. Установка скорости (записью в регистр CCR
).
3. Выполнение команды рекалибровки.
4. Ожидание раскрутки двигателя (если мотор работает еще менее 0,5 с).
5. Позиционирование головки на требуемый цилиндр.
6. Инициализация контроллера DMA.
7. Посылка команды чтения/записи.
8. Ожидание прерывания от контроллера. Прерывание произойдет, когда завершится фаза исполнения, во время которой контроллер обычно обменивается данными с хостом. Если за определенное время прерывание не получено, фиксируется неудачная попытка обращения с ошибкой тайм-аута.
9. По прерыванию от контроллера считываются байты результата, и если ошибок нет, на этом обмен успешно завершается. Если есть ошибки, то снова переходят на шаг инициализации DMA и далее повторяют команду чтения/записи. Если за несколько (3) раз успех не достигается, то выполняется рекалибровка, затем инициализация DMA и повторные попытки чтения/записи. Если успех не достигается и после нескольких рекалибровок, обмен прекращается аварийно.
Помимо описанного механизма имеется механизм автоматического выключения мотора НГМД, если к нему долго нет обращения. Для этого в фиксированном месте ОЗУ (BIOS Data Area, ячейка 0:0440) имеется счетчик времени работы мотора НГМД и адрес дисковода (в позиционном коде), мотор которого включен (0:043F). При каждом обращении к дискете (когда в регистре DOR устанавливается бит включения мотора) в счетчик времени заносится константа, соответствующая выдержке на отключение (по умолчанию — 2 с). Обработчик аппаратного прерывания от таймера IRQ0
(BIOS Int 08h
) c интервалом около 55 мс декрементирует счетчик времени и по его обнулению отключает мотор (записью в регистр DOR
). Таким образом, если в течение заданного интервала нет обращений, мотор автоматически выключается. Конечно, это работает, лишь когда BIOS отрабатывает аппаратные прерывания от таймера, так что не отключающийся мотор дисковода может быть косвенным признаком «зависания» компьютера.
Исполнение каждой команды имеет три фазы.
1. Фаза команды. Контроллер устанавливает биты DQM
=1 и DIO
=0, что является приглашением к вводу команды. В регистр DR
посылается байт команды, после которого посылаются байты параметров в строго предписанном порядке. На прием каждого байта контроллер отзывается обнулением DQM
на время обработки. После получения последнего требуемого байта DQM
остается обнуленным и контроллер переходит в фазу исполнения. В качестве параметров фигурируют номер цилиндра С
, номер головки H
, номер сектора R
, код размера N
или длина поля данных сектора DTL
, номер последнего сектора на треке EOT
, число секторов SC
, длительность зазоров GPL
и некоторые другие данные.
2. Фаза исполнения требует передачи данных от хоста к контроллеру или обратно, передача может происходить как в режиме DMA, так и чисто программно (PIO). В режиме DMA обмен выполняется по сигналам DRQ
и DACK#
используемого канала. Если DMA не используется, то запросом на передачу является бит DQM
и сигнал прерывания. По окончании фазы вырабатывается сигнал прерывания (и его признак в регистре ST0
), и контроллер переходит в фазу результата.
3. В фазе результата DQM
=1 и DIO
=1, хост должен считать байты результата из DR
, после чего биты установятся в значение DQM
=1 и DIO
=0, что соответствует переходу в фазу приема команды.
С момента получения команды и до окончания фазы результата в регистре MSR
бит CMD BSY
=1. Контроллер всегда можно принудительно сбросить (перевести в начало фазы команды) записью в регистр DOR или DSR. Если контроллер получит неподдерживаемую команду, он сразу выставит DQM
=1 и DIO
=1, что является указанием на необходимость чтения DR
. Хост должен прочитать из DR
код состояния, в котором будет значение 80h (недопустимая команда).
В современных контроллерах НГМД имеется буфер FIFO глубиной 16 байт, работающий при передаче данных (но не команд и параметров) через регистр DR
; в «историческом» контроллере i8272 буфера FIFO не было. Логика общения с регистром DR
остается той же. Буфер должен быть своевременно обслужен, чтобы не происходило его переполнения или опустошения. Логика буфера устанавливает запрос данных так, чтобы не отвлекать хост «по пустякам». При чтении из DR
запрос устанавливается, когда в буфере имеется (16–порог) байтов или же считан последний байт сектора. При записи в DR
запрос первоначально устанавливается и удерживается до заполнения буфера, впоследствии он устанавливается снова, когда в буфере остается порог байтов. Переход в фазу результата происходит, когда завершается обмен хоста с DR
и буфер опустошается. Общение с регистром DR
при записи команд и параметров должно выполняться согласно значениям старших битов регистра MSR
(буфер FIFO при этом не используется).
DEV
) в регистре номера устройства и головки (drive/head register). Если бит DEV
=0, выбрано ведущее устройство, если DEV
=1 — ведомое. Запись в этот регистр воспринимается сразу обоими устройствами, на обращения к остальным регистрам реагирует только выбранное. Достаточно универсальный набор сигналов позволяет подключать любое устройство со встроенным контроллером, которому в пространстве портов ввода-вывода достаточно того же набора регистров, способное поддержать режим выбора устройства через вышеупомянутый бит. Принятая система команд и регистров, являющаяся частью спецификации ATA, ориентирована на блочный обмен данными с устройствами прямого доступа. Для иных устройств существует спецификация ATAPI, основанная на тех же аппаратных средствах, но позволяющая обмениваться пакетами управляющей информации (Package Interface, PI). Структура и наполнение пакетов позаимствованы из универсального интерфейса SCSI. Пакетный интерфейс позволяет расширить границы применения шины ATA.
Адресация в ATA имеет «дисковые корни»: для накопителей изначально указывали адрес цилиндра (cylinder), головки (head) и сектора (sector) — так называемая трехмерная адресация CHS. Сначала эта адресация точно соответствовала реальной геометрии — физически сектор действительно находился по указанному адресу. Позже по ряду причин диски ATA стали описывать внешней геометрией, отличающейся от реальной внутренней (например, разные зоны треков имеют разное число секторов, причем часть секторов может резервироваться на случай замены дефектных). При этом одно и то же устройство может иметь различную внешнюю геометрию. Преобразование адресов в реальные выполняется встроенным контроллером устройства. В системе CHS устройство ATA позволяет адресовать до 267 386 880 (65 536×16×255) секторов (блоков), что при размере сектора в 512 байт дает 136 902 082 560 байт (около 137 Гбайт). Позже пришли к линейной адресации логических блоков LBA (Logical Block Addressing), где адрес блока (сектора) определяется 28-битным числом, что позволяет адресовать до 268 435 455 (228) блоков (немного больше, чем в CHS). Для устройств ATА, поддерживающих и CHS, и LBA, режим адресации определяется для каждой команды битом L
(бит 6) регистра D/H
; режимы могут чередоваться произвольным образом. Устройства ATAPI используют принятую в SCSI 32-битную логическую адресацию, позволяющую адресовать до 2 Тбайт (при 512-байтном блоке).
Если к шине ATA подключено одно устройство, оно должно быть ведущим. Если подключены два устройства, одно должно быть ведущим, другое — ведомым. О своей роли (ведущее или ведомое) устройства «узнают» с помощью предварительно установленных конфигурационных джамперов. Если применяется «кабельная выборка» (см. ниже), роль устройства определяется его положением на специальном ленточном кабеле. Оба устройства воспринимают команды от хост-адаптера одновременно. Однако исполнять команду будет лишь выбранное устройство. Выводить выходные сигналы на шину ATA имеет право только выбранное устройство. Такая система подразумевает, что, начав операцию обмена с одним из устройств, хост-адаптер не может переключиться на обслуживание другого до завершения начатой операции. Параллельно могут работать только устройства IDE, подключаемые к разным шинам (каналам) ATA. Спецификация ATA-4 определяет способ обхода этого ограничения, но эту возможность используют редко.
Для устройств IDE существует несколько разновидностей интерфейса.
♦ ATA, он же AT-BUS, — 16-битный интерфейс подключения к шине компьютера AT. Наиболее распространенный 40-проводный сигнальный и 4-проводный питающий интерфейс для подключения дисковых накопителей к компьютерам AT. Для миниатюрных (2,5" и менее) накопителей используют 44-проводный кабель, по которому передается и питание.
♦ PC Card ATA — 16-битный интерфейс с 68-контактным разъемом PC Card (PCMCIA) для подключения к блокнотным PC.
♦ XT IDE (8 бит), он же XT-BUS, — 40-проводный интерфейс, похожий на ATA, но несовместимый с ним.
♦ MCA IDE (16 бит) — 72-проводный интерфейс, предназначенный специально для шины и накопителей PS/2.
♦ ATA-2 — расширенная спецификация ATA. Включает 2 канала, 4 устройства, PIO Mode 3, Multiword DMA Mode 1, Block mode, объем диска до 8 Гбайт, поддержка LBA и CHS.
♦ Fast ATA-2 разрешает использовать Multiword DMA Mode 2 (13,3 Мбайт/с), PIO Mode 4.
♦ ATA-3 — расширение ATA-2. Включает средства парольной защиты, улучшенного управления питанием, самотестирования с предупреждением приближения отказа — SMART (Self Monitoring Analysis and Report Technology).
♦ ATA/ATAPI-4 — расширение ATA-3, включающее режим Ultra DMA со скоростью обмена до 33 Мбайт/с и пакетный интерфейс ATAPI. Появляется поддержка очередей и возможность перекрытия команд.
♦ ATA/ATAPI-5 — ревизия ATA/ATAPI-4: удаляются устаревшие команды и биты, добавляются новые возможности защиты и управления энергопотреблением. Включает режим Ultra DMA со скоростью обмена до 66 Мбайт/с.
♦ ATA/ATAPI-6 — дополнения к ATA/ATAPI-5: потоковое расширение для чтения/записи аудио- и видеоданных, управление акустическим шумом, режим Ultra DMA со скоростью обмена до 100 Мбайт/с.
♦ Serial ATA — последовательный интерфейс.
♦ E-IDE (Enhanced IDE) — расширенный интерфейс, введенный фирмой Western Digital. Реализуется в адаптерах для шин PCI и VLB. Позволяет подключать до 4 устройств (к двум каналам), включая CD-ROM и стриммеры (ATAPI). Поддерживает PIO Mode 3, Multiword DMA Mode 1, объем диска до 8 Гбайт, LBA и CHS. С аппаратной точки зрения практически полностью соответствует спецификации ATA-2.
Устройства ATA IDE, E-IDE, ATA-2, Fast ATA-2, ATA-3, ATA/ATAPI-4, ATA/ATAPI-5 и ATA/ATAPI-6 электрически совместимы. Степень логической совместимости достаточно высока (все базовые возможности ATA доступны). Однако для полного использования всех расширений необходимо соответствие спецификаций устройств, хост-адаптера и его ПО.
Разработкой спецификаций ATA/ATAPI занимается технический комитет T13 американского Национального Комитета но стандартизации в области информационных технологий (NCITS). Разработанные им спецификации оформляются в виде стандартов ANSI. Спецификация ATA/ATAPI-6 объявлена последней версией параллельного интерфейса ATA, за которой следует последовательный интерфейс Serial ATA.
DMARQ
— до 500 мкА), низкий уровень не выше 0,5 В (при токе 4 мА, для линии DASP
ради совместимости со старыми устройствами — 12 мА);
♦ высокий уровень входного сигнала не ниже 2,0 В, низкий уровень не выше 0,8 В.
Все информационные сигналы интерфейса передаются через 40-контактный разъем, у которого ключом является отсутствующий на вилке и закрытый на розетке контакт 20. Использование в качестве ключа выступа на корпусе розетки и прорези в бандаже вилки стандартом не приветствуется. Для соединения устройств применяется плоский многожильный кабель-шлейф, длина кабеля не должна превышать 0,46 м (18"), допустимая емкость проводников — не более 35 пФ. Терминаторы стандартом не предусматриваются (они имеются в каждом устройстве и хост-адаптере), но если кабель с тремя разъемами (розетками) используют для подключения одного устройства, то устройство и хост-адаптер рекомендуется подключать к противоположным концам кабеля. Состав информационных сигналов интерфейса ATA приведен в табл. 9.3, вид кабеля — на рис. 9.2. В большинстве кабелей одноименные контакты всех разъемов соединяются своими проводами и все коннекторы равноправны. Встречаются (редко) ленточные кабели с кабельной выборкой, изображенные на рис. 9.3. В них провод 28 перерезан, так что контакт 28 (CSEL) для ведущего устройства заземлен через хост-адаптер, а для ведомого — не подключен. Кабель должен соответствовать системе адресации, выбранной для обоих устройств.
Сигнал | Тип1 | Контакт | Контакт | Тип1 | Сигнал |
---|---|---|---|---|---|
RESET# | I | 1 | 2 | - | GND |
DD7 | I/O TS | 3 | 4 | I/O TS | DD8 |
DD6 | I/O TS | 5 | 6 | I/O TS | DD9 |
DD5 | I/O TS | 7 | 8 | I/O TS | DD10 |
DD4 | I/O TS | 9 | 10 | I/O TS | DD11 |
DD3 | I/O TS | 11 | 12 | I/O TS | DD12 |
DD2 | I/O TS | 13 | 14 | I/O TS | DD13 |
DD1 | I/O TS | 15 | 16 | I/O TS | DD14 |
DD0 | I/O TS | 17 | 18 | I/O TS | DD15 |
GND | - | 19 | 20 | - | Ключ (нет штырька) |
DMARQ | O TS2 | 21 | 22 | - | GND |
DIOW#/STOP3 | I | 23 | 24 | - | GND |
DIOR#/HDMARDY#/HSTROBE3 | I | 25 | 26 | - | GND |
IORDY/DDMARDY#/DSTROBE3 | O TS2 | 27 | 28 | I/O | SPSYNC/CSEL7 |
DMACK# | I | 29 | 30 | - | GND |
INTRQ | O TS2 | 31 | 32 | O OK | IOCS16#8 |
DA1 | I | 33 | 34 | I, O4 | PDIAG#/CBLID3 |
DA0 | I | 35 | 36 | I | DA2 |
CS0# | I | 37 | 38 | I | CS1# |
DASP# | I/O OK5 | 39 | 40 | - | GND |
+5 В (Logic) | - | 416 | 426 | - | +5 В (Motor) |
GND | - | 436 | 446 | - | Зарезервирован |
GND
). Такие кабели требуются для режимов UltraDMA выше 2 (скорость выше 33 Мбайт/с). Эти кабели разделываются на специальные разъемы, имеющие 40-контактные гнезда с обычным назначением контактов, но ножевые контакты для врезки 80 проводов. В шлейфе для схемной земли используются либо все четные, либо все нечетные провода — это зависит от применяемых разъемов (на них должна быть маркировка EVN GND
или ODD GND
соответственно). Установка на одном шлейфе разнотипных разъемов недопустима (тогда все 80 проводов окажутся соединенными вместе). На 80-проводном кабеле в разъеме для подключения контроллера контакт 34 соединен с шиной GND
и не соединен с проводом шлейфа; этим обеспечивается идентификация типа кабеля (CBLID
). Провод шлейфа соединяет контакты 34 разъемов устройств, что обеспечивает прохождение сигнала PDIAG#
от ведомого устройства к ведущему. С учетом возможности кабельной выборки на 80-проводном шлейфе положение коннекторов уже однозначно.
♦ Коннектор хост-контроллера расположен на конце шлейфа, у него контакт 34 заземлен и не соединен со шлейфом. Корпус коннектора должен быть синего цвета.
♦ Коннектор устройства 0 расположен на противоположном конце шлейфа, у него все контакты соединены со шлейфом. Корпус коннектора должен быть черного цвета.
♦ Коннектор устройства 1 (необязательный) расположен в середине шлейфа, у него контакт 28 не соединен со шлейфом. Корпус коннектора должен быть серого цвета.
Если кабельная выборка не используется, то устройства 0 и 1 можно менять местами.
Спецификация ATA «узаконивает» как 40-контактный интерфейсный разъем, так и 4-контактный разъем питания (рис. 9.4), но для малогабаритных устройств питание может подаваться по 44-проводному интерфейсному кабелю.
А
через резистор 10 кОм соединяется с шиной +5 В;
♦ контакт В
для устройства задает его роль: низкий уровень — устройство 0, высокий — устройство 1;
♦ контакт С
определяет режим устройства по включении питания: низкий уровень — Standby, высокий — Idle;
♦ контакт D
соединяется с контактом 28 (CSEL) и через резистор 10 кОм — с шиной +5 В.
Это назначение, позволяющее конфигурировать и адресацию, и режим потребления, применяется не на всех устройствах. На винчестерах фирмы Toshiba контакты А
и В
могут использоваться как выход и вход последовательного интерфейса (В
подтянут к шине +5 В через резистор 47 кОм), С
— GND, D
— роль устройства (низкий уровень для устройства 1).
Выборка | SFF8057 | SFF8058 | SFF8212 | Toshiba (1996) |
---|---|---|---|---|
Используемые контакты | Е-Н | A-F | A-D | A-D |
Кабельная выборка | E-F | A-B | B-D | B-D |
Master | G-H | E-F | - | - |
Master при наличии Slave | G-H, E-F | E-F | - | - |
Slave | - | C-D | A-B | C-D |
RESET#
(Device Reset) — сброс устройства (инвертированный сигнал сброса системной шины). Сигнал длительностью не менее 25 мкс вырабатывается после установления питающих напряжений. Сигнал вызывает сброс интерфейса в исходное состояние и устанавливает параметры по умолчанию.
♦ DA[2:0]
(Device Address) — три младших бита системной шины адреса, используемые для выбора регистров устройств.
♦ DD[15:0]
(Device Data) — двунаправленная 16-битная шина данных между адаптером и устройствами. При 8-битных обменах используются младшие биты D[7:0]
. У устройства не должно быть «подтягивающего» резистора на линии DD7
— на хост-контроллере эта линия через резистор 10 кОм соединена с шиной GND
. Это позволяет хосту определить факт отсутствия устройства на шине сразу после аппаратного сброса: при чтении регистра состояния отсутствующего устройства бит BSY
окажется сброшенным.
♦ DIOR#
(Device I/O Read) — строб чтения портов ввода-вывода. Данные фиксируются по положительному перепаду сигнала.
♦ DIOW#
(Device I/O Write) — строб записи портов ввода-вывода. Данные фиксируются по положительному перепаду сигнала.
♦ IORDY
(I/O channel Ready) — готовность устройства завершить цикл обмена. Низким уровнем сигнала во время цикла обмена устройство может ввести такты ожидания шины. Сигнал требуется при обмене в PIO Mode 3 и выше. На хост-контроллере эта линия через резистор 1 кОм должна подтягиваться к шине питания.
♦ IOCS16#
— разрешение 16-битных операций. Обращение ко всем регистрам, кроме регистра данных, всегда 8-битное. Для PIO Mode 0, 1, 2 при активном сигнале обращения 16-битные, при неактивном — 8-битные. Для PIO Mode 3, 4 и DMA все обмены 16-битные, кроме дополнительных байтов (выходящих за границу 512-байтного сектора) «длинного» считывания и записи. Начиная с ATA/ATAPI-3 не используется.
♦ DMARQ
(DMA Request) — запрос обмена по каналу DMA (необязательный). При разрешении обмена сигнал (высокий уровень) вводится устройством по готовности к обмену. Введя сигнал DMARQ
, устройство должно дождаться подтверждения от хост-адаптера сигналом DMACK#
, после чего может снять запрос DMARQ
. Для очередной передачи запрос должен быть введен снова. В режиме Multiword DMA запрос может удерживаться на время передачи всех данных. Выход должен быть тристабильным, во время работы с DMA он может быть в активном состоянии (0 или 1) только у выбранного устройства. В ATA-1 для этого сигнала мог использоваться как тристабильный, так и стандартный ТТЛ-выход. Работа на одной шине устройств с разнотипными выходами DMARQ
может привести к конфликтам. На хост-контроллере линия должна соединяться с шиной GND через резистор 5,6 кОм.
♦ DMACK#
(DMA Acknowledge) — подтверждение DMA. Сигнал вырабатывается хост-адаптером как подтверждение цикла передачи. Передача слова данных управляется сигналами DIOR#
или DIOW#
. Во время обмена по каналу DMA сигналы IOCS16#
, CS0#
и CS1#
не используются, обмен всегда производится 16-битными словами.
♦ INTRQ
(Interrupt Request) — запрос прерывания. Выход должен быть тристабильным, активный сигнал (логическую единицу) вырабатывает только выбранное устройство, когда у него имеется необслуженный запрос прерывания и его вырабатывание не запрещено битом nIEN
в регистре Device Control
. Запрос сбрасывается по сигналу RESET#
, установке бита SRST
в регистре Deviсе Control
, записи в регистр команд или чтении регистра состояния. При обменах PIO запрос устанавливается в начале передачи каждого блока (сектора или группы секторов при многосекторных операциях). Исключения: по командам Format Track
, Write Sector(S)
, Write Buffer
и Write Long
в начале передачи первого блока данных запрос прерывания не вырабатывается. При обменах DMA запрос прерывания вырабатывается только по завершении операции. На хост-контроллере эта линия через резистор 10 кОм должна подтягиваться к шине GND
.
♦ CS0#
(Chip Select 0) — сигнал выбора блока командных регистров (Command Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне 1F0h-1F7h (сигнал так же называют CS1FX#
).
♦ CS1#
(Chip Select 1) — выбор блока управляющих регистров (Control Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне 3F6h-3F7h (часто этот сигнал называется CS3FX#
).
♦ PDIAG#
(Passed Diagnostics) — сигнал о прохождении диагностики. Ведущее устройство наблюдает за этим сигналом, который ведомое устройство должно выработать в ответ на сброс или команду диагностики. Если ведомое устройство обнаружено (по сигналу DASP#
), ведущее устройство ожидает сигнал в течение 31 с после сброса и 6 с после команды диагностики. Если за это время сигнал не появился, ведущее устройство отмечает этот факт установкой бита 7 регистра ошибок. Если ведомое устройство не обнаружено, ведущее обнуляет регистр состояния ведомого устройства и сообщает свое состояние сразу после завершения собственной самодиагностики. Сигнал служит только для связи двух устройств и хост-адаптером не используется (в ATA-4 контакт задействован для сигнала CBLID#
).
♦ CBLID#
(Cable assembly type identifier) — идентификация типа кабеля. В 80-проводной сборке контакт 34 на разъеме хост-адаптера соединяется с шиной GND
, а контакты 34 разъемов устройств соединяются между собой, но связи с разъемом хост-адаптера не имеют. На устройстве эта линия через резистор 10 кОм должна подтягиваться к шине питания. После прохождения сброса (когда сигнал PDIAG#
снимается) хост может определить наличие 80-проводного кабеля по низкому уровню сигнала.
♦ DASP#
(Device Active, Slave Present) — сигнал двойного назначения: индикатор активности устройства и присутствия ведомого устройства. Устройства имеют выход типа «открытый коллектор» с нагрузочным резистором 10 кОм к шине +5 В. После сброса по сигналу RESET#
или при инициализации по включении питания оба устройства в течение 1 мс должны деактивировать этот сигнал, после чего не позже чем через 400 мс его вводит ведомое устройство для сообщения о своем присутствии. Ведущее устройство не активирует этот сигнал в течение 450 мс. Сигнал деактивируется ведомым устройством после получения им команды или через 31 с автоматически (смотря что произойдет раньше). После этого сигнал может быть введен любым устройством как индикатор активности. Адаптер использует этот сигнал для включения светодиодного индикатора доступа к диску.
♦ SPSYNC/CSEL
(Spindle Synchronization/Cable Select) — синхронизация шпинделя или выборка кабелем. Сигнал двойного назначения, которое должно быть единым для обоих устройств. Сигнал SPSYNC
позволяет синхронизировать шпиндели устройств (актуально для RAID-массивов); используется по усмотрению производителя накопителя, начиная с ATA/ATAPI-3 этот сигнал из спецификации изъят. Сигнал CSEL
позволяет устройствам определять свой адрес по положению на специальном кабеле с разрывом провода 28 между разъемами двух устройств (малораспространенная «кабельная выборка»). Эта линия на хост-адаптере заземлена, и ведущее устройство получает заземленную линию, а ведомое — неподключенную. На устройстве линия подтягивается к высокому уровню резистором 10 кОм. Состояние сигнала (если он управляется хост-адаптером) должно удерживаться по крайней мере 31 с после сигнала RESET#
.
При использовании режима Ultra DMA четыре линии получают новое назначение сигналов.
♦ STOP
(Stop Ultra DMA burst) — останов передачи пакета Ultra DMA.
♦ DDMARDY#
(Device Ultra DMA ready) — готовность устройства при приеме пакета Ultra DMA (управление потоком).
♦ DSTROBE
(Host Ultra DMA data strobe) — строб данных устройства при передаче пакета хосту. Данные передаются по обоим перепадам DSTROBE
.
♦ HDMARDY#
(Host Ultra DMA ready) — готовность хоста при приеме им пакета Ultra DMA (управление потоком).
♦ HSTROBE
(Host Ultra DMA data strobe) — строб данных хоста при передаче пакета устройству. Данные передаются по обоим перепадам HSTROBE
.
Для блокнотных ПК в стандарте имеется вариант интерфейса IDE на 68-контактном разъеме PCMCIA (PC Card), приведенный в табл. 9.5. Здесь имеется ряд специфичных сигналов.
♦ SELATA#
(Select 68-pin ATA) — сигнал, которым хост идентифицирует режим использования разъема, PC Card (сигнал снят) или ATA (сигнал установлен, то есть низкий уровень). Этот сигнал хост должен установить до подачи питания на коннектор. В течение 19 мс после подачи питания устройство игнорирует все интерфейсные сигналы, кроме этого. Если этот сигнал активен, то устройство должно сконфигурироваться на режим ATA. Если сигнал неактивен, оно должно сконфигурироваться на режим PC Card или не отвечать на другие сигналы хоста.
♦ CD1#
и CD2#
(Card Detect) заземляются в устройстве — по этим сигналам хост определяет присутствие устройства.
♦ CS1#
(Device chip select 1) — выбор устройства, подается хостом на оба контакта (11 и 42), но устройство воспринимает только один из них.
♦ DMARQ
, DMACK#
и IORDY
— не обязательны для использования.
♦ M/S#
(Master/Slave) — инверсия сигнала CSEL
. Хост выдает сигналы M/S#
и CSEL
до подачи питания, устройство воспринимает лишь один из них.
Контакт | Сигнал | Контакт | Сигнал |
---|---|---|---|
1 | GND | 35 | GND |
2 | DD3 | 36 | CD1# |
3 | DD4 | 37 | DD11 |
4 | DD5 | 38 | DD12 |
5 | DD6 | 39 | DD13 |
6 | DD7 | 40 | DD14 |
7 | CS0# | 41 | DD15 |
8 | 42 | CS1# | |
9 | SELATA# | 43 | |
10 | 44 | DIOR# | |
11 | CS1# | 45 | DIOW# |
12 | 46 | ||
13 | 47 | ||
14 | 48 | ||
15 | 49 | ||
16 | INTRQ | 50 | |
17 | +5 В | 51 | +5 В |
18 | 52 | ||
19 | 53 | ||
20 | 54 | ||
21 | 55 | M/S# | |
22 | 56 | CSEL | |
23 | 57 | ||
24 | 58 | RESET# | |
25 | 59 | IORDY# | |
26 | 60 | DMARQ | |
27 | DA2 | 61 | DMACK# |
28 | DA1 | 62 | DASP# |
29 | DA0 | 63 | PDIAG# |
30 | DD0 | 64 | DD8 |
31 | DD1 | 65 | DD9 |
32 | DD2 | 66 | DD10 |
33 | 67 | CD2# | |
34 | GND | 68 | GND |
GND
обеспечивает более раннее соединение при подключении и более позднее при отключении. В устройстве сигналы CS0#
, CS1#
, RESET#
и SELATA#
подтягиваются к пассивному состоянию.
Для компьютеров класса XT существует 8-битная версия интерфейса, называемая XT-IDE, реже — XT-Bus. Этот интерфейс [2, 5], как и ATА, реализован на 40-проводном кабеле, и многие его сигналы совпадают с 16-битной шиной AT А. Интерфейс XT-IDE можно рассматривать как подмножество AT А, хотя прямой совместимости нет. Ряд устройств ATA имеют джампер выбора режима XT/AT (в накопителях Seagate на это указывает окончание «АХ» в обозначении модели).
CS0#
, CS1#
, DA2
, DA1
, DA0
, DIOR#
и DIOW#
). Набор регистров (табл. 9.6) состоит из двух блоков, выбираемых сигналами CS0#
и CS1#
, из которых активным (низкий уровень, «0») может быть только один. В таблице приведены адреса регистров в пространстве ввода-вывода IBM PC-совместимого ПК для первого и второго каналов ATA. При обращении к регистрам сигнал DMACK#
должен быть неактивным. Блок командных регистров служит для посылки команд устройству и чтения информации о его состоянии. Блок управляющих регистров используется для управления устройством и получения более подробной информации о его состоянии. На действительность содержимого регистров командного блока и альтернативного регистра состояния указывает нулевое значение бита BSY
регистра состояния. Запись в регистры должна производиться лишь при BSY
=0 и DRQ
=0, кроме особо оговоренных случаев. Если устройство поддерживает управление энергопотреблением, в «спящем» режиме содержимое этих регистров недействительно и запись игнорируется, кроме особо оговоренных случаев.
Адрес | Сигналы адресации канала № (0 — низкий уровень, 1 — высокий) | Назначение (R — чтение, W — запись) | |||||
---|---|---|---|---|---|---|---|
1 | 2 | CS0# | CS1# | DA2 | DA1 | DA0 | |
1 | 1 | x | x | x | Нет обращения (шина данных в третьем состоянии) | ||
0 | 0 | x | x | x | Недопустимый адрес (шина данных в третьем состоянии) | ||
3FX | 37Х | Control Block Registers — блок управляющих регистров | |||||
1 | 0 | 0 | X | x | Не используется (шина данных в третьем состоянии) | ||
1 | 0 | 1 | 0 | x | Не используется (шина данных в третьем состоянии) | ||
3F6 | 376 | 1 | 0 | 1 | 1 | 0 | R: Alternate Status (AS) — альтернативный регистр состояния |
3F6 | 376 | 1 | 0 | 1 | 1 | 0 | W: Device Control (DC) — регистр управления устройством |
3F7 | 377 | 1 | 0 | 1 | 1 | 1 | R: Drive Address (DA) — регистр адреса (не используется)¹ |
1FX | 17Х | Command Block Registers — блок командных регистров | |||||
1F0 | 170 | 0 | 1 | 0 | 0 | 0 | R/W: Data (DR) — регистр данных |
1F1 | 171 | 0 | 1 | 0 | 0 | 1 | R: Error (ER) — регистр ошибок |
1F1 | 171 | 0 | 1 | 0 | 0 | 1 | W: Features (FR) — регистр свойств |
1F2 | 172 | 0 | 1 | 0 | 1 | 0 | R/W: Sector Count (SC) — регистр счетчика секторов |
1F3 | 173 | 0 | 1 | 0 | 1 | 1 | R/W: Sector Number (SN) — регистр номера сектора/LBA[7:0]² |
1F4 | 174 | 0 | 1 | 1 | 0 | 0 | R/W: Cylinder Low (CL) — регистр младшего байта номера цилиндра LBA[15:8]² |
1F5 | 175 | 0 | 1 | 1 | 0 | 1 | R/W: Cylinder High (CH) — регистр старшего байта номера цилиндра/LBA[23:16]² |
1F6 | 176 | 0 | 1 | 1 | 1 | 0 | R/W: Device/Head (D/H) — регистр номера устройства и головки/LBA[27:24]² |
1F7 | 177 | 0 | 1 | 1 | 1 | 1 | R: Status (SR) — регистр состояния |
1F7 | 177 | 0 | 1 | 1 | 1 | 1 | W: Command (CR) — регистр команд |
AS
(для первого канала адрес 3F6h, для второго — 376h) имеет те же биты, что и основной (см. ниже), но его чтение не приводит ни к каким изменениям состояния устройства.
Регистр управления устройством DC
(3F6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Программный сброс через регистр DC
должен отрабатываться ив состоянии Sleep.
Назначение битов регистра DC
:
♦ биты [7:3] зарезервированы;
♦ бит 2 — SRST
(Software Reset) — программный сброс, действует все время, пока бит не будет снят (оба устройства на шине воспринимают программный сброс одновременно);
♦ бит 1 — nIEN
(Interrupt Enable) — инверсный бит разрешения прерывания (при нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ
через тристабильный выход);
♦ бит 0–0.
Регистр адреса устройства DA
(3F7h, 377h) использовался только в первой версии ATA для совместимости со старыми контроллерами, чтением этого регистра можно было определить адресованный привод и головку. Регистр выпадает из блока (он совпадает с диагностическим регистром состояния контроллера НГМД) и рекомендуется, чтобы устройство ATA не отвечало на чтение этого регистра. Если устройство отвечает на чтение, то оно не должно управлять битом DD7 во избежание конфликта с контроллером НГМД, у которого по этой линии передается бит смены носителя. Из-за несоблюдения этого требования могут возникать проблемы, когда контроллер (адаптер) ATA и контроллер НГМД находятся на разных платах.
Назначение битов регистра DA
:
♦ бит 7 — (HiZ) — высокоимпедансный, при считывании не выдается на шину;
♦ бит 6 — nWTG
— инверсный признак записи (во время физического выполнения записи на носитель бит нулевой);
♦ биты [5:2] — nHS[3:0]
— номер головки (инверсные биты);
♦ биты [1:0] — nDS[1:0]
— выбор устройства (инверсные биты): 10 — выбрано устройство 0, 01 — выбрано устройство 1.
Регистр данных DR
(1F0h, 170h) может использоваться как 8-битный или 16-битный в зависимости от типа данных, передаваемых в текущей команде. Обращение к этому регистру происходит в режиме обмена PIO (когда сигнал DMACK#
неактивен), при выполнении передач протокола PIO (PIO Out) хост производит запись в этот регистр, при PI (PIO In) — чтение. В режиме DMA обмен данными происходит через порт данных, при этом активны сигналы DMARQ
и DMACK#
, а сигналы CS0#
и CS1#
неактивны.
Регистр ошибок ER
(1F1h, 171h) хранит состояние выполнения последней операции или диагностический код. После завершения операции на наличие ошибки указывает бит ERR
регистра состояния.
Назначение битов регистра ER
:
♦ бит 7 — зарезервирован;
♦ бит 6 — UNC
(Uncorrectable Data Error) — неисправимая ошибка данных;
♦ бит 5 — МС
(Media Changed) — смена носителя (после смены носителя первая команда обращения отвергается и устанавливается данный бит, после сброса бита следующие команды будут выполняться нормальным образом);
♦ бит 4 — IDNF
(ID Not Found) — указывает на ненайденный идентификатор сектора;
♦ бит 3 — MCR
(Media Change Requested) — индикатор запроса смены носителя (после обнаружения запроса смены носителя команды Door Lock
будут возвращать бит ошибки ERR
и бит MCR
, бит MCR
сбрасывается командами Door Unlock
, Media Eject
или сигналом аппаратного сброса);
♦ бит 2 — ABRT
(Aborted Command) — устанавливается, если команда отвергнута как недействительная или в случае возникновения иной ошибки;
♦ бит 1 — TK0NF
(Track 0 Not Found) — указывает на то, что по команде Recalibrate не удалось найти нулевой трек;
♦ бит 0 — AMNF
(Address Mark Not Found) — не найден адресный маркер данных в заголовке сектора.
После выполнения любого сброса или команды Execute Device Diagnostic
регистр ошибок содержит диагностический код. Трактовка битов, за исключением бита 2 (ABRT
), может меняться в зависимости от исполненной команды.
Регистр свойств FR
(1F1h, 171h) используется в зависимости от команды. В команде Set Features
через него задается код подкоманды. Некоторые старые устройства могут игнорировать запись в этот регистр. До принятия спецификации ATA-2 в этот регистр помещали значение рекомендуемого номера цилиндра для предкомпенсации записи.
Регистр счетчика секторов SC
(1F2h, 172h) содержит число секторов, участвующих в обмене. Хост инициализирует этот регистр до подачи команды (нулевое значение соответствует 256 секторам). По успешному завершению операции доступа к данным регистр должен обнулиться. Если команда завершилась с ошибкой, в регистре будет число секторов, которые должны быть переданы для успешного завершения предыдущего запроса. Команды Initialize Device Parameters
или Write Same
могут переопределить значение этого регистра. В некоторых командах регистр используется для передачи иных параметров.
Регистры номера сектора SN
(1F3h, 173h) и номера цилиндра — младшего СL
(1F4h, 174h) и старшего байта СН
(1F5h, 175h) — имеют двоякое назначение в зависимости от выбранной системы адресации (CHS или LEA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при выполнении операции устройство поместит в них адрес, по которому встретилась ошибка.
Регистр номера устройства и головки D/H
(1F6h, 176h) кроме хранения части адресной информации служит для выбора ведущего или ведомого устройства и метода адресации.
Назначение битов регистра D/H
:
♦ биты 7 и 5 вплоть до ATA-3 должны были быть единичными, в ATA/ATAPI-4 их объявили устаревшими;
♦ бит 6 — L
— единичным значением указывает на применение режима адресации LBA, при нулевом значении бита используется режим CHS;
♦ бит 4 — DEV
(Device) — выбор устройства, при DEV
=0 выбрано ведущее, при DEV
=1 — ведомое;
♦ биты [3:0] имеют двоякое назначение в зависимости от выбранной системы адресации, в режиме CHS они содержат номер головки, в режиме LBA — старшие биты логического адреса.
Как и предыдущие (SN
, CH
и CL
), адресный регистр D/H
инициализируется хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. До принятия спецификации ATA-2 считалось, что адресные регистры должны модифицироваться и после успешного выполнения операции, отражая текущее значение адреса в носителе.
Регистр состояния SR
(1F7h, 177h) отражает текущее состояние устройства в процессе выполнения команд: занятость, готовность, наличие ошибок и др. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает запрос аппаратного прерывания.
Назначение битов регистра SR
описано ниже.
♦ Бит 7 — BSY
(Busy) указывает на занятость устройства, значение этого бита действительно всегда. При BSY
=1 устройство игнорирует попытки записи в командный блок регистров, а чтение этих регистров дает неопределенный результат. При BSY
=0 регистры командного блока доступны, в это время устройство не может устанавливать бит DRQ
, изменять значение битов ЕRR
и содержимое остальных командных регистров (могут меняться только значения битов IDX
, DRDY
, DF
, DSC
и CORR
). Бит может устанавливаться на кратковременный интервал, так что хост может этого не заметить. Бит устанавливается:
• при сбросе устройства;
• по получении команды, если не устанавливается DRQ
;
• между передачами блоков данных в режиме PIO и после них, пока не обнулился DRQ
;
• во время передач данных в режиме DMA.
♦ Бит 6 — DRDY
(Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Если состояние бита изменилось, оно не может вернуться обратно до чтения регистра состояния. При DRDY
=0 устройство воспринимает только команды Execute Device Diagnostic
и Initialize Device Parameters
, прекращая выполнение текущей команды и сообщая об этом флагом ABRT
в регистре ошибок и флагом ERR
в регистре состояния. Другие команды приводят к непредсказуемым результатам. Устройства ATAPI сбрасывают бит по любому сбросу и команде Execute Device Diagnostic
. Бит устанавливается устройством ATA, когда оно готово к выполнению всех команд. Устройство ATAPI устанавливает бит до завершения выполнения команд, за исключением команд Device Reset
и Execute Device Diagnostic
.
♦ Бит 5 — DF
(Device Fault) — индикатор отказа устройства.
♦ Бит 4 — DSC
(Device Seek Complete) — индикатор завершения поиска трека. В командах, допускающих перекрытие, бит называется SERV
(Service Required) — устройство требует обслуживания.
♦ Бит 3 — DRQ
(Data Request) — индикатор готовности к обмену словом или байтом данных.
♦ Бит 2 — CORR
(Corrected Data) — индикатор исправленной ошибки данных.
♦ Бит 1 — IDX
(Index) — индекс, трактуется особо каждым производителем.
♦ Бит 0 — ERR
(Error) — индикатор ошибки выполнения предыдущей операции.
Дополнительная информация содержится в регистре ошибок. Если установлен бит ERR
, до приема следующей команды, программного или аппаратного сброса устройство не изменит состояние этого бита, а также регистра ошибок, регистра количества секторов и регистров цилиндра, головки и номера сектора. Для команд Packet
и Service
бит называется CHK
и служит признаком исключительной ситуации.
В стандарте ATA/ATAPI-4 для некоторых команд биты 4 и 5 могут иметь иное назначение, а биты 1 и 2 объявлены устаревшими.
Назначение регистра команд CR
(1F7h, 177h) очевидно из названия. Устройство начинает исполнять команду сразу, как только ее код записан в данный регистр. Команда Device Reset
выполняется устройством ATAPI независимо от состояния битов BSY
и DRQ
, и даже в состоянии Sleep.
Полный список команд ATA приведен в литературе [4, 5, 9].
IN
и OUT
. Для передачи данных с максимальной скоростью применяют программный доступ PIO к регистру данных инструкциями INSW
/OUTSW
или по каналу DMA. Тип обмена (PIO или DMA) определяется командой обращения. Программный доступ PIO обязателен для всех устройств, команды режима DMA устройствами могут не поддерживаться. Параметры различных режимов обмена приведены в табл. 9.7.
Режим передачи | Минимальное время цикла, нс | Скорость передачи, Мбайт/с | Интерфейс |
---|---|---|---|
PIO mode 0 | 600 | 3,3 | ATA |
PIO mode 1 | 383 | 5,2 | ATA |
PIO mode 2 | 240 | 8,3 | ATA |
PIO mode 3 | 180 | 11,1 | E-IDE, ATA-2 (используется IORDY) |
PIO mode 4 | 120 | 16,6 | E-IDE, Fast ATA-2 (используется IORDY) |
Singleword DMA Mode 0 | 960 | 2,08 | ATA |
Singleword DMA Mode 1 | 480 | 4,16 | ATA |
Singleword DMA Mode 2 | 240 | 8,33 | ATA |
Multiword DMA Mode 0 | 480 | 4,12 | ATA |
Multiword DMA Mode 1 | 150 | 13,3 | ATA-2 |
Multiword DMA Mode 2 | 120 | 16,6 | FastАТА-2 |
Ultra DMA Mode 0 | 120¹ | 16,6 | ATA/ATAPI-4 |
Ultra DMA Mode 1 | 80¹ | 25 | ATA/ATAPI-4 |
Ultra DMA Mode 2 | 60¹ | 33 | ATA/ATAPI-4 |
Ultra DMA Mode 3 | 45¹ | 44,4 | ATA/ATAPI-5 |
Ultra DMA Mode 4 | 30¹ | 66,6 | ATA/ATAPI-5 |
Ultra DMA Mode 5 | 20¹ | 100 | ATA/ATAPI-6 |
REP INS
или REP OUTS
с занесенным в регистр СХ
количеством слов (или байтов) в передаваемом блоке. Эти инструкции обеспечивают максимально возможную скорость обмена для данного процессора и системной шины. «Обуздать» процессор в соответствии с выбранным режимом входит в задачу адаптера ATА, который использует для удлинения цикла сигнал готовности шины (для ISA — IOCHRDY
). Традиционные режимы 0, 1 и 2 имеют временные параметры, фиксируемые только хост-адаптером. Для прогрессивных режимов ATA-2 (PIO Mode 3 и выше) устройство может затормозить обмен, используя сигнал готовности IORDY
. Программный обмен на все время передачи блока занимает и процессор, и системную шину.
Обмен по каналу DMA занимает исключительно шины ввода-вывода и памяти. Процессору требуется выполнить только процедуру инициализации канала, после чего он свободен до прерывания от устройства в конце передачи блока (этим могут воспользоваться многозадачные системы). Стандартные каналы DMA шины ISA для интерфейса ATA не используются из-за низкой пропускной способности. Высокопроизводительные адаптеры ATA имеют собственные более эффективные контроллеры. Режимы обмена по каналу DMA бывают одиночными и множественными. При одиночном режиме — Singleword DMA — устройство для передачи каждого слова вырабатывает сигнал запроса DMARQ
и сбрасывает его по сигналу DMACK#
, подтверждающему цикл обмена. При множественном режиме — Multiword DMA — на сигнал DMARQ
хост отвечает потоком циклов, сопровождаемых сигналами DMACK#
. Если устройство не справляется с потоком, оно может приостановить его снятием сигнала DMARQ
, а по готовности установить его снова. Множественный режим позволяет развить более высокую скорость передачи.
В спецификации ATA/ATAPI-4 появился новый режим — Ultra DMA, позволяющий перешагнуть барьер в 16,6 Мбайт/с, свойственный традиционным режимам и используемому кабелю. При этом обеспечивается и контроль достоверности передачи данных по шине, чего не делалось ни в PIO, ни в стандартных режимах DMA (а зря!). Стандартом ATA-4 было определено 3 режима Ultra DMA (0, 1 и 2), впоследствии ввели новые; выбор режима осуществляется командой Set Features
. В режимах Ultra DMA сигналы DMARQ
и DMACK#
сохраняют свое назначение, а вот смысл сигналов DIOR#
, DIOW#
и IORDY
на время передачи пакета (Ultra DMA Burst) существенно меняется. В пакете данные на шине сопровождаются стробом, генерируемым источником данных, причем для синхронизации используются оба перепада сигналов. Это позволяет повысить пропускную способность шины до 33 Мбайт/с, не увеличивая частоту переключения сигналов сверх 8,33 с-1 (этот предел для обычного кабеля достигается в режиме PIO Mode 4 и Multiword DMA Mode 2). Каждое переданное слово участвует в подсчете CRC-кода, который передается хост-контроллером в конце пакета. Подсчет ведется и источником данных, и приемником.
При несовпадении принятого устройством кода с ожидаемым кодом фиксируется ошибка передачи, о которой устройство сообщает в конце исполнения команды. Передача в пакете может приостановиться, если приемник снимет сигнал готовности (DDMARDY#
или HDMARDY#
). Передача пакета может прекращаться по инициативе устройства (снятием сигнала) или хоста (сигналом STOP
). Противоположная сторона должна подтвердить окончание цикла сигналом STOP
или DMARQ
соответственно.
Способ сообщения об ошибке передачи зависит от типа выполнявшейся команды. Для команд READ DMA
, WRITE DMA
, READ DMA QUEUED
или WRITE DMA QUEUED
в регистре ошибок ER
устанавливается бит 7 (ICRC
) и бит 2 (ABRT
). Для пакетной команды REQUEST SENSE
(уточнить состояние) в случае ошибки в регистре состояния SR
устанавливается бит 0 (CHK
) и сообщается ключ состояния (Sense key
) 0Bh (команда отвергнута). Для всех других пакетных команд в случае ошибки устанавливается бит CHK
и сообщается состояние 04h (аппаратная ошибка), а в последующих командах REQUEST SENSE
сообщается значение ASC/АSСQ
08h/03h (ошибка CRC при связи с логическим устройством). Получив сообщение об ошибке, хост должен повторить команду. Если ошибки появляются постоянно, хост должен понизить скорость обмена (вплоть до выхода из режима Ultra DMA).
Тип режима обмена определяется возможностями хост-адаптера (и его драйвера), устройств и кабеля, и для каждого устройства он будет ограничен минимумом из максимальных возможностей всех этих компонентов. Как правило, режимы устанавливаются системой автоматически, но пользователю дается возможность при необходимости «подрезать крылья» контроллеру настройками BIOS Setup. Для работы в режимах Ultra DMA Mode 3 и выше требуется 80-проводный кабель, присутствие которого должно быть программно определено до включения этого режима обмена. Правда, в спецификации есть оговорка, что при двухточечном соединении (контроллер — устройство) для режимов 3 и 4 можно использовать 40-проводный кабель (без среднего разъема). Система не должна позволить пользователю применить высокоскоростные режимы на обычном кабеле, при этом желательно, чтобы она сообщала об обнаруженном несоответствии. Для определения типа кабеля есть несколько возможностей [4].
♦ Определение типа кабеля через хост-контроллер, для чего хост-контроллер должен иметь приемник сигнала CBLID#
. После включения питания или аппаратного сброса хост ожидает завершения протокола сброса и затем подает команду идентификации Identyfу (Packet) Deviсе
устройству 1. Устройство 1 стандарта ATA-3 и выше обязано после сброса снять сигнал PDIAG#
/CBLID#
не позднее, чем по приходу первой команды. Если обнаружено старое устройство, то протокол идентификации кабеля хостом работать не будет (но со старым устройством на шлейфе включать высокоскоростной режим и не стоит). Современное устройство снимет сигнал, и хост-адаптер сможет определить наличие 80-проводного кабеля по низкому уровню CBLID#
. Некорректно работающее устройство может удержать низкий уровень сигнала, и в этом случае 40-проводный кабель будет ошибочно трактоваться как 80-проводный.
♦ Определение типа кабеля через устройство не требует дополнительного приемника в контроллере — линия PDIAG#
/CBLID#
в хост-контроллере заземляется через конденсатор емкостью 0,047 мкФ±20 %. Приемник сигнала идентификации кабеля располагается в устройстве. Для определения типа кабеля хост посылает команду Identify (Packet) Device
устройству 1, чтобы оно освободило линию (сняло сигнал PDIAG#
). Затем команда идентификации посылается устройству 0. Примерно через 30 мкс после получения команды устройство кратковременно обнуляет эту линию, затем отпускает и только через 20–30 мкс после этого считывает ее состояние и сообщает его в бите 13 слова 93. Линия подтягивается к +5 В резисторами 10 кОм, установленными в устройствах. Если используется 40-проводный кабель, то конденсатор в хост-адаптере не успеет перезарядиться и устройство сообщит нулевое значение бита. Если кабель 80-проводный, то конденсатор оказывается изолированным от линии PDIAG#
/CBLID#
в устройстве, и оно сообщит единичное значение бита. Если на хост- контроллере нет конденсатора, то даже 40-проводный кабель будет идентифицироваться как 80-проводный, что опасно при передаче данных. Если некорректно работающее ведомое устройство своевременно не отпустит линию, то даже 80-проводный кабель будет казаться 40-проводным.
♦ Комбинированный метод определения типа кабеля предполагает наличие на хост-контроллере и приемника сигнала CBLID#
, и конденсатора (они друг другу не мешают). Решение о наличии 80-проводного кабеля принимается, только если это подтвердят оба метода. Возможная ошибка идентификации будет безопасной — при некорректном устройстве 1 на 80-проводном кабеле не будет включен высокоскоростной режим (наверное, это и к лучшему).
Правильный выбор режима обмена обеспечивает надежность и производительность. Все устройства поддерживают режим PIO Mode 0, в котором считывается блок параметров идентификации. В блоке имеются поля, описывающие режим обмена по умолчанию и более эффективные режимы обмена, поддерживаемые устройством. Командой Set Features
можно изменить параметры режима. Иногда накопитель не обеспечивает надежной передачи данных в заявленном высокоскоростном режиме. Если данные начинают пропадать, первым делом следует понизить режим обмена.
BIOS определяет режим обмена с каждым устройством с учетом ограничений, заданных в Setup. Старые диски, не сообщающие своих параметров, могут не работать с новыми режимами PIO. На одном ленточном кабеле (канале ATА) могут присутствовать устройства с разным режимом обмена — спецификация это допускает. Однако реально могут возникать аппаратные или программные ограничения. Некоторые чипсеты не позволяют независимо программировать режим обмена для устройств канала. В таком случае при подключении двух разных устройств (например, PIO Mode 1 и 3) обмен с обоими устройствами будет происходить со скоростью меньшего (PIO Mode 1). Поэтому не рекомендуется к одному каналу ATA (порту IDE) подключать быстрый винчестер и медленный CD-ROM. Иногда завязка режимов обмена двух устройств обусловлена ограниченным набором параметров конфигурации в BIOS. Быстрые режимы множественного обмена по DMA реализуются только драйверами ОС. «Глупый» драйвер может попытаться навязать медленный режим обоим устройствам канала, так что смешивать разные устройства не стоит и по этой причине.
Протокол обмена PIO хорош только для однозадачных ОС. Для многозадачных ОС больший интерес представляет обмен по протоколу DMA, если, конечно, поддерживаемый режим обеспечивает приемлемую скорость обмена. С точки зрения драйвера есть различия лишь между типами режимов (PIO, DMA и UltraDMA); аппаратные нюансы режимов внутри типа влияют только на скорость передачи. Режим UltraDMA значительно отличается от обычного DMA необходимостью обработки возможных ошибок передачи по шине; в случае постоянных ошибок драйвер должен понизить режим UltraDMA (вплоть до перехода на традиционные режимы).
Протокол взаимодействия хоста с устройством выглядит следующим образом.
1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита ВSY
. Если присутствуют два устройства, хост обращается к ним «наугад» — состояние будет сообщаться последним выбранным устройством.
2. Дождавшись освобождения устройства, хост записывает в регистр D/H
байт, у которого бит DEV
указывает на адресуемое устройство. Здесь кроется причина невозможности параллельной работы двух устройств на одной шине ATА: обратиться к устройству можно только после освобождения обоих устройств.
3. Хост читает основной или альтернативный регистр состояния адресованного устройства, дожидаясь признака готовности (DRDY
=1).
4. Хост заносит требуемые параметры в блок командных регистров.
5. Хост записывает код команды в регистр команд.
6. Устройство устанавливает бит BSY
и переходит к исполнению команды.
Дальнейшие действия зависят от протокола передачи данных, заданного командой.
Для команд, не требующих передачи данных, следующий шаг (шаг 7) — последний. Завершив исполнение команды, устройство сбрасывает бит BSY
и устанавливает запрос прерывания (если он не запрещен). К этому моменту в регистрах состояния и ошибок уже имеется информация о результате исполнения. Единичное значение бита BSY
может «промелькнуть» между шагами 6 и 7 так быстро, что хост его не зафиксирует, но для фиксации факта выполнения команды или ее части предназначен запрос прерывания.
Для команд, требующих чтения данных в режиме PIO, процедура продолжается следующим образом.
7. Подготовившись к передаче первого блока данных по шине ATA, устройство устанавливает бит DRQ
. Если была ошибка, она фиксируется в регистрах состояния и ошибок. Далее устройство сбрасывает бит BSY
и устанавливает запрос прерывания (если он не запрещен).
8. Зафиксировав обнуление бита BSY
(или по прерыванию), хост считывает регистр состояния, что приводит к сбросу прерывания от устройства.
9. Если хост обнаружил единичное значение бита DRQ
, он производит чтение первого блока данных в режиме PIO
(адресуясь к регистру данных). Если обнаружена ошибка, считанные данные могут быть недостоверными. После передачи блока данных возможно одно из следующих действий:
• если на шаге 8 ошибка не обнаружена и требуется передача следующего блока, устройство устанавливает бит BSY
и данная последовательность повторяется с шага 7;
• если есть ошибка или передан последний блок данных, устройство сбрасывает бит DRQ
и выполнение команды завершается.
Для операций записи данных после шага 6 для устройства начинается активная фаза записи на носитель, что отмечается установкой бита BSY
.
Для команд, требующих записи данных в режиме PIO, процедура после шага 6 продолжается следующим образом.
7. Подготовившись к приему первого блока данных по шине ATА, устройство устанавливает бит DRQ
(если нет ошибок) и сбрасывает бит BSY
. Если была ошибка, она фиксируется.
8. Зафиксировав обнуление бита BSY
, хост считывает регистр состояния.
9. Если хост обнаружил единичное значение бита DRQ
, он производит запись первого блока данных в режиме PIO по адресу в регистре данных.
10. После передачи блока данных возможно одно из следующих действий:
• если обнаружена ошибка, устройство сбрасывает бит DRQ
, устанавливает запрос прерывания и выполнение команды завершается, а переданные по шине данные остаются устройством необработанными (не записываются на носитель);
• если ошибка не обнаружена, устройство устанавливает бит BSY
и переходит к следующему шагу.
11. Устройство обрабатывает принятый блок данных, затем:
• если нет ошибок и обработанный блок — последний, устройство сбрасывает бит BSY
и устанавливает запрос прерывания, на чем выполнение команды успешно завершается;
• если обнаружена ошибка, выполнение команды завершается таким же об разом, но с установкой битов ошибок;
• если нет ошибок и требуется передача следующего блока, процедура продолжается.
12. По готовности приема следующего блока устройство устанавливает бит DRQ
, сбрасывает бит BSY
и устанавливает запрос прерывания.
13. По обнулении бита BSY
(или по прерыванию) хост считывает регистр состояния.
14. Обнаружив бит DRQ
, хост выполняет запись очередного блока в регистр данных, и последовательность повторяется с шага 11.
Команды с передачей данных в режиме DMA выполняются похожим образом, но с некоторыми исключениями.
♦ Вместо PIO используется прямой доступ к памяти. Хост должен инициализировать канал DMA до записи кода в регистр команд, чтобы при появлении сигнала DMARQ
начался обмен.
♦ Запрос прерывания даже в многосекторных передачах производится один раз — по выполнении команды.
Канал | CS0 | CS1 | IRQ |
---|---|---|---|
1 | 1F0h-1F7h | 3F6h-3F7h | 14 |
2 | 170h-177h | 376h-377h | 15 или 10 |
3 | 1E8h-1Efh | 3Eeh-3Efh | 12 или 11 |
4 | 168h-16Fh | 36Eh-36Fh | 10 или 9 |
DIOR#
, DIOW#
и приемник IORDY
(рекомендуемый вариант); либо должны быть раздельные формирователи CS0#
и CS1#
(второй вариант логичнее, но хуже в плане помех). Такая конфигурация позволяет использовать все режимы обмена, кроме Ultra DMA.
♦ Для поддержки Ultra DMA 0, 1 и 2 (до 33 Мбайт/с) к этим требованиям добавляется наличие раздельных формирователей сигнала DMACK#
.
♦ Для поддержки Ultra DMA 3 и выше (44-100 Мбайт/с) все линии должны иметь раздельные приемопередатчики. Общими могут быть только сигналы RESET#
, INTRQ
, DA(2:0)
, CS0#
, CS1#
и DASP#
, но стандарт этого не рекомендует.
Поскольку скорость программного обмена задается хост-адаптером, интересно индивидуальное программирование режимов PIO Mode для каждого канала/устройства. Ряд чипсетов этого не допускает и при инициализации назначает общий минимальный режим. В результате подключение «тихоходного» устройства замедляет обмен быстрого соседнего устройства.
Современные системные платы оснащаются высокопроизводительными контроллерами шины ATА, обеспечивающими прямое управление шиной PCI (bus mastering) при обмене с устройствами в режимах DMA и Ultra DMA. Прямое управление шиной повышает суммарную производительность компьютера в многозадачных и многопоточных операционных системах. Сами по себе режимы DMA не дают выигрыша в скорости обмена по шине ATA — только режимы UltraDMA Mode 1 и выше превосходят по скорости режим PIO Mode 4 (см. табл. 9.7). Однако обмен в режиме DMA значительно меньше загружает центральный процессор компьютера, и параллельно с дисковым обменом процессор может заниматься обработкой других потоков (задач). В однозадачных (и однопоточных) системах во время дискового обмена процессор все равно ничем другим не занимается, поэтому для них хорош и режим PIO Mode. Для реального использования режима прямого управления в операционной системе должен быть установлен специальный драйвер Bus-Master, соответствующий используемому контроллеру ATA (как правило, чипсету системной платы). Стандартный контроллер PCI IDE описан ниже. Операционная система MS-DOS режимы DMA (и прямое управление) не использует. Для многозадачных ОС (Windows 9x/NT/2000, OS/2, Unix, Linux, NetWare…) драйверы могут входить в комплект поставки ОС или поставляться производителями системных плат (контроллеров ATA). И наконец, режим DMA должны поддерживать подключаемые устройства. Практически все современные устройства поддерживают Ultra DMA (или Multiword DMA), но если в паре с таким устройством к одному контроллеру подключено старое устройство, не поддерживающее этот режим, то прогрессивные режимы могут оказаться недоступными (по вине чипсета или драйвера) и для нового устройства.
Поскольку контроллеры ATA подключаются к 32-разрядной шине PCI, в них ввели возможность обращения к регистру данных ATA двойными словами. При этом за одну 32-битную операцию процессора и шины PCI по шине ATA последовательно передаются два 16-битных слова. Возможностью 32-разрядного доступа к регистру данных можно управлять через параметрВНИМАНИЕ
Режим UltraDMA привлекателен не только скоростью и разгрузкой процессора, но и контролем достоверности передач по шине ATA (правда, этот контроль корректно работает не со всеми драйверами).
IDE 32-bit Transfer (Enable/Disable)
BIOS Setup.
Более сложные контроллеры (отдельные карты расширения) могут иметь собственную кэш-память и управляющий процессор. Они могут аппаратно поддерживать «зеркальные» диски и организовывать RAID-массивы ATA-дисков. Некоторые адаптеры позволяют соединять несколько физических дисков в один логический на уровне вызовов BIOS.
Адаптеры ATA одно время часто размещали на звуковых картах (для подключения CD-ROM). По умолчанию им назначают ресурсы канала 3 или 4. К этим каналам можно подключать винчестеры, но будет ли их там искать BIOS во время теста POST — вопрос. Современные версии BIOS позволяют хранить конфигурационные параметры четырех жестких дисков, более старые версии — двух. Четыре канала ATA физически позволяют подключить до восьми накопителей, но работа с ними лимитирована программными ограничениями.
Существуют гибридные адаптеры для подключения ATA HDD к шинам XT и MCA или, например, к LPT-порту. В последнее время получили распространение переходные адаптеры, позволяющие подключать устройства ATA/ATAPI к шине USB. При использовании USB 2.0 простота подключения внешнего устройства будет сочетаться и с высокой скоростью передачи данных.
Ресурс | Режим совместимости: ресурсы для каналов | Естественный режим PCI: базовый адрес (смещение в конфигурационном пространстве) для канала | ||
---|---|---|---|---|
1 | 2 | 1 | 2 | |
Блок командных регистров | 1F0h-1F7h | 170h-177h | 10h | 14h |
Блок управляющих регистров | 3F6h | 376h | 18h | 1Ch |
Прерывание | 14 | 15 |
REP INS/OUTS
. Для обмена в режиме DMA требуется «зарядить» и запустить контроллер прямого управления, о чем и пойдет речь ниже.
Двухканальный контроллер имеет 16-байтный блок регистров, расположенный в пространстве портов ввода-вывода. Базовый адрес блока хранится в конфигурационном пространстве устройства по смещению 20h (берутся младшие 16 бит двойного слова). Расположение регистров в блоке показано в табл. 9.10, имена регистров имеют префикс BMI (Bus Master IDE) и окончание P (Primary) для первого канала, S (Secondary) — для второго; в описании будем использовать окончание x (любой канал).
Смещение для канала | Длина, байт | Регистр для первого/второго каналов | |
---|---|---|---|
1 | 2 | ||
0 | 8 | 1 | BMICP/BMICS (RW) — регистр команд: бит 0: 1 — запуск, 0 — останов; бит 3 — направление: 0 — чтение памяти, 1 — запись в память; биты 1–2, 3–7 — резерв (0) |
1 | 9 | 1 | Резерв (0) |
2 | 0Ah | 1 | BMISP/BMISS — регистр состояния: бит 0 (R/O) — активность канала; бит 1 (RWC) — ошибка обмена по PCI; бит 2 (RWC) — запрос прерывания от устройства; биты 3–4 — резерв (0); бит 5 (RW) — устройство 0 поддерживает DMA; бит 6 (RW) — устройство 1 поддерживает DMA; бит 7 — признак симплексного режима (1, если каналы не могут работать одновременно) |
3 | 0Bh | 1 | Резерв (0) |
4 | 0Ch | 4 | BMIDPTP/BMIDPTS (RW) — адрес таблицы дескрипторов |
BMICx
, доступный по чтению и записи, используется для запуска контроллера и задания направления передачи. Запуск осуществляется при переходе бита 0 из нуля в единицу, останов для текущего сеанса необратим. Останов контроллера (сброс бита) обычно выполняют по окончании выполнения команды ATA/ATAPI (по прерыванию). Преждевременный останов приведет к ошибке выполнения команды с соответствующим сообщением. Направление должно быть задано до запуска контроллера, изменять его «на ходу» нельзя.
В регистре состояния BMISx
биты 1 и 2 устанавливаются аппаратно, а сбрасываются при записи байта с единичным значением в соответствующем бите. После сброса бита запроса прерывания он снова установится только по следующему фронту сигнала прерывания от устройства. Биты 5 и 6 устанавливаются программно, обычно когда POST определяет возможности подключенных устройств и программирует режимы контроллера. Регистр состояния должен быть прочитан после завершения выполнения команды для определения успешности операций на шине PCI.
В регистр BMIDPTx
заносят адрес таблицы дескрипторов областей памяти, с которыми производится обмен данными. Контроллер способен при чтении памяти собрать поток данных из произвольного числа областей (gathered read), а при записи «разбросать» поток по этим областям (scatter write). Такая возможность встречалась еще в EISA-системах, она позволяет преодолевать барьеры на границах страниц, свойственные стандартным контроллерам DMA и страничной переадресации процессоров х86. Каждый дескриптор занимает 8 байтов:
♦ байты 0–3 (двойное слово) — физический адрес начала области (четный);
♦ байты 4–5 (слово) — счетчик байтов (четный, 0000 соответствует 65 536);
♦ байты 6–7 (слово) — признак конца таблицы (бит 15), биты 0-14 не используются (0).
Каждая область может быть расположена в произвольном месте памяти (кроме отображаемой на шину ISA) и иметь произвольный размер, но не должна пересекать границы страниц размером 64 Кбайт. Таблица дескрипторов должна быть выровнена по границе двойного слова и не должна пересекать границы страниц, имеющих размер 64 Кбайт. Число дескрипторов в таблице произвольно, последний должен содержать признак конца таблицы. Обмен начинается с области, описанной первым дескриптором; за ней идет область следующего дескриптора и так далее до последнего. Контроллер остановится по исчерпании счетчика в последнем дескрипторе или по инициативе устройства, если в обмене должно участвовать меньшее число данных. Если устройству данных не хватит, оно укажет на ошибку при завершении команды.
После запуска контроллера второй и нулевой биты регистра состояния отражают следующие ситуации:
♦ 0,1 — происходит обмен с памятью, прерывания по концу операции еще нет;
♦ 1,0 — обмен завершен, переданный объем соответствует объему описанных буферов (нормальное завершение);
♦ 1,1 — устройство завершило обмен, но по команде ATA передано меньше данных, чем описано в таблицах (допустимое завершение);
♦ 0,0 — ошибка на шине (бит 1), или в таблицах описано меньше данных, чем в команде ATA.
CS
не устанавливается, а адрес устройства задается перемычками, состав которых варьируется. В принципе, достаточно лишь указать устройству его номер (0/1), но в устройствах, разработанных до стандарта ATА, ведущему устройству «подсказывали» о наличии ведомого (по интерфейсу ATA оно могло бы определить это само по сигналу DASP#
). Ниже перечислены комбинации джамперов, которые можно увидеть на устройствах IDE.
♦ M/S
(Master/Slave — ведущее/ведомое) — переключатель адреса. Если на шине присутствует одно устройство, оно должно быть сконфигурировано как ведущее. Если на шине два устройства — одно должно быть ведущим, другое ведомым. Иногда джампер обозначается как C/D
(диск C:
/диск D:
), но для второго канала IDE такое название некорректно. Когда появились первые IDE-диски емкостью 1 Гбайт, для преодоления барьера в 504 Мбайт некоторые модели допускали конфигурирование в виде двух устройств (0 и 1) половинной емкости. В таком режиме на их ленточный кабель IDE второе физическое устройство подключать нельзя.
♦ SP
(Slave Present), DSP
(Drive Slave Present), Master but Slave is not ATA-compatible
или Master but Slave uses only PDIAG-signal
— устанавливается на ведущем устройстве для указания на присутствие ведомого. Если переключатель установлен, а ведомое устройство не подключено, POST даст сообщение об ошибке. Джампер применяется для дисков, не использующих сигнал DASP#
.
♦ Single Drive
— джампер, устанавливаемый на устройстве, если оно единственное на шине (встречается на дисках Western Digital). Устройство будет ведущим.
♦ ACT
(Drive Active) — джампер, соединяющий линию DASP#
с формирователем сигнала активности устройства. Устанавливается на устройстве 0, встречается редко.
♦ HSP
— джампер, заземляющий линию DASP#
(положение, взаимоисключающее ACT
). Устанавливается на устройстве 1 для сигнализации о его присутствии (встречается редко).
Для полностью ATA-совместимых дисков правильно сконфигурированные устройства определяются автоматически. Современные контроллеры ATA позволяют подключать даже единственное устройство как ведомое — интерфейсные функции ведущего берет на себя контроллер.
Разобраться с джамперами старых устройств трудно, если нет документации, однако обширная база данных по разным моделям встроена в справочный файл утилиты Disk Manager. У современных устройств лишние джамперы упразднили, а существующие комментируются на наклейке (шильдике). Если джамперы устанавливаются рядом с интерфейсным разъемом, вероятно, они расположены в соответствии со стандартом ATA (см. рис. 9.5).
ВНИМАНИЕ
Следует учитывать, что перестановка джамперов часто воспринимается устройством только по включении питания. Кроме того, установка на один ленточный кабель двух разнотипных устройств, если они не являются ATA-устройствами, часто невозможна.
Контакт | Цепь | Назначение |
---|---|---|
S1 | GND | Экран |
S2 | А+ | Дифференциальная пара сигналов А |
S3 | А- | Дифференциальная пара сигналов А |
S4 | GND | Экран |
S5 | В- | Дифференциальная пара сигналов В |
S6 | В+ | Дифференциальная пара сигналов В |
S7 | GND | Экран |
Ключи и свободное пространство | ||
P1 | V33 | Питание 3,3 В |
P2 | V33 | Питание 3,3 В |
P3 | V33 | Питание 3,3 В, предзаряд |
Р4 | GND | Общий |
P5 | GND | Общий |
P6 | GND | Общий |
Р7 | V5 | Питание 5 В, предзаряд |
Р8 | V5 | Питание 5 В |
P9 | V5 | Питание 5 В |
P10 | GND | Общий |
Р11 | Резерв | |
Р12 | GND | Общий |
Р13 | V12 | Питание 12В, предзаряд |
P14 | V12 | Питание 12 В |
Р15 | V12 | Питание 12 В |
AS
для чтения, DC
для записи). В блоке командных регистров разрядность регистров SC
, SN
, CL
и СН
расширена до 16 бит, назначение младших байтов сохранилось. В режиме LBA старшие байты регистров SN
, CL
и СН
несут биты логического адреса [24:31], [32:39] и [40:47] соответственно. В регистре D/H
бит DEV
игнорируется (при эмуляции пар устройств на одном канале бит DEV
используется для выбора устройства). Из спецификации не совсем ясно, используются ли младшие биты D/H
для задания бит LBA[27:24], поскольку эти же биты фигурируют в старшем байте SN
.
Новый блок регистров SCR
(Serial ATA Status and Control registers) состоит из 16 смежных 32-разрядных регистров SCR0
-SCR15
, из которых пока определены лишь 3 (остальные зарезервированы).
Регистр SStatus (SCR0
) — регистр текущего состояния интерфейса хост адаптера (только чтение).
♦ Биты [3:0] — поле DET
, подключение устройств:
• 0000 — устройство не обнаружено, физической связи нет;
• 0001 — устройство обнаружено, но физическая связь не установлена;
• 0011 — устройство обнаружено, физическая связь установлена;
• 0100 — устройство отключено (запретом интерфейса или запуском внутреннего теста).
♦ Биты [7:4] — SPD
, скорость:
• 0000 — нет согласованной скорости (устройство не подключено или связь не установлена);
• 0001 — согласована скорость 1-го поколения.
♦ Биты [11:8] — поле IPM
, состояние энергопотребления интерфейса:
• 0000 — устройство не обнаружено, физической связи нет;
• 0001 — интерфейс в активном состоянии;
• 0010 — интерфейс в состоянии PARTIAL;
• 0110 — интерфейс в состоянии SLUMBER.
Остальные биты и значения полей зарезервированы.
Регистр SError (SCR1
) — регистр диагностической информации, относящейся к интерфейсу. В регистре представлены ошибки, накапливающиеся с момента последней очистки регистра. Регистр очищается операцией сброса, отдельные биты можно сбрасывать операцией записи в регистр (единицы в позициях сбрасываемых бит).
♦ Биты [15:0] — поле ERR, ошибки, обрабатываемые обычным программным обеспечением:
• бит 9 — С
— устойчивая неисправимая ошибка связи или нарушение целостности данных (может возникать при неправильном подключении, отказе или отключении устройства);
• бит 11 — Е
— внутренняя ошибка, обнаруженная хост-адаптером (если ошибка повторяется после сброса, она может быть признаком несовместимости адаптера и устройства);
• бит 0 — I
— исправленное нарушение целостности данных (не требует действий со стороны ПО, но может учитываться, например, для принятия решения о снижении скорости);
• бит 1 — М
— исправленная ошибка связи (может возникать при временном отключении устройства, потере синхронизации, не требует действий со стороны ПО);
• бит 10 — P
— протокольная ошибка, требует сброса интерфейса и повтора операции (в случае устойчивости может быть признаком несовместимости устройства и адаптера);
• бит 8 — T
— не исправленное нарушение целостности данных, требует повтора операции.
♦ Биты [31:16] — поле DIAG, используемое диагностическим ПО:
• бит 19 — В
— ошибка декодирования 10B/8B;
• бит 21 — С
— ошибка CRC на канальном уровне;
• бит 20 — D
— ошибка паритета блоков данных (Disparity);
• бит 26 — F
— неопознанный тип FIS (ошибка, обнаруженная на транспортном уровне при корректном CRC-коде);
• бит 17 — I
— внутренняя ошибка физического уровня интерфейса;
• бит 16 — N
— сигнал готовности физического уровня менял состояние;
• бит 22 — H
— ошибка подтверждения кадров (может возникать как следствие ошибок В
, С
, D
);
• бит 23 — S
— ошибка последовательности состояний канального уровня;
• бит 24 — T
— ошибка на транспортном уровне;
• бит 18 — W
— обнаружен пробуждающий сигнал Comm Wake.
Остальные биты зарезервированы.
Регистр SControl (SCR2
) — регистр управления интерфейсом (запись и чтение).
♦ Биты [3:0] — поле DET
, управление обнаружением и инициализацией устройств:
• 0000 — нет действий;
• 0001 — инициализация и установление соединения (эквивалентно аппаратному сбросу);
• 0100 — запрет интерфейса и перевод физического уровня в режим Offline.
♦ Биты [7:4] — поле SPD
, задает ограничение на скорость при согласовании соединений:
• 0000 — нет ограничений;
• 0001 — скорость не выше 1-го поколения.
♦ Биты [11:8] — поле IPM
, управление энергорежимом интерфейса:
• 0000 — нет ограничений;
• 0001 — запрет перехода в состояние PARTIAL;
• 0010 — запрет перехода в состояние SLUMBER;
• 0011 — запрет перехода в состояние PARTIAL и SLUMBER.
Остальные биты и значения полей зарезервированы.
CompactFlash | SmartMedia Card | MultiMedia Card | Sequre Digital | Miniature Card | |
---|---|---|---|---|---|
Длина | 36,0 | 45,0 | 32,0 | 32,0 | 33,0 |
Ширина | 43,0 | 37,0 | 24,0 | 24,0 | 38,0 |
Высота | 3,3/5,0 | 0,76 | 1,4 | 2,1 | 3,5 |
Коннектор | Штырьковый | Печатный | Печатный | Печатный | Эластомер |
Число контактов | 50 | 22 | 7 | 9 | 60 |
ATA_SEL#
. При этом из шины адреса используются только А[2:0]
(остальные заземлены хостом); шина данных при обращениях к регистрам ATA имеет разрядность 8 бит, а при передаче данных — 16. Сигналы CS0#
и CS1#
используются для выбора блока командных и управляющих регистров соответственно. Сигналы PDIAG#
, DASP#
, CSEL#
, RESET#
и IORDY
соответствуют спецификации ATA. Сигналом CSEL#
выбирается роль карты: при заземленном контакте — устройство 0 (master), при разомкнутом — устройство 1 (slave); можно воспользоваться и «кабельной выборкой». Сигналы REG#
и WE#
должны подключаться к шине питания (Vcc). Сигналы CD1#
и CD2#
являются индикаторами установки карты (их контакты замыкаются последними, на карте они заземлены). В табл. 9.14 описан чисто пассивный переходник, позволяющий подключить карту Compact Flash к обычному порту ATA (IDE), имеющемуся на любой современной системной плате.
№ | Mem | I/O | IDE | № | Mem | I/O | IDE |
---|---|---|---|---|---|---|---|
1 | GND | GND | GND | 26 | CD1# | CD1# | CD1# |
2 | D03 | D03 | D03 | 27 | D11 | D11 | D11 |
3 | D04 | D04 | D04 | 28 | D12 | D12 | D12 |
4 | DOS | DOS | DOS | 29 | D13 | D13 | D13 |
5 | D06 | D06 | D06 | 30 | D14 | D14 | D14 |
6 | D07 | D07 | D07 | 31 | D15 | D15 | D15 |
7 | CE1# | CE1# | CS0# | 32 | CE2# | CE2# | CS1# |
8 | A10 | A10 | A10 | 33 | VS1# | VS1# | VS1# |
9 | OE# | OE# | ATA_SEL# | 34 | IORD# | IORD# | IORD# |
10 | A09 | A09 | A09 | 35 | IOWR# | IOWR# | IOWR# |
11 | A08 | A08 | A08 | 36 | WE# | WE# | WE# |
12 | A07 | A07 | A07 | 37 | RDY/BSY | IREQ | INTRQ |
13. | VCC | VCC | VCC | 38 | VCC | VCC | VCC |
14 | A06 | A06 | A06 | 39 | CSEL# | CSEL# | CSEL# |
15 | A05 | A05 | A05 | 40 | VS2# | VS2# | VS2# |
16 | A04 | A04 | A04 | 41 | RESET | RESET | RESET# |
17 | A03 | A03 | A03 | 42 | WAIT# | WAIT# | IORDY |
18 | A02 | A02 | A02 | 43 | INPACK# | INPACK# | INPACK# |
19 | A01 | A01 | A01 | 44 | REG# | REG# | REG# |
20 | A00 | A00 | A00 | 45 | BVD2 | SPKR# | DASP# |
21 | D00 | D00 | D00 | 46 | BVD1 | STSCHG# | PDIAG# |
22 | D01 | D01 | D01 | 47 | D08 | DOS | DOS |
23 | D02 | D02 | D02 | 48 | D09 | D09 | D09 |
24 | WP | IOIS16# | IOCS16# | 49 | D10 | D10 | D10 |
25 | CD2# | CD2# | CD2# | 50 | GND | GND | GND |
ATA, конт. № | Цепь | CFC, конт. № | CFC, конт. № | Цепь | ATA, конт. № |
---|---|---|---|---|---|
2 | GND | 1 | 26 | CD1# | - |
11 | D03 | 2 | 27 | D11 | 10 |
9 | D04 | 3 | 28 | D12 | 12 |
7 | D05 | 4 | 29 | D13 | 14 |
5 | D06 | 5 | 30 | D14 | 16 |
3 | D07 | 6 | 31 | D15 | 18 |
37 | CS0# | 7 | 32 | CS1# | 38 |
GND¹ | A10 | 8 | 33 | VS1# | - |
GND¹ | ATA_SEL# | 9 | 34 | IORD# | 25 |
GND¹ | A09 | 10 | 35 | IOWR# | 23 |
GND¹ | A08 | 11 | 36 | WE# | +5V² |
GND¹ | A07 | 12 | 37 | INTRQ | 31 |
+5V² | VCC | 13 | 38 | VCC | +5V² |
GND¹ | A06 | 14 | 39 | CSEL# | 28³ |
GND¹ | А05 | 15 | 40 | VS2# | - |
GND¹ | А04 | 16 | 41 | RESET# | 1 |
GND¹ | A03 | 17 | 42 | IORDY | 27 |
36 | А02 | 18 | 43 | INPACK# | - |
33 | А01 | 19 | 44 | REG# | +5V² |
35 | A00 | 20 | 45 | DASP# | 39 |
17 | D00 | 21 | 46 | PDIAG# | 34 |
15 | D01 | 22 | 47 | D08 | 4 |
13 | D02 | 23 | 48 | D09 | 6 |
32 | IOCS16# | 24 | 49 | D10 | 8 |
- | CD2# | 25 | 50 | GND | GND¹ |
№ | Цепь | № | Цепь |
---|---|---|---|
22 | VCC (5 B) | 1 | VSS |
21 | СЕ# | 2 | CLE |
20 | RE# | 3 | ALE |
19 | R/B | 4 | WE# |
18 | GND | 5 | WP# |
17 | Power Detect | 6 | I/O1 |
16 | I/O8 | 7 | I/O2 |
15 | I/O7 | 8 | I/O3 |
14 | I/O6 | 9 | I/O4 |
13 | I/O5 | 10 | VSS |
12 | VCC | 11 | VSS |
Контакт | Цепь | Контакт | Цепь |
---|---|---|---|
1 | Command | 6 | Data 0 |
2 | Vss | 7 | Data 1 |
3 | Vdd | 8 | Data 2 |
4 | Clock | 9 | Data 3 |
5 | Vss |
BS8#
заземляется). Интерфейс хоста для этих карт конфигурируется на работу в режиме DRAM или флэш-памяти; карты снабжаются микросхемой энергонезависимой памяти идентификации с интерфейсом I²C. Карты имеют прорези для правильного позиционирования и коннектор, обеспечивающий «горячее» (даже для DRAM!) подключение. При установке передний край карты вводят в слот, при этом подключаются контакты «первой очереди»: GND
, VCC
и CINS#
(контакт, замыкающийся на «землю»). Затем карта опускается вниз, прижимаются контакты основного эластомерного разъема и замыкается контакт обнаружения CD#
. Карты могут работать с питанием 5 и 3,3 В; для идентификации питания служат сигналы VS1#
, VS2#
. Карта Miniature Card через переходный адаптер может устанавливаться в слот PC Card типа 2.
А[12:0]
и управляющие сигналы RAS#
, CASH#
и CASL#
(стробы для старшего и младшего байтов), а также WE#
. Карты имеют отдельную линию питания Vccr для регенерации при отключенном основном питании.
При работе по интерфейсу флэш-памяти используются линии адреса А[24:0]
и управляющие сигналы ОЕ#
(чтение), WE#
(запись), СЕН#
и CEL#
(выборка для старшего и младшего байтов).
Int 13h
— дискового сервиса. Дисковый сервис BIOS предназначен для изоляции вышестоящего ПО (ОС и приложений) от подробностей реализации дисковой системы.
Дисковый сервис Int 13h
работает на уровне физических устройств, называемых также физическими приводами (physical drive). Традиционный дисковый сервис имеет программный интерфейс, сохранившийся еще со времен IBM PC/XT. Он позволяет оперировать с дисками размером до 528 Мбайт (см. [1, 4, 9]). Когда появились диски большего размера, в традиционный дисковый сервис ввели расширение (алгоритмы преобразования), позволяющее преодолеть этот барьер и, теоретически, работать с дисками объемом до 8,4 Гбайт. Для работы с большими дисками введены новые функции BIOS Int 13h
c интерфейсом, совершенно не похожим на традиционный.
Операционная система предоставляет прикладным программам сервисы более сложные, чем функции BIOS, обеспечивая доступ к файловой системе диска. Самый низкий уровень обращения, допускаемый операционной системой, оперирует с секторами логических дисков, или приводов (logical drive), ассоциированными с именем устройства (А:
, В:
, С:
, …, Z:
). Один физический диск (жесткий) может содержать несколько логических дисков. На физическом диске могут присутствовать системные области (MBR и резервированные секторы), доступ к которым операционная система не предоставляет.
Для работы утилит и приложений с дисковой памятью имеется несколько уровней сервиса.
♦ Возможно обращение к контроллеру дисков на уровне регистров путем задания адреса блока и количества секторов, требуемых для передачи. Это самый производительный способ обмена данными, но он требует знания как организации разделов диска и файловой системы, так и контроллера диска (его системы команд). Доступ обеспечивается ко всем элементам, кроме блоков, за крытых командой Set Max Address
(для дисков ATA). При этом обходится фаза трансляции геометрии, выполняемая, в общем, по усмотрению BIOS.
♦ Сервисы BIOS Int 13h
также позволяют получить неограниченный доступ к диску, но если используются традиционные вызовы (функции с номерами ниже 40h), то доступны лишь диски объемом до 8,4 Гбайт (при трансляции геометрии) или до 528 Мбайт (без трансляции). За абстрагирование от системы команд контроллера приходится расплачиваться некоторым снижением производительности, связанным с накладными расходами программного интерфейса.
♦ Используя интерфейс функций DOS, можно получить доступ к любому сектору логического диска, указав лишь его логическое имя, по функциям чтения/записи абсолютных секторов. Но при этом первым доступным сектором (логический адрес 0) является загрузочный сектор логического диска, а секторы с таблицами разделов и те, что не попадают в разделы логических дисков, оказываются недоступными. Для осмысленного доступа к данным необходимо знать структуры FAT и каталогов, а риск «наломать дров», вплоть до полной потери данных, довольно велик.
♦ И наконец, интерфейс файловой системы ОС позволяет довольно легко создавать, искать и удалять файлы и каталоги, выполнять чтение и запись файлов целиком или частично, а также некоторые другие вспомогательные функции. При этом от пользователя данного интерфейса скрываются все тонкости работы с FAT и элементами каталогов (и конечно же, все премудрости нижних уровней).
Прикладные программы и утилиты изолируют пользователя от всех этих тонкостей, что позволяет ему сконцентрировать внимание на решении своих смысловых задач. Уровень, на котором программа обращается к дискам, выбирается программистом из соображений минимальной достаточности: чем выше уровень сервиса, тем легче достичь совместимости с остальным ПО (предоставляется меньше возможностей для совершения ошибок). Чем ниже уровень сервиса, тем больше знаний нужно вложить в программу, чтобы она общалась с диском не наперекор общим правилам.
Поскольку CD-ROM по организации данных (файловой системе) существенно отличается от традиционных дисков (гибких и жестких), для обеспечения «прозрачного» доступа приложений к файлам на CD-ROM требуются специальные программные средства. Несмотря на возможность загрузки ОС с CD-ROM, реализованную в современных версиях BIOS, полной поддержки доступа к CD-ROM (такой, как к обычным дискам) BIOS не предоставляет. Приложениям доступ к CD-ROM обеспечивают только сервисы операционной системы, встроенные в ОС или загружаемые.
Для обеспечения загрузки ОС с CD-ROM фирмы Phoenix и IBM выпустили спецификацию «El Torito Bootable CD-ROM Format Specification», версия 1.0 была опубликована в январе 1995 г. Цель спецификации — обеспечить возможность загрузки ОС и приложений с CD-ROM средствами BIOS (на «голой» машине). При этом имеются следующие возможности:
♦ загрузка ОС по выбору из загрузочного каталога (Boot Catalog), находящегося на CD-ROM;
♦ предоставление выбора конфигурирования CD-ROM в виде жесткого диска или дискеты;
♦ переименование существующих приводов (если необходимо);
♦ использование существующей технологии BIOS (доступ в режиме LBA) для обращения к кодам и данным;
♦ совместимость с приложениями DOS и Windows, использующими функции Int 13h
.
Спецификация расширяет традиционный набор функций BIOS, она ориентирована на приводы с интерфейсом ATAPI и SCSI.
Контакт | 10BaseT/100BaseTX | 100BaseT4 | 1000BaseTX |
---|---|---|---|
1 | Tx+ | Tx_D1+ | BI_D1+ |
2 | Tx- | Tx_D1- | BI_D1- |
3 | Rx+ | Rx_D2+ | BI_D2+ |
4 | Не подключен | BI_D3+ | BI_D3+ |
5 | Не подключен | BI_D3- | BI_D3- |
6 | Rx- | Rx_D2- | BI_D2- |
7 | Не подключен | BI_D4+ | BI_D4+ |
8 | Не подключен | BI_D4- | BI_D4- |
Контакт | Сигнал |
---|---|
1 | Collision |
2 | Collision+ |
3 | Transmit+ |
4 | Receive (экран) |
5 | Receive + |
6 | DC Power GND |
7 | He подключен |
8 | He подключен |
9 | Collision - |
10 | Transmit - |
11 | Transmit (экран) |
12 | Receive - |
13 | DC Power (+12B) |
14 | DC Power (экран) |
15 | He подключен |
РМЕ
на системную плату, которая дает сигнал на включение блока питания; компьютер включается и загружается ОС с поддержкой DMI. Теперь администратор может выполнить все запланированные действия, а по окончании ОС на компьютере, завершая свою работу, выключает питание.
Адаптеры для серверов должны иметь высокопроизводительную шину — сейчас используют PCI32/64 бит 33/66 МГц, раньше в серверах часто применяли шину EISA или MCA. Для серверных карт критична загрузка ЦП при обмене данными, поэтому эти карты наделяют интеллектом для прямого управления шиной и параллельной работы узлов адаптера. Полнодуплексные адаптеры должны поддерживать управление потоком по 802.3х. Ряд совершенных моделей поддерживают приоритизацию трафика по 802.1р, фильтрацию многоадресного трафика, поддержку ВЛС с маркированными кадрами (tagged VLAN), Fast IP, аппаратный подсчет контрольных сумм IP-пакетов. Поддержка ВЛС позволяет серверу, подключенному одной линией к коммутатору, быть членом нескольких ВЛС, определенных на всей локальной сети. Для повышения надежности серверные карты могут поддерживать резервирование линий (Resilient Link) — резервный адаптер и линия связи заменяют основной канал в случае его отказа. При этом резервному адаптеру присваивается MAC-адрес основного, чтобы сеть «не заметила» подмены. Резервирование линий должно поддерживаться программными драйверами, чтобы замена происходила прозрачно и для серверных приложений. «Самоизлечивающиеся» драйверы (Self-Healing Drivers) в случае обнаружения проблем функционирования («зависании») могут автоматически выполнить сброс и повторную инициализацию адаптера. Удаленная загрузка и пробуждение по сети серверам, как правило, не требуется. Адаптеры (совместно с драйверами) могут поддерживать SNMP и RMON. Для серверов выпускаются и многопортовые (как правило, на 4 порта) адаптеры, конфигурируемые как для раздельного независимого использования, так и для резервирования друг друга. Такие карты позволяют экономить слоты PCI (для шины EISA проблема экономии слотов не была острой). Типовая скорость для серверных карт на сегодняшний день — 100 Мбит/с, производительность Gigabit Ethernet может быть востребована лишь очень мощными серверами.
Адаптер может иметь один или несколько интерфейсных разъемов:
♦ BNC — коаксиальный разъем для подключения к сегменту сети 10Base2;
♦ AUI — розетка DB-15 для подключения внешних адаптеров (трансиверов) 10Base5, 10Base2, 10BaseT, 10BaseF, FOIRL;
♦ RJ-45 — 8-контактное гнездо для подключения кабелем «витая пара» к концентратору (хабу или коммутатору) 10BaseT, 100BaseTX и/или 100BaseT4;
♦ SC (пара), иногда ST — оптические разъемы для подключения к концентраторам 100BaseFX, 1000BaseSX, 1000BaseLX.
Для 10-мегабитных адаптеров характерны сочетания BNC+AUI или RJ-45+AUI, наиболее универсальные «Combo» имеют полный 10-мегабитный набор BNC/AUI/RJ-45. Первые модели карт на 10 и 100 Мбит/с имели пару разъемов RJ-45 — каждый для своей скорости. При наличии нескольких разных разъемов (например, BNC и RJ-45) одновременно они не используются — адаптер не может работать в качестве повторителя. Большинство современных адаптеров имеют один разъем RJ-45 и поддерживают два стандарта — 10BaseT и 100BaseTX. Многопортовые серверные карты имеют несколько независимых адаптеров, каждый со своим интерфейсом.
Интерфейсные карты потребляют системные ресурсы компьютера.
♦ Пространство ввода-вывода — как правило, 4-32 смежных адреса из области, адресуемой 10-битным (для шины ISA) или 16-битным (EISA, PCI) адресом. Используется для обращения к регистрам адаптера при инициализации, текущем управлении, опросе состояния и передаче данных.
♦ Запрос прерывания — одна линия (IRQ3
, 5
, 7
, 9
, 10
, 11
, 12
или 15
), возбуждаемая по приему кадра, адресованного данному узлу, а также по окончании передачи кадра (успешной или безуспешной из-за коллизий). Без прерываний сетевые карты работать не могут, при некорректном назначении обращения к сети «зависают».
♦ Канал прямого доступа к памяти (DMA) используется в некоторых картах ISA/EISA; для прямого управления (bus mastering) шины ISA пригодны только 16-битные каналы 5–7.
♦ Разделяемая память (adapter RAM) адаптера — буфер для передаваемых и принимаемых кадров — для карт ISA обычно приписывается к области верхней памяти (UMA), лежащей в диапазоне A0000h-FFFFFh. Карты PCI могут располагаться в любом месте адресного пространства, не занятого оперативной памятью компьютера. Разделяемую память используют не все модели карт.
♦ Постоянная память (adapter ROM) — область адресов для модулей расширения ROM BIOS, 4/8/16/32 Кбайт в диапазоне C0000-DFFFFh. Используется для установки ПЗУ удаленной загрузки (Boot ROM) и антивирусной защиты.
Под конфигурированием адаптера подразумевается настройка на использование системных ресурсов PC и выбор среды передачи. Конфигурирование, в зависимости от модели карты, может осуществляться разными способами.
♦ С помощью переключателей (джамперов), установленных на карте. Используется на адаптерах первых поколений шины ISA. Для выбора каждого ресурса, а также среды передачи имеется свой блок джамперов.
♦ С помощью энергонезависимой памяти конфигурации (NVRAM, EEPROM), установленной на карте с шиной ISA. Эти карты не имеют джамперов (jumperless), но конфигурируются вручную. Для конфигурирования требуется специальная утилита, специфическая для конкретной модели (семейства) карт.
♦ С помощью энергонезависимой памяти конфигурации, установленной на карте с шиной EISA или MCA, и системной памяти конфигурирования устройств (ESCD для EISA). Конфигурирование ресурсов осуществляется пользователем с помощью системной утилиты ECU (EISA Configuration Utility) для шины EISA.
♦ Автоматическое — PnP для шин ISA и PCI. Распределение ресурсов осуществляется на этапе загрузки ОС.
Выбор среды и скорости передачи может быть ручным (программным) или автоматическим. В ряде случаев имеет смысл делать явные назначения, чтобы избегать сюрпризов излишней автоматизации. Эти сюрпризы, как правило, порождаются недостаточной согласованностью адаптеров и их драйверов. При этом драйвер не может правильно распознать установленный режим и воспользоваться его преимуществами. Автоматическая настройка вносит дополнительные задержки в процесс инициализации (при загрузке) и не со всяким сетевым оборудованием работает корректно. Для некоторых моделей карт с интерфейсом 10Base2 (BNC-разъем) предлагается расширенный режим, увеличивающий дальность связи до 305 м против штатных 185. При необходимости длинных сегментов этим режимом можно воспользоваться, но при условии, что он имеется и включен во всех картах данного сегмента. В утилитах конфигурирования могут предлагаться и дополнительные настройки — оптимизация для клиента или сервера, поддержка модема и некоторые другие. Их установка должна соответствовать конкретному применению.
Упрощенная схема стандартной нагрузки линии — телефонного аппарата — приведена на рис. 10.5. В состоянии покоя (idle) аппаратура АТС посылает в линию напряжение постоянного тока 60 В через ограничительные резисторы с суммарным сопротивлением 700-1500 Ом и следит за током в линии. При опущенной трубке (on-hook) КТ переключается и подключает через конденсатор вызывное устройство (Зв), при этом телефон не нагружает линию по постоянному току. Для вызова абонента АТС посылает серию импульсов амплитудой около 120 В с частотой 25 Гц. Эти импульсы через конденсатор проходят в обмотку звонка и вызывают колебания молоточка. При снятой трубке (off-hook) к линии подключается разговорный узел (это положение показано на рисунке), его сопротивление постоянному току — около 150–600 Ом. Разговорный узел содержит микрофон, телефон и схему подавления прослушивания сигнала собственного микрофона. Для предотвращения травм органов слуха предусмотрен ограничитель напряжения звукового сигнала. Подключение разговорного узла приводит к протеканию постоянного тока в линии, что позволяет станции фиксировать факт снятия трубки. При снятии трубки станция посылает непрерывный тональный сигнал ответа (425 Гц) и готовится принять сигналы набора номера. В это время (а также во время разговора после установления соединения) на нагрузке телефона падение напряжения составляет около 5-15 В постоянного тока, и на фоне этого уровня переменная составляющая (звуковой сигнал разговора) имеет амплитуду порядка десятков- сотен милливольт. Отбой (вешание трубки, on-hook) сигнализируется разрывом цепи для постоянного тока. На данной схеме показаны цепи импульсного набора номера (pulse dialing). При наборе номера (трубка снята) разговорный узел отключается контактом КН-1. Во время «взвода» диска контакт КН-2 замыкается, во время обратного хода он n раз размыкается (по одному разрыву на единицу набираемой цифры, 0–10 разрывов). После окончания набора цифры контакты КН-1 снова подключают разговорный узел. Длительность (60 мс) и частота (10±1 имп/с) разрывов стандартизованы и рассчитаны на время срабатывания шаговых искателей «древних» станций. Импульсный набор ради совместимости со старыми телефонами поддерживается всеми АТС. О результате коммутации станция сигнализирует короткими гудками «занято» (busy) — тональный сигнал 425 Гц, длительность посылки и паузы 0,35 с или длинными гудками (1 с посылка, 3 с пауза), синхронными не всегда с сигналами, вызывающими абонента. Временная диаграмма сигналов на внешних контактах телефонного аппарата в разных стадиях показана на рис. 10.6.ВНИМАНИЕ
Телефонные линии находятся под напряжением оборудования АТС. Все подключаемые к ним устройства должны иметь полную гальваническую развязку от схемной земли компьютера и иных устройств. Для развязки используют трансформаторы и оптроны. Изоляция должна выдерживать напряжение 1–1,5 кВ. Цепи, подключаемые к линии, должны иметь защиту от перенапряжений (особенно актуальную при подключении к воздушным телефонным линиям).
#
, *
) для получения дополнительных услуг от АТС. Тональный набор выполняется гораздо быстрее (один символ передается за 40 мс) и надежнее, но поддерживается еще не всеми АТС. Возможность тонального набора имеют большинство моделей «кнопочных» телефонов, но для совместимости со старыми АТС они позволяют переключаться на импульсный набор. Тональный набор позволяет вводить и дополнительные цифры для выбора одного из абонентов мини-АТС, подключенной к обычной телефонной линии. Дополнительные цифры набираются вызывающим абонентом после установления соединения с мини-АТС по обычному номеру, после специального приглашения автоответчика мини-АТС.
Для блокированных (спаренных) телефонов одна двухпроводная линия от АТС обслуживает двух абонентов с разными номерами поочередно. Для разделения линий используется пассивное устройство-блокиратор — два однополупериодных выпрямителя сигнала с линии от АТС. Здесь АТС задействует положительную полярность сигнала для работы с абонентом 1 и отрицательную — для работы с абонентом 2. Когда приходит внешний вызов, его сигнал станция посылает в полярности, соответствующей вызываемому абоненту. Для опроса состояния (поднята/опущена трубка) АТС чередует полярность опрашивающего напряжения с низкой частотой (этот рокот можно услышать, если в момент плавного снятия трубки контакты включения трубки сработают раньше, чем замыкающие контакты нагрузочного резистора). Как только обнаружена снятая трубка у одного из абонентов, станция останавливает чередование опроса на «его» полярности и работает вышеописанная сигнализация. Для спаривания телефонов применяют и частотное разделение: для одного из абонентов сигнал передается на высокой частоте (с модуляцией). Блокирование (спаривание) телефонов позволяет экономить физические линии, но имеет ряд очевидных неудобств: абоненты могут пользоваться телефонами лишь поочередно, «захватывая» линию на время до «отбоя». Для внешних звонков к абоненту линия представляется занятой как во время его разговора, так и во время разговора соседа. Сблокированные линии «не любят» некоторые модели модемов.
Для автоматического определения номера (АОН) вызывающего абонента имеется специальная система сигнализации, поддерживаемая большинством отечественных АТС. Ее работу иллюстрирует диаграмма, показанная на рис. 10.7. Когда телефон с АОН получает вызывной сигнал, он до подключения разговорного узла включает цепь, на которой падает напряжение около 24 В, и через 250–275 мс в линию посылает тональный сигнал «запрос». Этот сигнал должен иметь частоту 500 Гц и длительность 100 мс. В ответ на этот сигнал АТС передает несколько раз повторяющийся пакет из десяти двухчастотных посылок, в котором сообщается категория и 7-значный номер вызывающего абонента. Каждая посылка продолжается 40 мс и содержит две из шести возможных тональных частот (700, 900, 1100, 1300, 1500 и 1700 Гц). Таким образом кодируются цифры 0–9 и служебные символы «начало» и «повтор». Символ «начало» обрамляет пакет, символ «повтор» используется, если последующая цифра повторяет предыдущую (чтобы облегчить выделение посылок). После приема ответа АОН может имитировать (для вызывающего абонента) длинные гудки, в это время вызываемый абонент может решить, снимать трубку или нет, включить автоответчик и т. п. На время разговора (или работы автоответчика) включается РУ с обычным сопротивлением, и напряжение падает до 5-15 В. Отбой выполняется обычным образом. Для зарубежных АТС аналогом услуги АОН (которая первоначально не предназначалась для широкого круга пользователей) является услуга идентификации вызывающего абонента (Caller Id), предоставляемая только цифровыми станциями. Она работает по совсем иному протоколу.
SDA
(Serial Data) и синхронизации SCL
(Serial Clock). В обменах участвуют два устройства — ведущее (master) и ведомое (slave). Ведущее и ведомое устройства могут выступать в роли и передатчика, и приемника данных. Протокол допускает наличие на шине нескольких ведущих устройств и имеет простой механизм арбитража (разрешения коллизий).
Протокол обмена для обычных устройств F/S иллюстрирует рис. 11.1. Обе сигнальные линии имеют нагрузочные резисторы, «подтягивающие» их уровень к напряжению питания. На устройстве к каждой линии подключен приемник и передатчик типа «открытый коллектор» («открытый сток»), у ведомого устройства передатчик на линии SCL
не обязателен. Все одноименные передатчики соединяются по схеме «Монтажное И»: уровень в линии будет высоким, если все передатчики пассивны, и низким, если хоть у одного передатчика выходной транзистор открыт. В покое (Idle, исходное состояние шины) все передатчики пассивны. Синхронизацию задает ведущее устройство, но ведомое, если оно не имеет достаточного быстродействия, может замедлять обмен данными.
SCL
и SDA
). Условие Start (на диаграммах обозначается как S
) — перевод сигнала SDA
из высокого в низкий при высоком уровне SCL
. Завершается операция переводом сигнала SDA
из низкого уровня в высокий при высоком уровне SCL
— условие Stop (обозначается как P
), также вводящееся ведущим устройством. При передаче данных состояние линии SDA
может изменяться только при низком уровне SCL
, биты данных считаются действительными во время высокого уровня SCL Ведущее устройство может начать очередную передачу вслед за текущей, не вводя условие Stop, — это называется repeated Start (повторный старт, обозначающийся Sr
). В протоколе условия S
и Sr
почти равнозначны. Каждая посылка данных состоит из 8 бит данных, формируемых передатчиком (старший бит — MSB — передается первым), после чего передатчик на один такт освобождает линию данных для получения подтверждения. Приемник во время девятого такта формирует бит подтверждения Ack
, по которому передатчик убеждается, что его «услышали». После передачи бита подтверждения ведомое устройство может задержать следующую посылку, удерживая линию SCL
на низком уровне. Ведомое устройство в режимах F/S может замедлить передачу по шине и на уровне приема каждого бита, удерживая SCL
на низком уровне после его спада, сформированного передатчиком. Поэтому ведущее устройство должно генерировать сигнал SCL
не «вслепую», а анализируя состояние линии SCL
: сняв этот сигнал, новый импульс (открытие ключа передатчика) оно имеет право вводить, лишь убедившись, что сигнал SCL
вернулся в пассивное состояние (высокий уровень). В противном случае синхронизация будет потеряна. Сигнал SCL
может быть растянут и другим устройством, пытающимся захватить шину в это же время. Тактовый сигнал SCL
не обязательно будет равномерным: время его нахождения на низком уровне будет определяться максимальным временем, в котором его захочет удержать самое медленное из устройств, участвующих в данном обмене (даже и конфликтующих); время нахождение на высоком уровне будет определяться самым быстрым из конфликтующих ведущих устройств.
Коллизия (конфликт) на шине может возникнуть, когда два (или более) устройства, убедившись в покое шины, одновременно (или почти одновременно) инициируют обмен данными. Все они управляют линиями SCL
и SDA
и наблюдают за ними. Если устройство, передающее единицу (высокий уровень), в данном такте на линии SDA
видит ноль (низкий уровень), оно должно признать свой проигрыш в конфликте и освободить линии SCL
и SDA
(при этом ему позволительно управлять линией SCL
до конца передачи текущего байта). Выигравшее устройство даже и не заметит проигравших конкурентов и продолжит работу. Арбитраж может закончиться в любом месте посылки, формируемой ведущим устройством. Искажения информации, передаваемой выигравшим устройством, не происходит (приятное отличие от коллизий в сетях Ethernet). Если ведущее устройство, проигравшее в конфликте, имеет и функции ведомого устройства, по признанию проигрыша оно должно перейти в режим ведомого, поскольку конфликт мог быть вызван и попыткой обращения к нему победившего ведущего устройства.
Бит подтверждения ACK
, вводящийся в конце каждого байта устройством- приемником, выполняет несколько функций. Когда передатчиком является ведущее устройство, приемник (ведомый) должен вводить нулевой бит ACK
, свидетельствующий о нормальном получении очередного байта. Единичный бит ACK
(нет подтверждения) в ответ на посылку адреса свидетельствует об отсутствии адресованного ведомого устройства на шине или его занятости внутренними процессами. Отсутствие подтверждения байта данных свидетельствует о занятости устройства. Не получив бита подтверждения, ведущее устройство должно сформировать условие Stop, чтобы освободить шину. Когда ведущее устройство является приемником, оно должно формировать нулевой бит ACK
после каждого принятого байта, кроме последнего. Единичный бит ACK
в этом случае является указанием ведомому устройству на окончание передачи — оно теперь должно освободить линии SDA
и SCL
, чтобы ведущее устройство смогло сформировать условие P
или Sr
.
На вышеописанной физической основе строится протокол обмена данными по I²C. Каждое ведомое устройство имеет свой адрес, уникальный на шине. В начале любой передачи ведущее устройство после условия S
или Sr
посылает адрес ведомого устройства или специальный адрес (табл. 11.1). Ведомое устройство, опознавшее свой адрес после условия Start, становится выбранным; оно обязано ответить подтверждением на адрес и последующие сигналы со стороны ведущего устройства, до получения условия P
или Sr
. В первоначальном варианте интерфейса разрядность адреса устройства составляла 7 бит, впоследствии был введен и режим 10-битной адресации, совместимый с 7-битной. На одной шине могут присутствовать устройства и с 7-битной, и 10-битной адресацией.
Биты[7:1] | Бит 0 (RW) | Назначение |
---|---|---|
0000000 | 0 | General call address — адрес общего вызова |
0000 000 | 1 | Start — начало активного обмена |
0000 001 | X | Адрес устройства шины CBUS (для совместимости) |
0000 010 | X | Адрес для устройств иных шин |
0000 011 | X | Зарезервировано |
0000 1XX | X | Код ведущего устройства режима Hs |
1111 1XX | X | Зарезервировано |
1111 0XX | X | Признак 10-битной адресации |
S
(Sr
) ведущее устройство передает 7 бит адреса (А[6:0] в битах [7:1]) и признак операции RW
(в бите 0 RW
=1 — чтение, RW
=0 — запись). Адреса ведомых устройств не должны попадать в области, указанные в таблице. Диапазоны адресов устройств различных типов централизованно выдаются изготовителям микросхем фирмой Philips. Для микросхем памяти, например, 7-битный адрес содержит две части: старшие 4 бита А[6:3] несут информацию о типе устройства (EEPROM — 1010), а младшие 3 бита А[0:2] определяют номер устройства данного типа на шине. Микросхемы с интерфейсом I²C имеют три адресных входа, коммутацией которых на логические уровни 1 и 0 задается номер устройства, на который оно «отзовется», а тип устройства «зашит» в нем самом его изготовителем.
Когда ведущее устройство является передатчиком данных, оно в первом байте передает адрес ведомого устройства, при этом RW
=0. Выбранное ведомое устройство отзывается подтверждением (ACK
=0), после чего ведущее устройство посылает один или несколько байт данных, на каждый из которых ведомое устройство должно отвечать подтверждением.
Когда ведущее устройство является приемником данных, оно в первом байте передает адрес ведомого устройства с RW
=1. Выбранное ведомое устройство также отзывается подтверждением (ACK
=0), после чего происходит смена направления передачи и данные уже передает ведомое устройство. Ведущее устройство подтверждает каждый принятый байт, кроме последнего.
Эти передачи могут завершаться условием P
, вводимым ведущим устройством, после которого шину может захватить любое ведущее устройство. Возможны и комбинированные передачи, когда ведущее устройство после окончания очередного обмена не отдает шину, а формирует повторный старт (Sr
), после чего обращается к тому же или иному устройству.
Отметим, что спецификация I²C не оговаривает правил модификации внутреннего (для микросхемы) адреса данных при последовательных обращениях — их определяет разработчик устройства в соответствии с его функциями. Для памяти естественен автоинкремент адреса, упрощающий последовательные обращения. Для регистроориентированных устройств автоинкремент обычно не нужен.
Специальные коды, приведенные в табл. 11.1, трактуются следующим образом.
♦ Общий вызов является широковещательным, на него должны отвечать лишь устройства, поддерживающие соответствующие функции (см. ниже).
♦ Байт Start
предназначен для облегчения программной реализации протокола I²C (для функций ведомых устройств, не имеющих полной аппаратной реализации протокола). На байт Start
не должно отвечать ни одно устройство. Формируемый сигнал SDA
(рис. 11.2) может быть использован как запрос аппаратного прерывания, по которому процессор «вплотную» займется обработкой сигналов I²C. До получения этого байта процессор (микроконтроллер) может не отвлекаться на слежение за сигналами интерфейса.
♦ На адреса шины CBUS (трехпроводный «родственник» шины I²C) и иных шин устройства I²C отвечать не должны.
♦ При использовании 10-битной адресации биты [2:1] содержат старшую часть адреса, форматы 10-адресных посылок рассмотрены ниже.
В
. При В
=0 устройства, принявшие общий вызов, должны считать программируемую часть своего аппаратного адреса, выполнив (второй байт 00000110b) или не выполнив (000000100b) внутреннюю процедуру сброса. Другие значения байта устройства должны игнорировать. Каким образом программируется адрес, зависит от устройства (указывается в его описании). При В
=1 общий вызов используется для широковещательной передачи данных. В этом случае ведущее устройство в старших 7 битах второго байта сообщает свой адрес (тот же, на который оно отзывается в роли ведомого), а далее посылает требуемое количество байт данных, которые оно желает донести до неизвестного ему приемника. Приемник (как правило, это интеллектуальное устройство) должен отвечать подтверждением на каждый принятый байт начиная с первого (общий вызов), затем на адрес ведущего устройства и последующие байты данных.
Широковещательная передача может использоваться, например, аппаратным контроллером клавиатуры, не знающим, на какой адрес посылать свои асинхронно возникающие сообщения. Вместо этого возможна и иная схема: по включении (и сбросу) это устройство становится ведомым приемником, которому ведущее устройство (системный контроллер) сообщит адрес потребителя информации для дальнейших «узконаправленных» передач, в которых это устройство будет уже ведущим.
Введение 10-битной адресации стало решением проблемы дефицита адресов: при 7-битной адресации с учетом зарезервированных комбинаций остается только 112 адресов, при 10-битной доступны еще 1024 адреса. Передача данных ведущим устройством с 10-битной адресацией выглядит просто: в первом байте после S
(Sr
) биты 2:1 несут старшие биты адреса, бит 0 — признак RW
=0; второй байт несет младшие 8 бит адреса, а последующие байты — передаваемые данные. Приемник дает подтверждения обычным способом. Прием данных ведущим устройством несколько сложнее, поскольку признак RW
является явным указателем на смену направления передачи и младшую часть адреса ведущее устройство передать уже не может. Прием по 10-битному адресу ведущее устройство начинает как фиктивную передачу: в первом байте посылает признак 10-битной записи и 2 бита адреса, во втором байте — остаток адреса. Далее ведущее устройство выполняет условие Sr
и посылает признак 10-битного чтения (RW
=1) с двумя старшими битами того же адреса. Ведомый передатчик, получив те же 2 старшие бита адреса, что и до Sr
, отвечает подтверждением и начинает передавать данные ведущему устройству. Этот процесс продолжается и завершается так же, как и с 7-битной адресацией. Возможны и комбинированные обмены: реальная передача ведущего устройства 10-битному устройству, за которой после Sr
следует чтение того же устройства. Также возможно комбинирование (через Sr
) 7- и 10-битных обращений к разным устройствам. Широковещание с 10-битной адресацией выглядит так же, как и с 7-битной, но адрес ведущего устройства передается уже двумя байтами (младшие 8 бит адреса передаются на месте первого байта данных).
Высокоскоростной режим (Hs) позволяет обмениваться данными со скоростью до 3,4 Мбит/с, причем обеспечивается обратная совместимость устройств Hs с быстрыми и стандартными (F/S). Для обеспечения возможности обмена на столь высокой скорости выходные и входные буферы микросхем должны переключаться в специальный режим работы, отличающийся параметрами формируемых и принимаемых импульсов. Сигналы высокоскоростных устройств обозначаются как SDAH
и SCLH
; в смешанных системах для работы в Hs они должны отделяться от линий SDA
и SCL
обычных устройств специальными мостами (поведение устройств F/S на таких частотах непредсказуемо). В режиме Hs уже нет речи о разрешении конфликтов — арбитраж выполняется на скоростях F/S; также здесь нет возможности синхронизации по каждому биту (замедления передачи ведомым устройством), а ведущим устройством устанавливаются жесткие соотношения длительности низкого и высокого уровней сигнала SCLH
(2:1). Ведомое устройство может притормаживать обмен только после выдачи бит подтверждений. Для перехода в режим Hs ведущее устройство в первом байте (после S
) использует зарезервированное значение 00001ххх, в котором xxx несет код ведущего устройства. Во время передачи этого байта (на скорости F/S) выполняется арбитраж — если обмен одновременно пытаются начать несколько устройств, продолжать его может только выигравшее ведущее устройство. Код ведущего устройства в режиме Hs назначается при конфигурировании, а все ведущие устройства на шине в режиме Hs должны иметь различные коды (код 000 зарезервирован), чем и обеспечивается завершение арбитража за время передачи первого байта. Ведущее устройство может переключиться в режим Hs, только если оно выиграло арбитраж и получило единичный бит подтверждения. В этом случае он перестраивает свои выходные и входные буферы на параметры Hs и формирует повторный старт (Sr
). Далее обмен логически выполняется точно так же, как и в режиме F/S, но уже на высокой скорости. Режим Hs может распространяться на несколько последующих передач, разделенных условиями Sr
, и завершится работа в режиме Hs по условию P
, по которому буферные схемы снова вернутся к параметрам F/S.
Sr
.
По электрическим сигналам имеются две спецификации, для внешних и внутренних устройств соответственно.
Спецификация для внешних устройств (Off-board ACCESS.bus), являющаяся основной для этой шины, определяет использование 4-контактного экранированного модульного разъема (MOLEX SEMCONN или AMP SDL), назначение контактов которого приведено в табл. 11.2. Хост-компьютер должен обеспечивать питание 5 В с током 50-1000 мА. Каждое устройство (и кабель), характеризуется потребляемым током I (мА) и вносимой емкостью сигнальных проводов С (пФ). Предельное число подключаемых устройств ограничивается суммарной вносимой емкостью (не более 1000 пФ) и током потребления. До ограничения по адресации (125 устройств) дело практически не доходит. Максимальная суммарная длина кабеля (без повторителей) не должна превышать 10 м. По сравнению с I²C в шине ток нагрузки линий SDA
и SCL
увеличен до 6 мА (выходной ток низкого уровня). Для улучшения формы импульсов и защиты от статического электричества устройства рекомендуется подключаться к линиям SDA
и SCL
через последовательные резисторы 51 Ом. Входы микросхем рекомендуется защищать диодами, соединенными с шинами GND
и +5 В.
Контакт | Назначение | Цвет провода |
---|---|---|
1 | GND | Черный |
2 | SDA | Зеленый |
3 | +5 В (питание устройств) | Красный |
4 | SCL | Белый |
Контакт | Назначение |
---|---|
1 | GND |
2 | Ключ |
3 | SDA |
4 | +5 В (питание устройств) |
5 | SCL |
DestAddr
воспринимается получателем аппаратно (это адрес ведомого устройства I²C). Адрес источника SrcAddr
позволяет получателю идентифицировать источник данных (и определить, куда посылать ответ). Флаг протокола P
позволяет различать назначение тела пакета: P
=0 — «полезные» данные устройства (Device Data Stream); P
=1 — управление/состояние (control/status). Поле Length
определяет длину тела пакета (в байтах); само тело (Body
) размещается в последующих байтах. Контрольный байт Checksum
является результатом выполнения функции XOR
(Исключающее ИЛИ) над всеми предшествующими байтами пакета начиная с адреса приемника. Признаком целостности пакета является нулевой результат функции XOR
от всех байтов пакета включая контрольный. Подлежат отработке только пакеты с корректным контрольным байтом. Минимальная длина всего пакета — 4, максимальная — формально 131 (127 байт тело и 4 байта обрамления). Однако максимальную длину пакета ограничивает и время, разрешенное устройству для передачи пакета.
P
=1), обязательных для реализации интерфейсных функций шины (автоконфигурирования). «Полезными» прикладными сообщениями могут обмениваться только сконфигурированные устройства и только после явного разрешения этого обмена.
Ниже перечислены сообщения от хоста к устройствам.
♦ Reset
— сброс устройства и перевод его в режим ответа на «дежурный» адрес. Тело состоит из однобайтного кода F0h. Это же сообщение может послать и устройство, обнаружившее на шине помеху в виде устройства-двойника с тем же адресом. Послав это сообщение по своему же собственному адресу, устройство заставит двойника перейти на «дежурный» адрес.
♦ Identification Request
— запрос идентификационной строки. Тело состоит из однобайтного кода F1h.
♦ Assign Address
— назначение устройству, имеющему совпадающую идентификационную строку, нового адреса. Тело (длина 30) начинается с кода F2h, за которым следует 28-байтный идентификатор устройства, а за ним — байт нового адреса.
♦ Capabilities Request
— запрос фрагмента информации о возможностях устройства. В теле за кодом F3h следует 16-битный параметр — смещение требуемых данных относительно начала структуры данных возможностей. Для упрощения логики устройств параметр ограничивается значениями, обеспечивающими чтение первого фрагмента (с нулевым смещением), следующего и переспрос последнего переданного.
♦ Enable Application Report
— разрешение передачи прикладных данных. За кодом F5h следует байт кода операции: 00h — запрет, 01 — разрешение.
♦ Presence Check
— проверка наличия устройства по данному адресу. За кодом F7h следует нулевой байт (зарезервирован на будущее).
Далее перечислены сообщения от устройств к хосту.
♦ Attention
—запрос на конфигурирование (устройство включилось и завершило автоинициализацию). Тело состоит из однобайтного кода E0h.
♦ Identification Reply
— ответ на запрос идентификационной строки. Тело (длина 29) содержит код E1h, за которым следует 28-байтная строка идентификации.
♦ Capabilities Reply
— ответ на запрос фрагмента описания возможностей. Тело (длина 3-35) начинается с кода E3h, за которым следует 16-битное смещение (см. запрос) и собственно данные (0-32 байт). Хост собирает фрагменты, используя смещение.
Также в спецификации определены дополнительные протокольные сообщения, используемые для управления потреблением, распределением ресурсов и иных целей (у этих сообщений также флаг P
=1).
♦ Resource Request
— запрос ресурса (от устройства к хосту). За кодом E5h следует байт-описатель ресурса и необходимые данные. Команда позволяет запросить адрес в личное пользование и освободить его; запросить сообщение о текущем времени; запросить хост о сохранении блока данных, а также о воз вращении его обратно; запросить хост о сохранении питания на шине (для окончания внутренних операций); запросить дополнительную полосу шины.
♦ Resource Grant
— выделение ресурса, ответ хоста на запрос. За кодом F4h следует описатель ресурса и необходимые данные.
♦ Application Hardware Signal
— запрос устройства на генерацию высокоприоритетного аппаратного сигнала хост-компьютеру. За кодом A0h следует байт со следующим кодом сигнала:
• 1 — Reset
— попытка аппаратного сброса компьютера;
• 2 — Halt
— вызов отладчика;
• 3 — Attention
— генерация сигнала внимания (аппаратное прерывание).
♦ Application Test
— команда от хоста на выполнение устройством прикладного теста (код B1h).
♦ Application Test Reply
— сообщение устройством о результатах выполнения теста. За кодом A1h следует код результата (0 — успешное выполнение, иначе — ошибка) и 0-30 байт дополнительных данных.
♦ Application Status Message
— сообщение устройством об изменении своего состояния (в прикладном плане). За кодом A2h следует нулевой байт, за ним байт состояния и 2 байта специфических данных. Байт состояния:
• 00 — готово;
• 01 — не готово;
• 02 — изменились свойства;
• 03 — потеряно внутреннее состояние;
• 04 — потеряны прикладные данные (может, и от переполнения).
♦ Device Power Management Command
— команда управления потреблением устройства. За кодом F6 следует байт кода операции:
• 00 — режим Run;
• 01 — режим Standby;
• 02 — режим Suspend;
• 03 — режим Shutdown;
• 04 — совет отключить питание;
• 05 — рестарт;
• 06 — сообщить режим потребления.
Остальные коды протокольных сообщений задаются разработчиком в соответствии со спецификой устройств. Напомним, что прикладные данные передаются с флагом P
=0.
Строка идентификации устройства ACCESS.bus длиной 28 байт состоит из ряда символьных полей — байта ревизии протокола (protocol revision), 7-байтного поля ревизии модуля (module revision), 8-байтных имен производителя (vendor name) и модуля (module name), за которым следует 32-битный уникальный номер устройства (device number). Этот номер может быть либо фиксированным (уникальность обеспечивает производитель, что недешево), либо случайным числом, генерируемым по включению (на весь сеанс работы). Системное ПО, распознавая устройство для подключения драйверов, не должно руководствоваться этой строкой — возможности устройства (Capabilities) описываются (и сообщаются) в специальной структуре данных. Эта структура зависит от типа устройства.
На уникальности идентификатора и основан механизм автоконфигурирования: на запрос идентификатора по «дежурному» адресу отвечают все устройства, еще не имеющие личных адресов. Однако в ходе арбитража до конца сообщения доходит только одно из этих устройств, после чего хост ему назначает личный адрес. В следующем общем опросе идентификаторов «победит» уже другое устройство и так далее, пока всем устройствам не будут назначены личные адреса (об этом хост узнает по отсутствию ответа на общий опрос). Устройство-«новичок» на шине заявит о своем появлении сообщением Attention
, в ответ на которое хост выполнит вышеописанную процедуру идентификации и назначения адреса.
Спецификация ACCESS.bus определяет структуру программного обеспечения на хост-компьютере. Центральным элементом ПО является менеджер шины — ACCESS.bus Manager — программный драйвер, управляющий всеми операциями с устройствами, подключенными к шине. Этот драйвер, с одной стороны, связывается с аппаратными средствами хост-контроллера через драйвер минипорта MPD; с другой стороны, к нему обращаются драйверы устройств. Прикладное ПО обращается либо к драйверам нужных устройств, либо к менеджеру шины (но никак не напрямую к хост-контроллеру). Менеджер шины инициализирует шину и управляет ею, определяя вновь подключенные и отключенные устройства. Он связывает драйверы устройств (или прикладное ПО) с самими устройствами, проверяет входящие сообщения и работает как двунаправленный коммутатор данных, переформатирующий и буферизующий входящие и исходящие сообщения. Драйвер мини-порта MPD (Mini Port Driver) служит для изоляции менеджера шины от аппаратных особенностей хост-контроллера. Драйверы устройств являются двусторонними интерфейсами между прикладными программами и специфическими устройствами. В спецификации ACCESS.bus описываются программные интерфейсы драйверов (Device Driver, Mini Port Driver), а также протоколы для клавиатур, указателей (Locator), мониторов, батарей и текстовых устройств.
SMBSUS#
указывает на приостанов шины и устройств. Этот сигнал вырабатывается устройством управления питанием; во время его активности (низкий уровень) сигналы SDA
и SCL
штатным образом (как в I²C) не воспринимаются (они могут использоваться для уточнения режима приостанова).
♦ Сигнал SMBALERT#
служит для оповещения ведущего устройства о необходимости обмена с ведомым устройством, не имеющем возможности выступить в роли ведущего устройства. Этот сигнал собирается по схеме «Монтажное И» от всех устройств. Получив его, хост должен дать команду чтения байта по адресу 0001 100, на которое просигналившее устройство должно ответить байтом со своим адресом (возможен вариант и с дополнительным байтом PEC).
На уровне связи (2-м уровне OSI) определяются те же правила передачи данных, что и в I²C: условия S
, P
, Sr
; биты подтверждения; 7-битная адресация и признак RW
в первом байте, следующем за условием S
(Sr
). Как и в I²C, ведущее устройство может выполнять и запись, и чтение данных ведомого устройства; используются и комбинированные транзакции (через условие Sr
). В генерации подтверждений на SMBus есть особенности. На собственный адрес устройство всегда должно отвечать битом подтверждения ACK
, даже если оно занято внутренними операциями. Это правило обеспечивает работу механизма определения присутствия данного устройства на шине. Ведомое устройство может вводить бит NACK
в ответ на любой неадресный байт, если оно занято или запрашиваемые командой данные недоступны. В этом случае у него есть и альтернатива поведения — задержать синхросигнал на низком уровне (в разрешенных пределах). Ведомое устройство должно вводить бит NACK
в ответ на недопустимые коды команд или данных. Ответ NACK
вынуждает ведущее устройство прекратить транзакцию (ввести P
). Ведущее устройство, будучи приемником, ответом NACK
информирует передатчик о приеме последнего ожидаемого байта.
Сетевой уровень (3-й уровне OSI) определяет «лицо» шины SMBus и заслуживает более детального рассмотрения.
Биты[7:1] | Бит 0 (RW) | Назначение |
---|---|---|
0000 000 | 0 | General call address — адрес общего вызова |
0000 000 | 1 | Start — начало активного обмена |
0000 001 | X | Адрес устройства шины CBUS (для совместимости) |
0000 010 | X | Адрес для устройств иных шин |
0000 011 | X | ,Зарезервировано |
0000 1XX | X | Зарезервировано |
0101 000 | X | Хост шины ACCESS.bus |
0110 111 | X | «Дежурный» адрес ACCESS.bus |
1111 0XX | Х | Признак 10-битной адресации |
1111 1XX | X | Зарезервировано |
0001 000 | X | Хост шины SMBus |
0001 100 | X | Адрес ответа на сигнальные сообщения SMBus |
1100 001 | X | «Дежурный» адрес SMBus |
1001 0XX | Х | Адрес устройств-прототипов |
NACK
, это означает, что приемник не подтвердил корректный прием пакета. Однако ответ ACK
не является подтверждением достоверности приема: приемник может «не понимать» PEC и отвечать на него как на обычный байт данных; приемник может и не выполнять контроль в реальном времени приема потока данных. Более «достоверный контроль достоверности» могут обеспечить лишь протоколы высших уровней. Так, например, для контроля достоверности записи в устройство можно использовать последующее чтение тех же данных с PEC, и по анализу всего принятого пакета ведущее устройство сделает вывод об успешности или ошибке операции записи.
Шинные протоколы SMBus основаны на транзакциях I²C с 7-битной адресацией.
♦ Quick Command, короткая команда, — посылка адресного байта; действие команды определяется битом RW
адресного байта.
♦ Send Byte, посылка байта, — передача ведущим устройством вслед за адресным байтом (RW
=0) одного байта данных. В варианте с PEC передаются два байта, последний — PEC.
♦ Receive Byte, прием байта, — прием ведущим устройством вслед за адресным байтом (RW
=1) одного байта данных. В варианте с PEC принимаются два байта, последний — PEC.
♦ Write Byte, Write Word, запись байта/слова, — передача ведущим устройством вслед за адресным байтом (RW
=0) одного байта команды, за которым следует 1 или 2 байта (младший, а затем старший) данных. В варианте с PEC в конец добавляется контрольный байт.
♦ Read Byte, Read Word, чтение байта/слова, — комбинированные транзакции: сначала посылается адресный байт (RW
=0), за которым передается код команды. Далее, через условие 5 посылается адресный байт с тем же адресом устройства, но RW
=1, после которого принимается 1 или 2 байта данных. В варианте с PEC в конце ожидается прием дополнительного (контрольного) байта.
♦ Block Write, запись блока, — передача ведущим устройством вслед за адресным байтом (RW
=0) одного байта команды, за которым следует байт-указатель длины (количество последующих байт) и собственно байты данных. В варианте с PEC в конец добавляется контрольный байт. Указатель длины не учитывает байт PEC; он не может быть нулевым; одной блочной командой можно пересылать до 32 байт данных.
♦ Block Read, чтение блока, — комбинированная транзакция: сначала посылается адресный байт (RW
=0), за которым передается код команды. Далее, через условие S посылается адресный байт с тем же адресом устройства, но RW
=1, после которого принимается байт-указатель длины, а за ним и собственно байты данных. В варианте с PEC в конце ожидается прием дополнительного (контрольного) байта. Указатель длины — аналогично блочной записи.
♦ Process Call, вызов процесса, — комбинация команды Write Word с приемом слова (двух байт) от устройства с тем же адресом. Команда называется вызовом процесса, поскольку ожидает данных, зависящих от посланного кода команды и слова данных. В варианте с PEC контрольный байт ожидается только в самом конце, вслед за последним байтом принятых данных.
♦ Block Write-Block Read Process Call — комбинация записи блока с последующим чтением блока по тому же адресу устройства. В варианте с PEC контрольный байт ожидается только в самом конце, вслед за последним байтом принятых данных.
В случае, когда ведущим устройством шины собирается выступать рядовое устройство (не хост), оно должно использовать протокол уведомления хоста (SMBus host notify protocol): устройство на адрес хоста с RW
=0 (он известен) посылает байт с собственным адресом, за которым следует слово (два байта) собственно уведомления. Хост обязан понимать эти уведомления; дополнительно может использоваться и необязательный сигнал внимания SMBALERT#
(см. ниже).
AR
(Address Resolved) — данному устройству процедурой ARP назначен адрес;
♦ AV
(Address Valid) — устройство имеет действительный личный адрес, на который оно отзывается в обычных транзакциях (при AV
=0 устройство должно игнорировать все адреса, кроме «дежурного»).
При AV
=AR
=0 устройство не имеет личного адреса и должно участвовать в процессе ARP (отвечать на общий опрос идентификатора). При AV
=1 и AR
=0 устройство имеет личный адрес, но должно участвовать в ARP. При AV
=AR
=1 устройство имеет личный адрес, но не должно отвечать на общий запрос идентификатора. При этом оно должно отрабатывать адресованную ему команду назначения адреса (и впоследствии пользоваться новым назначенным адресом). Комбинация AV
=0 и AR
=1 недопустима.
Для протокола ARP введены специальные команды.
♦ Get UDID (general)
— общий запрос идентификатора — команда чтения блока данных с адресом 1100 001 и кодом команды 3. На нее устройства, поддерживающие ARP, отвечают посылкой блока с длиной 17 байт, сопровождаемого PEC. Первые 16 байт блока — UDID, 17-й байт — адрес устройства (с единицей в младшем бите). Если у устройства флаг AV
=0, оно вместо адреса передает код «1111 111». Команда не влияет на флаги AV
и AR
.
♦ Assign address
— назначить адрес — команда записи блока данных с адресом 1100 001 и кодом команды 4 и длиной 17 байт, сопровождаемого PEC. Первые 16 байт блока — UDID, 17-й байт — назначаемый адрес устройства (младший бит игнорируется). По этой команде устройство, обнаружившее полное совпадение UDID со своим собственным, устанавливает флаги AV
=AR
=1.
♦ Get UDID (directed)
— направленный запрос идентификатора — команда чтения блока данных с адресом 1100 001, в поле кода команды находится адрес интересующего устройства с единицей в младшем бите. На нее отвечает только устройство, опознавшее свой адрес в поле команды, и отвечает посылкой блока с длиной 17 байт, сопровождаемого PEC. Первые 16 байт блока — UDID, 17-й байт — адрес устройства (с единицей в младшем бите). Команда не влияет на флаги AV
и AR
.
♦ Reset device (general)
— общий сброс устройства — посылка по адресу 1100 001 байта команды с кодом 2, сопровождаемого байтом PEC. По этой команде все устройства инициализируются и обнуляют флаги AR
и AV
(PSA-устройства флага AV
не изменяют).
♦ Reset device ARP (dirеcted)
— направленный сброс устройства — посылка по адресу 1100 001 байта с адресом целевого устройства (с нулем в младшем бите), сопровождаемого байтом PEC. По этой команде выбранное устройство инициализируется и обнуляет флаги AR
и AV
(PSA-устройства флага AV
не изменяют).
♦ Notify ARP master
— уведомление ведущего устройства ARP — посылка на адрес 0001 000 байта с «дежурным» адресом 1100 0010, за которым следуют два байта нулей. Устройство может посылать это уведомление о необходимости выполнения ARP при включении питания, а также при обнаружении коллизии в процессе выполнении чтения данных по индивидуальному адресу устройства.
На каждый байт команд ARP-устройства, поддерживающие этот протокол, отвечают подтверждением ACK
. Отсутствие подтверждений трактуется ведущим ARP-устройством как отсутствие ARP-устройств на шине.
«Переучет» и назначение адресов вкратце выглядит следующим образом: ведущее ARP-устройство выполняет команду общего запроса идентификатора и по ней получает UDID и, возможно, адрес первого «победителя» в арбитраже. Далее этому победителю назначается личный адрес — тот же или по усмотрению ведущего ARP-устройства, после чего он уже не участвует в арбитраже по общему запросу. Сведения об устройстве и его адрес ведущим ARP-устройством заносятся в таблицу устройств. После этого общий запрос и назначение адреса повторяются снова и снова, пока все ARP-устройства не будут удовлетворены. Признаком «общего удовлетворения» для ведущего ARP-устройства будет отсутствие подтверждений приема команд общего запроса.
Int 15h
(в реальном режиме и в V86), либо через точку входа, полученную при подключении в соответствующем режиме. Для подключения (и отключения) также используется сервис BIOS Int 15h
; после подключения доступ через Int 15h
блокируется (до отключения). В защищенном режиме вызов интерфейсных функций возможен только через точку входа, полученную при подключении. Поддержка точки входа для реального режима необязательна.
Спецификация SMBus BIOS обеспечивает хост-центрическое обращение к абонентам шины: по инициативе вызывающей программы хост-контроллер посылает устройству команду, которая может предполагать и немедленный ответ устройства. Однако устройства могут посылать хосту сообщения по собственной инициативе, при этом они обязаны использовать протокол Write Word
. Хост способен помещать принятые сообщения в небольшую очередь, из которой они могут программно извлекаться путем вызова функции 7 (программа должна периодически выполнять этот вызов для проверки наличия сообщений в очереди). В очереди каждое сообщение представлено байтом адреса источника и парой байт тела сообщения.
Шина SMBus тесно связана с оборудованием, управляющим питанием и участвующим в генерации запросов системного прерывания SMI (System Management Interrupt — особое аппаратное прерывание процессора) и их обработки. Из-за этого в BIOS введен специальный механизм, позволяющий обнаружить обработку SMI во время выполнения транзакций и в иное время. Это необходимо, поскольку обработчик SMI, работающий в режиме SMM, совершенно невидим прикладной программе, а результаты его работы могут существенно влиять на работу программы, вызывающей BIOS SMBus.
Функции общих обращений к SMBus:
♦ SMBus Installation Check
(01h) — проверка наличия функций;
♦ SMBus Real Mode Connect
(02h) — подключение в реальном режиме;
♦ SMBus 16-Bit Connect
(03h) — подключение в 16-битном защищенном режиме;
♦ SMBus 32-Bit Connect
(04h) — подключение в 32-битном защищенном режиме;
♦ SMBus Disconnect
(05h) — отключение от сервиса;
♦ SMBus Deviсе Address
(06h) — получение списка адресов устройств SMBus;
♦ SMBus Critical Messages
(07h) — чтение сообщений устройств, переданных хосту.
Для взаимодействия с конкретными устройствами SMBus предназначен набор функций, позволяющих генерировать запросы протокольных команд SMBus и получать результаты их выполнения. Функции запросов и получения ответов разделены, что позволяет на время выполнения (и передачи) довольно длительных команд не занимать время центрального процессора. Большинство протокольных команд вводится за один вызов BIOS; исключение составляет команда записи блока, данные для которой передаются за один или более последующих запросов продолжения. Результаты большинства команд также принимаются за один вызов; результат чтения блока получается за несколько вызовов продолжения.
Вызовы протокольных команд устройств SMBus:
♦ SMBus Request
(10h) — запрос команды устройству;
♦ SMBus Request Continuation
(11h) — продолжение запроса для записи блока;
♦ SMBus Request Abort
(12h) — отказ от выполнения ранее посланного запроса;
♦ SMBus Request Data and Status
(13h) — запрос данных и состояния.
Шина SMBus является одним из главных коммуникационных средств в ACPI. Интерфейс SMBus для ACPI определен в спецификации SMBus CMI — документе System Management Bus (SMBus) Control Method Interface Specification Version 1.0, опубликованном в конце 1999 г. Этот интерфейс позволяет легко использовать все возможности SMBus независимо от происхождения или особенностей реализации оборудования. Ниже перечислены основные цели спецификации.
♦ Обеспечить эффективный и надежный интерфейс ACPI для аппаратных средств хост-контроллера независимо от его реализации (со встроенным микроконтроллером или без него).
♦ Обеспечить системную синхронизацию доступа ко всем ресурсам SMBus.
♦ Гарантировать соответствие интерфейса версиям 1.0 и 1.1 спецификации SMBus и возможности его расширения для поддержки новых свойств в будущих версиях.
Для успешного функционирования системы требуется поддержка соответствующими драйверами операционной системы. Для управления питанием форум разработчиков «интеллектуальных» батарей — Smart Battery System Implementers Forum (SBS-IF) — разработал спецификацию драйверов для ОС Windows 9x/2000, с которой можно ознакомиться на сайте http://www.sbs-forum.org/smbus/.
Рассмотрение программного интерфейса CMI выходит за рамки данной книги. Отметим лишь, что коды протоколов SMBus, используемые в CMI, отличаются от кодов, используемых в SMBus BIOS. Те же протоколы, но с байтом PEC, кодируются с единицей в старшем бите (значение увеличено на 80h).
Параметр | I²C | ACCESS.bus внешняя | ACCESS.bus внутренняя | SMBus мощная | SMBus маломощная |
---|---|---|---|---|---|
Входной уровень лог. 0, не более | 1,5 В или 0,3 Vdd | 0,3 Vdd | 0,3 Vdd | 0,8 В | 0,8 В |
Входной уровень лог. 1, не менее | 3,0 В или 0,7 Vdd | 0,7 Vdd | 0,7 Vdd | 2,1 В | 2,1 В |
Выходной уровень лог. 0, не более | 0,4 В или 0,2 Vdd при Vdd<2 В | 0,6 В | 0,6 В | 0,4 В | 0,4 В |
Выходной ток лог. 0, мА | 3 | 6 | 0,35 | 4 | 0,35 |
Максимальная емкость линии шины, пФ | 400 | 1000 | –¹ | 400 | 400 |
Частота, КГц | 0-100, 0-400, 0-3400 | 0-100 | 0-100 | 10-100 | 10-100 |
SCL
в этой шине может удерживаться на низком уровне не дольше 2 мс. В I²C таких ограничений нет.
♦ В шине SMBus ведущее устройство ожидает от ведомого устройства немедленного ответа, в шине ACCESS.Bus ответ приходит независимо, но ожидается не позже чем через 40 мс. В шине SMBus и ведущее устройство, и ведомое устройство могут притормаживать обмен на уровне приема битов, что позволяет им вписываться в свои временные диаграммы (успевать «просыпаться», обрабатывать прерывания).
MDC
, MDIO
и шина GND
), обеспечивающую доступ по записи и чтению к 16-разрядным регистрам устройств. Протокол шины обеспечивает 5-битную адресацию подключаемых устройств, что позволяет непосредственно объединять до 32 устройств на одной шине. Каждое устройство может иметь до 32 регистров. Шина является хост-центрической — ею управляет один контроллер, инициирующий транзакции, а все подключаемые устройства являются ведомыми. Контроллер генерирует импульсы синхронизации по однонаправленной линии MDC
, а по двунаправленной линии MDIO
формирует биты команд и данных (при записи) и принимает данные чтения. Устройство, опознавшее свой адрес, должно выполнить адресуемую ему команду. Уровни сигналов — обычные для логики ТТЛ и КМОП; для линии MDIO
обычно используются формирователи с открытым коллектором (стоком) и резисторы, «подтягивающие» пассивную линию к уровню питания (+5 или +3,3 В). Частота импульсов MDC
, не обязательно постоянная, не должна превышать 2,5 МГц, что позволяет реализовать функции контроллера чисто программно. Временны́́е диаграммы сигналов для транзакций чтения и записи приведены на рис. 11.4. Отметим, что устройство должно фиксировать биты по положительному перепаду MDC
, а контроллер фиксирует биты по отрицательному перепаду. Адреса и данные передаются начиная со старших бит.
MDIO
на высоком уровне. Собственно транзакция начинается с условия Start — вывода контроллером битовой последовательности «01», за которым следует двухбитная команда Cmd
: «10» — чтение или «01» — запись. Далее контроллер передает 5-битный адрес устройства (PhyAd
), за которым следует 5-битный номер регистра (RegAd
). После этого следует двухбитный «пируэт» (turnaround) ТА
для перехода к передаче данных. При операции записи «пируэт» сводится к передаче контроллером последовательности «10», а затем он передает 16 бит данных (WData
) для записи в регистр. При чтении с начала «пируэта» контроллер отпускает линию MDIO
, а на время второго бита отозвавшееся адресованное устройство устанавливает на этой линии нуль, что используется для определения факта ответа. В следующие 16 тактов устройство передает считанные данные (RData
) контроллеру.
Преамбула нужна только для приведения интерфейсной части устройств в исходное состояние (после подачи питания); если питание устройством не терялось, то последующие транзакции могут выполняться и без преамбулы. Имеется также нюанс в «пируэте»: для некоторых устройств второй его бит оказывается лишним — он сбивает синхронизацию данных на 1 такт.
SCK
(Serial Clock) — синхросигнал, которым ведущее устройство стробирует каждый бит данных;
♦ MOSI
(Master Output Slave Input) — выходные данные ведущего устройства и входные данные ведомого устройства;
♦ MISO
(Master Input Slave Output) — входные данные ведущего устройства и выходные данные ведомого устройства.
Кроме того, может использоваться сигнал выбора ведомого устройства SS#
(Slave Select, или CS#
— Chip Select): ведомое устройство должно реагировать на сигналы интерфейса и генерировать выходные данные на линии MISO только при низком уровне этого сигнала; при высоком уровне выход MISO
должен переводиться в высокоимпедансное состояние. С помощью сигналов SS#
, раздельно формируемых ведущим устройством для каждого из ведомых устройств, ведущее устройство может выбирать партнером в транзакции одно из ведомых. При этом получается гибридная топология соединений: по сигналам SCK
, MOSI
и MISO
— топология шинная, по SS#
— звездообразная (центр — ведущее устройство).
Возможен и иной способ общения ведущего устройства с несколькими ведомыми устройствами с чисто шинной топологией. Здесь сигнал SS#
для выбора устройств не используется, но ведомые устройства все время «слушают» шину, ожидая специальной адресной посылки в начале транзакции. Опознав свой адрес, устройство отрабатывает дальнейшие протокольные посылки, и теперь ему разрешается выводить данные на линию MISO
до конца текущей транзакции. Однако этот вариант требует довольно сложной логики поведения ведомого устройства.
Данные передаются старшим битом вперед. Устройства различных производителей могут использовать разные режимы обмена (SPI Mode 0…SPI Mode 3), различающиеся фазой и полярностью синхросигналов. Рис. 11.5 иллюстрирует передачу и прием байта в различных режимах. Заметим, что в любом режиме входные и выходные данные стробируются по разным перепадам синхроимпульсов. Кроме того, есть варианты в использовании сигнала SS#
. В первом варианте (он и представлен на рисунке) для ведомого устройства признаком начала транзакции является спад сигнала SS#
, а завершения — его подъем. Во втором варианте начало транзакции определяется по первому фронту (спаду) SCK
, а сигнал SS#
может иметь низкий уровень постоянно. Второй вариант иногда предпочитают для простейшего двухточечного интерфейса с единственным ведущим устройством и единственным ведомым устройством, когда нет опасения потери синхронизации. Микроконтроллеры с аппаратным портом SPI, как правило, имеют возможность программного выбора режима. Форматы транзакций зависят от устройств, но общая идея такова: ведущее устройство по линии MOSI
посылает код операции и адресную информацию для устройства; затем следуют данные. В операции записи они передаются ведущим устройством по той же линии, в операции чтения устройство их посылает по линии MISO
. На время всей транзакции ведущее устройство сохраняет активное состояние линии SS#
, число требуемых синхроимпульсов зависит от формата команды.
TCK
(Test Clock) — сигнал синхронизации последовательных данных; генерируется контроллером. Частота синхронизации может достигать 16 МГц.
♦ TMS
(Test Mode Select) — сигнал выбора тестового режима. Генерируется контроллером.
♦ TDI
(Test Data Input) — входные данные, принимаемые устройством в последовательном двоичном коде (младшим битом вперед).
♦ TDO
(Test Data Output) — выходные данные, передаваемые устройством в последовательном двоичном коде.
♦ TRST
(Test Logic Reset) — необязательный сигнал сброса логики интерфейсного порта, генерируемый контроллером.
Эти сигналы (все однонаправленные), имеющие обычные логические уровни, образуют тестовый порт TAP (Test Access Port), через который тестируемое устройство подключается к тестирующему оборудованию (контроллеру). В задачу тестирующего оборудования входит формирование тестовых сигналов по программе тестирования, определенной разработчиком тестируемого устройства, и сравнение полученных результатов с эталонами. Один и тот же контроллер и порт могут использоваться для тестирования любого числа устройств, поддерживающих JTAG. Для этого устройства своими портами TAP соединяются в цепочку (рис. 11.6). Стандартизованный логический формат позволяет контроллеру независимо общаться с каждым из устройств цепочки (для этого, конечно, они должны иметь исправные ячейки JTAG).
ВPR
(Bypass Register), DID
(Device Identification Register) и BSR
(Boundary Scan Register).
Регистры инструкций и данных представляют собой независимые сдвиговые регистры, соединенные параллельно. На их входы (старшие биты) приходит сигнал TDI
, с выходов (младшие биты) снимается сигнал TDO
. По каждому положительному перепаду данные продвигаются на один бит.
Регистр ВРR
имеет длину в один бит. Он используется как кратчайший обходной путь для последовательных данных, когда остальные регистры не участвуют в обмене.
Регистр BSR
представляет собой длинный сдвигающий регистр, каждым битом которого являются пограничные ячейки, установленные на всех входных и выходных сигналах процессора. Для двунаправленных сигналов (или их групп), кроме собственно информационных ячеек регистра, соответствующих внешним сигналам, имеются и управляющие ячейки, задающие режим работы информационных ячеек. К примеру, у процессоров P6 длина BSR
составляет 159 бит.
Регистр DID
длиной 32 бита содержит идентификатор производителя, код устройства и номер версии, по которым TAP-контроллер может распознать, с каким устройством он имеет дело.
Регистр IR
служит для хранения исполняемой тестовой инструкции. Его длина зависит от тестируемого устройства. Для всех устройств обязательными являются инструкции BYPASS
, IDCODE
, SAMPLE
и EXTEST
.
Инструкция BYPASS
(все биты кода — единичные) предназначена для подключения однобитного обходного регистра, обеспечивая скорейшее прохождение данных через устройство; при этом оно никак не реагирует на проходящий поток. Вход TDI
обычно «подтягивают» резистором к высокому уровню, при этом разрыв цепочки JTAG приведет к подключению обходных регистров во всех устройствах после точки обрыва. Это исключает возможные непредсказуемые действия устройств в случае обрыва.
Инструкция идентификации IDCODE
(младшие биты кода — 10) подключает к интерфейсу регистр DID
, позволяя считать его содержимое (поступающие входные данные не могут изменить его значение).
Инструкция SAMPLE/PRELOAD
(младшие биты кода — 01) имеет два назначения. Когда TAP-контроллер находится в состоянии Capture-DR (см. ниже), эта инструкция позволяет выполнить моментальный «снимок» состояния всех внешних сигналов без воздействия на работу устройства. Значение сигналов фиксируется по положительному перепаду TCK
. В состоянии Update-DR по этой инструкции данные загружаются в выходные ячейки тестового порта (но еще не на выходы устройства), откуда впоследствии они будут выводиться (подаваться на выводы процессора) по инструкции EXTEST
. Данные загружаются по спаду сигнала TCK
.
Инструкция EXTEST
(младшие биты кода — 00) предназначена для проверки внешних цепей (по отношению к тестируемому устройству). При этом на выходные выводы подаются сигналы, предварительно записанные в регистр BSR
, а состояние входных сигналов фиксируется в этих регистрах. Двунаправленные сигналы предварительно конфигурируются соответствующими им управляющими битами ячеек BSR
.
Стандарт 1149.1 предусматривает и инструкцию тестирования внутренней логики устройства INTEST
, но ее поддерживают не все устройства.
Контроллер тестового порта (TAP-controller) представляет собой синхронный конечный автомат, изменяющий состояние по фронту сигнала TCK
и по включению питания. Сменой состояний управляет сигнал TMS
(Test Mode State), воспринимаемый по положительному перепаду TCK
. Граф состояний и переходов управляющего автомата представлен на рис. 11.8. Около стрелок переходов указаны значения сигнала TMS
во время фронта TCK
.
TMS
, удерживаемым не менее пяти тактов TCK
. Для перевода в состояние Test-Logic-Reset иногда используют и дополнительный сигнал TRST
. В этом состоянии тестовая логика запрещена, и устройство работает в нормальном режиме.
Состояние Run-Test/Idle является промежуточным между выполнением тестовых операций. В этом состоянии регистры не изменяют своего значения.
В состоянии Capture-DR во время выполнения инструкций EXTEST
и SAMPLE/PRELOAD
сканирующий регистр фиксирует только данные на входных линиях.
В состоянии Shift-DR данные с TDI
продвигаются через подключенный сдвиговый регистр на выход TDO
.
В состоянии Pause-DR контроллер временно запрещает продвижение данных через сдвиговый регистр.
В состоянии Update-DR по спаду TCK
сигналы из сдвигового регистра фиксируются на выходах тестовых ячеек.
В состоянии Capture-IR контроллер загружает в сдвиговый регистр инструкций код «безобидной» инструкции SAMPLE
.
В состоянии Shift-IR в цепь между TDI
и TDO
включается сдвиговый регистр инструкций, но еще исполняется предыдущая инструкция.
В состоянии Pause-IR контроллер временно запрещает продвижение данных через сдвиговый регистр инструкций.
В состоянии Update-IR по спаду TCK
фиксируется новая исполняемая инструкция, и в цепь TDI
-TDO
включается соответствующий ей регистр.
Кроме этих основных состояний контроллера, определяющих действия тестового оборудования, имеются и временные промежуточные состояния, необходимые для реализации переходов автомата. К ним относятся Select-DR-Scan, Exit1-DR, Exit2-DR, Select-DR-Scan, Exit1-IR и Exit2-IR.
Для интерфейса JTAG существует специальный язык описания устройств BSDL (Boundary Scan Description Language). Состав и порядок следования информационных и управляющих ячеек в сдвиговом регистре данных специфичен для каждого устройства (для чего и существует идентификационный регистр) и сообщается его разработчиками.
Интерфейс JTAG используется не только для тестирования, но и для программирования различных устройств, в том числе и энергонезависимой памяти микроконтроллеров. Контакты для сигналов JTAG имеются на шине PCI, однако в их использовании единообразия не наблюдается (либо остаются неподключенными, либо соединяются для организации цепочки). Интерфейс JTAG имеется в современных процессорах; здесь он позволяет не только тестировать сам процессор (это не представляет особого прикладного интереса), но и организовать зондовый режим отладки (probe mode, см. [6, 7]). Зондовый режим является мощным средством отладки системного программного обеспечения; обычный процессор, связанный с тестовым контроллером интерфейсом JTAG, превращается во внутрисхемный эмулятор — мечту разработчика системного ПО.
SCL
(или MDC
в SMI) формируется непосредственно от выходной линии Strobe
; для его переключения достаточно последовательно записывать в бит 0 регистра CR
(порт с адресом LPT_BASE
+2) нули (высокий уровень сигнала) и единицы (низкий). Двунаправленный сигнал SDA
(MDIO
в SMI) реализуется чуть сложнее: для передачи нуля в бит 1 регистра CR
(LPT_BASE
+2) записывается единица, для передачи единицы — нуль. На время чтения в этот бит должен быть записан нуль (чтобы на выходе был высокий уровень), данные (инверсные) считываются из бита 7 регистра SR
(LPT_BASE
+1). В адаптере должен использоваться диод с малым прямым падением напряжения. Лучше всего для этого подходят германиевые меза-диоды Д310 или Д311; кремниевые диоды, даже с барьерами Шоттки, здесь работают хуже (возможен слишком высокий формируемый уровень нуля).
DTR
и RTS
и считывать состояния сигналов CIS
, DSR
, DCD
и RI
. Усложнение заключается в необходимости использования преобразователей уровней сигналов RS-232C в ТТЛ (для этого выпускается ряд микросхем, например фирмами Maxim, Sypex), для которых требуется подача питания.
Для интерфейсов SPI и JTAG тоже можно использовать LPT-порт, здесь даже не требуется организация двунаправленных линий. Сигналы SCK
и MOSI
(SPI), TCK
, TMS
, TDO
и TRST
(JTAG) можно подключить к любым выходным линиям порта, MISO
(SPI), TDI
(JTAG) — к любой входной линии. Простейший адаптер содержит лишь последовательные резисторы 100–150 Ом, включенные в сигнальные цепи для уменьшения «звона» и влияния кабеля на схему. Однако такая схема может надежно работать лишь при небольшой длине кабеля (20–30 см), что не всегда удобно. Более надежна и удобна схема с буферами, способными переходить в высокоимпедансное состояние (например, 74НС244 или 1556АП5). Плата с буфером может соединяться с LPT-портом довольно длинным кабелем, а от нее к устройству идет короткий кабель. Программно-управляемый перевод буфера выходных сигналов в третье состояние позволяет логически отключать адаптер от программируемой схемы, что особенно удобно в процессе отладки программируемых устройств. Именно так устроен популярный адаптер «ByteBlaster», применяемый для программирования конфигурируемой логики фирмы Altera и других. Адаптер вместе с ПО может обеспечивать протокол SPI (быть ведущим устройством в варианте с двухточечной топологией), JTAG и собственный протокол программирования устройств «Serial Passive». Схемы различных адаптеров и ПО для них можно легко найти в Сети.
Программная реализация последовательных протоколов ограничивает скорость передачи данных на уровне 50-150 Кбит/с при работе LPT-порта в стандартном режиме. В режиме EPP или ECP можно достичь скорости и 1–2 Мбит/с, но при этом адаптер несколько усложняется (поскольку в этих интерфейсах требуется одновременно принимать и передавать данные). Решить проблему производительности, а заодно и расширить функциональные возможности позволяет использование специализированных интерфейсных адаптеров для шин PCI или ISA, выпускаемых рядом фирм. Есть и внешние устройства с интерфейсами USB или Ethernet. Правда, цена этих адаптеров и устройств существенно отличается от цены простого адаптера, который можно изготовить и самостоятельно.
Memory Hole At 15-16М
, но его включение не позволит использовать оперативную память свыше 15 Мбайт.
Поскольку шина ISA имеет 24-разрядную шину адреса, ведущие устройства этих шин (ISA Bus Master) способны обращаться к памяти (ОЗУ и память адаптеров) в пределах первых 16 Мбайт (000000-FFFFFFh). To же ограничение касается и стандартного контроллера DMA, которым могут пользоваться устройства шины ISA (и иные устройства системной платы).
Шина PCI имеет 32-разрядную шину адреса, так что ее ведущим устройствам доступна вся физическая память[5]. Для устройств PCI могут выделяться любые области адресов, свободные от ОЗУ, ROM BIOS и устройств ISA. Области адресов памяти, используемые каждым устройством PCI, описаны в заголовках их конфигурационных пространств. Эти данные требуются при распределении ресурсов и настройке мостов PCI в процессе инициализации шины.
А0
-А9
), что обеспечивает обращением портам в диапазоне адресов 0-3FFL Старшие биты адреса, хотя и поступают на шину, устройствами игнорируются. В результате обращения по адресам, к примеру 378h, 778h, B78h и F78h, будут восприниматься устройствами одинаково. Это упрощение, нацеленное на снижение стоимости как системной платы, так и схем плат адаптеров, для шины ISA никто не отменял. Традиционные адаптеры для шины ISA, называемые Legacy Card («наследие тяжелого прошлого»), для старших бит адреса не имеют даже печатных ламелей на своем краевом разъеме. Впоследствии перешли к 12-битной адресации устройств шины ISA, но ее приходится применять с оглядкой на возможное присутствие устройств с 10-битной адресацией. В адаптерах для шин MCA и PCI и во всех современных системных платах используются все 16 бит адреса. Карта распределения адресов ввода-вывода стандартных устройств PC приведена в табл. 12.1. Эта карта подразумевает 10-битную дешифрацию адреса. Естественно, что в конкретном компьютере реально присутствуют не все перечисленные устройства, но в то же время там могут оказаться другие, не попавшие в таблицу.
AT и PS/2 | PC/XT | Назначение |
---|---|---|
000-00F | 000-00F | Контроллер DMA #1 8237 |
010-01F | PS/2 — расширение DMA#1 | |
020-021 | 020-021 | Контроллер прерываний #1 — 8259A |
040-05F | 040-043 | Таймер (PC/XT: 8253, AT: 8254) |
060 | 060 | Диагностический регистр POST (только запись) |
060-063 | Системный интерфейс 8255 | |
060, 064 | Контроллер клавиатуры AT 8042 | |
061 | Источники NMI и управление звуком | |
070-07F | Память CMOS и маска NMI | |
080 | Диагностический регистр | |
080-08F | 080-083 | Регистры страниц DMA |
090-097 | PS/2 микроканал, арбитр | |
0А0 | Маска NMI | |
0A0-0BF | Контроллер прерываний #2 — 8259A | |
0C0-0DF | Контроллер DMA #2 8237A-5 | |
0F0-0FF | Сопроцессор 80287 | |
100-1EF | PS/2 управление микроканалом | |
170-177 | Контроллер НЖМД #2 (IDE#2) | |
1F0-1F7 | Контроллер НЖМД #1 (IDE#1) | |
200-207 | 200-20F | Игровой адаптер |
210-217 | Блок расширений | |
238-23F | COM4 | |
278-27F | 278-27F | Параллельный порт LPT2 (LPT3 при наличии MDA) |
2A2-2A3 | часы MSM48321RS | |
2C0-2DF | 2C0-2DF | EGA #2 |
2E0-2E7 | COM4 | |
2E8-2EF | COM4 | |
2F8-2FF | 2F8-2FF | COM2 |
300-31F | Плата прототипа | |
320-32F | Жесткий диск XT | |
338-33F | COM3 | |
370-377 | Контроллер НГМД #2 | |
376-377 | Порты команд IDE#2 | |
378-37F | 378-37F | Параллельный порт LPT1 (LPT2 при наличии MDA) |
380-38F | 380-38F | Синхронный адаптер SDLC/BSC #2 |
3A0-3AF | 3A0-3A9 | Синхронный адаптер BSC#1 |
3B0-3BB | 3B0-3BB | Монохромный адаптер (MDA) |
3B4-3C9 | PS/2 видеосистема | |
3BC-3BF | 3BC-3BF | Параллельный порт LPT1 платы MDA |
3C0-3CF | 3C0-3CF | EGA#1 |
3C0-3DF | 3C0-3DF | VGA |
3D0-3DF | 3D0-3DF | CGA/EGA |
3E0-3E7 | COM3 | |
3E8-3EF | COM3 | |
3F0-3F7 | 3F0-3F7 | Контроллер НГМД #1 |
3F6-3F7 | Порты команд IDE#1 | |
3F8-3FF | 3F8-3FF | COM1 |
NMI
приходит от схем контроля паритета памяти, от линий контроля шины ISA (IOCHK
) или шины PCI (SERR#
). Сигнал NMI
блокируется до входа процессора установкой в 1 бита 7 порта 070h, отдельные источники разрешаются и идентифицируются битами порта 061h:
♦ бит 2 R/W — ERP
— разрешение контроля ОЗУ и сигнала SERR#
шины PCI;
♦ бит 3 R/W — EIC
— разрешение контроля шины ISA;
♦ бит 6 R — IOCHK
— ошибка контроля на шине ISA (сигнал IOCHK#
);
♦ бит 7 R — PCK
— ошибка четности ОЗУ или сигнал SERR#
на шине PCI.
Реакция процессора на маскируемые прерывания может быть задержана сбросом его внутреннего флага IF
(инструкции СLI
— запретить прерывания, STI
— разрешить). По возникновении события, требующего реакции, адаптер (контроллер) устройства формирует запрос прерывания, который поступает на вход контроллера прерываний. Контроллер прерываний формирует общий запрос маскируемого прерывания для процессора, а когда процессор подтверждает этот запрос, контроллер сообщает процессору вектор прерывания, по которому выбирается программная процедура обработки прерываний. Процедура должна выполнить действия по обслуживанию данного устройства, включая сброс его запроса для обеспечения возможности реакции на следующие события и посылку команды завершения в контроллер прерываний. Вызывая процедуру обработки, процессор автоматически сохраняет в стеке значение всех флагов и сбрасывает флаг IF
, что запрещает маскируемые прерывания. При возврате из процедуры (по инструкции IRET
) процессор восстанавливает сохраненные флаги, в том числе и установленный IF
, что снова разрешает прерывания. Если во время работы обработчика прерываний требуется реакция на иные прерывания (более приоритетные), то в обработчике должна присутствовать инструкция STI
. Особенно это касается длинных обработчиков; здесь инструкция STI
должна вводиться как можно раньше, сразу после критической (не допускающей прерываний) секции. Следующие прерывания того же или более низкого уровня приоритета контроллер прерываний будет обслуживать только после получения команды завершения прерывания EOI
(End Of Interrupt).
Маскируемые прерывания используются для сигнализации о событиях в устройствах. Обработка сигналов запросов прерывания выполняется контроллером прерываний, программно совместимым с 8259A. Контроллер прерываний позволяет маскировать отдельные входы запросов и организовывать систему приоритетов запросов от различных входов. В машинах класса AT применяется каскадное соединение двух контроллеров. Ведущий контроллер 8259А#1 обслуживает запросы 0, 1, 3–7; его выход подключается к входу запроса прерываний процессора. К его входу 2 подключен ведомый контроллер 8259А#2, который обслуживает запросы 8-15. При этом поддерживается вложенность приоритетов — запросы 8-15 со своим рядом убывающих приоритетов вклиниваются между запросами 1 и 3 ведущего контроллера, приоритеты запросов которого также убывают с ростом номера. В XT каскадирование не применялось, и один контроллер 8259А обслуживал все 8 линий запросов.
Контроллер прерываний i8259A подробно описан в литературе [1, 7]; здесь приведем лишь необходимые сведения, в большинстве случаев достаточные для работы. Контроллеры расположены по адресам 20-21h (8259A#1) и A0-A1h (8259A#2), обращаться к ним следует как к однобайтным портам ввода-вывода. После инициализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» — процедуру с единственной инструкцией IRET
. Первым делом программа должна загрузить в память свой обработчик и подставить указатель на его начало в соответствующее место таблицы прерываний. Далее следует размаскировать вход, для чего выполняется чтение регистра маски (адрес 21h для 8259А#1, A1h для 8259А#2), обнуление соответствующего бита (см. табл. 12.2) и запись в регистр нового значения маски. При работе с контроллером прерываний от программы требуется лишь управление маской своего запроса (при инициализации программы нужно обнулить маску требуемого запроса) и корректное завершение обработки прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой EOI
(End Of Interruption), посылаемой контроллеру:
♦ для 1-го контроллера — посылка байта 20h по адресу 20h;
♦ для 2-го контроллера — посылка байта 20h по адресу A0h (EOI
для ведомого контроллера), затем посылка байта 20h по адресу 20h (EOI
для ведущего контроллера).
Имя (номер¹) | Вектор | Контроллер/маска | Описание |
---|---|---|---|
NMI | 02h | Контроль канала, паритет (в XT — сопроцессор) | |
IRQ0 | 08h | #1/1h | Таймер (канал 0 8253/8254) |
IRQ1 | 09h | #1/2h | Клавиатура |
IRQ2 | 0Ah | #1/4h | XT — резерв, AT — недоступно (подключается каскад IRQ8-IRQ15) |
IRQ8 | 70h | #2/1h | CMOS RTC — часы реального времени |
IRQ9 | 71h | #2/2h | Резерв |
IRQ10 | 72h | #2/4h | Резерв |
IRQ11 | 73h | #2/8h | Резерв |
IRQ12 | 74h | #2/10h | PS/2-Mouse (резерв) |
IRQ 13 | 75h | #2/20h | Математический сопроцессор |
IRQ14 | 76h | #2/40h | HDC — контроллер НЖМД |
IRQ15 | 77h | #2/80h | Резерв |
IRQ3 | 0Bh | #1/4h | COM2, COM4 |
IRQ4 | 0Ch | #1/10h | COM1, COM3 |
IRQ5 | 0Dh | #1/20h | XT — HDC, AT — LPT2, Sound (резерв) |
IRQ6 | 0Eh | #1/40h | FDC — контроллер НГМД |
IRQ7 | 0Fh | #1/80h | LPT1 — принтер |
IRQx
и имеют общепринятое назначение (табл. 12.2). Часть этих линий отдается в распоряжение шины PCI. В таблице отражены и приоритеты прерываний — запросы расположены в порядке их убывания. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки остаются традиционными для обеспечения совместимости с программным обеспечением.
Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как INTR А
, В
, С
, D
. Эти линии работают по низкому уровню, что дает возможность их разделения (совместного использования). Линии циклически сдвигаются в слотах и независимо коммутируются на доступные линии IRQx
с помощью конфигурационных регистров чипсета. Линии IRQx
, используемые шиной PCI, становятся недоступными для шины ISA. «Дележку» линий между шинами, а также управление чувствительностью отдельных линий обеспечивают параметры CMOS Setup, а также система PnP. В параметрах ISA
или Legacy
подразумевают использование линий IRQx традиционными адаптерами шины ISA
(статическое распределение), a PCI/PnP
— использование адаптерами шины PCI или адаптерами PnP для шины ISA (динамическое распределение). Общая схема формирования запросов прерываний изображена на рис. 12.1.
DRQx
. Если к моменту завершения обработки этого запроса (после записи команды EOI
в регистр контроллера прерываний) контроллер снова обнаруживает активный уровень на том же входе DRQx
, то он снова сформирует запрос на прерывание процессора.
♦ Чувствительность к перепаду (edge sensitive) означает, что контроллер прерываний вырабатывает запрос прерывания процессора только по факту обнаружения перепада (на ISA — положительного) на входе DRQx
. Повторно запрос по этому входу возможен только по следующему такому же перепаду, то есть сигнал предварительно должен вернуться в исходное состояние.
В любом случае сигнал запроса аппаратного прерывания IRQx
должен удерживаться генерирующей его схемой, по крайней мере, до цикла подтверждения прерывания процессором. В противном случае источник прерывания корректно идентифицирован не будет, и контроллер сообщит ложный вектор прерывания (spurious interrupt), соответствующий его входу с максимальным номером (IRQ7
для первого контроллера и IRQ15
для второго). Обычно адаптеры строят так, что сигнал запроса сбрасывается при обращении программы обслуживания прерывания к соответствующим регистрам адаптера.
В шине ISA прерывание вырабатывается по положительному перепаду сигнала на линии запроса. Это плохо по двум причинам: такой способ подачи сигнала, во-первых, имеет меньшую помехозащищенность, чем срабатывание по отрицательному перепаду, во-вторых, отрезает путь к нормальному разделению линий запросов (см. ниже), для которого полностью пригоден способ подачи сигнала по низкому уровню. Поскольку традиционный контроллер позволяет задавать чувствительность — уровень (Level) или перепад (Edge) — только для всех входов одновременно, в общем случае разделяемые прерывания на шине ISA вместе с корректной работой системных устройств использоваться не могут.
На современных системных платах функции контроллеров прерываний возлагаются на чипсет, который может иметь и более гибкие возможности управления, чем пара контроллеров 8259A. В операционном режиме всегда сохраняется программная совместимость с 8259A. Процедура инициализации контроллеров может и отличаться от традиционной, но ею занимается тест POST, который «знает» особенности системной платы. В симметричных мультипроцессорных системах аппаратные прерывания работают сложнее, поскольку их могут обслуживать различные процессоры. Для реализаций системы прерываний процессоры Pentium и выше имеют встроенный контроллер прерываний APIC (Advanced Programmable Interruption Controller). Внутренние контроллеры процессоров связаны между собой по шине APIC, к которой подключена и «ответная часть» чипсета, преобразующая запросы аппаратных прерываний в сигналы протокола APIC. В операционном режиме такая связка также совместима с 8259A.
INTR А
. Если все четыре карты PCI используют по одной линии запроса, то, как это видно на рис. 12.1, каждая линия занимается монопольно. Однако если сложная карта нуждается в большем числе линий запроса, то ей придется разделять линии с соседними картами. На современных системных платах часто устанавливают более четырех слотов PCI, при этом, естественно, «угроза» совместного использования линий запросов «нависает» и над картами с одной линией запроса. Порт AGP в плане прерываний следует рассматривать наравне со слотами PCI.
Проявления конфликтов и ошибок назначения прерываний могут быть разнообразными. Сетевая карта при ошибке в прерываниях не сможет принимать кадры из сети (при этом она может их успешно посылать). У устройств хранения доступ к данным будет поразительно медленным (иногда можно минутами ожидать, например, появления информации о файлах и каталогах) или вообще невозможным. Звуковые карты будут молчать или «заикаться», на видеопроигрывателях изображение будет дергаться и так далее. Конфликты могут приводить и к внезапным перезагрузкам компьютера, например по приходу кадра из сети или сигналу от модема.
DRQx
и подтверждение обмена — DACKx#
. В PC/AT доступны 7 каналов DMA — четыре 8-битных (номера 0–3) и три 16-битных (5–7), — подключенные к первичному и вторичному контроллерам соответственно. Канал 4 используется для каскадирования (соединения контроллеров). В PC/XT были только три 8-битных канала, канал 0 использовался для регенерации памяти. Контроллеры DMA программно совместимы с системами i8237, применяемыми в первых моделях PC/XT и AT. Стандартные каналы и адреса регистров приведены в табл. 12.3.
Номер канала DMA# | 0¹ | 1 | 2 | 3 | 4² | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|---|
Стандартное назначение | XT | MRFR | - | FDD | HDD | Отсутствуют | |||
AT | - | - | FDD | - | Каскад | - | - | - | |
Разрядность, байт | 1 | 2 с четного адреса | |||||||
Макс, размер блока | 64 Кбайта | 128 Кбайт, четный | |||||||
Граница блока | Кратна 1000h | Кратна 2000h | |||||||
Регистр страниц | 8 бит A16-A23 | 7 бит A17-A23 | |||||||
Адреса регистров: | |||||||||
— страниц | 087 | 083 | 081 | 082 | 08F | 08В | 089 | 087 | |
— адреса | 000 | 002 | 004 | 006 | 0C0 | 0C4 | 0C8 | 0CE | |
— счетчика | 001 | 003 | 005 | 007 | 0C2 | 0C6 | 0СА | 0СЕ |
8237#1 | 8237#2 | R/W, Назначение регистров |
---|---|---|
000, 002, 004, 006 | 0C0, 0C4, 0C8, 0CC | W — регистры начального адреса для каналов 0–3 (8237#1) и 4–7 (8237#2). R — регистры текущего адреса тех же каналов |
001, 003, 005, 007 | 0С2, 0C6, 0CA, 0СЕ | W — начальное значение счетчика передач для каналов 0–3 (8237#1) и 4–7 (8237#2). R — текущее значение счетчика передач тех же каналов |
008 | 0D0 | W, Command Register — конфигуратор контроллера. Бит 7: 1 — активный уровень (DACK# — высокий, 0 — низкий); бит 6: 1 — активный уровень (DRQ — низкий, 0 — высокий); бит 5: 1 — режим расширенной записи (должен быть 0); бит 4: 0 — фиксированный приоритет, 1 — циклический; бит 3: 1 — укороченный цикл обмена (должен быть 0); бит 2: 1 — запрет работы контроллера; бит 1: 1 — фиксация адреса 0 канала (должен быть 0); бит 0: 1 — передача память-память (в PC не используется, должен быть 0) |
008 | 0D0 | R, Status Register — состояние каналов. Биты 4–7: запросы каналов 0–3; биты 0–3: завершение цикла каналов 0-3 |
009 | 0D2 | W, Request Register — регистр программных запросов. Биты 7–3 не используются; бит 2: 1 — установка, 0 — сброс бита запроса; биты 1–0: выбор канала (00 — 0; 01 — 1; 10 — 2; 11 — 3) |
00А | 0D4 | W, Single Mask Bit Register — управление масками. Биты 7–3 не используются; бит 2:1 — установка, 0 — сброс бита маски; биты 1–0: выбор канала (00 — 0; 01 — 1; 10 — 2; 11 — 3) |
00B | 0D6 | W, Mode Register — режимы работы каналов. Биты 7–6: режим передачи (00 — по запросу, 01 — одиночный, 10 — блочный, 11 — каскадирование); бит 5: 0 — инкремент, 1 — декремент адреса; бит 4: 1 — разрешение автоматической реинициализации |
00B | 0D6 | Биты 3–2; тип передачи (00 — холостой, проверка канала, 01 — запись в память, 10 — чтение памяти, 11 — недопустимо); биты 1–0: выбор канала (00 — 0; 01 — 1; 10 — 2; 11 — 3) |
00C | 0D8 | W, Clear Byte Pointer Flip/Flop — сброс триггера младшего/старшего байта |
00D | 0DA | W, Master Clear — общий сброс 8237 (вывод любого байта в регистр вызывает сброс) |
00E | 0DC | W, Clear Mask Register — общий сброс масок всех каналов (вывод любого байта в регистр вызывает сброс) |
00F | 0DE | W, All Mask Register Bits — регистр масок всех каналов. Биты 0–3: маски каналов 0–3 (0 — канал разрешен, 1 — замаскирован); биты 4–7 не используются |
TC
, общий для всех каналов. Этот сигнал устройство может использовать для выработки сигнала прерывания, а программа может определить, какой канал «отстрелялся», прочитав регистр состояния каналов в контроллере DMA. В зависимости от выбранного режима по окончании счета контроллер либо остановит работу данного канала, либо выполнит автоматическую реинициализацию (автозагрузку) — восстановит прежде записанные значения регистра адреса и счетчика циклов и будет снова готов к пересылке такого же блока данных.
Разрядность передаваемых данных по каналу DMA должна соответствовать типу канала — 16-битный канал всегда пересылает данные словами, и расщепление их на одиночные байты невозможно. Каждый канал может работать в одном из трех логических режимов. ♦ Режим одиночной передачи (single transfer mode) — получив подтверждениеВНИМАНИЕ
При достижении регистром-счетчиком адреса значения FFFFh следующее его значение будет 0000h, а внешний регистр адреса страницы, естественно, останется неизменным. Таким образом, если блок начинается не с границы 64 Кбайт страницы памяти, возможно его «сворачивание» в кольцо. Но если для процессоров 80x86 в реальном режиме сегменты, также «сворачиваемые» в кольца, могут начинаться с адреса любого 16-байтного параграфа (границы кратны 10h), то при прямом доступе эти границы кратны 10000h. Этот эффект обязательно необходимо учитывать при программировании прямого доступа — блок, пересекающий данную границу, должен пересылаться за два сеанса циклов DMA, между которыми канал (включая и регистр страниц) должен быть реинициализирован. Эффект «сворачивания» сегментов в 16-битных каналах аналогичен, только для каналов. 5–7 эти «кольца» имеют размер 64 Кбайт слов и границы, кратные 20000h.
DACKx#
, устройство сразу снимает сигнал запроса DRQx
, а контроллер DMA организует один цикл передачи. Счетчик адреса в контроллере модифицируется, счетчик циклов декрементируется.
♦ Режим блочной передачи (block transfer mode) — получив подтверждение DACKx#
, устройство сразу снимает сигнал запроса DRQx
, а контроллер DMA организует последовательность циклов передачи до обнуления счетчика циклов. Если разрешена автозагрузка канала, то для пересылки следующего блока требуется повторная подача DRQx
. На время передачи всего блока контроллер монопольно захватывает шину, при этом не выполняется регенерация памяти.
♦ Режим передачи по запросу (demand transfer mode) — получив подтверждение DACKx#
, устройство не снимает сигнал запроса DRQx
до тех пор, пока у него есть потребность в передаче. При наличии этого сигнала контроллер DMA организует последовательность циклов передачи вплоть до обнуления счетчика циклов. Если сигнал запроса снят до обнуления счетчика, контроллер DMA отдает управление шине, а при последующем появлении этого запроса продолжит обмен с того места, на котором остановился.
Стандартный контроллер DMA на шине ISA с частотой 8 МГц работает на половинной частоте и требует для одиночной передачи не менее пяти своих тактов. Длительность одиночного цикла составляет 1,125 мкс. В блочных передачах пропускная способность DMA достигает 1 Мбайт/с для 8-битных каналов и 2 Мбайт/с для 16-битных (время цикла составляет 1 мкс). На современных компьютерах контроллер DMA реализуется чипсетом системной платы; при сохранении программной совместимости с 8237А он может работать на шине гораздо быстрее. Количество тактов шины на один цикл может программироваться опциями BIOS Setup.ВНИМАНИЕ
Используя DMA в режимах, отличных от одиночного, следует соблюдать осторожность, чтобы длительность непрерывной передачи не превышала 15 мкс.
Addr
= Seg
×16 + Offset
, где Seg
— содержимое сегментного регистра (CS
, DS
, SS
или ES
), a Offset
— исполнительный адрес, формируемый из одного или нескольких слагаемых в соответствии с выбранным режимом адресации. Эта сегментная модель адресации позволяет программам оперировать с непрерывными блоками памяти (сегментами) размером не более 64 Кбайт. Для манипуляций с памятью большего размера требовалось переключение сегментов с помощью специальных инструкций процессора, что усложняло программирование. Заметим, что при Seg
= FFFFh и Offset
= FFFFh данная формула дает адрес 10FFEFh, но ввиду 20-битного ограничения на шину адреса эта комбинация в физической памяти указывает на 0FFEFh. Таким образом, адресное пространство как бы сворачивается в кольцо с небольшим «нахлестом».
В процессоре 80286 шина физического адреса была расширена до 24 бит, и введен новый режим работы — защищенный (Protected Mode), в котором программа может обращаться к 16-мегабайтному пространству физической памяти через логическое пространство виртуальной памяти. Здесь виртуальная память строилась на основе той же сегментной модели памяти с 16-разрядными регистрами. Физический адрес формировался суммированием 16-разрядного исполнительного адреса (смещения внутри сегмента) с 24-разрядным базовым адресом сегмента.
Кроме защищенного режима, в процессоре 80286 имеется и реальный режим, в котором процессор ведет себя почти так же, как и 8086 (но более быстрый). Здесь физический адрес вычисляется так же, как и в 8086/88, но из-за ошибки разработчиков та самая единица в бите A20, которая отбрасывалась в процессорах 8086/88, теперь попадает на шину адреса, и в результате максимально доступный физический адрес в реальном режиме достиг 10FFEFh. Для обеспечения полной совместимости с процессором 8086/88 в схему PC ввели вентиль линии A20 шины адреса — GateA20, который либо пропускает сигнал от процессора, либо принудительно обнуляет линию A20 системной шины адреса. Этот вентиль должен быть открыт при работе в защищенном режиме, а также когда в реальном режиме нужны дополнительные (64 К-16) байт памяти. Вентиль управляется через контроллер клавиатуры (см. п. 8.1.2) или иным специфическим способом.
В 32-разрядных процессорах, начиная с 80386, сохранена та же идея обращения к памяти с участием сегментных регистров (16-разрядных), но регистры процессора, участвующие в формировании адреса, позволяют адресовать уже 2³² = 4 Гбайт памяти в каждом сегменте. Базовый адрес сегмента берется из специальных структур данных — дескрипторов сегментов. Кроме базового адреса в дескрипторе описывается его лимит (длина), назначение (код или данные), возможность записи и чтения, а также уровень привилегий программы, позволяющий обращаться к данному сегменту. Дескрипторы предварительно программно формируются в памяти, где их наборы хранятся в виде таблиц дескрипторов. Процессор имеет средства защиты памяти, контролирующие использование сегментов. Программа может обращаться лишь к тем сегментам памяти, описание которых имеется в доступных дескрипторах. Виртуальное адресное пространство, доступное программе, имеет объем до (16 К-2) сегментов (число возможных дескрипторов), каждый из которых может иметь размер до 4 Гбайт. Дескриптор выбирается с помощью селектора, загружаемого в сегментный регистр (CS
, DS
, SS
, ES
, FS
или GS
). Однако это виртуальное адресное пространство отображается блоком сегментации в логическое адресное пространство с опять-таки 32-разрядным линейным адресом, то есть объемом 4 Гбайт. По замыслу разработчиков процессора, это отображение с подкачкой требуемых сегментов с диска и выгрузкой неиспользуемых должно выполняться диспетчером виртуальной памяти операционной системы. Практически такая виртуализация применялась на процессорах 80286 (с 16-разрядными регистрами), поскольку иных механизмов не существовало.
Для виртуализации памяти (и защиты) в 32-разрядных процессорах применяется иной механизм, основанный на блоке страничной переадресации — принципиальной новинке 32-разрядных процессоров х86. В его задачу входит отображение 32-разрядного линейного адреса (продукта блока сегментации) на 32- или 36-разрядный физический адрес, формируемый на системной шине процессора при его обращениях к памяти. В отличие от блока сегментации, оперирующего блоками разного размера (сегментами), блок страничной переадресации оперирует страницами одинакового размера. Переадресация выполняется на основе таблиц страниц, где для каждой страницы логической памяти имеется свой описатель. В этом описателе имеется признак присутствия страницы в физической памяти, и для присутствующих страниц указывается базовый адрес физического отображения. Кроме того, имеются биты, управляющие доступом к странице по чтению и записи с различных уровней привилегий, возможностью ее кэширования, и некоторые служебные биты. При обращении программы к отсутствующей странице процессор вырабатывает исключение, обработчик которого занимается подкачкой нужной страницы из внешней памяти (с диска) в ОЗУ. Этот обработчик и реализует виртуальную память с подкачкой страниц по запросу (Demand-Paged Virtual Memory), которая в настоящее время обычно и подразумевается под виртуальной памятью. При недостатке свободного места в физической памяти обработчик выполняет и замещение страниц, по его мнению, наименее нужных, выгружая их на диск. Создав несколько наборов описателей страниц, можно получить несколько виртуальных адресных пространств, каждое из которых имеет размер до 4 Гбайт, причем страницы разных пространств могут быть полностью изолированы друг от друга, а могут и частично пересекаться. В многозадачной ОС каждая задача (виртуальная машина) имеет собственное (как ей представляется) адресное пространство.
Первоначально блок страничной переадресации работал со страницами размером 4 Кбайт. В дополнение к этому базовому механизму в процессор Pentium ввели возможность работы и со страницами размером 4 Мбайт (режим PSE). В ряде процессоров P6 разрядность физического адреса увеличена до 36 бит, и все процессоры P6 имеют возможность включение режима переадресации РАЕ, позволяющего отображать страницы размером 4 Кбайт и 2 Мбайт с расширением физического адреса. С процессорами Pentium III появился режим преобразования PSE-36, в котором блок оперирует 4-Мбайтными страницами в 36-битном физическом пространстве и сохраняется возможность работы со стандартными 4-Кбайтными страницами базового режима. Это позволяет довольно эффективно управляться с современными объемами физической памяти компьютера.
В стандартном реальном режиме 32-разрядные процессоры работают с памятью так же, как и 80286, с возможностью адресации в диапазоне 0-10FFEFh, причем вентиль Gate A20 ввели уже в сам процессор. Физический адрес вычисляется с участием сегментных регистров, размер непрерывного сегмента — 64 Кбайт. По умолчанию в реальном режиме адреса формируются с использованием только младших 16 бит 32-разрядных регистров, правда, для каждой инструкции можно с помощью префиксов изменить разрядность адресных компонентов на 32 бита. Однако и при этом невозможно пересечь границу 64-Кбайтного сегмента — сработает исключение защиты. В стандартном реальном режиме блок страничной переадресации не работает, и физический адрес совпадает с линейным. С помощью временного переключения в защищенный режим можно настроить таблицы страниц, разрешить преобразование и далее в реальном режиме задействовать страничное преобразование. Этот трюк используется менеджерами памяти типа EMM386 для работы со свободными блоками UMA.
Есть и еще один режим, неофициальный, но тоже работающий на всех 32-разрядных процессорах х86, — «нереальный» (unreal), он же «большой реальный» (big real). Он позволяет процессору в реальном режиме обращаться к данным, расположенным в любом месте 4-Гбайтного пространства линейных (и физических) адресов. Этот режим базируется на логике блока сегментации, которая при вычислении линейного адреса во время обращений к памяти пользуется скрытыми программно-недоступными регистрами дескрипторов сегментов. Из этих регистров берется базовый адрес, из них же берется и лимит, который используется схемой защиты. В этих регистрах кэшируются дескрипторы сегментов, загружаемые из памяти во время исполнения инструкций, переопределяющих значения сегментных регистров (CS
, DS
, SS
, ES
, FS
и GS
) в защищенном режиме. По аппаратному сбросу в эти скрытые регистры заносятся «неинтересные» параметры стандартного реального режима, с лимитом 64 Кбайт. В реальном режиме при переопределении сегментных регистров значение базового адреса берется как 16-кратное значение, загружаемое в соответствующий сегментный регистр, а лимит устанавливается в 64 Кбайт. Тем не менее, если в защищенном режиме в сегментный регистр загрузить селектор дескриптора, в котором описан сегмент размером 4 Гбайт с нулевым базовым адресом и возможностью полного доступа на любом уровне привилегий, переключиться в реальный режим и не трогать этот сегментный регистр, то далее процессор будет иметь доступ ко всему этому сегменту в данной модификации реального режима. Однако такая «благодать» распространяется только лишь на доступ к данным через сегментные регистры FS
и GS
, которые используются в инструкциях обращений к памяти, снабженных префиксами замены сегмента. Эти сегментные регистры появились только с 32-разрядными процессорами, и никакие традиционные сервисы BIOS (и DOS) их не затрагивают. Остальные сегментные регистры настолько часто используются, что «время жизни» описания большого сегмента в их кэширующих регистрах будет слишком коротким. Программный код, увы, исполняется только из сегмента, которым командует CS, поэтому для него остается лишь первый мегабайт с 64-Кбайтными сегментами. Так что большие программные модули приходится подгружать в эту область по мере надобности, но это можно выполнять довольно быстро пересылками данных из любого места «большого сегмента». Большой реальный режим широко используется менеджерами памяти, а также игровыми DOS-программами, всецело захватывающими ресурсы компьютера.
Итак, самые широкие возможности адресации имеются в защищенном 32-разрядном режиме, наиболее естественном для современных процессоров. В этом режиме может использоваться как плоская, так и сегментная модели памяти. Под плоской (flat) понимается модель, в которой все сегментные регистры указывают на один и тот же сегмент памяти (как правило, начинающийся с нулевого адреса), и его лимит может достигать 4 Гбайт, что позволяет адресовать этот немалый (даже по нынешним меркам) объем памяти без манипуляций сегментными регистрами. Однако при этом теряются все возможности виртуализации памяти на основе сегментов, а также отсутствует сегментная защита. В сегментной модели памяти сегментные регистры кода, стека и данных настраиваются на разные, возможно и не пересекающиеся сегменты. Здесь имеются все возможности сегментной защиты и сегментной виртуализации памяти. Поскольку современным приложениям пока достаточно 4 Гбайт памяти (надолго ли?), сегментную модель ради упрощения диспетчера памяти стараются не использовать. Защита памяти имеется и на уровне страниц, правда, не такая развитая и надежная, как сегментная.
IN
(ввод из порта в регистр процессора), OUT
(вывод в порт из регистра процессора), INS
(ввод из порта в элемент строки памяти) и OUTS
(вывод элемента из строки памяти в порт). Последние две инструкции, появившиеся с процессором 80286, могут использоваться с префиксом повтора REP
, что обеспечивает быструю пересылку блоков данных между портом и памятью. Обмен данными с портами, при котором применяют строковые инструкции ввода-вывода, получил название PIO (Programmed Input/Output — программированный ввод-вывод). Скорость такого обмена превышает скорость стандартного канала прямого доступа (DMA), правда, DMA в отличие от PIO почти не занимает процессорного времени.
Разрядность слова, передаваемого за одну инструкцию ввода-вывода, может составлять 8, 16 или 32 бита. В зависимости от «выровненности» адреса по границе слова и разрядности данных используемой шины это слово может передаваться за один или несколько циклов шины с указанием соответствующего нарастающего адреса в каждом цикле обращения к памяти. Инструкции ввода-вывода порождают шинные циклы обмена, в которых вырабатываются сигналы чтения порта/записи в порт. На шине ISA это сигналы IORD#
и IOWR#
соответственно; они и отличают пространство ввода-вывода от пространства памяти, где соответствующие операции чтения и записи вырабатывают сигналы MEMRD#
и MEMWR#
. На шине PCI разделение памяти и пространства ввода-вывода происходит иначе — здесь тип операции кодируется четырехбайтной командой, в зависимости от типа инструкции, выполняемой процессором.
Во избежание недоразумений и для экономии шинных циклов рекомендуется выравнивать адреса 16-битных портов по границе слова, а 32-битных — по границе двойного слова. Обращения по выровненным адресам выполняется за один цикл системной шины. Обращение по невыровненным адресам выполняется за несколько циклов, причем однозначная последовательность адресов обращений (которая зависит от модели процессора) не гарантируется. Так, например, одна инструкция вывода слова по нечетному адресу приведет к генерации двух смежных шинных циклов записи. При программировании обращений следует учитывать специфику устройств ввода-вывода. Если, например, устройство допускает только 16-разрядные обращения, то старший байт его регистров будет доступен лишь при вводе-выводе слова по четному адресу.
Некоторую сумятицу в стройную систему адресации вводят регистры ATА. Здесь регистр 1F0 (1 канал) является 16-битным регистром данных, но в то же время есть и совершенно независимый от него 8-битный регистр 1F1. В Serial ATA эта тема развита — здесь имеются еще четыре 16-битных регистра с адресами (относительно базового адреса блока командных регистров) 2, 3, 4 и 5, которые раньше были 8-битными.
В реальном режиме процессора программе доступно все пространство адресов ввода- вывода. В защищенном режиме 32-разрядных процессоров (частным случаем которого является и виртуальный режим V86) имеется возможность программного ограничения доступного пространства ввода-вывода, определяя его максимальный размер (начиная с нулевого адреса и в пределах 64 К), а внутри разрешенной области доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (IO Permission Bitmap) задается операционной системой в дескрипторе сегмента состояния задачи (TSS). При обращении по неразрешенному адресу вырабатывается исключение процессора, а поведение его обработчика определяется операционной системой. Возможно снятие задачи-нарушителя (знаменитое сообщение «приложение… выполнило недопустимую операцию и будет закрыто»). Возможен и другой вариант, когда по обращению к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию реальной операции ввода-вывода. Таким образом виртуальная машина по операциям ввода-вывода может общаться с виртуальными устройствами. Заметим, что ОС Windows 9x не особо заботится о виртуализации и защите ввода-вывода; здесь, например, из DOS-окна можно обращаться к любым портам, даже к портам устройств, занятых операционной системой.
SMI
для входа в режим системного управления (SMM). Программные прерывания по сути прерываниями и не являются — это лишь короткая форма дальнего вызова ограниченного количества процедур, выполняемая инструкцией Int N
(N=0-255). Программные прерывания, в частности, используются для вызовов сервисов BIOS и DOS. Исключения генерируются процессором и сопроцессором, когда при исполнении инструкций возникают особые условия (например, деление на ноль или срабатывание защиты). Исключения занимают векторы прерываний 0-31, которые частично пересекаются с векторами аппаратных прерываний ведущего контроллера и NMI, а также с векторами сервисов BIOS. В процессорах 8086/88 исключения назывались внутренними прерываниями, их было совсем мало. По мере «взросления» процессоров добавлялись новые исключения; исключениями особо богаты современные процессоры при работе в защищенном режиме. На исключениях строится защита и виртуальная память в многозадачных ОС защищенного режима.
В реальном режиме прерывания работают довольно просто, и их обработчики могут находиться в любом месте физически адресуемой памяти (ОЗУ или ПЗУ). В таблице прерываний, начинающейся с нулевого адреса, каждый вектор прерываний представляется дальним указателем на процедуру обработки (16-байтные смещение и сегмент). Внедрение собственных обработчиков прерываний представляет собой несложную задачу, если прерывание используется монопольно одним устройством и соответствующим ему единственным модулем ПО. В реальном режиме любая программа может управлять флагом разрешения аппаратных прерываний; некорректное управление флагом может приводить к различным неприятностям — от сбоя системного времени до «зависания» компьютера.
В защищенном режиме прерывания работают гораздо сложнее. Таблица прерываний здесь содержит 8-байтные дескрипторы прерываний. Их обработчики должны быть подключены к ядру ОС, постоянно присутствующему в физической памяти. Иначе возможна ситуация, когда, например, аппаратное прерывание вызовет обработчик, выгруженный в данный момент на диск менеджером виртуальной памяти. Обработка такого прерывания будет чрезвычайно долгой (потребуется подкачка страницы). Позволять любой программе управлять флагом разрешения прерываний для многозадачных ОС нельзя из соображений общей устойчивости системы. Сам процесс обработки прерываний (и исключений) в защищенном режиме существенно отличается от прерываний реального режима, и в современных процессорах и ОС имеются средства виртуализации прерываний, о чем подробнее можно прочитать в [6, 7]. Заметим, что в ОС Windows 9x каждое окно MS-DOS представляет собой отдельную виртуальную машину с собственной таблицей прерываний «реального» вида, и работа с прерываниями в ней практически не отличается от работы в «чистой» MS-DOS. Для установки обработчиков прерываний, требуемых программам защищенного режима, используются вызовы специальных сервисов ОС, и обработчик оформляется особым образом в соответствии с соглашениями этой ОС (не так, как для MS-DOS).
IRQ0
) каждые 54,936 мс (частота 18,206 Гц), вызывающих инкремент системного таймера (счетчика в ячейке 40:006Е BIOS Data Area);
♦ канал 1 — генерация запросов на регенерацию памяти;
♦ канал 2 — генерация звуковых сигналов или измерение времени.
Внутренние счетчики микросхемы имеют разрядность 16 бит, но общение с ними возможно только 8-битными операциями. При этом можно задавать значение только младшего байта счетчика (LSB), только старшего (MSB) или обоих (LSB/MSB), причем сначала передается младший, а потом старший байт. Программирование микросхемы осуществляется записью байт в управляющий регистр по отдельности для каждого канала. Назначение регистров счетчиков- таймеров приведено в табл. 12.5. Входная частота для всех каналов 1,19318 МГц. Штатно все каналы работают в режиме генерации импульсов. Счет для каналов 0 и 1 разрешен постоянно. В канале 2 используется управляющий вход GATE, разрешающий счет, который управляется битом 0 (T2G
, R/W) системного порта AT (061h). Выходной сигнал канала 2 может быть программно считан (Т20
, бит 5 того же порта). При использовании канала 2 для измерения времени необходимо отключить формирование звука (обнулив бит SPK
, R/W, бит 1 порта 061h).
Порт, R/W | Назначение |
---|---|
040 RW | Счетчик 0 — системные часы. Режим 011, LSB/MSB, Binary, константа счетчика равна 0 (соответствует коэффициенту деления 65 536) |
041 RW | Счетчик 1 — регенерация памяти. Режим 010, LSB, Binary, константа счетчика равна 12h (18) |
042 RW | Счетчик 2 — генератор звука, измерение времени. Вход GATE от бита 0 порта В 8255 (061). Режим 011, LSB/MSB, Binary, значение счетчика определяет высоту тона |
043 W | Управляющий регистр. Биты 7, 6 — выбор счетчика 0, 1, 2. Биты 5, 4 — режим обращения: 00 — защелка текущего значения; 01 — LSB — только младший байт; 10 — MSB — только старший байт; 11 — LSB/MSB — сначала младший, затем старший байты. Биты 3–1 — режим счетчика: 000 — прерывание по счетчику; 001 — ждущий мультивибратор (одновибратор, у 8254 несколько отличается от 8253); x10 — генератор коротких импульсов заданной частоты; x11 — генератор меандра; 100 — счетчик событий с разрешением; 101 — счетчик событий с перезапуском. Бит 0 — 0=Bin (двоичный счет), 1=BCD — (двоично-десятичный счет) |
Индекс | Назначение |
---|---|
00h-09h, 32h (37 в PS/2) | Ячейки РТС в BCD-формате: 00 — секунды; 01 — секунды будильника; 02 — минуты; 03 — минуты будильника; 04 — часы; 05 — часы будильника; 06 — день недели; 07 — день месяца; 08 — месяц; 09 — год (2 младшие цифры); 32h — век-1 (2 старшие цифры года); 37h — век-1 (2 старшие цифры года) в PS/2 |
0Ah | RTC Status Register А (регистр статуса А): бит 7 — обновление времени (0 — готов к чтению); биты [6:4] — делитель частоты (для кварца на 32,768 кГц — 010); биты [3:0] — 0110 — выходная частота меандра 1024 Гц |
0Bh | RTC Status Register В (регистр статуса В): бит 7 — остановка часов (0 — нормальный ход); бит 6 — разрешение периодических прерываний (0 — запрещено); бит 5 — разрешение прерывания от будильника (0 — запрещено); бит 4 — разрешение прерывания по окончании смены времени (0 — запрещено); бит 3 (см. также регистр 0Ah) — разрешение выходного меандра (0 — запрещено); бит 2 — формат BCD/BIN (0 — BCD); бит 1 — 12/24-часовой режим (1 — 24-часовой); бит 0 — зимнее/летнее время (0 — переключение запрещено) |
0Ch | RTC Status Register С (регистр статуса С): чтение флагов идентификаторов прерывания: бит 7 — IRQF (общий запрос прерывания); бит 6 — PF (периодические прерывания); бит 5 — AF (прерывание от будильника); бит 4 — UF (прерывание по окончании смены времени); биты [3:0] — зарезервированы |
0Dh | RTC Status Register D (регистр статуса D): бит 7 — питание (1 — норма, 0 — разряд батареи); биты [6:0] — зарезервированы |
Int 1Ah
позволяют считывать и модифицировать значения системного таймера (ячейки 40:006Eh в BIOS Data Area), а также даты, времени и будильника CMOS RTC.
Функции BIOS Int 15h
позволяют с помощью CMOS RTC вводить задержку или запускать таймер установки флага (через заданное время установить бит 7 указанной ячейки памяти). Время задается в микросекундах, но минимальная выдержка зависит от производительности ПК (достижимы единицы миллисекунд), максимальная выдержка — около 70 часов.
Начиная с процессоров Pentium, появилась возможность измерения времени с точностью до такта ядра процессора. Для этого процессоры имеют внутренний 64-битный счетчик TSC (Time Stamp Counter), обнуляющийся по аппаратному сбросу (сигналом RESET#
). Разрядность позволяет считать без переполнения в течение нескольких столетий. Для доступа к счетчику имеется специальная инструкция RDTSC
, правда, установкой флага TSD
в управляющем регистре CR4
(процессора) ОС может сделать ее привилегированной (доступной только на нулевом уровне привилегий). В этом случае приложение, исполняемое на уровне 3, может аварийно завершаться по отказу исполнения инструкции. ОС может и позволить обращение к этому регистру, но «подсовывая» программе угодное ей значение времени. Заметим, что из-за внутреннего умножения частоты в процессоре результат чтения счетчика может отставать от реального времени на число, достигающее коэффициента умножения частоты. Правда, такая точность никому и не нужна (она потеряется в измеряющих программах).
config.sys
, autoexec.bat
и т. п. средства).
Для ряда специальных применений ПК приходится нарушать эти традиции. Для сравнительно простых систем можно отказаться от использования операционных систем. Программу функционирования компьютера можно «зашить» в ПЗУ, оформив в виде модуля расширения BIOS, и эта программа получит управление от POST. Можно и не связываться с ПЗУ, а загружать программу с устройства хранения простым загрузчиком, первая ступень которого должна совпадать со стандартным начальным загрузчиком. Однако не стоит отказываться от операционной системы без веских причин, поскольку она обеспечивает не только удобное операционное окружение, но и средства разработки и отладки программ. Операционную систему и необходимые программы можно загружать не только с привычных дисков (гибких, жестких, оптических), но и с компактных твердотельных носителей (см. п. 9.3). Эти носители могут подключаться к обычным интерфейсам устройств хранения.
Интересный вариант «твердотельного диска» — DiskOnChip — для микрокомпьютеров и микроконтроллеров, не имеющих стандартных интерфейсов устройств хранения, предлагает фирма M-Systems. Это микросхема, имеющая интерфейс 8/16-битной статической памяти, легко подключаемый к шине ISA (или локальной шине). Модель Millenium Plus объемом 32 Мбайт содержит массив флэш-памяти архитектуры NAND, модуль статической памяти SRAM (1 Кбайт), интерфейсные схемы, логику защиты записи и чтения и схемы обнаружения и исправления ошибок. Микросхема отображается на 8-Кбайтную страницу пространства памяти компьютера в области C8000-EFFFFh. По сигналу аппаратного сброса начальный блок из флэш-памяти выгружается в SRAM; если обнаруживается ошибка, то берется следующий (резервный) блок. Этот блок содержит процедуру инициализации «диска», которая обнаруживается тестом POST как модуль расширения BIOS. Процедура загружает из флэш-массива в системное ОЗУ драйвер своего «электронного диска» (блочного устройства), которое становится первым или последним логическим жестким диском (по выбору при конфигурировании). Далее к этому «диску» можно обращаться обычным способом (через Int 13h
), c него же может и загружаться ОС. Интерфейс допускает каскадирование — объединение в единый диск до 4 микросхем, увеличивая его объем до 128 Мбайт, при этом все микросхемы отображаются через общее окно памяти (используют общий сигнал выборки). Встроенное ПО обеспечивает полную эмуляцию диска с прозрачным исправлением ошибок и переназначением дефектных секторов. Микросхема поддерживает длительную скорость записи 750 Кбайт/с, считывания — 2,4 Мбайт/с. Пиковая скорость считывания/записи достигает 20 Мбайт/с. В устройстве имеется уникальный идентификационный номер, область для однократного программирования (OTP), возможность защиты от записи отдельных зон и возможность ограничения доступа по паролю (нечитаемому).
Int xx
). Большинство сервисов может быть вызвано и через фактически стандартизованные точки входа (адреса в области ROM BIOS) дальними вызовами процедур (CALL Far
) с предварительным помещением в стек регистра флагов (сервисы построены как обработчики прерываний). Все традиционные сервисы BIOS работают в 16-разрядном режиме процессора, и ими можно пользоваться в реальном режиме, V86 и малопривлекательном 16-разрядном защищенном режиме.
Для процессоров 386+ оптимальным по эффективности является 32-разрядный защищенный режим. Для того чтобы из этого режима можно было пользоваться сервисами BIOS (правда, не всеми) без промежуточных переключений, по инициативе фирмы Phoenix ввели 32-разрядные вызовы BIOS32. Адрес точки входа BIOS32 заранее не известен, но известен способ его нахождения: в диапазоне адресов памяти 0E0000-0FFFFFh на границе параграфов (младшие 4 бита адреса нулевые) ищется строка-сигнатура "_32_
" (число 325F5F33h) заголовка, за которой следует физический адрес точки входа. Сами сервисы вызываются дальними вызовами точки входа в сервис. Номер, параметры вызываемых функций и результаты передаются на регистрах процессора.
Прерывания, обслуживаемые системной BIOS, перечислены ниже. Кроме них несколько векторов используются как указатели на различные структуры данных.
Внутренние прерывания:
♦ Int 00h
— деление на 0;
♦ Int 01h
— пошаговый режим;
♦ Int 03h
— точка останова;
♦ Int 04h
— переполнение;
♦ Int 06h
— недопустимая команда 286+;
♦ Int 07h
— вызов отсутствующего NPU.
Аппаратные прерывания:
♦ Int 02h
— немаскируемое прерывание;
♦ Int 08h
— таймер 8253/8254;
♦ Int 09h
— клавиатура;
♦ Int 0Ah
— IRQ2/9
;
♦ Int 0Bh
— IRQ3
;
♦ Int 0Ch
— IRQ4
;
♦ Int 0Dh
— IRQ5
;
♦ Int 0Eh
— IRQ6
— контроллер гибких дисков;
♦ Int 0Fh
— IRQ7
;
♦ Int 70h
— CMOS-таймер;
♦ Int 71h
— IRQ9
(перенаправлено на Int 0Ah
);
♦ Int 72h
— IRQ10
;
♦ Int 73h
— IRQ11
;
♦ Int 74h
— IRQ12
(контроллер мыши PS/2);
♦ Int 75h
— IRQ13
— исключение сопроцессора;
♦ Int 76h
— IRQ14
— контроллер жестких дисков;
♦ Int 77h
— IRQ15
.
Функции ROM BIOS (16-битные сервисы): ♦ПРИМЕЧАНИЕ
ПрерыванияInt 70h
-77h
имеют место только в AT.
Int 05h
(F000:FF54h) — печать экрана;
♦ Int 10h
— видеосервис;
♦ Int 11h
— чтение списка оборудования (слово из BDA 0040:0010h), возвращает в АХ
:
• биты 15:14 — число обнаруженных LPT-портов: 00 — 0, …, 11 — 3;
• бит 13 — резерв;
• бит 12 — обнаружен игровой адаптер;
• биты 11:9 — число обнаруженных СОМ-портов: 000 — 0, …, 111 — 7;
• бит 8 — наличие контроллера DMA;
• биты 7:6 — число обнаруженных НГМД: 00 — 1, …, 11 — 4;
• биты 5:4 — активный видеорежим: 00 — резерв, 10 — 80-колоночный цветной, 01 — 40-колоночный цветной, 11 — монохромный;
• биты 3:2 — размер ОЗУ на системной плате (теперь обычно 00);
• бит 1 — присутствие математического сопроцессора;
• бит 0 — присутствие дисководов;
♦ Int 12h
— размер непрерывной памяти;
♦ Int 13h
— дисковый сервис (блочный ввод-вывод);
♦ Int 14h
— обслуживание СОМ-портов;
♦ Int 15h
— AT-функции (системный сервис, функции определяются значением АН
/АХ
):
• 00-03h — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стриммеры»!) на старых PC;
• 4fh — перехват клавиатуры;
• 53xxh — сервисы управления потреблением АРМ (Advanced Power Management);
• 8300h — запуск таймера, устанавливающего флаг в заданной ячейке;
• 8301h — сброс того же таймера;
• 84h — джойстик (см. п. 8.6);
• 86h — программируемая задержка;
• 87h — перемещение блока расширенной памяти;
• 88h — получение размера расширенной памяти;
• 89h — переключение в режим V86;
• C0h — получение системной конфигурации, при успешном выполнении (CF
=0, AH
=0) ES:BX
указывает на таблицу данных конфигурации;
• 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавливает заглушки);
♦ Int 16h
— клавиатурный ввод-вывод;
♦ Int 17h
— обслуживание LPT-портов;
♦ Int 18h
— процедура восстановления при неудаче начальной загрузки (прежде — ROM-Basic);
♦ Int 19h
— начальная загрузка (вызов процедуры Bootstrap);
♦ Int 1Ah
— системное время, дата, будильник и 16-битные вызовы сервисов PCI;
♦ Int 1Bh
— обработчик нажатия клавиш Ctrl+Break
;
♦ Int 1Ch
— User Timer Interrupt, процедура, вызываемая обработчиком Int 08h
каждые 55 мс; BIOS устанавливает простую заглушку (IRET
), но программы могут перехватывать это прерывание; на время отработки этой процедуры все аппаратные прерывания запрещены (кроме NMI).
♦ Int 33h
— поддержка мыши;
♦ Int 4Ah
— обработчик будильника пользователя, установленного функцией BIOS Int 1Ah
(6); прерывание вызывается асинхронно, так что при возврате из процедуры все регистры и флаги должны быть в том же состоянии, что и при входе; BIOS ставит заглушку (IRET
);
♦ Int 67h
— EMS-функции.
Указатели на таблицы:
♦ Int 1Dh
— видеопараметры;
♦ Int 1Eh
— параметры дискет;
♦ Int 1Fh
— знакогенератор СGA;
♦ Int 41h
— параметры HDD 0;
♦ Int 46h
— параметры HDD 1;
♦ Int 43h
— знакогенератор EGA.
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 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 мс), ВН
— код частоты (см. п. 9.2.1).
♦ АН
= 05h — запись слова из регистра СХ
в буфер (меняется указатель головы). Признак успешной записи — AL
=0, если в буфере нет места, то AL
=1.
♦ АН
= 10h и AH
= 11h — функции, аналогичные 00h и 01h, но предназначены специально для 101/102-клавишных клавиатур — в них не выполняется фильтрация символов расширенной клавиатуры. Для ряда клавиш, отсутствующих в клавиатуре АТ-84, эти функции дадут результаты, отличающиеся от вызовов 00h и 01h.
♦ AH
=12h — чтение расширенного состояния флагов (в АХ
— слово KbdShiftFlags101Rec
), в котором младший байт совпадает с тем, что дает функция 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
), то резидентная программа может ей «подбрасывать» слова в буфер, которые будут восприниматься как нажатие клавиш.
ASCII-коды буфера, соответствующие нажатию клавиш, приведены в [1, 7]. При русификации (или другой локализации) клавиатуры отслеживание переключения регистров (языков) ложится на обработчик аппаратного прерывания клавиатуры.
Int 10h
программисты пользуются далеко не всегда, поскольку работает он довольно медленно. Подробно рассматривать функции видеосервиса не будем (этому посвящены отдельные книги), отметим особо лишь функцию телетайпного вывода Int 10h
(0Eh). При вызове AH
=0Eh, в AL
— код выводимого символа, в BL
— цвет (только для графического режима). Символ выводится в текущую позицию курсора, и курсор сдвигается на следующую, переходя на новую строку после конца предыдущей и прокручивая экран при его заполнении. Специальные символы вызывают возврат на начало строки (CR
, код 0Dh), перевод строки (LF
, 0Ah) и короткий гудок (BEL
, 07h). Этой функцией часто пользуются для вывода сообщений программами, работающими на нижнем уровне (например, модули инициализации ПЗУ расширений BIOS, загрузчики и другие, не имеющие еще доступа к сервисам операционных систем). Программа вывода получается простейшей, работает на всех адаптерах и во всех режимах, но довольно медленно.
Int 13h
.
Традиционно дисковый сервис подразделяет физические диски на дискеты (diskette) и фиксированные диски (fixed disk). Набор функций (табл. 7.8) для этих классов устройств несколько различается как по составу, так и по реализации. Классы различаются по диапазонам номеров физических устройств: для дискет отводятся номера 0-7Fh (реально только 0–3), а для фиксированных дисков — 80h-FFh.
Контроллеры дисковых интерфейсов, имеющие в своем составе дополнительные модули BIOS, перехватывают вектор Int 13h
, беря на себя обслуживание своих устройств. Когда в IBM PC/XT появились жесткие диски со своим контроллером, модуль BIOS этого контроллера, инициализирующийся во время теста POST, вставал на место Int 13h
, а указатель на исходный обработчик дискового сервиса (драйвер НГМД из системной BIOS) сохранялся на месте Int 40h
. Хотя поддержка жестких дисков давно уже включена в системную BIOS, ради совместимости возможность использования прерывания Int 40h
для вызова драйвера гибких дисков сохраняется. Интерфейс этого вызова совпадает с Int 13h
, но номер устройства (в регистре DL
) не должен превышать 7Fh.
Кроме функций дискового сервиса (Int 13h
) c дисковыми устройствами связаны еще и векторы, обслуживающие аппаратные прерывания от контроллера НГМД — Int 0Eh
(линия IRQ 6
) и от контроллера жестких дисков — Int 76h
(линия IRQ 14
). При наличии двухканального порта ATA второй канал обычно задействует линию IRQ 15
(вектор 77h). В XT контроллер жестких дисков занимал линию IRQ 5
(вектор 0Dh). Дополнительные контроллеры дисков могут использовать и другие прерывания. Аппаратные прерывания вырабатываются контроллерами по завершении (нормальному и аварийному) внутренних операций. На эти прерывания BIOS не реагирует, а при инициализации их векторы направляются на программную заглушку (инструкцию IRET
).
Стандартные драйверы дисковых функций BIOS (включая и расширенный сервис) имеют однозадачное происхождение. Во время выполнения функции значительное процессорное время может затрачиваться на ожидание завершения операции устройством. Драйверы многозадачного режима построены иначе: у них есть вызывающая часть, инициализирующая начало операции, и обработчик аппаратного прерывания от контроллера, сообщающий операционной системе о выполнении операции и результате.
Int 13h
, при вызове принимаются следующие соглашения:
♦ номер функции задается в регистре АН
и не должен превышать 3Fh;
♦ логический номер диска задается в регистре DL
(бит 7 = 0 — признак обращения к НГМД);
♦ номер цилиндра (0-1023) задается в регистре СН
(младшие 8 бит) и CL[7:6]
(старшие 2 бита);
♦ номер головки (0-255) задается в регистре DH
;
♦ номер начального сектора (1-63) задается в регистре CL[5:0]
;
♦ количество секторов, участвующих в операции, 8 бит — в регистре AL
(0-255);
♦ указатель на начало буфера оперативной памяти для считываемых и записываемых данных (address of buffer) — в регистрах ЕS:BX
;
♦ результат выполнения операции определяется по флагу переноса: СF
= 0 — успешное выполнение операции, CF
= 1 — обнаружены ошибки (код состояния возвращается в регистре АН
, код завершения последней операции с дискетами хранится по адресу 40:41h, с жесткими дисками — 40:74h);
♦ таблица параметров диска для дискет (DPT) задана указателем в памяти по адресу 0:78h, для жестких дисков (HDPT) — 0:104h или 0:118h.
Список функций традиционного сервиса приведен в табл. 12.7, подробнее они описаны в [4, 9]. Устройства могут не поддерживать некоторые функции, о чем драйверы должны «честно сообщить» кодом возврата 01h.
Номер функции АН | Назначение параметров | Использование регистров указателей и таблиц | ||||
---|---|---|---|---|---|---|
DL | DH, CL, CH | AL | ES: BX | DPT/HDPT | ||
00h | Reset Disk System — сброс дисковой системы (всех контроллеров и устройств), позиционирование на нулевой цилиндр | - | - | - | - | - |
01h | Read Status of Last Operation — чтение состояния последней операции | + | - | - | - | - |
02h | Read Sectors into Memory — чтение секторов с диска в память | + | + | + | + | + |
03h | Write Sectors from Memory — запись секторов из памяти на диск | + | + | + | + | |
04h | Verify Sectors — верификация секторов (холостое чтение без записи в память и проверка CRC/ECC) | + | + | + | - | + |
05h | Format Desired Track — форматирование трека | + | + | + | + | + |
08h | Get Drive Parameters — получение параметров диска | +³ | +³ | +³ | - | +³ |
09h¹ | Initialize Drive Parameters — инициализация таблиц параметров диска | + | - | - | - | + |
0Ah¹ | Read Long — «длинное» чтение (сектор и поле ЕСС) | + | + | + | + | + |
0Bh¹ | Write Long — «длинная» запись (сектор и поле ЕСС) | + | + | + | + | + |
0Ch¹ | Seek — поиск цилиндра | + | + | - | - | - |
0Dh¹ | Alternative Disk Reset — альтернативный сброс (не затрагивая контроллера дискет) | + | - | - | - | - |
10h¹ | Test Drive Ready — проверка готовности | + | - | - | - | - |
11h¹ | Recalibrate — рекалибровка (позиционирование на нулевой цилиндр) | + | - | - | - | - |
14h¹ | Controller Internal Diagnostics — диагностика контроллера жестких дисков | - | - | - | - | - |
15h | Read DASD Туре — получение типа диска: АН=0 — нет диска; АН=1 — дискета, без датчика смены диска; АН=2 — дискета, с датчиком смены диска; АН=3 — жесткий диск; иные значения — код ошибки. CX: DX содержат число 512-байтных секторов на диске | + | - | - | - | - |
16h² | Diskette Change Line Status — проверка статуса смены дискеты: CF=0: АН=0 — смены носителя не было; CF=1: AH=1 — недопустимый номер диска; АН=6 — была смена диска или определение смены не поддерживается; AH=80h — дисковод не готов или не установлен; иные значения — код ошибки | + | - | - | - | - |
17h² | Set Diskette Type for Format — установка типа дискеты для форматирования (перед форматированием) | + | +³ | |||
18h² | Set Media Type for Format — установка типа носителя (для форматирования) | + | +³ | - | - | - |
20h² | Get Media Type — получение типа установленного носителя | + | - | - | - | - |
24h¹ | Set Multiple Mode — установка параметров режима многосекторного обращения (в AL — число секторов за операцию) | + | - | + | - | - |
25h¹ | Identify Drive ATA — идентификация накопителя (только для ATA-дисков) | + | - | - | + | - |
Int 13h
, имеет только 4-битный регистр номера головки (а в BIOS — 6 бит). Правда, этот же контроллер способен принимать 16-битный номер цилиндра (в BIOS — 10 бит). Понятно, что непосредственно без искажений через эти два фильтра (формат вызова и формат регистров контроллера) может пройти только вызов с самыми жесткими ограничениями по каждой координате. Тогда ограничение, полученное тем же перемножением диапазонов координат, получается около 528 миллионов байт:
(210 = 1024 цилиндра) × (24 = 16 головок) × (26 – 1 = 63 сектора) × 512 байт = 528 482 304 байт.
Для преодоления 528-мегабайтного барьера дисков ATA, не трогая программного интерфейса, в BIOS ввели расширение традиционного дискового сервиса. Интерфейс ATA в трехмерной геометрии позволяет реализовать довольно большой (но уже не запредельный) объем диска:
(216 = 65 536 цилиндров) × (24 = 16 головок) × (28 – 1 = 255 сектора) × 512 байт = 136,9 Гбайт.
Чтобы достичь хотя бы интерфейсного ограничения BIOS (8,4 Гбайт), стали применять трансляцию параметров вызова функций Int 13h
, которые будем теперь называть логическими, в физические[6] параметры, передаваемые контроллерам ATA-дисков. В функции, которая сообщает параметры диска (функция 8), производится обратная трансляция, так что на стороне вызова программного интерфейса Int 13h
присутствуют только логические параметры. Естественно, логический объем диска не может превышать физического: (С × H × S)ЛОГ ≤ (С × H × S)ФИЗ.
Подробнее о преодолении барьеров и способах трансляции (LBA, Large Disk, ECHS) см. в [1, 4, 9]
Int 13h
используют ОС Windows 95, Windows 98, Windows 2000. Правда, это использование ограничено лишь начальной загрузкой и процессом установки (FDISK, FORMAT), поскольку в регулярной работе применяются собственные 32-разрядные драйверы. Расширения BIOS Int 13h
не используют DOS (все версии), Windows 3.1x, Windows NT, Novell NetWare, OS/2 Warp, Linux, Unix.
В настоящее время определены три набора функций:
♦ доступ к фиксированным дискам (fixed disk access subset) — функции 41-44h, 47h и 48h;
♦ блокировка и смена носителя (device locking and ejecting subset) — функции 41h, 45h, 46h, 48h и 49h;
♦ поддержка расширенных дисков (enhanced disk drive (EDD) support subset) — функции 41h и 48h.
Расширенный сервис, как и традиционный, вызывается программным прерыванием Int 13h
с номерами функций свыше 3Fh (регистр АН
); номер устройства (регистр DL
) допустим в диапазоне 80h-FFh. Основные параметры вызова — начальный адрес блока, число секторов для передачи и адрес буфера — передаются через адресный пакет (device address packet). Формат пакета в сравнении с передачей параметров традиционного сервиса через регистры процессора довольно просторный.
Поскольку расширение BIOS может и отсутствовать, имеется функция проверки его наличия (номер 41h). Расширение может действовать избирательно (не для всех устройств), так что проверку надо производить для конкретного устройства, интересующего программу. Проверка дает номер версии расширения и карту поддерживаемых наборов функций. Функции расширенного чтения, записи, верификации и поиска (42h, 43h, 44h и 47h) по смыслу не отличаются от их аналогов из традиционного сервиса. Для работы со сменными носителями введены функции отпирания/запирания, извлечения и проверки факта смены носителя (45h, 46h и 49h). От идеологии традиционного сервиса сильно отличается функция получения параметров устройства (48h). Она возвращает в ОЗУ буфер с набором параметров и детальным описанием устройства, позволяющим ОС и приложениям работать с ним, минуя BIOS. Функция установка аппаратной конфигурации (4Eh) позволяет управлять режимом передачи (PIO, DMA), а также предварительной выборкой (поиском).
Для эмуляции дисков на загружаемых CD-ROM к сервисам BIOS Int 13h
добавляется несколько новых функций:
♦ начать/завершить эмуляцию диска (4Ah/4Bh), начать эмуляцию диска и выполнить загрузку (4Ch);
♦ прочитать секторы загрузочного каталога (4Dh); функции 41-48h позволяют обращаться к любым логическим секторам CD-ROM (в режиме LBA с размером сектора 2048 байт), когда для данного привода включена эмуляция.
Подробнее расширенный сервис рассмотрен в [4].
Int 14h
, который обеспечивает описанные ниже функции.
♦ 00h — инициализация (установка скорости обмена и формата посылок, заданных регистром AL
; запрет источников прерываний). На сигналы DTR
и RTS
влияния не оказывает (после аппаратного сброса они пассивны).
♦ 01h — вывод символа из регистра AL
(без аппаратных прерываний). Активируются сигналы DTR
и RTS
, и после освобождения регистра THR
в него помещается выводимый символ. Если за заданное время регистр не освобождается, фиксируется ошибка тайм-аута и функция завершается.
♦ 02h — ввод символа (без аппаратных прерываний). Активируется только сигнал DTR
(RTS
переходит в пассивное состояние), и ожидается готовность принятых данных, принятый символ помещается в регистр AL
. Если за заданное время данные не получены, функция завершается с ошибкой тайм-аута.
♦ 03h — опрос состояния модема и линии (чтение регистров МSR
и LSR
). Эту гарантированно быструю функцию обычно вызывают перед функциями ввода-вывода во избежание риска ожидания тайм-аута.
При вызове Int 14h
номер функции задается в регистре АН
, номер порта (0–3) — в регистре DX
(0 — COM1
, 1 — COM2
…). При возврате из функций 0, 1 и 3 регистр АН
содержит байт состояния линии (регистр LSR), AL
— байт состояния модема (MSR). При возврате из функции 2 нулевое значение бита 7 регистра АН
указывает на наличие принятого символа в регистре AL
; ненулевое значение бита 7 — на ошибку приема, которую можно уточнить функцией 3.
Байт состояния линии (регистр АН
) имеет следующий формат:
♦ бит 7 — ошибка тайм-аута (после вызова функции 2 — признак любой ошибки);
♦ бит 6 — регистр сдвига передатчика пуст (пауза передачи);
♦ бит 5 — промежуточный регистр передатчика пуст (готов принять символ для передачи);
♦ бит 4 — обнаружен обрыв линии;
♦ бит 3 — ошибка кадра (отсутствие стоп-бита);
♦ бит 2 — ошибка паритета принятого символа;
♦ бит 1 — переполнение (потеря символа);
♦ бит 0 — регистр данных содержит принятый символ.
Байт состояния модема (регистр AL
при возврате из функций 0, 1, 3) имеет следующий формат:
♦ бит 7 — состояние линии DCD
;
♦ бит 6 — состояние линии RI
;
♦ бит 5 — состояние линии DSR
;
♦ бит 4 — состояние линии CTS
;
♦ бит 3 — изменение состояния DCD
;
♦ бит 2 — изменение огибающей RI
;
♦ бит 1 — изменение состояния DSR
;
♦ бит 0 — изменение состояния CTS
.
При инициализации порта биты регистра AL
имеют следующее назначение:
♦ биты [7:5] — скорость обмена:
• 000=110; 100=1200; 001=150; 101=2400;
• 010=300; 110=4800; 011=600; 111=9600 бит/с;
♦ биты [4:3] — контроль паритета:
• 01 — число единиц нечетное;
• 11 — четное;
• 0 и 10 — без контроля;
♦ бит 2 — количество стоп-бит: 0–1 бит, 1–2 бита (на скорости 110 бит/с — 1,5 стоп-бит);
♦ биты [1:0] — длина посылки: 00 — 5 бит, 01 — 6 бит, 10 — 7 бит, 11 — 8 бит.
В процессе начального тестирования POST BIOS проверяет наличие последовательных портов (регистров UART 8250 или совместимых) по стандартным адресам и помещает базовые адреса обнаруженных портов в ячейки BIOS Data Area
0:0400, 0402, 0404, 0406. Эти ячейки хранят адреса портов с логическими именами COM1
-СОМ4
. Нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:047С, 047D, 047Е, 047F заносятся константы, задающие тайм-аут для портов.
Обнаруженные порты инициализируются на скорость обмена 2400 бит/с, 7 бит данных с контролем на четность (even), 1 стоп-бит. Управляющие сигналы интерфейса DTR
и RTS
переводятся в исходное состояние («выключено» — положительное напряжение).
Int 17h
: обеспечивают инициализацию, вывод байта данных и опрос состояния принтера, подключенного к LPT-порту. При вызове функция задается в регистре АН
, номер LPT-порта — в регистре DX.
♦ АН
= 00h — вывод байта из регистра AL
по протоколу Centronics (без аппаратных прерываний). Данные помещаются в выходной регистр, и, дождавшись готовности принтера (снятия сигнала Busy
), формируется строб.
♦ АН
= 01h — инициализация интерфейса и принтера (установка исходных уровней управляющих сигналов, формирование импульса Init#
, запрет аппаратных прерываний и переключение на вывод двунаправленного интерфейса).
♦ АН
= 02h — опрос состояния принтера (чтение регистра состояния порта).
При возврате регистр АН
содержит байт состояния, который собирается из бит регистра состояния SR[7:3]
и программно формируемого флага тайм-аута. Биты 6 и 3 относительно байта, считанного из регистра состояния, инвертированы. Назначение бит байта состояния:
♦ бит 7 — не занято (сигнал Busy
); нулевое значение означает, что принтер занят (буфер полон или состояние Off-Line, или ошибка);
♦ бит 6 — подтверждение (сигнал Ack#
); единичное значение означает, что принтер подключен;
♦ бит 5 — конец бумаги (сигнал PaperEnd
);
♦ бит 4 — принтер готов (сигнал Select
); нулевое значение означает, что принтер в состоянии Off-Line;
♦ бит 3 — ошибка принтера (сигнал Error#
); единичное значение соответствует ошибке;
♦ биты 2:1=00 (не используются);
♦ бит 0 — флаг тайм-аута, устанавливается при неудачной попытке вывода символа, если сигнал Busy
не снимается в течение времени, определенного для данного порта в ячейках тайм-аута (в BIOS Data Area); в этом случае согласно протоколу Centronics строб данных не вырабатывается.
Перехват прерывания Int 17h
является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсом ИРПР или необходимости перекодировки символов. Если разрабатываемый драйвер предназначен не только для перекодировки, но и изменения протокола (через Int 17h
можно организовать вывод через LPT-порт по протоколу ИРПР и даже через СОМ-порт), следует внимательно отнестись к битам возвращаемого байта состояния. При их неправильном формировании попытки вывода на печать могут приводить к ошибочным сообщениям.
Int 1Ah
позволяют считывать и модифицировать значения системного таймера, даты и времени, а также установки будильника часов реального времени CMOS RTC. Перечисленные ниже номера функций указываются при вызове в регистре АН
.
1. АН
=0 — чтение системного таймера (двойного слова по адресу 40:006Eh в BIOS Data Area, инкрементируемого по прерываниям от канала 0 счетчика- таймера 8253/8254 примерно раз в 55 мс. Таймер обнуляется при выполнении теста POST после аппаратного сброса). Возвращает значение таймера, в СХ
— старшую часть, в DX
— младшую. AL
=0, если за последние 24 часа не было переполнения таймера. В современных версиях сброс AL
возвращает счетчик переполнений таймера, хранящийся в ячейке 40:0070h (в старых версиях это был флаг).
2. АН
=1 — установка системного таймера (СХ
— старшая часть, в DX
— младшая) и сброс флага (счетчика) переполнения таймера в ячейке 40:0070h. В случае ошибки устанавливается флаг CF
=1.
3. АН
=2 — чтение времени из RTC. Возвращает в упакованном BCD-формате час (в регистре СН
), минуту (CL
), секунду (DH
) и признак коррекции летнего/зимнего времени (DL
=1 — коррекция используется, DL
=0 — нет). Признаком успешной операции является флаг CF
=0. Во избежание ошибок некоторых BIOS при вызове флаг CF
должен быть сброшен.
4. АН
=3 — установка времени в RTC, назначение регистров и признак результата аналогичен функции 2.
5. АН
=4 — чтение даты из RTC. Возвращает в упакованном BCD-формате век (в регистре СН
), две старшие цифры года (CL
), месяц (DH
) и день (DL
). Признаком успешной операции является флаг CF
=0. Во избежание ошибок некоторых BIOS при вызове флаг CF
должен быть сброшен.
6. АН
=5 — установка даты в RTC, назначение регистров и признак результата аналогичен функции 4.
7. АН
=6 — установка времени срабатывания будильника RTC. Возвращает в упакованном BCD-формате час (в регистре СН
), минуту (CL
) и секунду (DH
). Если будильник уже установлен, переустановка не производится и возвращается флаг CF
=1. При срабатывании будильник вызывает прерывание Int 4Ah
.
8. АН
=7 — отмена установки будильника.
Функции BIOS Int 15h
позволяют программировать таймер CMOS RTC — вводить задержку или запускать таймер установки флага, указывая время в микросекундах (СХ — старшее слово, DX — младшее). Нулевое значение интервала не вызывает никаких действий. Достижимое разрешение в зависимости от производительности ПК может достигать единиц миллисекунд, максимальная выдержка — около 70 часов. Перечисленные ниже номера функций указываются при вызове в регистре АН
или АХ
.
9. AH
=86h — задержка на заданное время. Управление будет возвращено вызвавшему процессу только через указанный интервал. По окончании задержки будет установлен бит 7 в ячейке BDA 0040:00A0. Таймер может оказаться занятым, тогда вызов сразу возвратит флаг CF
=1 (при успехе CF
=0, а в AL
окажется маска, записанная в 8259А#2).
10. AX
=8300h — запуск таймера, устанавливающего флаг после указанной задержке бит 7 в ячейке, заданной регистрами ES
:BX
. При успешном запуске CF
=0; если таймер занят (он один) — CF
=1 и AL
=0. Управление возвращается процессу сразу, а флаг будет установлен через заданное время. Перед завершением программа, запускавшая таймер, должна его сбросить функцией 8301h (во-первых, чтобы освободить; во-вторых, чтобы снять «адскую машинку», которая неожиданно сама может изменить значение ячейки памяти, вполне возможно уже задействованную другим, ничего не «подозревающим» процессом).
11. AX
=8301h — сброс того же таймера.
Int 1Ah
; номер функции задается при вызове в регистре АХ
. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик Int 1Ah
) с предварительным занесением в стек регистра флагов.
Признаком нормального выполнения является CF
=0 и АН
=0; при CF
=1 АН
содержит код ошибки:
♦ 81h — неподдерживаемая функция;
♦ 83h — неправильный идентификатор производителя;
♦ 86h — устройство не найдено;
♦ 87h — неправильный номер регистра PCI.
Вызовы требуют глубокого стека (до 1024 байт). Для 32-разрядных вызовов защищенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов (см. выше), при этом назначение входных и выходных регистров и флага CF
сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Функции PCI BIOS перечислены ниже:
♦ АХ
= B101h — проверка присутствия PCI BIOS. При наличии PCI BIOS возвращает CF
=0, АН
=0 и EDX
=20494350h (строка символов "PCI "); проверяться должны все три признака. При этом в AL
находится описатель аппаратного механизма доступа к конфигурационному пространству и генерации специальных циклов PCI:
• Бит 0 — поддержка механизма № 1 для доступа к конфигурационному пространству;
• Бит 1 — поддержка механизма № 2 для доступа к конфигурационному пространству;
• Биты 2:3=00 (резерв);
• Бит 4 — поддержка генерации специального цикла по механизму № 1;
• Бит 5 — поддержка генерации специального цикла по механизму № 2;
• Биты 6:7=00 (резерв).
В регистрах ВН
и BL
возвращается старший и младший номер версии (BCD-цифры), в CL
— максимальный номер шины PCI, присутствующий в системе (число шин +1, поскольку они нумеруются с нуля последовательно). В регистре EDI
может возвращаться линейный адрес точки входа 32-разрядных сервисов BIOS. Этот адрес возвращается не всеми версиями BIOS (некоторые не изменяют EDI
); для проверки можно при вызове обнулять EDI
и проверять на нуль возвращенное значение.
♦ АХ
= B102h — поиск устройства по идентификатору. При вызове в СХ
указывается идентификатор устройства, в DX
— идентификатор производителя, в SI
— индекс (порядковый номер) устройства. При успешном возврате в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции. Для нахождения всех устройств с указанными идентификаторами вызовы выполняют, последовательно инкрементируя SI
от 0 до получения кода возврата 86h.
♦ AX
= B103h — поиск устройства по коду класса. При вызове в ЕСХ[23:16]
указывается код класса, в ЕСХ[15:8]
— подкласса, в ЕСХ[7:0]
— интерфейс, в SI
— индекс устройства (аналогично предыдущему). При успешном возврате в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции.
♦ АХ
= B106h — генерация специального цикла PCI. При вызове в BL
указывается номер шины, в EDX
— данные специального цикла.
♦ АХ
= В108h — чтение байта конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh). При успешном возврате в CL
— считанный байт.
♦ АХ
= B109h — чтение слова конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, четный). При успешном возврате в СХ
— считанное слово.
♦ АХ
= В10Ah — чтение двойного слова конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, кратный 4). При успешном возврате в ЕСХ
— считанное двойное слово.
♦ АХ
= B10Bh — запись байта конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh), в CL
— записываемый байт.
♦ АХ
= B10Ch — запись слова конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, четный), в СХ
— записываемое слово.
♦ АХ
= B10Ah — запись двойного слова конфигурационного пространства устройства PCI. При вызове в ВН
— номер шины, в BL[7:3]
— номер устройства, BL[2:0]
— номер функции, в DI
— номер регистра (0-FFh, кратный 4), в ЕСХ
— записываемое двойное слово.
Смещение | Длина | Назначение |
---|---|---|
0 | 2 | Сигнатура (признак начала модуля): байт 0=55h, байт 1=AAh |
2 | 1 | Длина, указанная в блоках по 512 байт |
3 | 3 | Точка входа процедуры инициализации, заканчивающейся дальним возвратом Ret Far (вызывается инструкцией Far Call во время POST). Обычно здесь располагается трехбайтная инструкция JMP, указывающая на начало процедуры |
6-17h | Резерв | |
18h | 2 | Указатель на структуру данных PCI (только для карт PCI), см. ниже п. 12.9.1 |
1Ah | 2 | Указатель на структуру расширенного заголовка карт ISA PnP, см. ниже п. 12.9.2 |
Call Far
) вызывает процедуру инициализации модуля, начинающуюся с 3-го адреса заголовка модуля. Ответственность за ее корректность полностью ложится на разработчика. Процедура может переопределять векторы прерываний, обслуживаемых BIOS. Переопределив на себя Bootstrap (Int 19h
), можно получить управление при загрузке, что и используется, например, для удаленной загрузки компьютеров через локальную сеть (Remote Boot Reset). Если стандартное продолжение процедуры загрузки не требуется, а дополнительный модуль представляет собой(например, управляющую программу для какого-либо оборудования, вместо процедуры инициализации в ПЗУ может находиться и основная программа, не возвращающая управление системной последовательности POST.
Процедура инициализации и программная поддержка устройства в ПЗУ должны быть написаны таким образом, чтобы им были безразличны абсолютные адреса, по которым они размещаются в пространстве памяти. На картах расширения, как правило, имеются аппаратные средства изменения базового адреса, а иногда и размера ПЗУ (джамперы или программно-управляемые переключатели). Это позволяет бесконфликтно разместить модули ПЗУ нескольких установленных карт.
По сравнению с традиционным способом использования ПЗУ, когда оно, будучи разрешенным, постоянно присутствует в области памяти, имеется более рациональный способ подключения расширений ROM BIOS, основанный на модели DDIM (Device Driver Initialization Model — модель инициализации драйвера устройств). POST определяет наличие ПЗУ по найденному заголовку и копирует его содержимое (по объявленной длине) в свободное пространство верхней памяти (ОЗУ), оставляя разрешенной запись в эту область. Далее в этой копии (в ОЗУ) вызывается процедура инициализации (по адресу 3). Эта процедура, написанная в соответствии с моделью DDIM, должна определить, каким образом ее запустили: традиционным (в ПЗУ) или в соответствии с DDIM (в ОЗУ). Определить это она может просто — попыткой модификации области ее «тела», которая в ПЗУ, естественно, не приведет к изменению содержимого памяти. Обнаружив режим DDIM (память модифицируема), процедура выполняет все необходимые действия по инициализации. Далее она определяет, какую часть копии (начиная от начала заголовка) требуется оставить в памяти на время загрузки и регулярной работы системы, отсекая не нужное в дальнейшем тело процедуры инициализации. Попутно она может в оставляемом модуле установить какие-либо параметры, требуемые для работы драйвера устройства. Наконец, она модифицирует поле длины в заголовке и контрольную сумму так, чтобы фрагмент модуля оставался корректным, и дальним возвратом отдает управление тесту POST. Теперь POST снова анализирует заголовок (но уже копии в ОЗУ) и запрещает запись в область ОЗУ (страницу с размером, кратным 4 К), которую «попросила» оставить процедура инициализации. Далее POST, по возможности, запрещает работу (отображение в область UMA) исходного модуля ПЗУ и продолжает свой путь к вызову процедуры начальной загрузки. Основное преимущество данного метода — возможность более рационального использования памяти в UMA (обычные ПЗУ «висят» в ней в полном объеме, невзирая на реальные потребности). Второе преимущество — возможность сохранения параметров, вычисляемых процедурой инициализации (она может задействовать параметры, полученные в процессе выполнения теста POST), в «замораживаемой» области памяти. Кроме того, как правило, медленные микросхемы ПЗУ на все время исполнения подменяются быстрым системным ОЗУ (не используя впрямую механизма теневой памяти). Процедура инициализации ПЗУ карт ISA с моделью DDIM должна проверять окружение, в котором она работает (см. выше); безусловная работа DDIM гарантируется только для карт PCI.
Для более эффективной работы DDIM желательно использовать не только стандартную, но и расширенную память (за пределами первого мегабайта), в то время как POST работает в реальном режиме процессора. Решить эту проблему помогает режим «Big Real Mode», который поддерживают все 32-разрядные процессоры (см. п. 12.3.1). Специально для предоставления доступа ко всей памяти процедурами инициализации фирмы Phoenics и Intel разработали спецификацию PMM (POST Memory Manager Specification), версия 1.01 была опубликована в конце 1997 г. Эта спецификация определяет несколько дополнительных сервисов BIOS, позволяющих выделять, находить и освобождать блоки в любой, в том числе и расширенной памяти. Клиенты этого сервиса запрашивают блок памяти требуемого размера, a BIOS возвращает физический 32-разрядный адрес начала выделяемого блока (если она способна его выделить). Клиент помечает свой блок 32-битным индексом (handle), по которому его в дальнейшем можно найти функцией поиска. Анонимный блок (индекс FFFFFFFFh) поиску не поддается. Этими сервисами можно пользоваться только до начала процедуры начальной загрузки (Int 19h
), работу с вентилем Gate A20 они берут на себя. Перед начальной загрузкой BIOS освобождает и обнуляет все блоки расширенной памяти, занятые с помощью этих сервисов. Сервисами PMM могут пользоваться процедуры инициализации карт расширения, а также процедуры BCV
, описанные в заголовке ПЗУ карт PnP (см. ниже). Процедуры, на которые указывает BEV
, ими пользоваться не могут, поскольку вызываются после входа в Int 19h
. Наличие сервисов PMM определяется по контрольной структуре, начинающейся со строки-сигнатуры $PMM
и расположенной на границе параграфа в области E0000-FFFF0h. Программный интерфейс можно найти в вышеуказанном документе, который доступен на сайте http://www.phoenix.com/techs.
Смещение | Длина | Назначение |
---|---|---|
0h | 4 байта | Сигнатура, строка $PnP (символы ASCII) |
04h | байт | Версия структуры (01h) |
05h | байт | Длина (в параграфах по 16 байт) |
06h | слово | Смещение следующего заголовка (0000h, если нет больше) |
08h | байт | Резерв(0) |
09h | байт | Контрольная сумма |
0Ah | двойное слово | Идентификатор устройства PnP |
0Eh | слово | Указатель на строку идентификатора производителя (0, если нет) |
10h | слово | Указатель на строку названия продукта (0, если нет) |
12h | 3 байт | Код типа устройства |
15h | байт | Индикаторы устройства |
16h | слово | Вектор подключения BCV (Boot Connection Vector) — 0, если нет |
18h | слово | Вектор отключения (Disconnect Vector) — 0, если нет |
1Ah | слово | Точка входа для загрузки BEV (Bootstrap Entry Point) — 0, если нет |
1Ch | слово | Резерв (0) |
1Eh | слово | Вектор получения информации о статических ресурсах (Static Resource Information Vector) — Real/Protected mode (0 если нет) |
BCV
(Boot Connection Vector, он же Interrupt Connection Vector) указывает смещение для процедуры, дальний вызов которой приведет к перехвату векторов прерываний первичных устройств ввода, вывода или загрузки (сервисов Int 9h
, Int 10h
или Int 13h
соответственно), в зависимости от параметров, переданных в регистрах процессора. При вызове этой процедуры в регистре АХ
единицы в битах 0, 1 и 2 запрашивают перехват сервисов Int 9h
, Int 10h
или Int 13h
соответственно (остальные биты нулевые), ES:DI
указывает на контрольную структуру PnP BIOS (System BIOS PnP Installation Check Structure), BX
содержит селективный номер (CSN) карты ISA PnP (для других карт FFFFh); DX
содержит адрес порта чтения ISA PnP (для других карт FFFFh).
Вектор отключения указывает на процедуру, восстанавливающую старое значение векторов при безуспешной попытке загрузки с данного устройства.
Точка входа для загрузки BEV
требуется, если устройство может использоваться в качестве загрузочного, но не обеспечивает блочных функций сервиса Int 13h
. Тогда системная микросхема BIOS может дальним вызовом вызвать эту процедуру вместо выполнения сервиса Int 19h
. Таким образом, например, может выполняться удаленная загрузка (Remote Programm Loading, RPL) по сети.
Вектор получения информации о статических ресурсах задает смещение процедуры, вызов которой выгрузит в память дескрипторы занимаемых ресурсов (в форматах, аналогичных структурам для ISA PnP). Адрес буфера размером не менее 1024 байт задается регистрами ES: DI
при вызове данной процедуры.
Процедура инициализации, которая начинается со смещения 3 в заголовке ПЗУ, для карт PnP должна подчиняться определенным требованиям (до этой спецификации специальных требований не было), принимать параметры и сообщать код возврата.
♦ При вызове процедуры ЕS: DI
указывает на контрольную структуру PnP BIOS, BX
содержит CSN
карты ISA PnP (для других карт FFFFh); DX
— адрес порта чтения ISA PnP (для других карт FFFFh).
♦ При исполнении процедура может переопределять любые векторы прерываний и изменять данные в BDA
и EBDA
, но перед возвратом она обязана восстановить прежние указатели для Int 9h
, Int 10h
, Int 13h
и все прежние значения связанных с ними переменных в BDA
и EBDA
.
♦ При возврате в АХ
возвращаются признаки проинициализированного устройства:
• бит 8 — устройство начальной загрузки, поддерживающее блочные функции INT 13h
;
• бит 7 — устройство вывода, поддерживающее символьный вывод («телетайпный» режим) INT 10h
;
• бит 6 — устройство ввода, поддерживающее символьный ввод INT 9h
;
• биты 5:4 — состояние подключения загрузочного устройства: 00 — не подключено, 01 — неизвестно, 10 — подключено (для устройства RPL соединение установлено), 11 — резерв;
• биты 3:2 — состояние подключения устройства вывода (аналогично предыдущему);
• биты 1:0 — состояние подключения устройства ввода (аналогично предыдущему).
Как видно из данного описания, расширенный заголовок и правила поведения процедуры инициализации позволяют системной BIOS более гибко пользоваться функциями дополнительных модулей BIOS — традиционные дополнительные модули со стороны системной BIOS были практически неуправляемыми. Заголовок данного вида может использоваться и картами ISA без поддержки PnP. Если эти карты будут передавать информацию о своих статических ресурсах, они окажут большую услугу для распределения ресурсов системой BIOS с поддержкой PnP. Таким образом, приспособить карту для работы в среде PnP можно всего лишь модификацией содержимого ее ПЗУ расширения BIOS.
Карта ISA PnP может быть установлена в разные системы, имеющие BIOS как с поддержкой PnP, так и без. Процедура инициализации должна исполняться адекватно обнаруженной среде: без PnP BIOS она должна работать традиционным способом, при необходимости загрузки перехватывая INT 19h
, а в среде PnP BIOS она должна вести себя скромнее, лишь предоставляя системной BIOS требуемые интерфейсы и точки входа.
Смещение | Длина, байт | Назначение |
---|---|---|
0 | 4 | Сигнатура, строка символов "PCIR" |
4 | 2 | Идентификатор производителя |
6 | 2 | Идентификатор устройства |
8 | 2 | Резерв¹ |
Ah | 2 | Длина структуры (байт), начиная с сигнатуры |
Ch | 1 | Версия структуры (0 для данной версии) |
Dh | 3 | Код класса |
10h | 2 | Длина образа |
12h | 2 | Версия кода/данных |
14h | 1 | Тип кода: 0 — х86 для PC-АТ, 2 — HP PA-RISC |
15h | 1 | Индикатор: 1 — последний образ, 0 — не последний |
16h | 2 | Резерв |
Expansion ROM Base Address
в конфигурационном пространстве и назначает ему адрес в свободном пространстве памяти. После этого программированием регистра команд разрешается считывание ПЗУ, и в нем ищется сигнатура заголовка АА55h. Когда сигнатура найдена, POST ищет подходящий образ (по типу кода и совпадающий по идентификаторам с обнаруженными устройствами PCI) и загружает его в ОЗУ (в область C0000-DFFFFh), оставляя разрешенной запись в эту область. Далее чтение ПЗУ запрещается (записью в поле Expansion ROM Base Address
), и вызывается процедура инициализации (по адресу 3). При вызове процедуры POST сообщает номер шины (в регистре АН
), номер устройства (AL[7:3]
) и номер функции (AL[2:0]
), благодаря чему процедура узнает точные координаты аппаратных средств. После этого определяется размер области, которую следует оставить в памяти (по байту 2, который может быть модифицирован процедурой инициализации), и для этой области запрещается запись. Если процедура инициализации «урезает» занимаемую память, она должна позаботиться о достоверности контрольной суммы области, описанной байтом 2. Если память освобождается полностью (процедура обнуляет байт 2), то контрольная сумма, естественно, не нужна. Расширение для VGA (определяется по коду класса) обрабатывается особым образом — загружается по адресу C0000h. Процедура инициализации может определить наличие PnP BIOS в системе, проверив значение контрольной структуры PnP по адресу, указанному в ES: DI
, и исполняться в зависимости от обнаруженного системного окружения.
Правила заземления в документации по импортной аппаратуре приводятся не всегда, поскольку подразумевается, что трехполюсная вилка всегда должна включаться в соответствующую (трехполюсную) розетку с заземлением, а не в двухполюсную с рассверленными отверстиями. В нашей стране распространены так называемые трехполюсные евророзетки (рис. 13.6, а). Заземление выполняется с помощью контактов-усиков, центральный заземляющий штырь используется нечасто. На рисунке показано правильное положение контактов нуля, фазы и заземления на розетке. При подключении к нему стандартного шнура питания на гнезде, обращенном к блоку питания, раскладка цепей будет соответствовать рис. 13.6, б.ВНИМАНИЕ
Настоятельно рекомендуется отключать питание при подключении и отключении интерфейсных кабелей. Небольшая разность потенциалов, которая практически исчезнет при соединении устройств общими проводами интерфейсов, может пробить входные (и выходные) цепи сигнальных линий, если в момент присоединения разъема контакты общего провода соединятся позже сигнальных. От такой последовательности обычные разъемы не страхуют.
P.G.
(Power Good) — питание в норме. Этот сигнал с уровнем в 3–6 В вырабатывается через 0,1–0,5 с после включения питания при нормальных выходных напряжениях блока. При отсутствии этого сигнала на системной плате непрерывно вырабатывается сигнал аппаратного сброса процессора, появление сигнала «выпускает» систему в нормальную работу. Этот сигнал должен сброситься раньше, чем пропадет напряжение +5 В при отключении блока. Отсутствие должной задержки сигнала при включении и запаздывание при выключении может приводить к потере информации в CMOS и ошибкам при загрузке по включении питания. Нажатие кнопки Reset
по действию почти эквивалентно замыканию сигнала P.G.
на «схемную землю».
Выходные цепи блоков питания выводятся гибкими жгутами проводов со стандартным набором разъемов (рис. 13.7). Разъемы для питания накопителей имеют ключи, исключающие возможность неправильного соединения. Однако иногда встречаются блоки с ошибочно собранными разъемами, в результате на шину питания +5 В попадает +12 В, чего устройства, как правило, не выдерживают. Такая ошибка в практике автора привела, например, к выходу из строя подряд двух 3" дисководов — ошибку в питании стали искать лишь после обнаружения неработоспособности второго дисковода. Традиционные разъемы питания системной платы PS-8, PS-9 всегда устанавливаются рядом так, чтобы четыре черных провода GND шли подряд. Их ключи весьма условны, а ошибка подключения чревата выгоранием системной платы. Цвета проводов в жгутах стандартизованы:
♦ GND
— черный;
♦ -12V
— коричневый;
♦ +5V
— красный;
♦ -5V
— голубой;
♦ +12V
— желтый;
♦ P.G.
— белый (питание в норме).
+5VSB
. Дежурный источник с допустимым током нагрузки 10 мА (АТХ 2.01) включается при подаче сетевого напряжения. Он предназначен для питания цепей управления энергопотреблением и устройств, активных и в спящем режиме (например, факсмодема, способного при поступлении входящего звонка «разбудить» машину). В дальнейшем предполагается увеличить мощность данного источника до допустимого тока 720 мА, что позволит «будить» компьютер даже по приему пакета от дежурного адаптера локальной сети. В интерфейс блока питания введен управляющий сигнал PS-ON
, включающий основные источники +5, +3,3, +12, -12 и -5 В (рис. 13.8). Напряжение от этих источников поступает на выход блока только при удержании сигнала PS-ON
на низком логическом уровне. При высоком уровне или свободном состоянии цепи выходные напряжения этих источников поддерживаются около нулевого уровня. О нормальном напряжении питания сигнализирует сигнал PW-OK
(Power O'Key), по действию аналогичный сигналу P.G.
традиционных блоков. Интерфейс управления питанием позволяет выполнять программное отключение питания.
FanM
представляет собой выход типа «открытый коллектор» от тахометрического датчика вентилятора блока питания, вырабатывающего два импульса на каждый оборот ротора. Сигнал FanC
предназначен для управления скоростью вентилятора подачей напряжения в диапазоне 0…+12 В при токе до 20 мА. Если уровень напряжения выше +10,5 В, вентилятор будет работать на максимальной скорости. Уровень ниже +1 В означает запрос от системной платы на остановку вентилятора. Промежуточные значения уровня позволяют плавно регулировать скорость. Внутри блока питания сигнал FanC
подтягивается к уровню +12 В, так что, если дополнительный разъем оставить неподключенным, вентилятор будет всегда работать на максимальной скорости. На дополнительном разъеме также имеются контакты 1394V
(+) и 1394R
(-) изолированного от схемной земли источника напряжения 8-48 В для питания устройств шины IEEE-1394 (FireWire). Цепь +3.3V Sense
служит для подачи сигнала обратной связи стабилизатору напряжения +3,3 В.
СОМ
— черный (соответствует цепи GND традиционных блоков);
♦ +5V
— красный;
♦ +12V
— желтый;
♦ -5V
— белый;
♦ -12V
— синий;
♦ +3.3V
— оранжевый;
♦ +3.3V Sense
— коричневый (может подходить к контакту 11);
♦ +5VSB
— малиновый;
♦ PS-ON
— зеленый;
♦ PW-ON
— серый.
Дополнительный разъем:
♦ +3.3V Sense
— белый с коричневыми полосками;
♦ FanC
— белый с синими полосками;
♦ FanM
— белый;
♦ 1394V
— белый с красными полосками;
♦ 1394R
— белый с черными полосками.