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

Спецификация компьютерного интерфейса

Расширяемый интерфейс хост-контроллера ( 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), по нескольким ключевым направлениям:

  1. Поддержка нескольких скоростей : в отличие от OHCI и UHCI, которые были ограничены определенными скоростями USB, xHCI способен управлять несколькими скоростями передачи данных — низкой, полной, высокой и SuperSpeed ​​— в рамках одного стандарта. Это устраняет необходимость в нескольких хост-контроллерах или сложных механизмах переключения при работе с различными типами USB-устройств, тем самым повышая эффективность.
  2. Управление питанием : xHCI включает расширенные функции управления питанием, которые позволяют выборочно приостанавливать USB-устройства и более гранулярно распределять питание. Это особенно полезно для мобильных устройств с ограниченным сроком службы батареи, таких как планшеты и смартфоны, поскольку помогает максимизировать использование мощности и продлить срок службы батареи.
  3. Оптимизированная архитектура : архитектура xHCI разработана так, чтобы быть проще и понятнее, что снижает сложность разработки драйверов. В старых архитектурах, таких как OHCI и UHCI, поддержка смеси низкоскоростных и высокоскоростных устройств требовала сложных алгоритмов и нескольких трансляторов транзакций. xHCI упрощает это, интегрируя эти функции в сам хост-контроллер, тем самым облегчая нагрузку на системное программное обеспечение и разработчиков драйверов.

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

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

xHCI — это радикальный прорыв по сравнению с предыдущими поколениями архитектур интерфейсов USB-хост-контроллера (т. е. Open Host Controller Interface (OHCI), Universal Host Controller Interface (UHCI) и Enhanced Host Controller Interface (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, функцию 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 устройств, должен был бы поддерживать 7906 отдельных конечных точек. Классически каждый буфер памяти, связанный с конечной точкой, описывается очередью физических блоков памяти, где очереди требуются указатель заголовка, указатель хвоста, длина и другие регистры для определения ее состояния. Существует много способов определения состояния очереди, однако, если предположить, что для каждой очереди выделяется 32 байта регистрового пространства, то для поддержки 7906 очередей потребуется почти 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. Универсальный 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 году:

  • xHCI 0.9 : выпущен в августе 2008 года.
  • USB 0.95 : выпущен в декабре 2008 года.
  • USB 0.96 : выпущен в августе 2009 года.
  • USB 0.96a : релиз-кандидат 1.0, выпущен в апреле 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+ ). Включает файлы исправлений xHCI 1.0 1-21. Позволяет контроллеру требовать большее количество буферов временной области (до 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 .{{cite web}}: CS1 maint: архивная копия как заголовок ( ссылка )
  3. ^ [1] [ мертвая ссылка ‍ ]
  4. ^ "USB 3.0 в ядре Linux". hvera.wordpress.com . 10 июня 2009 . Получено 2017-02-02 .
  5. ^ «Intel | Решения для центров обработки данных, Интернет вещей и инновации в области ПК».
  • Официальный сайт USB (Форум разработчиков USB, Inc.)
  • Открытый интерфейс хост-контроллера (OHCI) [ постоянная мертвая ссылка ‍ ]
  • Intel Universal Host Controller Interface (UHCI) Архивировано там
  • Расширенный интерфейс хост-контроллера Intel (EHCI)
  • Интерфейс расширяемого хост-контроллера Intel (xHCI)
Получено с "https://en.wikipedia.org/w/index.php?title=Расширяемый_Интерфейс_Контроллера_Хоста&oldid=1220807601"