Microsoft поддерживает Dual Role USB

03 Окт 2015

Microsoft поддерживает Dual Role USB

Сегодня совершенно естественно выглядит USB-подключение планшета или смартфона к персональному компьютеру, хотя такой линк обеспечи­ва­ет лишь частичный обмен ресурсами и далек от совершенства. Анало­гич­но выглядит и подключение USB-устройства к планшету, смартфону, ноутбуку: здесь есть только один монополист (USB-хост), который дик­ту­ет свои условия и запрещает любую инициативу со стороны под­чи­нен­ных. Может ли быть иначе?

 

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

  1. Режим хост-устройства или host mode, обеспечивает подключение клавиатуры, мыши, флэш-накопителей и других периферийных устройств.
  2. В режиме функции или function mode, наше мобильное устройство само становится периферией, подключаясь к компьютеру, например для копирования данных.

Архитектура аппаратного обеспечения, в частности современная системная логика Intel, предусматривает разделение USB-подсистемы на два контроллера:

  • xHCI (eXtensible Host Controller Interface) реализует USB-хост;
  • xDCI (eXtensible Device Controller Interface) реализует USB-функцию или периферийное устройство.

С точки зрения системного программиста, при доступе к конфигурационным и операционным регистрам, данные контроллеры взаимно независимы. При этом физически, оба узла реализуются в составе микросхемы PCH (Platform Controller Hub) системной логики Intel. Добавим, что решения System-on-Chip (SoC), предполагают размещение кристалла PCH в составе одной микросхемы, совмещающей функции центрального процессора и периферийного контроллера.

Согласно документу Intel Atom Processor Z3600 and Z3700 Series Datasheet, системная логика поддерживает USB Device Controller
Рис.1. Согласно документу Intel Atom Processor Z3600 and Z3700 Series Datasheet, системная логика поддерживает USB Device Controller

В чем новшество Windows 10?

Согласно информации базы знаний Microsoft MSDN, операционная система Windows 10 стандартизует модель драйверной подсистемы, обслуживающей функциональность Dual Role USB. В частности, вводится понятие Microsoft USB Role Switch (URS). За данным термином скрывается специальный драйвер, призванный обеспечить бесконфликтное использование заданного USB-порта или группы портов для режимов USB-хоста и USB-функции, выбирая нужный режим в зависимости от типа подключения и передавая порт одному из контроллеров: xHCI или xDCI.

Как известно, основная часть информации MSDN в большей степени ориентирована на программистов, чем на разработчиков аппаратного обеспечения, тем не менее, в материалах упоминается метод детектирования USB-подключения, использующий линию ID pin разъема USB.

  • ID=0 (pin grounded) — означает режим host
  • ID=1 (pin floated) — означает режим function

Приравнивая неподключенное состояние сигнальной линии к логической «единице», важно не забыть об установке pull-up резистора, соединяющего данную линию с плюсовым проводом источника питания.

Изменение состояния сигнальной линии ID pin сообщает драйверу URS об изменении подключений и требует вмешательства драйвера для перепрограммирования схемы коммутации портов и контроллеров. Именно поэтому документация Microsoft нормирует генерацию сигнала запроса на аппаратное прерывание для обслуживания данного события.

Сложности детектирования

Очевидно, для обнаружения устройства и загрузки драйвера, UEFI firmware платформы должно передать операционной системе информацию об устройстве. Текущая реализация драйвера URS поддерживает детектирование USB-подсистемы посредством интерфейса ACPI (ACPI enumeration). Добавление метода прямого сканирования ресурсов шины PCI (PCI enumeration) планируется в будущих реализациях. Возможно, логическая обособленность контроллеров xHCI и xDCI оказалась несколько неудобным фактом для программистов Microsoft.

Другая возможная причина – необходимость декларирования platform-specific механизмов идентификации типа подключения, использующих сигналы General-Purpose Input Output (GPIO) в качестве упомянутых линий ID pin. В любом случае, есть основания считать, что проблема несовместимости временная.

Теги: