ISA умер! Да здравствует LPC?

Сергей Самохин

Сегодня в персональном компьютере осталось только одно функциональное устройство, по которому можно проследить его генеалогию, — это интерфейс ISA, доставшийся ему по наследству от IBM PC AT. Большинство карт расширения выполняется по стандарту PCI, многие видеокарты подключаются по AGP. Однако производители карт расширения и материнских плат кивают друг на друга: если стандарт существует, то под него должны выпускаться карты; если выпускаются карты с интерфейсом ISA, то материнские платы должны его поддерживать. В спецификации PC98 наличие разъемов расширения стандарта ISA признается нежелательным. Однако для подсоединения таких устройств, как параллельные и последовательные порты, клавиатура, флоппи-диск, какой-нибудь интерфейс все же необходим. Поэтому разработчики микросхем для материнских плат вынуждены разводить ISA на кристалле, а чтобы добро не пропадало зря, — и выводить его наружу. Что же придет ему на смену?

Таблица 1 

Наименование Направление Назначение
  Периферия Основной задатчик  
LAD[3:0] I/O I/O Мультиплексированные команды, адреса и данные
LFRAME# I O Фрейм, указывает на начало новой команды
LRESET# I I Сброс, те же функции, что PCI Reset. При наличии PCIRST# необязателен
LCLC I I Тактовая частота 33 МГц, те же функции, что PCICLK

 

Для подключения перечисленных выше устройств Intel предлагает новый стандарт — LPC (Low Pin Count, Малое Количество Контактов). Этот интерфейс, по утверждению представителей корпорации, будет встраиваться в будущие чипсеты для материнских плат. Такие намерения Intel означают, что, вероятнее всего, мы вскоре сможем в добровольно-принудительном порядке ознакомиться со стандартом LPC. Попробуем сделать это заранее и по собственной воле.

Введение нового стандарта преследует следующие цели:

  • убрать из системы ISA и X-bus;
  • снизить стоимость системы;
  • обеспечить скорость обмена, не меньшую, чем по шине X-bus;
  • предоставить те же типы циклов, что и X-bus;
  • увеличить адресуемое пространство с традиционных 16 Мбайт до 4 Гбайт;
  • значительно упростить временные диаграммы за счет синхронной природы интерфейса;
  • обеспечить прозрачность для программного обеспечения и отсутствие конфликтов из-за ресурсов;
  • обеспечить пригодность как для настольных, так и для мобильных систем;
  • обеспечить функции управления потребляемой мощностью.

Контактов действительно очень мало: семь обязательных (для передачи информации) и шесть дополнительных (для подключения устройств, выполняющих функцию задатчика и управления мощностью). Названия и функции обязательных сигналов интерфейса LPC приведены в табл. 1. Команды, адреса и данные передаются по линиям LAD[3:0] тетрадами-нибблами последовательно по четыре бита за один раз. Подобно PCI интерфейс синхронный, каждый цикл состоит из нескольких полей, каждое из которых имеет длительность в один период тактовой частоты 33 МГц. Любой цикл обмена по интерфейсу LPC начинается с того, что основной задатчик на шине (обычно чипсет) устанавливает активный уровень на линии LFRAME#. При этом все периферийные устройства переходят в состояние «начало цикла» и анализируют состояние линий LAD[3:0]. Если устройства передавали информацию по линиям LAD[3:0], то они немедленно их освобождают. Таким образом, этот сигнал может использоваться для прекращения затянувшихся циклов, например, при сбоях и зависаниях. То есть при достаточно интеллектуальном основном задатчике зависшее периферийное устройство не сможет подвесить всю систему. Сигнал LFRAME# может быть активным более одного периода тактовой частоты 33 МГц. В этом случае действительной считается информация, имевшаяся на LAD[3:0] во время последнего периода тактовой частоты. Первое поле — START — определяет тип операции, его возможные значения приведены в табл. 2.

Таблица 2

Значение LAD[3:0] Тип операции
0 Начало ввода/вывода или чтения/записи
1 Зарезервировано для последующего расширения
10 Разрешение для задатчика номер 1
11 Разрешение для задатчика номер 2
0100-1110 Зарезервировано для последующего расширения
1111 Принудительное прекращение цикла

 

Следующее поле — CYCTYPE + DIR (Cycle Type / Direction, тип цикла и направление передачи), определяется текущим задатчиком. Это поле может иметь значения, указанные в табл. 3. Значение бита LAD[0] зарезервировано, и он всегда должен быть равен 0.

Поле SIZE (Размер) может принимать значения 00 при передаче 1 байта, 01 при передаче 2 байт и 11 при передаче 4 байт. Значение 10 зарезервировано. Это поле используется только при операциях прямого доступа; ввод/вывод и чтение/запись осуществляются побайтно. Поле ADDR имеет длину четыре периода тактовой частоты для операций ввода/вывода и восемь периодов для циклов обращения к памяти. Адреса передаются начиная со старшей тетрады, то есть при обращении к памяти первыми передаются биты 31:28, а последними — 3:0.

Таблица 3

LAD[3:2] LAD[1] Тип операции
0 0 Чтение из внешнего устройства
0 1 Запись во внешнее устройство
1 0 Чтение из памяти
1 1 Запись в память
10 0 Прямой доступ к памяти для чтения
10 1 Прямой доступ к памяти для записи
11 Х Зарезервировано. Периферия должна игнорировать это значение, а основной задатчик, обнаружив его, прерывает цикл установкой LFRAME# в активное состояние

 

Поле CHANNEL используется в операциях прямого доступа к памяти и содержит в битах 0:2 номер канала, а в бите 3 — аналог сигнала Terminal Count шины ISA.

Поле DATA (Данные) имеет длину два периода тактовой частоты и содержит данные, передаваемые младшей тетрадой вперед. В одном цикле может содержаться одно, два или четыре поля DATA.

Поле передачи управления Turn Around, TAR, используется для передачи контроля над линиями LAD [3:0] второму участнику данного цикла, что необходимо при операциях чтения. Оно имеет продолжительность два периода тактовой частоты, на первом периоде текущий задатчик устанавливает на линиях LAD[3:0] значение 1111, на втором отключается, ожидая информацию от второго участника диалога.

Поле SYNC служит для синхронизации источника и приемника данных. Его вставляет ведомый участник цикла для того, чтобы подготовить для передачи запрошенные данные, или для размещения полученной информации. Полей SYNC в одном цикле может быть несколько, фактически столько, сколько нужно для подготовки. Значения поля SYNC приведены в табл. 4.

Таблица 4

LAD[3:0]  
0 Синхронизация достигнута
0001-0100 Зарезервировано
101 Короткое ожидание
110 Длительное ожидание, будет добавлено много полей SYNC
0111-1000 Зарезервировано
1001 Синхронизация достигнута, передача будет продолжена в следующем цикле (только при прямом доступе к памяти)
1010 Ошибка. В переданных данных содержится ошибка
1011 — 1111 Зарезервировано

 

Значение 1010 — Ошибка необходимо потому, что все циклы должны иметь определенную длину, так что периферийное устройство обязано передать требуемое для данного цикла количество данных, но перед этим оно честно предупреждает задатчика о том, что эти данные имеют чисто фиктивный характер.

Ознакомившись с типами полей, можно более подробно рассмотреть механизмы начала, окончания и принудительного прекращения цикла. Цикл начинается с того, что основной задатчик устанавливает активный уровень на линии LFRAME#. С этого момента периферийные устройства только анализируют состояние линий LAD[3:0], прервав любую операцию на шине (если она проводилась). Задатчик может удерживать LFRAME# в активном состоянии более одного периода частоты синхронизации, при этом он даже может произвольно менять состояние LAD[3:0]. Действительным значением поля START будет то, которое имелось на этих линиях перед переходом LFRAME# в пассивное состояние. Если считанное поле START распознается периферийными устройствами, то они должны декодировать весь цикл, а в противном случае — просто дожидаться следующей активации LFRAME# (например, устройства ввода/вывода, не использующие циклы прямого доступа или захвата шины, могут их просто игнорировать). Принудительное прекращение цикла является специальным циклом, так как начинается с установки LFRAME# в активное состояние, а заканчивается установкой поля START со значением 1111. При этом для более уверенного распознавания линия LFRAME# находится в активном состоянии не менее четырех периодов тактовой частоты.

Таблица 5

Поле Значение Источник Число тактов
START 0 Основной задатчик 1
CYCTYPE+DIR 100 Основной задатчик 1
ADDR ХХХХ Основной задатчик 8
TAR 1111 Основной задатчик 2
SYNC 101 Периферийное устройство 3
SYNC 0 Периферийное устройство 1
DATA ХХХХ Периферийное устройство 2
TAR 1111 Периферийное устройство 2
    Всего тактов 20
    Время доступа 0,66 мкс
    Скорость передачи 1,5 Мбайт/с

 

В табл. 5 приведены последовательность и характеристики полей в цикле чтения из памяти. Основной задатчик инициирует цикл, определяет тип цикла и направление передачи (чтение из памяти), адрес памяти и информирует об освобождении линий LAD[3:0]. Периферийное устройство во время подготовки данных передает поля SYNC со значением 0101. Когда данные готовы для передачи, устройство передает поле SYNC со значением 0000, две тетрады данных и информирует основного задатчика об освобождении линий LAD[3:0].

Количество полей синхронизации соответствует быстродействию памяти и может изменяться. В данном примере предполагалось наличие ППЗУ с временем доступа 120 нс (4*33 нс = 132 нс). Цикл записи построен примерно так же, но данные передает основной задатчик, а периферийное устройство — только поля SYNC и TAR. В поле SYNC устройство помещает значение либо 0000 (успешная запись), либо 1010 (ошибка при записи). Соответственно возможны варианты, когда устройство не буферизует данные, а выдает поля SYNC до момента реальной записи.

Таблица 6

Поле Значение Источник Число тактов
START 0 Основной задатчик 1
CYCTYPE+DIR 110 Основной задатчик 1
ADDR ХХХХ Основной задатчик 8
DATA ХХХХ Основной задатчик 2
TAR 1111 Основной задатчик 2
SYNC 0 Периферийное устройство 1
TAR 1111 Периферийное устройство 2
    Всего тактов 17
    Время доступа 0,56 мкс
    Скорость передачи 1,8 Мбайт/с

 

В табл. 6 приведены последовательность и характеристики полей в цикле чтения из памяти. Совершенно аналогично происходит ввод/вывод при работе с портами, отличие состоит лишь в других значениях полей CYCTYPE+DIR. Для ознакомления с функциями работы с прямым доступом к памяти и управления потребляемой мощностью в табл. 7 приведены необязательные линии интерфейса LPC.

Таблица 7

Наименование Направление Назначение
  Периферия Основной задатчик  
LDRQ# O I Запрос на прямой доступ к памяти или захват шины. Каждому устройству, обладающему этими функциями, требуется отдельная линия LDRQ#
SERIRQ I/O I/O Последовательный запрос на прерывание
CLKRUN# OD I/OD OD I/OD То же, что и PCI CLKRUN#
PME# OD I/OD То же, что и PCI PME#
LPCPD# I O I O Отключение, указывает, что периферия должна подготовиться к отключению
LSMI# O/D I O/D I Как и PCI SMI#, нужен для повторных попыток

 

При запросе прямого доступа к памяти (ПДП) или захвата шины используется линия LDRQ#. В первом случае по ней передается номер канала ПДП, во втором — зарезервированное значение 100. При благоприятном для данного запроса исходе арбитража основной задатчик начинает производить циклы ПДП. Бит LAD[3] в поле CHANNEL играет специальную роль и соответствует линии шины ISA TC (Terminal Count). В случае передачи последней порции данных (1, 2, 4 байт) этот бит устанавливается в 1, сигнализируя о том, что текущий сеанс ПДП закончен. Также сеанс ПДП может быть завершен установкой поля SYNC=0000 (синхронизация достигнута) или SYNC=1010 (ошибка), так как при циклах ПДП для индикации готовности данных используется значение SYNC=1001 (синхронизация достигнута; в следующем цикле будут еще данные). Последовательность полей и другие характеристики цикла ПДП при 8-битном чтении внешним устройством из основной памяти приведены в табл. 8. В зависимости от типа ПДП (8, 16 или 32 разряда) последние четыре поля передаются один, два или четыре раза соответственно. Соответственно будут меняться время доступа и скорость передачи.

Так же, как циклы ввода/вывода и чтения/записи, отличия цикла ПДП в обратном направлении незначительны.

Цикл захвата шины, как и все остальные, инициируется основным задатчиком после получения запроса по линии LDRQ#. Основной задатчик, как и при всех других циклах, формирует поле START, имеющее значение 0010 или 0011 (разрешение для задатчика 1 или задатчика 2; в настоящее время поддерживается не более двух задатчиков). После этого основной задатчик передает управление шиной при помощи поля TAR. Далее все протекает как при описанных выше циклах, за одним исключением: поля SYCTYPE+DIR и последующие, которые определяют тип цикла и направление передачи, формируются устройством, получившим право на захват шины.

Таблица 8

Наименование Направление Назначение
  Периферия Основной задатчик  
LDRQ# O I Запрос на прямой доступ к памяти или захват шины. Каждому устройству, обладающему этими функциями, требуется отдельная линия LDRQ#
SERIRQ I/O I/O Последовательный запрос на прерывание
CLKRUN# OD I/OD OD I/OD То же, что и PCI CLKRUN#
PME# OD I/OD То же, что и PCI PME#
LPCPD# I O I O Отключение, указывает, что периферия должна подготовиться к отключению
LSMI# O/D I O/D I Как и PCI SMI#, нужен для повторных попыток

 

Для работы с устройствами, использующими прерывания, используется линия SERIRQ# и одноименный протокол, описанный в спецификации шины PCI «PCI Local Bus Specification, Rev 2.1». Управление включением/выключением периферийных устройств осуществляется при помощи линий LPCPD# и LRST#. При выключении первая из них устанавливается основным задатчиком в низкий уровень, при этом в течение еще не менее 30 мкс на шину подается сигнал тактовой частоты LCLC. Все периферийные устройства при обнаружении низкого уровня на линии LPCPD# обязаны прекратить любую активность на шине и перейти в режим пониженного энергопотребления. Переход к работе происходит при подаче основным задатчиком на линию LPCPD# высокого уровня. Подача тактового сигнала осуществляется заранее, не менее чем за 100 мкс перед установкой высокого уровня LPCPD#. Для правильного перехода внешних устройств в начальное состояние на линии LRST# поддерживается низкий (активный) уровень еще в течение 60 мкс.

В заключение следует отметить прозрачность интерфейса с точки зрения программного обеспечения. Вся перекодировка команд ввода/вывода и других обращений к периферии происходит на аппаратном уровне, так что клавиатура, например, как имела адреса 60H и 64H, так и будет их иметь. Более подробно о спецификациях шины LPC можно узнать на сайте корпорации Intel по адресу http://developer.intel.com/design/pcisets/lpc/INDEX.HTM

По материалам Intel Corp.

 КомпьютерПресс 1'1999