[Previous] [Next]

Шины в компьютерных системах

Шина (bus) представляет из себя совокупность данных, адресов и линий (проводников на печатной плате или в кабеле или шлейфе) сигналов контроля, которые позволяют устройствам организовать сообщение между собой. Некоторые шины являются "широкими", обеспечивая одновременную (параллельную) передачу многих битов данных и битов контроля. Другие представляют собой всего лишь пару проводов, позволяющую устройствам передавать данные и управляющие сигналы последовательно. Некоторые шины позволяют связываться с любым другим устройством на шине. Другие требуют наличия "хозяина шины", master controller (центральный процессор или контроллер ввода/вывода), выступающего в роли получателя или отправителя данных.

От того, какими свойствами обладает главная шина компьютера зависит производительность всей системы (недостаточно корректно сказано, но все-таки можно ее определить, как шину, к которой подключается большинство системных устройств и которая ближе всего "подходит" к процессору). В середине 80-x, например, рабочая станция Apollo на базе процессора 68020 была ориентирована на ISA шину как на стандарт. В настоящее время персональные компьютеры с Intel-архитектурой эксплуатируют шину PCI, хотя и претерпевшую модификации, но очевидно главную — стоит лишь нарисовать блок-схему системы в целом. (Вообще говоря, PCI шина применима на многих платформах, что и было изначально заложено в стандарт.)

Архитектура драйверов в операционной системе Windows NT 5 эффективно поддерживает введение новых шин, а поддержка многих популярных шин встроена в стандартную поставку Windows.

ISA: Industry Standard Architecture

Шина ISA была предложена фирмой IBM для PC/AT в начале 1980-x. Она поддерживала подключение и 8-разрядных, и 16-разрядных устройств. По той причине, что эта шина изобреталась два десятилетия назад, она не отличалась ни быстротой, ни простотой конструкции. Эта шина является динозавром компьютерных технологий, однако ее невозможно забыть по двум причинам.

Во-первых, столь популярные и до сих пор обязательные устройства настольного компьютера, какими являются параллельный порт LPT и последовательные СОМ порты, являются устройствами ISA шины. Эта ISA шина через мост подключается к шине PCI, и существует в компьютере даже тогда, когда на материнской плате нет ни одного ISA разъема. (Для фанатиков же ISA устройств некоторые фирмы, например PHILIPS, выпускает микросхемы для реализации подключения ISA плат к шине USB.)

Во-вторых, при усовершенствовании компьютеров, которые ISA шина поначалу вполне устраивала, выявилось столько неудобств и ограничений, что стало очевидным — к принятию шинных протоколов следует подходить более ответственно. Невысокая пропускная способность (максимум 8 МБ/сек), отсутствие стандарта на использование адресов ввода/вывода, невозможность совместного использования прерываний (их всего 16, большая часть которых уже занята системными устройствами, оставляя вновь подключаемым устройствам всего лишь 2 или 3) настойчиво указывали на необходимость новых решений. Например, старые ISA платы не могут использовать все 16 разрядов адресов ввода/вывода, а декодируют только первые 10 разрядов адреса, в результате чего отзываются по адресам через 0x400 адресов. Устройство с адресом 0x300 отвечает также и по адресу 0x700. Появление таких устройств в системе приводит к откровенной бесполезности большей части 64 Кбайтного адресного пространства ввода/вывода. И, наконец, шина ISA имеет возможность всего лишь 24 разрядной адресации, что определяет ограничение на выполнение переноса данных только в нижние 16 МБ физической памяти. Этот артефакт доставляет Windows особые проблемы при работе с ISA шиной, если возникает необходимость применить DMA способ передачи данных.

Как уже было сказано, устройства ISA шины не объявляли себя, они не предоставляли списка требуемых ресурсов, и они не нуждались в динамическом конфигурировании со стороны программного обеспечения. Конфигурирование этих устройств выполнялось вручную и обычно сводилось к требуемой установке перемычек (jumpers) или переключателей DIP.

Современные ISA устройства пытаются скорректировать эту ситуацию, предлагая Plug and Play расширение к стандарту ISA. Такие устройства значительно расширили свою популярность с введением операционной системы Windows 95. Версии NT, существовавшие до Windows 2000, реально не поддерживали спецификацию PnP, отчего этим новым ISA устройствам приходилось полностью полагаться на специальные программы инсталляции, которые обеспечивали их должное функционирование под NT, и услуги Системного Реестра. Однако с выходом Windows 2000 поддержка таких устройств стала вполне корректной.

EISA: Extended Industry Standard Architecture

Спецификация шины EISA является расширением архитектуры ISA. Расширение EISA было попыткой устранить ограничения ISA и при этом избежать проблем несовместимости с существующими устройствами ISA (платами ISA), отказаться совсем от которых в тот момент было невозможно.

Разумеется, требование на обеспечение совместимости ограничивало модернизацию шины по многим направлениям. Например, в то время, как разрядность передаваемых данных (в литературе — data bus width) была увеличены до 32 бит, тактовая частота осталась равной 8 МГц. Соответственно, максимальная скорость передачи данных по шине стала составлять около 32 Мбайт в секунду. Кроме того, поскольку разъемы EISA на материнской плате должны были принимать еще и платы собственно ISA, то появились существенные сложности в устранении электрических шумов, обусловленных топологией разводки соединений ISA. Компьютерные пользователи постарше могут припомнить, что разъем EISA на материнской плате состоял из ISA разъема и присоединенного к нему в продолжение разъема покороче и поизящнее, что вместе и составляло EISA-слот.

Устройства EISA уже вполне обеспечивали возможности автоматической идентификации, хотя процедура эта была не слишком проста. Во всяком случае, спецификация EISA сдала свои позиции протоколу PCI достаточно легко, стоило лишь тому появиться. (А вот прощание с ISA проходило гораздо тяжелее, можно, даже сказать — еще продолжается и сейчас!)

PCI: Peripheral Component Interconnect

Быстрые сетевые приложения, высококачественное видео, 16 и 20 разрядный звук и быстро развивающиеся музыкальные приложения, дисплеи с глубиной цвета 24 бит — все эти новшества потребовали введения нового стандарта шины с высокими скоростями передачи данных. Шина PCI явилась попыткой удовлетворить все эти возросшие потребности. И хотя первоначальная конструкция зародилась в Intel (первая спецификация версии 1.0 появилась в июне 1992), шине PCI оказана поддержка со стороны других компьютерных производителей. Она является относительно независимой от процессорных конфигураций и успешно используется теперь в компьютерах Alpha(DEC) и PowerPC (Motorola). Ha рисунке 5.2 показана типовая конфигурация системы, содержащей PCI шину.

Рис. 5.2
Типовая конфигурация системы с шиной PCI

Повысив тактовую частоту до 33 МГц (позже и до 66 МГц) и применив множество технических уловок, разработчики PCI добились того, что пропускная способность PCI шины возросла до 132 Мбайт/сек при передаче данных по 32-разрядной шине. При передаче данных по 64-разрядной шине пропускная способность увеличивается вдвое. Некоторые из принципов, которые позволили обеспечить столь значительный прогресс, таковы:

Архитектура PCI позволяет подключить к шине до 32 физических единиц, называемых устройствами (devices). Каждая из этих единиц может содержать до 8 отдельных функциональных единиц, называемых функциями (functions). После отбрасывания одного адреса функции для генерации широковещательных сообщений (broadcast messages — сообщений, предназначенных всем устройствам), остается 255 адресуемых единиц-функций на одной шине PCI. (Учитывая, что PCI-PCI мост является обычным устройством шины, возникает возможность подключения к основной шине до 255 дополнительных шин PCI).

Доступ к регистрам

Шина PCI позволяет использовать 32 разрядные адреса, но системное пространство ввода/вывода все еще ограничено адресами до 64K (16 разрядов). Соответственно, там должны пребывать и все регистры PCI. Более того, в системах, содержащих шины EISA или ISA, разработчикам следует воздерживаться и от использования адресов, которые могли бы использовать устаревшие устройства, подключаемые к этим шинам, по причинам, указанным выше.

Наряду с адресацией пространства ввода вывода и адресацией памяти, архитектура PCI определяет диапазон адресов во внутренней памяти устройства, называемых конфигурационным пространством (configuration space). При обсуждении автоматического конфигурирования PCI будет объяснено, какую структуру это конфигурационное пространство имеет и как используется в процессе идентификации устройств (плат) на шине PCI.

Механизмы прерываний

Шина PCI использует четыре равно-приоритетных линии запросов на прерывание INTA-INTD. Эти линии являются активными по низкому уровню (сигналом прерывания является низкий уровень в линии), переключаемые по уровню (информативным значением является логический уровень — в отличие от того случая, когда информативным является фронт сигнала, то есть переход от одного уровня к другому). Данные линии допускают возможность совместного использования (это, возможно, станет технически более понятным, если сказать, что такая линия прерываний реализуется по электронной схеме "open drain", N-МОП аналог "открытого коллектора" для ТТЛ логики). Устройство, подключаемое к PCI и представляющее одну функцию, должно использовать только линию INTA.

Многофункциональные устройства могут использовать комбинации из четырех линий, начиная с INTA. Единственное ограничение состоит в том, что каждая из восьми функций (возможных в одном устройстве) может использовать только одну линию прерывания. Соответственно, устройство с внутренними восемью функциями может задействовать имеющиеся линии INTA, INTB, INTC, INTD следующим образом:

Спецификация PCI относительно безразлична к приоритетам прерываний. Приоритеты, в данном случае, зависят от внешнего контроллера, который переадресует запрос на прерывание PCI устройства в соответствующую линию системных прерываний. Рекомендуемые схемы представления прерываний PCI устройств с использованием программируемых редиректоров (redirector или router) прерываний разной сложности можно найти в книге Тома Шанли и Дона Андерсона, PCI System Architecture, 4 издание, стр. 227-230, содержащей изложение спецификации PCI с полезными комментариями.

Например, на персональных компьютерах редиректор может преобразовать запрос функциональной единицы PCI по линиям INTA-INTD в запрос по одной из линий IRQ0-IRQ15, схема 14-4 в указанном издании. Чтобы можно было сделать это, любая функция внутри PCI устройства, которая генерирует прерывание, должна задействовать два конфигурационных регистра (в своем конфигурационном пространстве):

Такая схема является достаточно гибкой, поскольку не навязывает никаких ограничений, обусловленных спецификой механизма прерываний в системе, конструктору устройств или системы, что делает возможным использование этой архитектуры в процессорных средах, отличных от Intel x86.

Возможности DMA

Спецификация PCI не включает понятия slave DMA. Вместо этого, собственные функции PCI (функциональные единицы) являются либо "хозяевами шины" (bus masters), выполняющими свой собственный DMA перенос данных, либо они используют программируемый ввод/вывод. Единственным типом устройств, которые могут использовать DMA перенос данных с использованием системных контроллеров (slave DMA), являются не-PCI платы, подключенные через (E)ISA мост.

В DMA операциях собственно PCI шины, участники называются агентами (agents), и в каждой транзакции всегда участвуют два из них, а именно:

Поскольку любой "хозяин шины" PCI может быть инициатором, то возможно передача данных напрямую между двумя PCI устройствами без промежуточной остановки данных в оперативной памяти. Эта мощная возможность просто предназначена для использования в высокоскоростных сетевых и видео приложениях.

Необходимо также упомянуть, что спецификация PCI не определяет стратегию, которая должна быть использована при арбитрировании доступа к шине. Определены только временные диаграммы арбитрирующих сигналов в шине. Метод по нахождению того, "кто будет следующим" в использовании шины, является определяемым конкретной системой, где реализованы шины PCI.

Память, отведенная устройствам

Отведенная память, используемая РСI функциями (функциональными единицами PCI устройств), может быть размещена в любом месте 32 разрядного адресного пространства. Эта возможность может быть использована при работе в базисе "функция устройства" — "функция устройства".

Интересная возможность спецификации PCI состоит в том, что в конфигурационном пространстве предусмотрено место для указания ссылки на область расширения ПЗУ (Extension ROM Base Address, см. таблицу 5.4), встроенного в данное PCI устройство. В этом ПЗУ могут быть записаны фрагменты кодов инициализации, предназначенные для инициализации устройства на разных аппаратных платформах, что дает возможность поставлять один и тот же продукт для разных компьютерных платформ. Спецификация PCI определяет стандартный заголовочный формат для этих блоков ПЗУ, поэтому программное обеспечение, выполняющее инициализацию, может определить необходимый фрагмент, хранящийся в ПЗУ и загрузить именно его для выполнения инициализации на имеющейся платформе.

Автоматическое распознавание и конфигурирование

Спецификация PCI обязывает каждую отдельную функцию (функциональную единицу устройства, а значит, и шины) иметь свою собственную область для хранения конфигурационных данных, размер которой равен 256 байт. Эта область известна как конфигурационное пространство функциональных единиц PCI (PCI function's configuration space).

Первые 64 байта такого конфигурационного пространства (называемого заголовком) имеют предопределенную структуру (таблица 2.4), в то время как остальные 192 байта могут быть использованы по усмотрению разработчика данной PCI платы. Системное программное обеспечение может использовать этот заголовок для идентификации функциональной единицы PCI и выделения ей ресурсов. Заголовок включает:

Регистр Class Code внутренне разбит на три поля (Class Code, старший байт, Sub-Class Code и ProgIF, младший байт) и содержит информацию для использования классовыми системными драйверами (предназначенными для обслуживания целого класса родственных устройств, например, сетевых контроллеров, устройств мультимедиа, docking-станций, шинных мостов, кодирующих/декодирующих контроллеров, интеллектуальных контроллеров ввода/вывода). Например, значение Class Code, равное 0C (hex), в спецификации PCI 2.2 определяет контроллеры последовательных шин. Тогда значение Sub-Class Code, равное 00, определяет IEEE 1394, 01 — ACCESS.bus, 02 — SSA (Serial Storage Architecture), 03 — USB, 04 — Fibre Channel, 05 — SMBus (System Management Bus). Для подкласса USB значение ProgIF, равное 00, описывает USB контроллер, соответствующий спецификации Universal host Controller. Значению 10 (hex) соответствует контроллер спецификации Open Host Controller, а значение FE (hex) описывает USB устройство (не являющееся хост-контроллером).

Байты конфигурационного пространства  
3

2

1 0  
Device ID Vendor ID 00
Status Register Command Register 01
Class Code Revision ID 02
BIST Header Type Lat Timer CL Size 03
Base Address 0 04
Base Address 1 05
Base Address 2 06
Base Address 3 07
Base Address 4 08
Base Address 6 09
Card Bus CIS Pointer 0A
Subsystem ID Subsystem Vendor ID 0B
Expansion ROM Base Address 0C
Зарезервировано Cap.Pointer 0D
Зарезервировано 0E
Max_Lat Min_Gnt int Pin int Line 0F
Таблица 5.4.
Заголовок конфигурационного пространства одной функции устройства PCI

Регистр BIST (Built-In-Self-Test) отражает способность устройства к проведению операции самотестирования. Единица в старшем (седьмом) бите этого регистра означает, что данная функция устройства может выполнять операцию самотестирования. Шестой бит, установленный в 1, означает проведение тестирования, причем на эту операцию функции устройства дается не более 2-х секунд. В младших четырех битах содержится код ошибки либо 0, при удачном завершении.

Регистры Base Address Register 5..0 содержат адреса портов ввода/вывода (или диапазонов отведенной памяти) для доступа к внутренней памяти данной PCI функции.

Отображать все 256 адресов конфигурационного пространства в памяти или пространстве ввода/вывода достаточно расточительно, поэтому операционная система дает возможность доступа к конфигурационному пространству путем обращения к следующим двум регистрам (адреса которых устанавливаются операционной системой):

Операционная система предоставляет HAL функции для доступа к конфигурационным данным. Для этого предлагается использовать функции HalGetBusData, HalSetBusData и HalAssignSlotResources. Правда, в WDM модели они считаются устаревшими (даже их описание в DDK отсутствует) — рекомендовано работать через запросы к нижнему драйверу стека.

Для идентификации драйвера, загружаемого операционной системой для обслуживания данного устройства, спецификация PCI рекомендует разработчикам ОС использовать информацию из конфигурационных регистров Vendor ID, Device ID, Revision ID, Class Code, Subsystem Vendor ID, Subsystem ID (последние два стали обязательными только в спецификации версии 2.2).

IEEE 1394: Firewire Bus

Предложенная и реализованная Apple Computers, a впоследствии определенная институтом IEЕЕ как высокоскоростная одноранговая (peer-to-peer) последовательная шина, IEEE 1394 предназначена для приложений, когда USB шина версии 1.1 не могла использоваться из-за низкой скорости передачи данных. Спецификация IEEE 1394 (на текущий момент — IEEE 1394a-2000) описывает три стандартных скорости передачи данных 100, 200 и 400 Мбит/сек. (Спецификация IEEE 1394b поддерживает большие скорости.) Но даже при таких скоростях, шина IEEE 1394 уже в состоянии переносить более 10 Мбайт в секунду, что превышает показатели ISA.

Наименование Firewire представляет собой торговую марку Apple Computers. Термин 1394 обычно используется для того, чтобы обозначить принадлежность этой спецификации к аппаратному обеспечению персональных компьютеров. Фирма Sony и другие производители видеокамер используют для обозначения своей модификации 1394 термин i.Link(TM).

Каждое устройство IEEE 1394 может быть подключено к шине кабелем 4,5 м, содержащем 6 или 4 провода. К шине может быть подключено до 63 устройств шлейфовым образом (daisy-chained) при общей длин соединения 72 м. Можно использовать шинные мосты и устройства разветвления, что позволяет подключить дополнительно до 62 устройств. При использовании шинных мостов можно задействовать до 1024 шин. В результате, число устройств, которые теоретически можно подключить к компьютеру в конфигурации 1394, составляет 64K. При подключении устройства, ему присваивается 16-разрядный идентификатор (Node ID).

6-проводной кабель содержит 2 проводника для передачи данных, 2 для передачи сигналов синхронизации и 2 для энергоснабжения подключаемых устройств. Кабель экранирован и оканчивается разъемом, который получен модификацией разъема игровой приставки Nintendo Gameboy.

Доступ к регистрам

Спецификация IEEE 1394 удовлетворяет стандарту IEEE 1212 архитектуры Control and Status Register (CSR). Стандарт CSR определяет фиксированную 64-разрядную схему адресации, включающую 10-разрядный шинный номер и 6-разрядный идентификатор узла (Node ID) c остающимся 48-разрядным полем для использования по усмотрению устройства.

Как в случае со спецификацией USB, регистры предназначены для управления и хранения информации о состоянии устройства, а также для передачи небольших (до 64 байт) пакетов данных. Синхронная передача используется в тех случаях, когда необходимо выдержать указанную пропускную способность шины (например, при работе с видеокамерой), асинхронная передача данных используется при гарантированном поступлении данных (например, при считывании данных с жесткого диска.)

Механизмы прерываний

Шина 1394 симулирует прерывания устройств (впрочем, как и шина USB). Устройство должно послать пакет данных для того, чтобы сообщить хост-контроллеру о своем состоянии, когда требуется вмешательство операционной системы. Драйвер, отвечающий за данное устройство, должен отреагировать на такой пакет данных, который размещается IEEE 1394 интерфейсом в системном адресном пространстве.

Семейство стандартов 1394 включает Open Host Controller Interface. Спецификация OHCI является наиболее значимым стандартом для разработчиков драйверов, работающих с устройствами шины 1394. Этот интерфейс обеспечивает общий механизм работы с прерываниями и DMA передачей данных. Ассоциация 1394 Trade Association предоставляет информацию по спецификации OHCI и другие связанные с ним данные на интернет сайте 1394.ta.org.

Возможности DMA

Хост-контроллер IEEE 1394 использует DMA для передачи данных и команд в/из системной памяти. Устройства, подключенные к шине 1394, не могут иметь прямого доступа к системной памяти, поэтому адаптеры OHCI предоставляют диапазон адресов (в системной памяти),с которыми, собственно, и работают прикладные программы и контроллер DMA. Таким образом, возникает иллюзия возможности DMA передачи данных для каждого устройства, подключенного к шине.

Автоматическое распознавание и конфигурирование

Спецификация шины 1394 была разработана с непосредственной поддержкой спецификации PnP. Каждое устройство при подключении к шине сигнализирует о своем существовании при выполнении шинной операции 'reset', что в сильной степени напоминает способ обращения с шиной USB и ее устройствами. Хост-компьютер (или другие узлы) выполняют операцию "перечисления" конфигурационных ПЗУ для того, чтобы обнаружить данное устройство и обеспечить запуск (а при необходимости — и инсталляцию) соответствующего драйвера.

USB: Universal Serial Bus

Спецификация USB была разработана консорциумом компаний, включая Intel и Microsoft. Целью нового стандарта было обеспечение организации недорогой среднескоростной шины в таких областях применения, как передача цифровых изображений, компьютерная телефония и мультимедийные игры. Текущими версиями спецификации USB является версия 1.1 и версия 2.0 (разумеется, во вторую заложены более высокие скоростные характеристики), и список компаний-членов, участвующих в консорциуме, постоянно растет.

Предельная скорость передачи данных по шине USB спецификации 1.1 составляет 12 Мбит/сек (Full Speed). Медленные используют низкую скорость передачи 1,5 Мбит/сек (Low Speed). Стандарт USB версии 2.0 поддерживает физическую скорость передачи 480 Мбит/сек (High Speed). Реально же максимальная скорость соединения компьютер - USB устройство (в разрабатываемом автором приборе) достигала 32 Мбайт/с. Данные передаются последовательно по паре проводников. Питание для некоторых устройств доступно по отдельным проводникам питания и заземления (для устройств с небольшим энергопотреблением).

Устройства USB могут быть подключены 5-метровым кабелем (а практически — и более длинным). Использовании USB хаба (hub — сетевой концентратор), позволяет увеличить дальность размещения устройств от хост-компьютера и увеличить количество устройств, подключаемых к одной шине USB. Последовательно можно включить до пяти устройств-хабов, обеспечив длину соединения 30 метров. Пример конфигурации "сети", построенной с использованием USB-хабов приводится на рисунке 5.4.

Рис. 5.4
Пример конфигурации устройств шины USB

Следует заметить, что устройства High Speed (для USB 2.0) должны поддерживать функционирование и на скорости Full Speed. Более того, процесс "перечисления" проводится как раз на этой скорости.

При конфигурировании устройств при использовании внешних USB хабов следует помнить, что хаб, предназначенный для работы на некоторой скорости (например, Full Speed), ограничит скорость работы устройств, стоящих в цепочке устройств далее от хост-компьютера (например, High Speed устройства), и последние не смогут работать на скорости, превышающую скорость этого медленного хаб-концентратора. При отсутствии возможности работать на скорости Hi Speed устройства Hi Speed работают на скорости Full Speed.

Работа программиста, создающего драйвер внешнего (не находящегося на материнской плате) USB устройства сводится к тому, чтобы воспользоваться программным интерфейсом системных драйверов шины USB, общение с которым происходит при помощи пакетов, называемых URB (USB Request Block) пакетами. Работа с регистрами USB контроллеров на материнской плате теперь стала уделом узкого круга специалистов — разработчиков материнских плат и операционных систем. Всем остальным разработчикам USB устройств с управлением программ под Windows предлагается достаточно развитый программный интерфейс к системным WDM драйверам, которые берут на себя все аппаратно-ориентированные операции.

К хост-компьютеру можно подключить до 127 устройств, шинный адрес которых устанавливается динамически при подключении устройств.

Доступ к регистрам

Доступ к регистрам устройств (со стороны хост-контроллера и системных драйверов) осуществляется с применением специальных USB команд, которые применяются для конфигурирования, управления энергопотреблением и переноса небольших объемов данных. Прохождение команд (предназначенных для конкретного устройства) в сильной степени определяется устройством, так что число и назначение команд определяется каждым устройством индивидуально путем заявления (передачи в хост-контроллер) конфигурационных данных по соответствующим запросам в начале работы.

Механизм передачи данных является асинхронным и блочным. В каждом блоке передаваемых данных, называемом USB-фреймом, может передаваться до 1280 байт данных. Каждый фрейм занимает фиксированный временной интервал 1 мсек.

Оперирование командами и блоками данных реализуется при помощи такой логической абстракции, как USB pipe-канал. Pipe-канал является каналом связи между хост-контроллером и конечной точкой (endpoint — еще одна логическая абстракция спецификации USB) внешнего устройства, которой обычно является буфер некоторой протяженности внутри внешнего устройства. Открытый pipe-канал можно сравнить с открытым файлом. Кстати сказать, с ним ассоциирован дескриптор открытого канала.

Для передачи команд (и данных, входящих в состав команд) используется pipe-канал по умолчанию (default pipe), в то время как для передачи данных может быть использовано любое количество потоковых pipe-каналов (stream pipes) и pipe-каналов сообщений (message pipes).

Концепция "конечных точек" (endpoints) USB сильно напоминает концепцию функций устройств PCI, поскольку после конфигурирования устройства за конечными точками внутри него закрепляется и определенная функция (0 — только функции управления и контроля, остальные — по замыслу разработчика, но — на все время работы в системе).

Механизмы прерываний

Для шины USB настоящего механизма прерываний, строго говоря, не определено. Вместо этого, USB интерфейс хост-компьютера опрашивает подключенные устройства на предмет наличия данных о прерывании. Опрос происходит в фиксированные интервалы времени, обычно каждые 1-32 миллисекунды. Устройству разрешается посылать в момент опроса до 64 байт данных.

С точки зрения драйвера, возможности работы с прерываниями и DMA передачей данных фактически определяются USB хост-контроллером, который и обеспечивает поддержку физической реализации USB интерфейса. Достаточно много усилий было предпринято для стандартизации интерфейса хост-адаптера, в результате чего появились два типа интерфейсов: Open Host Controller Interface (OpenHCI) и Universal Host Controller Interface (UHCI). Собственно хост-контроллер и поддерживает общепринятые механизмы прерываний и DMA передачи данных. Внешние пользовательские USB устройства должны лишь пассивно и в соответствии с протоколом участвовать в обмене данными.

Возможности DMA

Устройства USB шины не имеют прямого доступа к системной памяти. Они изолированы от системных ресурсов USB интерфейсом хост-компьютера и не поддерживают способа DMA передачи данных в привычном смысле. Тем не менее, USB интерфейс хост-компьютера обеспечивает "иллюзию" поддержки DMA для логических pipe-каналов, обеспечивающих доступ к конечным точкам (т.е. буферам) внутри подключенных к шине устройств. По мере получения данных от подключенных USB устройств, интерфейс хост-контроллера использует DMA доступ для того, чтобы поместить полученные из устройства данные в системную память. Таким образом, USB интерфейс, состоящий из внешнего устройства, контроллера в хост-компьютере и системные драйверы (но не каждое USB устройство по отдельности!), поддерживает возможность DMA передачи данных — или, строго говоря, ее иллюзию.

Автоматическое распознавание и конфигурирование

Спецификация USB была разработана с непосредственной поддержкой спецификации PnP (иногда кажется, что — с откровенной ориентацией на WDM модель драйверов Windows). Каждое USB устройство при подключении к шине USB сигнализирует о своем существовании и сообщает идентификатор производителя (vendor ID) и идентификатор устройства (device ID). Эти идентификаторы являются определяющей информацией в выборе загружаемого драйвера — соответствующая информация должна присутствовать в Системном Реестре (если ничего подходящего там не обнаруживается, то инициируется процесс установки нового драйвера).

Шина PC Card (PCMCIA)

Около десяти лет назад, несколько компаний совместно разработали стандарт шинной архитектуры для мобильных устройств. Первоначально, внимание было сфокусировано на платах оперативной памяти, и эта группа получила название Personal Computer Card International Association (PCMCIA). Мобильные устройства ограничены в размерах и энергоресурсах, и на этом сделан акцент стандартов данной группы. На сегодня более 300 компаний являются членами PCMCIA.

Первоначально, стандарт PC Card определял 68-выводной интерфейс при одной из трех величин толщины печатной платы, типа I, типа II или типа III. Данный стандарт определяет скорость передачи данных практически такую же, что и для ISA шины. Но в данном случае более высокий приоритет был установлен для минимизации энергопотребления и размеров, а не для улучшения скоростных параметров шины.

Термин PCMCIA зачастую используется вместо термина PC card, и наоборот. Такое использование создает некое противоречие: PCMCIA является организацией, в то время, как PC Card определяет шинный интерфейс. В настоящее время PCMCIA определяет, по крайней мере, три стандарта: PC Card, DMA и CardBus. Таким образом, когда используется термин 'PCMCIA card', следует насторожиться, поскольку, строго говоря, он не описывает точно, какой же конкретно тип устройств обсуждается.

Первоначально, тактовая частота шины PC Card была установлена равной тактовой частоте шины ISA, то есть 8 МГц, что может быть использовано при работе с 8 и 16 разрядными устройствами. Соответственно, максимальная пропускная способность шины при работе 16 разрядными картами достигает 16 Мбайт в секунду.

Архитектура CardBus позволяет использовать 32 разрядные устройства. Кроме того, тактовая частота увеличена до величины, определенной для шины PCI, то есть 33 МГц, что увеличивает пропускную способность CardBus до более чем 128 Мбайт/сек.

Доступ к регистрам

Стандарт PC Card определяет 26 разрядный адресный диапазон (64 Мбайт). С другой стороны, адресация происходит по схеме, сходной со схемой, используемой в ISA архитектуре. В архитектуре CardBus схема использования пространства, адресуемого 32 разрядным адресом, аналогична схеме, примененной в архитектуре PCI.

Механизмы прерываний

В стандартах PC Card и CardBus определен один проводник (линия) для прерываний — IREQ, или CINT. Эта линия прерываний управляется уровнем (level sensitive), следовательно, может быть использована совместно несколькими картами на одной и той же шине. Однако при использовании многофункциональных PCMCIA карт (если линия прерываний используется совместно несколькими функциями карты) должно быть обеспечено арбитрирование средствами программного обеспечения.

Возможности DMA

Первоначально предложенный стандарт PC CARD не предполагал возможности DMA передачи данных. Более поздний стандарт, принятый в 1995 году, ввел DMA расширение в стандарт, названный 'DMA'. Это расширение стандарта позволяет выполнять передачу 16 разрядных слов в манере, сходной со стандартом ISA. Этот стандарт подразумевает, что все устройства, подключенные к шине, выступают в роли 'bus slave' устройств, совместно использующих DMA контроллеры. Так же, как и в архитектуре ISA, трудно реализовать режим 'bus master DMA'.

Стандарт CardBus позволяет выполнять операции DMA передачи данный почти что таким же образом, как это выполняется в архитектуре PCI. Данное дополнение, позволяющее работать с устройствами в роли 'bus master', является весьма важным. 16 и 32 разрядные операции DMA передачи данных в стандарте CardBus могут выполняться при частоте 33 МГц. Правда, фактор ограниченности геометрических размеров требует использования компонентов (ИС) более высокой степени интеграции.

Автоматическое распознавание и конфигурирование

Стандарт шины PC Card удовлетворяет спецификации PnP полностью, хотя еще продолжается внесение изменений, касающихся "горячего подключения" устройств и автоматического конфигурирования.

Программное обеспечение для стандартов PC Card или CardBus разделяется на два крупных фрагмента: Сервисы Сокетов, Socket Services (в данном случае, socket — гнездо, разъем), и Службы Карт (Card Services). Первый представляет программное обеспечение уровня BIOS, и оно управляет в системе одним или более разъемов. Это программное обеспечение отвечает за обнаружение и объявление факта подключения нового устройства. Вторая часть (Card Service) управляет аппаратными ресурсами данной карты.