Расширяемый интерфейс хост-контроллера - Extensible Host Controller Interface

Расширяемый интерфейс хост-контроллера (xHCI) - это спецификация компьютерного интерфейса, которая определяет описание хост-контроллера на уровне регистров для универсальная последовательная шина (USB), который может взаимодействовать с устройствами, совместимыми с USB 1.x, 2.0 и 3.x. Спецификация также упоминается как USB 3.0 Спецификация хост-контроллера.

xHCI улучшает уже существующие Открытый интерфейс хост-контроллера (OHCI) и Универсальный интерфейс хост-контроллера (UHCI), наиболее заметно в обработке более широкого диапазона скоростей в рамках единого стандарта, в более эффективном управлении ресурсами в интересах мобильных хостов с ограниченными ресурсами питания (таких как планшеты и сотовые телефоны), а также в упрощении поддержки смешивания низких -скоростные и быстродействующие устройства.

Архитектурные цели

XHCI радикально отличается от архитектур интерфейса хост-контроллера USB предыдущих поколений (т. Е. Открытый интерфейс хост-контроллера (OHCI), Универсальный интерфейс хост-контроллера (UHCI) и Улучшенный интерфейс хост-контроллера (EHCI)) по многим причинам. Ниже приведены ключевые цели архитектуры xHCI:

  • Эффективная работа - мощность в режиме ожидания и производительность лучше, чем у устаревших архитектур хост-контроллера USB.
  • Модель программирования на уровне устройства, полностью совместимая с существующей моделью программного обеспечения USB.
  • Отделите интерфейс хост-контроллера, представленный программному обеспечению, от основных протоколов USB.
  • Минимизируйте доступ к памяти хоста, полностью исключив их, когда USB-устройства простаивают
  • Устранение записи в регистр и минимизация чтения из регистра для нормальной передачи данных
  • Исключите модель "Компаньон-контроллер"
  • Включите аппаратные "отказоустойчивые" режимы в ситуациях с ограниченными ресурсами системы, чтобы устройства оставались доступными, но, возможно, с менее оптимальной точкой питания / производительности
  • Обеспечить возможность для разных рынков дифференцировать возможности оборудования, например компромисс между мощностью, производительностью и стоимостью целевого хост-контроллера для конкретных рынков
  • Определите расширяемую архитектуру, которая обеспечивает простой путь для новых спецификаций и технологий USB, таких как интерфейсы с более высокой пропускной способностью, оптическая среда передачи и т. Д., Не требуя определения еще одного интерфейса хост-контроллера USB.

Архитектурные детали

Поддержка всех скоростей

Контроллеры 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 и когда, даже если данные не были перемещены. Кроме того, в случае чтения с устройства, устройство опрашивалось каждый интервал расписания, даже если не было данных для чтения.

  • XHCI исключает расписания транзакций USB на основе памяти хоста, обеспечивая нулевую активность памяти хоста при отсутствии перемещения данных USB.
  • XHCI снижает потребность в периодическом опросе устройств, позволяя устройству USB 3.0 или более поздней версии уведомлять хост-контроллер, когда у него есть данные, доступные для чтения, и перемещает управление опросом устройств USB 2.0 и 1.1, которые используют транзакции прерывания, с управляемого ЦП USB-драйвер к хост-контроллеру USB. Хост-контроллеры EHCI, OHCI и UHCI будут автоматически обрабатывать опрос для ЦП, если нет никаких изменений, которые нужно внести, и если ни одно устройство не имеет никаких прерываний для отправки, но все они полагаются на ЦП, чтобы установить расписание для контроллеров.[1][2][3] Если какое-либо USB-устройство, использующее транзакции прерывания, действительно имеет данные для отправки, то хост-контроллер xHCI отправит прерывание, чтобы уведомить ЦП о том, что существует транзакция прерывания USB, которую необходимо обработать. Поскольку ЦП больше не нужно управлять опросом шины USB, он может проводить больше времени в состояниях с низким энергопотреблением.
  • XHCI не требует, чтобы реализации обеспечивали поддержку всех расширенных функций управления питанием USB 2 и 3, включая состояния USB 2 LPM, USB 3 U1 и U2, HERD, LTM, Function Wake и т. Д .; но эти функции необходимы для реализации всех преимуществ xHCI.

Поддержка виртуализации

Унаследованные архитектуры хост-контроллера USB демонстрируют некоторые серьезные недостатки в применении к виртуализированным средам. Унаследованные интерфейсы хост-контроллер USB определяют относительно простую аппаратную перекачку данных; где критическое состояние, связанное с общим управлением шиной (выделение полосы пропускания, назначение адресов и т. д.), находится в программном обеспечении хост-контроллер драйвер (HCD). Попытка применить стандартный метод виртуализации аппаратного ввода-вывода - репликацию регистров интерфейса ввода-вывода - к интерфейсу устаревшего USB-хост-контроллера проблематична, поскольку критическое состояние, которое необходимо контролировать виртуальные машины (ВМ) недоступны для оборудования. Архитектура xHCI переносит контроль этого критического состояния на оборудование, обеспечивая управление ресурсами USB на всех виртуальных машинах. Функции виртуализации xHCI также обеспечивают:

  • прямое назначение отдельных USB-устройств (независимо от их расположения в топологии шины) любой виртуальной машине
  • минимизация взаимодействия между виртуальными машинами во время выполнения
  • поддержка общего доступа к USB-устройствам
  • поддержка PCIe SR-IOV (виртуализация ввода-вывода с одним корнем )

Упрощенная архитектура драйвера

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.

  • Архитектура xHCI устраняет необходимость в дополнительных контроллерах и их отдельных стеках драйверов.
  • Включение функций расписания, управления полосой пропускания и назначения адресов USB-устройств, которые ранее выполнялись драйвером в аппаратном обеспечении xHCI, позволяет создать более простой, компактный программный стек с меньшей задержкой для xHCI.

Поддержка потоковой передачи

Поддержка потоковой передачи была добавлена ​​в спецификацию USB 3.0 SuperSpeed, в первую очередь для обеспечения высокопроизводительных операций хранения через USB. Классически существует соотношение 1: 1 между оконечной точкой USB и буфером в системной памяти, а хост-контроллер несет полную ответственность за управление всеми передачами данных. Потоки изменили эту парадигму, предоставив связь 1 ко многим «конечная точка с буфером» и позволив устройству указывать хост-контроллеру, какой буфер перемещать. Передачи данных USB, связанные с конечной точкой USB Stream, планируются xHCI так же, как и любая другая массовая конечная точка, однако буфер данных, связанный с передачей, определяется устройством.

  • Поддержка xHCI USB Stream позволяет связать до 64 КБ буферов с одной конечной точкой.
  • Поддержка протокола xHCI Streams позволяет USB-устройству выбирать, какой буфер xHCI будет передавать при планировании конечной точки.

Масштабируемость

Архитектура xHCI была разработана с учетом высокой масштабируемости, способной поддерживать от 1 до 255 USB-устройств и от 1 до 255 портов корневого концентратора. Поскольку каждому USB-устройству разрешено определять до 31 конечной точки, xHCI, поддерживающий 255 устройств, должен поддерживать 7 906 отдельных конечных точек. Классически каждый буфер памяти, связанный с конечной точкой, описывается очередью блоков физической памяти, где очереди требуются указатель головы, указатель хвоста, длина и другие регистры для определения своего состояния. Есть много способов определить состояние очереди, однако, если предположить, что для каждой очереди будет 32 байта регистрового пространства, то для поддержки 7 906 очередей потребуется почти 256 КБ. Обычно к системе одновременно подключается лишь небольшое количество USB-устройств, и в среднем USB-устройство поддерживает 3-4 конечных точки, из которых только часть конечных точек активна одновременно. XHCI поддерживает состояние очереди. в системной памяти как структуры данных контекста конечной точки. Контексты спроектированы таким образом, что они могут кэшироваться с помощью xHCI и "выгружаться" на страницы и выходить в зависимости от активности конечной точки. Таким образом, поставщик может масштабировать свое внутреннее пространство кэша контекста конечной точки xHCI и ресурсы в соответствии с практическими моделями использования, ожидаемыми для их продуктов, а не с архитектурными ограничениями, которые они поддерживают. В идеале пространство внутреннего кэша выбирается таким образом, чтобы при нормальных условиях использования xHCI не выполнял подкачку контекста. Кроме того, активность конечной точки USB имеет тенденцию быть прерывистой. То есть в любой момент времени большое количество конечных точек может быть готово к перемещению данных, однако только подмножество активно перемещает данные. Например, конечная точка прерывания IN мыши может не передавать данные в течение нескольких часов, если пользователь находится вне рабочего места. Алгоритмы производителя xHCI могут обнаружить это условие и сделать эту конечную точку кандидатом для пейджинга, если другие конечные точки станут заняты.

  • Архитектура xHCI допускает большие максимальные значения для количества поддерживаемых USB-устройств, портов, векторов прерываний и т. Д., Однако реализация должна определять только количество, необходимое для удовлетворения ее маркетинговых требований. Например, поставщик может ограничить количество USB-устройств, которые он поддерживает для реализации xHCI на планшете, до 16 устройств.
  • Поставщик может дополнительно использовать преимущества архитектуры xHCI для масштабирования своих внутренних ресурсов в соответствии со своими целевыми моделями использования. Например, если посредством тестирования удобства использования поставщик определяет, что 95% пользователей планшетов никогда не будут подключать более 4 устройств USB, и каждое устройство USB обычно определяет 4 конечные точки (или меньше), то внутреннее кэширование для 16 контекстов конечных точек обеспечит это при нормальных условиях. При этом не будет активности системной памяти из-за разбиения на страницы контекста конечной точки.

История

Спецификация Open Host Controller Interface (OHCI) была определена консорциумом компаний (Compaq, Microsoft и National Semiconductor) как открытая спецификация для поддержки устройств USB 1.0. Универсальный интерфейс хост-контроллера (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, Джунго, и другие поставщики программного обеспечения. IP-блоки xHCI также доступны от нескольких поставщиков для настройки в средах SOC. Контроллеры и устройства xHCI 1.1 начали поставляться в 2015 году.

История версий

В спецификации xHCI используются файлы «исправлений» для определения обновлений и уточнений к конкретному выпуску. Изменения в файлах исправлений накапливаются в каждом выпуске. Подробные сведения о конкретных изменениях см. В связанных файлах исправлений. Большинство изменений, определенных в файлах исправлений xHCI, представляют собой уточнения, грамматические или орфографические исправления, дополнительные перекрестные ссылки и т. Д., Которые не влияют на реализацию драйвера. Изменения, которые должны быть архитектурный использовать Возможность флаг, чтобы определить, поддерживается ли конкретная функция реализацией xHCI, и Давать возможность флаг, чтобы включить эту функцию.

Пререлизы

Спецификация xHCI развивалась до нескольких версий до своего официального выпуска в 2010 году:

  • xHCI 0.9: Выпущено в августе 2008 года.
  • USB 0.95: Выпущено в декабре 2008 года.
  • USB 0.96: Выпущено в августе 2009 года.
  • USB 0.96a: 1.0 Release Candidate, выпущен в апреле 2010. Первые устройства на основе этой версии.

xHCI 1.0

  • xHCI 1.0: Первый публичный релиз, 21 мая 2010 г.
    Указанная скорость передачи данных USB: 1,5 Мбит / с (Низкая скорость), 12 Мбит / с (На полной скорости), 480 Мбит / с (Высокоскоростной) и 5 Гбит / с (Супер скорость).
  • xHCI 1.0, файлы ошибок 1-4: Выпущено 17 января 2011 г.
    Включены отзывы о первоначальном обзоре от более широкой публики 1.0, пояснения по сохранению-восстановлению и поддержка аппаратного LPM.
  • xHCI 1.0, файлы ошибок 1-6: Выпущено 18 марта 2011 г.
    Разъяснения.
  • xHCI 1.0, файлы ошибок 1-7: Выпущено 13 июня 2011 г.
    Разъяснения.

xHCI 1.1

  • xHCI 1.1: Выпущено 21 декабря 2013 г. Указанная скорость передачи данных USB 3.1 составляет 10 Гбит / с (SuperSpeed ​​+). Сюда входят файлы ошибок 1-21 xHCI 1.0. Позволяет контроллеру требовать большее количество буферов блокнота (до 1023) в регистре возможностей HCSPARAMS2.

xHCI 1.2

  • xHCI 1.2: Дата май 2019 г. Указанная скорость передачи данных USB 3.2 составляет 10 Гбит / с (SuperSpeedPlus Gen1x2) и 20 Гбит / с (SuperSpeedPlus Gen2x2).[5]

Рекомендации

  1. ^ "UHCI11D.DOC" (PDF). Ftp.netbsd.org. Получено 2017-01-09.
  2. ^ «Архивная копия» (PDF). Архивировано из оригинал (PDF) на 2015-08-10. Получено 2014-07-02.CS1 maint: заархивированная копия как заголовок (связь)
  3. ^ [1][мертвая ссылка ]
  4. ^ «USB 3.0 в ядре Linux». hvera.wordpress.com. Получено 2017-02-02.
  5. ^ https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/extensible-host-controler-interface-usb-xhci.html

внешняя ссылка