Шина с малым числом выводов ( LPC ) — это компьютерная шина , используемая на IBM-совместимых персональных компьютерах для подключения к ЦП устройств с низкой пропускной способностью , таких как ПЗУ BIOS (ПЗУ BIOS было перемещено на шину последовательного периферийного интерфейса (SPI) в 2006 году [1] ), «устаревшие» устройства ввода-вывода (интегрированные в Super I/O , встроенный контроллер , CPLD и/или чип IPMI ) и доверенный платформенный модуль (TPM). [2] «Устаревшие» устройства ввода-вывода обычно включают последовательные и параллельные порты, клавиатуру PS/2 , мышь PS/2 и контроллер гибких дисков .
Большинство материнских плат ПК с шиной LPC имеют либо Platform Controller Hub (PCH), либо чип южного моста , который действует как хост и управляет шиной LPC. Все остальные устройства, подключенные к физическим проводам шины LPC, являются периферийными устройствами.
Шина LPC была представлена Intel в 1998 году как программно-совместимая замена шины Industry Standard Architecture (ISA). Она напоминает ISA с точки зрения программного обеспечения, хотя физически она совершенно иная. Шина ISA имеет 16-битную шину данных и 24-битную адресную шину, которые могут использоваться как для 16-битных адресов портов ввода-вывода , так и для 24-битных адресов памяти; обе работают на скорости до 8,33 МГц . Шина LPC использует сильно мультиплексированную четырехбитную шину, работающую на четырехкратной тактовой частоте (33,3 МГц) для передачи адресов и данных с аналогичной производительностью.
Главное преимущество LPC заключается в том, что для базовой шины требуется всего семь сигналов, что значительно сокращает количество контактов, необходимых для периферийных чипов. Интегральной схеме, использующей LPC, потребуется на 30–72 контакта меньше, чем ее эквиваленту ISA. Это также упрощает маршрутизацию шины на переполненных современных материнских платах. Тактовая частота была выбрана такой, чтобы соответствовать PCI , чтобы еще больше облегчить интеграцию. Кроме того, LPC предназначена только для материнской платы; стандартизированного разъема для общего использования нет, хотя Intel определяет один для использования отладочными модулями. [3] Доступно небольшое количество периферийных дочерних плат LPC с распиновкой, являющейся собственностью поставщика материнской платы: модули Trusted Platform Module (TPM), [2] карты POST для отображения диагностических кодов BIOS, [4] и ISA-совместимые периферийные устройства последовательного порта для промышленного использования. [5] Обнаружение устройств не поддерживается; Поскольку подключены только устройства материнской платы или определенные модели TPM, образ прошивки хоста (BIOS, UEFI ) будет включать статическое описание всех устройств и их адресов ввода-вывода, которые, как ожидается, присутствуют на конкретной материнской плате.
Сигналы управления LPC имеют активный низкий уровень , на что указывает символ "#" в их названиях. Сигналы делятся на три категории:
Спецификация LPC определяет семь обязательных сигналов, необходимых для двунаправленной передачи данных:
Определено шесть дополнительных сигналов, которые являются необязательными для устройств LPC, которым не требуется их функциональность, но поддержка первых двух является обязательной для хоста:
Шина LPC берет свои электрические соглашения из соглашений обычного PCI . В частности, она разделяет ограничение, что для «разворота» любого сигнала шины, чтобы другое устройство «говорило», требуются два цикла простоя. В первом случае шина активно управляется высоким уровнем. Во втором случае шина не управляется и удерживается высоким уровнем с помощью подтягивающих резисторов. Новое устройство может начать отправлять данные по шине на третьем цикле. Операции LPC тратят большую часть своего времени на выполнение таких разворотов.
Как уже упоминалось, шина LPC разработана для обеспечения производительности, аналогичной шине ISA. Точные скорости передачи данных зависят от типа доступа к шине (ввод-вывод, память, DMA , встроенное ПО ), а также от скорости хоста и устройства LPC. Все циклы шины тратят большую часть времени на накладные расходы, а не на передачу данных, за исключением циклов чтения встроенного ПО размером 16 и 128 байт, которые имеют 17 циклов накладных расходов, но 32 и 256 циклов (соответственно) передачи данных, достигая пропускной способности10.88 и15,63 МБ/с . [7] Следующий по скорости цикл шины, определенный в стандарте, 32-битный цикл записи DMA в стиле ISA, тратит только 8 из 20 общих тактов на передачу данных (остальные 12 циклов являются служебными), достигая скорости до 6,67 МБ/с. [7]
Одним из самых медленных циклов шины является простое чтение или запись памяти, где только 2 из 17 тактов (плюс любые состояния ожидания, налагаемые устройством) передают данные, со скоростью передачи 1,96 МБ/с.
Транзакции LPC начинаются при переходе LFRAME# с низкого уровня на высокий. Пока LFRAME# низкий, хост помещает 4-битный код START на линии LAD. Код, отправленный в последнем цикле перед переходом LFRAME# на высокий уровень, определяет следующую транзакцию шины.
Обычно хост удерживает LFRAME# на низком уровне только в течение одного такта для эффективности. Исключением является транзакция отмены, которая может начаться даже в середине другой операции. Хост удерживает LFRAME# на низком уровне как минимум четыре такта, в течение которых любые устройства должны прекратить управлять шиной LAD. На четвертом цикле хост устанавливает LAD на высоком уровне (до 1111). При переходе LFRAME# с высокого на низкий уровень шина сбрасывается в состояние ожидания.
Почти во всех остальных случаях транзакции LPC используют следующую общую структуру:
Передачи DMA несколько отличаются. § Совместимый с ISA DMA может иметь несколько фаз SYNC и данных. § Ведущий DMA шины имеет поворот шины сразу после кода START и не имеет окончательного поворота,
Фаза SYNC позволяет устройству вставлять состояния ожидания в транзакцию. Существует шесть возможных значений SYNC, все с четной четностью (четный вес Хэмминга ). Три из них завершают фазу SYNC, а остальные три заставляют хост ждать еще один полубайт SYNC:
Intel разработала шину LPC таким образом, чтобы образ BIOS системы мог храниться в одной микросхеме флэш-памяти, напрямую подключенной к шине LPC. Intel также сделала возможным размещение образов операционной системы и программных приложений на одной микросхеме флэш-памяти, напрямую подключенной к шине LPC, в качестве альтернативы порту Parallel ATA . [8]
CPLD или FPGA могут реализовать хост LPC или периферийное устройство. [ 9]
Оригинальная игровая консоль Xbox имеет порт отладки LPC , который можно использовать для принудительной загрузки Xbox нового кода. [10] [11]
Все ISA-совместимые LPC-транзакции шины используют START-код 0000. [7] Во время первого цикла с высоким LFRAME# снова хост управляет полем "тип/направление цикла" (CTDIR): два бита, указывающие тип (ввод-вывод, память или DMA), и один бит, указывающий направление (чтение с устройства или запись на устройство) последующей передачи. Далее следует поле адреса передачи, размер которого зависит от типа цикла:
Доступ к памяти и вводу-выводу разрешен только как однобайтовый доступ и осуществляется так, как описано в § Структура транзакции: адрес, данные с хоста при записи, возврат, SYNC, данные с устройства при чтении.
Если хост попытается выполнить передачу на неиспользуемый адрес, ни одно устройство не будет управлять циклами SYNC, и хост увидит на шине LAD 1111. Увидев три цикла 1111 (два цикла разрешены в дополнение к двум циклам возврата, чтобы медленное устройство декодировало адрес и начало управлять шаблонами SYNC), хост прервет операцию.
Микросхема Platform Controller Hub (PCH) или микросхема southbridge действует как хост и управляет шиной LPC. Она также действует как центральный контроллер DMA для устройств на этой шине, если контроллер памяти находится в чипсете. В процессорах, которые содержат собственный контроллер(ы) памяти, контроллер DMA находится в процессоре. Для совместимости с программным обеспечением, изначально написанным для систем с шиной ISA, контроллер DMA содержит эквиваленты схем «устаревших» встроенных периферийных устройств архитектуры IBM PC/AT , таких как два программируемых контроллера прерываний , программируемый интервальный таймер и два контроллера ISA DMA , которые все участвуют в « DMA в стиле ISA ».
Совместимый с ISA DMA использует совместимый с Intel 8237 контроллер DMA на хосте, который отслеживает местоположение и длину буфера памяти, а также направление передачи. Устройство просто запрашивает обслуживание из заданного номера канала DMA, а хост выполняет доступ DMA на шине LPC.
Запрос выполняется виртуальной ISA-совместимой линией запроса DMA (DRQ), которая эмулируется с использованием сигнала LDRQ# устройства для указания переходов на эмулируемой линии DRQ. Это делается с помощью 6-битных запросов на сигнале LDRQ#: 0 стартовый бит, 3-битный номер канала DMA (старший бит первый), один бит нового уровня запроса (почти всегда 1, что указывает на то, что запрашивается передача DMA) и последний 1 стоповый бит. Хост отвечает, выполняя цикл DMA при следующей доступной возможности. Циклы DMA именуются на основе направления доступа к памяти , поэтому «чтение» — это передача на устройство LPC, а «запись» — это передача с устройства LPC.
«Адрес» состоит из 6 бит, отправляемых в виде двух полубайтов: 3-битного номера канала и 1-битного указания количества терминалов (контакт TC шины ISA или выход EOP# 8237), за которыми следует 2-битный размер передачи.
По умолчанию каналы DMA 0–3 выполняют 8-битные передачи, а каналы 5–7 выполняют 16-битные передачи; но специфичное для LPC расширение позволяет выполнять 1-, 2- или 4-байтные передачи на любом канале. Когда выполняется многобайтная передача, каждый байт имеет свое собственное поле SYNC, как описано ниже.
Обычный шаблон SYNC "ready" 0000 (или шаблон ошибки 1010) также вызывает отмену соответствующего эмулированного сигнала запроса DMA; хост остановит DMA после непосредственно следующего байта, пока устройство не сделает другой запрос DMA через сигнал LDRQ#. Шаблон SYNC 1001 указывает, что хост должен считать запрос DMA устройства все еще активным; хост продолжит с любыми оставшимися байтами в этой передаче или начнет другую передачу, в зависимости от ситуации, без отдельного запроса через LDRQ#.
Для записи DMA, когда данные передаются с устройства, за полем SYNC следуют 8 бит данных и еще одно поле SYNC, пока не будет достигнута указанная хостом длина для этой передачи или устройство не остановит передачу. Двухцикловое поле поворота завершает транзакцию. Для чтения DMA, когда данные передаются на устройство, за полем SYNC следует поворот, и последовательность данные—поворот—синхронизация—поворот повторяется для каждого переданного байта.
Прерывания передаются по одной общей линии SERIRQ с использованием протокола «сериализованных прерываний для PCI», изначально разработанного для шины PCI. [6] Хост периодически отправляет пакеты прерываний, в которых каждому запросу прерывания назначается 1-тактовый временной интервал, разделенный 2-тактовыми циклами оборота. Первоначальная синхронизация выполняется хостом. В качестве упрощенного примера:
Устройства могут распознавать начало кадра, поскольку только хост когда-либо будет переводить линию в низкий уровень более чем на один цикл. Хост идентифицирует прерывание, подсчитывая количество циклов тактов: если он видит, что линия SERIRQ переведена в низкий уровень на восемнадцатом такте, то утверждается IRQ 18/3=6.
Количество слотов прерываний зависит от системы, типичным числом является 17: 16 ISA-совместимых прерываний (IRQ0–IRQ15) плюс NMI .
После последнего слота прерывания хост добавляет сигнал «стоп», состоящий из двух или трех циклов низкого уровня, за которыми следуют два цикла возврата.
В "непрерывном" режиме хост периодически инициирует новый пакет. Существует также "тихий" режим, в котором устройство запрашивает новый пакет, переводя SERIRQ на низкий уровень в течение одного такта. Затем хост продолжает переводить линию на низкий уровень в течение остальных семи тактов. С этого момента протокол тот же самый.
Режим контролируется длиной стоп-сигнала хоста в конце каждого пакета. Если он состоит из трех тактов низкого уровня, следует непрерывный режим, и только хост может начать новый пакет. Если стоп-сигнал состоит из двух тактов низкого уровня, следует тихий режим, и любое устройство может инициировать пакет прерывания.
Значения поля START, отличные от 0000 или 1111, используются для указания различных несовместимых с ISA передач. [7] Поддерживаемые передачи:
Это позволяет размещать прошивку (BIOS) за пределами обычного периферийного адресного пространства. Эти передачи аналогичны передачам, совместимым с ISA, за исключением того, что:
До двух устройств на шине LPC могут запросить передачу мастера шины, используя сигнал LDRQ# для запроса использования зарезервированного канала DMA 4. В этом случае хост начнет передачу со специального поля START 0010 для мастера шины 0 или 0011 для мастера шины 1, за которым немедленно последуют два цикла поворота, чтобы передать шину устройству, запрашивающему цикл DMA мастера шины. После циклов поворота передача происходит очень похоже на инициированную хостом передачу, совместимую с ISA, с обратными ролями:
Это отличается от 16-битного управления шиной ISA, поскольку для управления шиной LPC требуется 32-битный адрес памяти при выполнении передачи памяти, не используется канал DMA в стиле ISA и может поддерживаться 8-, 16- или 32-битная передача; в то время как для 16-битного управления шиной ISA требуется 24-битный адрес памяти при выполнении передачи памяти, требуется использование канала DMA в стиле ISA и не может выполняться 32-битная передача. [12]
Спецификации Trusted Platform Module 2.0 определяют специальные циклы TPM-Read и циклы TPM-Write, которые основаны на циклах I/O Read и I/O Write. [13] Эти циклы используют поле START с ранее зарезервированным значением 0101, за которым следует полубайт CTDIR и 16-битный адрес ввода-вывода, как и при записи, совместимой с ISA. [13] Эти циклы используются при использовании локальной функции TPM. [13]
Спецификация шины LPC ограничивает, какой тип периферийных устройств может быть к ней подключен. Она допускает только устройства, принадлежащие к следующим классам устройств: суперустройства ввода-вывода, энергонезависимая память BIOS , концентраторы прошивки, аудиоустройства и встроенные контроллеры. Кроме того, каждый класс ограничен тем, какие циклы шины разрешены для каждого класса. [7]
Устройствам Super I/O и аудиоустройствам разрешено принимать циклы ввода-вывода, принимать циклы DMA сторонних производителей в стиле ISA и генерировать циклы мастера шины. Устройствам памяти общего назначения, таким как энергонезависимая память BIOS и флэш-устройства LPC, разрешено принимать циклы памяти. Концентраторам прошивки разрешено принимать циклы памяти прошивки. Встроенным контроллерам разрешено принимать циклы ввода-вывода и генерировать циклы мастера шины. Некоторые циклы ISA, которые считались бесполезными для этих классов, были удалены. Они включают в себя двухбайтовые циклы памяти, инициированные хостом, и двухбайтовые циклы ввода-вывода, инициированные хостом. Эти удаленные типы передачи могут быть инициированы хостом на шинах ISA, но не на шинах LPC. Хост должен будет имитировать двухбайтовые циклы, разделяя их на два однобайтовых цикла. Шина ISA имеет похожую концепцию, поскольку исходная 8-битная шина ISA требовала разделения 16-битовых циклов. Таким образом, 16-битная шина ISA автоматически разделяет 16-битные циклы на 8-битные циклы для удобства 8-битных периферийных устройств ISA, если только устройство ISA, на которое нацелен 16-битный цикл памяти или ввода-вывода, не выдаст сигнал, сообщающий шине, что оно может принять запрошенную 16-битную передачу без помощи разделителя цикла ISA. [12] Управление шиной в стиле ISA было заменено в шине LPC протоколом управления шиной, который вообще не полагается на контроллеры DMA в стиле ISA. Это было сделано для того, чтобы снять ограничение ISA на то, какой тип циклов управления шиной устройству разрешено инициировать на каком канале DMA. Циклы шины в стиле ISA, унаследованные LPC от ISA, представляют собой однобайтовые циклы шины ввода-вывода, однобайтовые циклы памяти, инициированные хостом, и одно- или двухбайтовые циклы DMA в стиле ISA, инициированные хостом. [7]
Однако были добавлены некоторые циклы шины, отличные от ISA. Циклы, которые были добавлены для улучшения производительности устройств, помимо концентраторов прошивки, включают в себя одно-, двух- и четырехбайтовые циклы памяти мастера шины; одно-, двух- и четырехбайтовые циклы ввода-вывода мастера шины; и 32-битный сторонний DMA, который соответствует всем ограничениям стороннего DMA в стиле ISA, за исключением того факта, что он может выполнять 32-битные передачи. Любое устройство, которому разрешено принимать традиционный DMA в стиле ISA, также может использовать этот 32-битный DMA в стиле ISA. Хост может инициировать 32-битные циклы DMA в стиле ISA, в то время как периферийные устройства могут инициировать циклы мастера шины. Концентраторы прошивки потребляли циклы прошивки, которые были разработаны только для концентраторов прошивки, чтобы адреса прошивки и обычные адреса ввода-вывода, отображенные в память, могли перекрываться без конфликтов. Чтения памяти прошивки могли считывать 1, 2, 4, 16 или 128 байтов за раз. Запись в память прошивки может производиться по одному, двум или четырем байтам одновременно. [7]