Эта статья включает список общих ссылок , но в ней отсутствуют соответствующие встроенные цитаты . ( Апрель 2014 ) |
Расширяемый интерфейс хост-контроллера ( xHCI ) — это техническая спецификация, которая обеспечивает подробную структуру для функционирования хост-контроллера компьютера для универсальной последовательной шины (USB). Известный также как спецификация хост-контроллера USB 3.0 , xHCI разработан для обеспечения обратной совместимости, поддерживая широкий спектр USB-устройств от старых USB 1.x до более новых версий USB 3.x.
В отличие от своих предшественников, Open Host Controller Interface (OHCI) и Universal Host Controller Interface (UHCI), xHCI предлагает несколько технологических усовершенствований. В частности, он разработан для обработки нескольких скоростей передачи данных (низкая, полная, высокая и SuperSpeed) в рамках одного унифицированного стандарта. Это делает его более эффективным в управлении вычислительными и энергетическими ресурсами, что особенно полезно для мобильных устройств с ограниченными возможностями питания, таких как планшеты и смартфоны. Кроме того, xHCI упрощает архитектуру, необходимую для поддержки смеси низкоскоростных и высокоскоростных устройств, что упрощает разработку драйверов и системного программного обеспечения.
xHCI представляет собой значительное усовершенствование по сравнению со своими предшественниками, открытым интерфейсом хост-контроллера (OHCI) и универсальным интерфейсом хост-контроллера (UHCI), по нескольким ключевым направлениям:
Благодаря расширенной поддержке нескольких скоростей, оптимизации управления питанием и упрощению базовой архитектуры xHCI выступает в качестве более эффективного и унифицированного стандарта для хост-контроллеров USB.
xHCI — это радикальный прорыв по сравнению с предыдущими поколениями архитектур интерфейсов USB-хост-контроллера (т. е. Open Host Controller Interface (OHCI), Universal Host Controller Interface (UHCI) и Enhanced Host Controller Interface (EHCI)) по многим параметрам. Ниже приведены основные цели архитектуры xHCI:
Контроллеры OHCI и UHCI поддерживают только устройства со скоростью USB 1 (1,5 Мбит/с и 12 Мбит/с), а EHCI поддерживает только устройства USB 2 (480 Мбит/с).
Архитектура xHCI была разработана для поддержки всех скоростей USB, включая SuperSpeed (5 Гбит/с) и будущих скоростей, в рамках единого стека драйверов.
Когда USB был первоначально разработан в 1995 году, он был нацелен на настольные платформы, чтобы остановить распространение разъемов, которые появлялись на ПК, например, PS/2 , последовательный порт , параллельный порт , игровой порт и т. д., и энергопотребление хоста не было важным фактором в то время. С тех пор мобильные платформы стали платформой выбора, и их батареи сделали энергопотребление ключевым фактором. Архитектуры устаревших хост-контроллеров USB (OHCI, UHCI и EHCI) были очень похожи в том, что «расписание» для транзакций, которые должны были быть выполнены на USB, было создано программным обеспечением в памяти хоста, и аппаратное обеспечение хост-контроллера непрерывно считывало расписания, чтобы определить, какие транзакции необходимо выполнить на USB и когда, даже если никакие данные не были перемещены. Кроме того, в случае чтения с устройства устройство опрашивалось каждый интервал расписания, даже если не было данных для чтения.
Устаревшие архитектуры USB хост-контроллера демонстрируют некоторые серьезные недостатки при применении к виртуализированным средам. Устаревшие интерфейсы USB хост-контроллера определяют относительно простой аппаратный насос данных; где критическое состояние, связанное с общим управлением шиной (распределение полосы пропускания, назначение адреса и т. д.), находится в программном обеспечении драйвера хост-контроллера (HCD). Попытка применить стандартную технику виртуализации аппаратного ввода-вывода — репликацию регистров интерфейса ввода-вывода — к устаревшему интерфейсу USB хост-контроллера проблематична, поскольку критическое состояние, которым необходимо управлять на виртуальных машинах (ВМ), недоступно для оборудования. Архитектура xHCI переносит управление этим критическим состоянием на оборудование, позволяя управлять ресурсами USB на ВМ. Функции виртуализации xHCI также обеспечивают:
EHCI использует контроллеры OHCI или UHCI в качестве «контроллеров-компаньонов», где устройства USB 2 управляются через стек EHCI, а логика порта EHCI позволяет направлять низкоскоростное или полноскоростное USB-устройство в порт «компаньона» UHCI или OHCI-контроллера, где низкоскоростные или полноскоростные USB-устройства управляются через соответствующий стек UHCI или OHCI. Например, плата хост-контроллера USB 2 PCIe, которая представляет 4 разъема USB «Standard A», обычно представляет один 4-портовый EHCI и два 2-портовых OHCI-контроллера для системного программного обеспечения. Когда высокоскоростное USB-устройство подключено к любому из 4 разъемов, устройство управляется через один из 4 портов корневого концентратора контроллера EHCI. Если низкоскоростное или полноскоростное USB-устройство подключено к разъемам 1 или 2, оно будет направлено на корневые порты концентратора одного из контроллеров OHCI для управления, а низкоскоростные и полноскоростные USB-устройства, подключенные к разъемам 3 или 4, будут направлены на корневые порты концентратора другого контроллера OHCI. Зависимость EHCI от отдельных хост-контроллеров для высокоскоростных USB-устройств и группы низкоскоростных и полноскоростных USB-устройств приводит к сложным взаимодействиям и зависимостям между драйверами EHCI и OHCI/UHCI.
Поддержка потоков была добавлена в спецификацию USB 3.0 SuperSpeed, в первую очередь для обеспечения высокопроизводительных операций хранения через USB. Классически существовало отношение 1:1 между конечной точкой USB и буфером в системной памяти, а хост-контроллер был исключительно ответственен за направление всех передач данных. Потоки изменили эту парадигму, предоставив ассоциацию «конечная точка-буфер» 1-ко-многим и позволив устройству указывать хост-контроллеру, какой буфер перемещать. Передачи данных USB, связанные с конечной точкой USB Stream, планируются xHCI так же, как и любые другие массовые конечные точки, однако буфер данных, связанный с передачей, определяется устройством.
Архитектура xHCI была разработана с расчетом на высокую масштабируемость, способную поддерживать от 1 до 255 USB-устройств и от 1 до 255 портов корневого концентратора. Поскольку каждому USB-устройству разрешено определять до 31 конечной точки, xHCI, поддерживающий 255 устройств, должен был бы поддерживать 7906 отдельных конечных точек. Классически каждый буфер памяти, связанный с конечной точкой, описывается очередью физических блоков памяти, где очереди требуются указатель заголовка, указатель хвоста, длина и другие регистры для определения ее состояния. Существует много способов определения состояния очереди, однако, если предположить, что для каждой очереди выделяется 32 байта регистрового пространства, то для поддержки 7906 очередей потребуется почти 256 КБ регистрового пространства. Обычно к системе одновременно подключается лишь небольшое количество USB-устройств, и в среднем USB-устройство поддерживает 3-4 конечные точки, из которых только часть конечных точек активна одновременно. xHCI поддерживает состояние очереди в системной памяти в виде структур данных контекста конечной точки. Контексты спроектированы таким образом, что могут кэшироваться xHCI и «выгружаться» в и извлекаться в зависимости от активности конечной точки. Таким образом, поставщик может масштабировать свое внутреннее кэш-пространство и ресурсы контекста конечной точки xHCI в соответствии с практическими моделями использования, ожидаемыми для его продуктов, а не архитектурными ограничениями, которые он поддерживает. В идеале внутреннее кэш-пространство выбирается таким образом, чтобы при нормальных условиях использования не было подкачки контекста xHCI. Кроме того, активность конечных точек USB имеет тенденцию быть неравномерной. То есть в любой момент времени большое количество конечных точек может быть готово к перемещению данных, однако только подмножество активно перемещает данные. Например, конечная точка прерывания IN мыши может не передавать данные в течение нескольких часов, если пользователь отсутствует на своем рабочем месте. Специфические алгоритмы поставщика xHCI могут обнаружить это состояние и сделать эту конечную точку кандидатом на выгрузку, если другие конечные точки будут заняты.
Спецификация Open Host Controller Interface (OHCI) была определена консорциумом компаний (Compaq, Microsoft и National Semiconductor) как открытая спецификация для поддержки устройств USB 1.0. Универсальный Host Controller Interface (UHCI) относится к спецификации, которую Intel изначально определила как фирменный интерфейс для поддержки устройств USB 1.0. Спецификация UHCI в конечном итоге была обнародована, но только после того, как остальная отрасль приняла спецификацию OHCI.
Спецификация EHCI была определена Intel для поддержки устройств USB 2.0. Архитектура EHCI была смоделирована по образцу контроллеров UHCI и OHCI, которым требовалось программное обеспечение для построения графиков транзакций USB в памяти, а также для управления полосой пропускания и распределением адресов. Чтобы исключить избыточные усилия отрасли по определению открытой версии интерфейса хост-контроллера USB 2.0, Intel сделала спецификацию EHCI доступной для отрасли без лицензионных сборов.
Модель лицензирования EHCI была продолжена для спецификации Intel xHCI, однако со значительно расширенным вкладом отрасли. Более 100 компаний внесли свой вклад в спецификацию xHCI. Форум разработчиков USB (USB-IF) также профинансировал набор тестов соответствия xHCI для максимизации совместимости различных реализаций xHCI.
Контроллеры xHCI 1.0 поставляются с декабря 2009 года. Ядра Linux с 2009 года содержат драйверы xHCI, [4] но для более старых ядер драйверы доступны онлайн. Драйверы Windows для XP, Vista и Windows 7 доступны у соответствующих поставщиков xHCI. Драйверы xHCI для встраиваемых систем доступны у MCCI, Jungo и других поставщиков программного обеспечения. Блоки IP xHCI также доступны у нескольких поставщиков для настройки в средах SOC. Контроллеры и устройства xHCI 1.1 начали поставляться в 2015 году.
Спецификация xHCI использует файлы "errata" для определения обновлений и пояснений к конкретной версии. Изменения в файлах errata накапливаются в каждой версии. Обратитесь к связанным файлам errata для получения подробной информации о конкретных изменениях. Большинство изменений, определенных в файлах errata xHCI, представляют собой пояснения, грамматические или орфографические исправления, дополнительные перекрестные ссылки и т. д., которые не влияют на реализацию драйвера. Изменения, которые определяются как архитектурные, используют флаг Capability для определения того, поддерживается ли конкретная функция реализацией xHCI, и флаг Enable для включения функции.
Спецификация xHCI прошла через несколько версий до своего официального выпуска в 2010 году:
{{cite web}}
: CS1 maint: архивная копия как заголовок ( ссылка )