ISA умер! Да здравствует LPC?
Сегодня в персональном компьютере осталось только одно функциональное устройство, по которому можно проследить его генеалогию, — это интерфейс ISA, доставшийся ему по наследству от IBM PC AT. Большинство карт расширения выполняется по стандарту PCI, многие видеокарты подключаются по AGP. Однако производители карт расширения и материнских плат кивают друг на друга: если стандарт существует, то под него должны выпускаться карты; если выпускаются карты с интерфейсом ISA, то материнские платы должны его поддерживать. В спецификации PC98 наличие разъемов расширения стандарта ISA признается нежелательным. Однако для подсоединения таких устройств, как параллельные и последовательные порты, клавиатура, флоппи-диск, какой-нибудь интерфейс все же необходим. Поэтому разработчики микросхем для материнских плат вынуждены разводить ISA на кристалле, а чтобы добро не пропадало зря, — и выводить его наружу. Что же придет ему на смену?
Наименование | Направление | Назначение | |
---|---|---|---|
Периферия | Основной задатчик | ||
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.
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.
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# находится в активном состоянии не менее четырех периодов тактовой частоты.
Поле | Значение | Источник | Число тактов |
---|---|---|---|
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 до момента реальной записи.
Поле | Значение | Источник | Число тактов |
---|---|---|---|
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.
Наименование | Направление | Назначение | |
---|---|---|---|
Периферия | Основной задатчик | ||
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 и последующие, которые определяют тип цикла и направление передачи, формируются устройством, получившим право на захват шины.
Наименование | Направление | Назначение | |
---|---|---|---|
Периферия | Основной задатчик | ||
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