Аппаратные интерфейсы ПК. Энциклопедия
Шрифт:
11.5. Программно-управляемая реализация последовательных интерфейсов
Рассмотренные выше интерфейсы — I²C, SMBus, SMI, SPI и JTAG — имеют общее свойство: они управляются и синхронизируются контроллером и не требуют фиксированной частоты синхронизации. Это позволяет для многих применений программно реализовать их на любом компьютере или микроконтроллере. На рис. 11.9 приведена схема простейшего адаптера интерфейсов I²C, SMBus или SMI для LPT-порта. Здесь сигнал
Рис. 11.9. Адаптер трехпроводных интерфейсов для LPT-порта
Программная реализация протоколов в среде DOS и Windows 9x не вызывает особых затруднений, поскольку здесь программист может обращаться к регистрам порта непосредственно. В более защищенных ОС (UNIX, Linux, Windows NT/2000) для обращения к регистрам LPT-порта требуются вызовы API.
При использовании данных адаптеров следует внимательно относиться к проблемам защиты от помех. Непосредственно с адаптера сигналы можно передавать лишь на небольшие расстояния (десятки сантиметров). Для передачи на большие расстояния (если ПК не приблизить к объекту) подойдут преобразователи уровней сигналов ТТЛ в дифференциальные сигналы интерфейса RS-422 и обратно. При этом адаптер разделяется на 2 блока, соединенные кабелем, — первый блок устанавливается на LPT-порт, другой — около подключаемого объекта.
Несколько сложнее получаются адаптеры этих интерфейсов для СОМ-портов. Здесь можно программно генерировать сигналы
Для интерфейсов SPI и JTAG тоже можно использовать LPT-порт, здесь даже не требуется организация двунаправленных линий. Сигналы
Программная реализация последовательных протоколов ограничивает скорость передачи данных на уровне 50-150 Кбит/с при работе LPT-порта в стандартном режиме. В режиме EPP или ECP можно достичь скорости и 1–2 Мбит/с, но при этом адаптер несколько усложняется (поскольку в этих интерфейсах требуется одновременно принимать и передавать данные). Решить проблему производительности, а заодно и расширить функциональные возможности позволяет использование специализированных интерфейсных адаптеров для шин PCI или ISA, выпускаемых рядом фирм. Есть и внешние устройства с интерфейсами USB или Ethernet. Правда, цена этих адаптеров и устройств существенно отличается от цены простого адаптера, который можно изготовить и самостоятельно.
Глава 12
Архитектурные компоненты IBM PC-совместимого компьютера
Аппаратные интерфейсы, описанные в книге, в IBM-PC-совместимом компьютере «живут» в специфическом архитектурном окружении. Эту специфику приходится учитывать при проектировании аппаратной части устройств, чтобы обеспечить с ними эффективное программное взаимодействие. В этой главе вкратце рассматриваются особенности процессоров x86 и связанные с этими особенностями распределение памяти, организация ввода-вывода и прерываний. Здесь же рассматривается традиционный
12.1. Пространство физической памяти
Основную часть физического адресного пространства PC занимает оперативная память (ОЗУ), начинающаяся с нулевого адреса. В нее вклинивается область адресов A0000h-FFFFFh — Upper Memory Area (UMA), 384 Кбайт — верхняя память, зарезервированная со времен IBM PC для системных нужд. В UMA размещаются области буферной памяти адаптеров шины (E)ISA (например, видеопамять) и постоянная память (BIOS с расширениями). ОЗУ продолжается и за областью UMА. Под самой верхней границей физического адресного пространства имеется образ памяти системной ROM BIOS.
Для доступности сервисов BIOS в реальном режиме все ПК имеют образ ROM BIOS в адресах E0000h-FFFFFh или F0000h-0FFFFFh. Кроме того, образ BIOS должен находиться и под самой верхней границей адресного пространства, поскольку все процессоры х86 по аппаратному сбросу стартуют с адреса начала последнего параграфа памяти (FFFF0h — 8086/88, FFFFF0h — 80286 и 386SX, FFFFFFF0h — 386DX и выше с 32-разрядной шиной адреса, FFFFFFFF0h — P6 и выше с 36-разрядной шиной адреса).
Для компьютеров класса АТ-286 и 386SX с 24-битной шиной адреса верхняя граница оперативной памяти — FDFFFFh (максимальный размер 15,9 Мбайт). Область FE0000h-FFFFFFh содержит образ ROM BIOS, обращение к этой области эквивалентно обращению к ROM BIOS по адресам 0E0000h-0FFFFFh.
Для ПК на процессорах 386DX и выше с 32-битной шиной адреса теоретический предел объема ОЗУ — почти 4 Гбайт, верхний образ BIOS находится в адресах FFFE0000h-FFFFFFFFh. Для ПК на процессорах P6+ с 36-битной шиной адреса предел объема ОЗУ — почти 64 Гбайт и верхний образ BIOS находится в адресах FFFFE0000h-FFFFFFFFFh.
Области физических адресов, не занятые ОЗУ и ROM BIOS, могут быть использованы устройствами шин (E)ISA и PCI (AGP).
Для памяти адаптеров, устанавливаемых в шину ISA, безусловно доступна часть области адресов UMA A0000h-EFFFFh или A0000h-DFFFFh (до начала ROM BIOS). В этой области располагаются и модули расширений BIOS (см. п. 12.7.1). Карты ISA могут иметь память и в области FE0000h-FFFFFFh, но она программно доступна лишь в защищенном (и большом реальном) режимах процессора. Для отображения этой области памяти на шину ISA (а не ОЗУ) в CMOS Setup предусмотрен параметр
Поскольку шина ISA имеет 24-разрядную шину адреса, ведущие устройства этих шин (ISA Bus Master) способны обращаться к памяти (ОЗУ и память адаптеров) в пределах первых 16 Мбайт (000000-FFFFFFh). To же ограничение касается и стандартного контроллера DMA, которым могут пользоваться устройства шины ISA (и иные устройства системной платы).
Шина PCI имеет 32-разрядную шину адреса, так что ее ведущим устройствам доступна вся физическая память [5] . Для устройств PCI могут выделяться любые области адресов, свободные от ОЗУ, ROM BIOS и устройств ISA. Области адресов памяти, используемые каждым устройством PCI, описаны в заголовках их конфигурационных пространств. Эти данные требуются при распределении ресурсов и настройке мостов PCI в процессе инициализации шины.
5
Для пока еще экзотических вариантов системных плат с памятью более 4 Гбайт и 36-разрядной физической адресацией последних моделей процессоров PCI может использовать двухадресные циклы обращения с 64-битным адресом.
12.2. Пространство ввода-вывода
Пространство ввода-вывода в IBM PC, как и в процессорах х86, отделено от пространства памяти. У всех этих процессоров, в том числе и 32-разрядных, в пространстве ввода-вывода используется 16-разрядная адресация (диапазон адресов 0-FFFFh). Для дешифрации адресов портов в оригинальном PC из 16 бит использовались только младшие 10 (