Драйвер системного программного интерфейса соединителя USB Type-C® (UCSI)

Корпорация Майкрософт предоставляет драйвер системного программного интерфейса соединителя USB Type-C® (UCSI), совместимого со спецификациями, для транспорта ACPI. Если ваша конструкция включает встроенный контроллер с транспортом ACPI, реализуйте UCSI в BIOS/EC системы и загрузите встроенный драйвер UCSI (UcmUcsiCx.sys и UcmUcsiAcpiClient.sys).

Если оборудование, совместимое с UCSI, использует транспорт, отличный от ACPI, необходимо написать драйвер клиента UCSI.

Драйверы для поддержки компонентов USB Type-C для систем со встроенными контроллерами

Ниже приведен пример системы со встроенным контроллером.

Схема программных компонентов USB Type-C.

В предыдущем примере переключение ролей USB обрабатывается во встроенном ПО системы, а стек драйверов коммутатора ролей USB не загружается. В другой системе стек драйверов может не загружаться, так как двойная роль не поддерживается.

На предыдущем рисунке:

  • Драйверы на стороне USB-устройства

    Usb-драйверы на стороне устройства обслуживют функцию, устройство или периферийное устройство. Расширение класса контроллера функции USB поддерживает MTP (протокол передачи мультимедиа) и зарядку с помощью зарядных устройств BC 1.2. Корпорация Майкрософт предоставляет встроенные клиентские драйверы для контроллеров Synopsys USB 3.0 и ChipIdea USB 2.0. Вы можете написать пользовательский драйвер клиента для контроллера функций с помощью интерфейсов программирования клиентских драйверов контроллера функций USB. Дополнительные сведения см. в статье Разработка драйверов Windows для контроллеров функций USB.

    Поставщик SoC может предоставить драйвер нижнего фильтра функции USB для обнаружения зарядного устройства. Вы можете реализовать собственный драйвер фильтра, если используете встроенный драйвер synopsys USB 3.0 или ChipIdea USB 2.0.

  • Драйверы на стороне узла USB

    Драйверы USB на стороне узла — это набор драйверов, которые работают с контроллерами USB-узла, совместимыми с EHCI или XHCI. Драйверы загружаются, если драйвер переключения ролей перечисляет роль узла. Если контроллер узла не соответствует спецификациям, можно написать пользовательский драйвер с помощью программного интерфейса расширения USB-контроллера (UCX). Дополнительные сведения см. в статье Разработка драйверов Windows для USB-контроллеров узлов.

    Не все классы USB-устройств поддерживаются в Windows 10 Mobile.

  • Диспетчер USB-соединителей

    Корпорация Майкрософт предоставляет встроенный драйвер UCSI с Windows (UcmUcsiCx.sys), который реализует функции, определенные в спецификации программного интерфейса системы соединителя USB Type-C. В спецификации описываются возможности UCSI, а также описаны регистры и структуры данных для разработчиков аппаратных компонентов, сборщиков систем и разработчиков драйверов устройств.

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

Команды UCSI, необходимые для Windows

Команды, необходимые во всех реализациях UCSI, см. в спецификации UCSI.

В дополнение к командам, помеченным как Обязательный, Для Windows требуются следующие команды:

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE. Система или контроллер должны поддерживать следующие уведомления в SET_NOTIFICATION_ENABLE:
    • Изменение поддерживаемых возможностей поставщика
    • Согласованное изменение уровня питания
  • GET_CONNECTOR_STATUS. Система или контроллер должны поддерживать следующие изменения состояния соединителя в GET_CONNECTOR_STATUS:
    • Изменение поддерживаемых возможностей поставщика
    • Согласованное изменение уровня питания

Сведения о задачах, необходимых для реализации UCSI в BIOS, см. в разделе Реализация UCSI в Intel BIOS.

Устройство ACPI UCM-UCSI для UCSI 2.0 и более поздней версии

Начиная с Windows 11 версии 22H2 с обновлением за сентябрь, драйверы устройств WINDOWS UCM-UCSI ACPI поддерживают спецификации UCSI версии 2.0 и 2.1. Спецификация UCSI 2.0 содержит критические изменения в сопоставлении памяти своих структур данных, как определено в спецификации UCSI Таблица 3–1 Структуры данных. Для обеспечения обратной совместимости Windows требуется UCSI PPM спецификации версии 2.0 или более поздней, чтобы реализовать следующую функцию _DSM на устройстве UCM-UCSI ACPI в встроенном ПО ACPI и вернуть ненулевое значение, указывающее, что UCSI OPM должна соответствовать указанной версии спецификации UCSI.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: идентификатор редакции = 0
  • Arg2: индекс функции = 5
  • Arg3: пустой пакет (не используется)

Возвращаемое значение:

Элемент Тип объекта Описание:
UsePpmReportedUcsiVersion Целое число (32-разрядная версия) 0x00000000 (по умолчанию): если VERSION структура, определенная в спецификации UCSI Таблица 3–1 Структур данных, имеет значение 2,0 или выше, то UCSI OPM по-прежнему соответствует спецификации UCSI 1.2. В противном случае UCSI OPM следует спецификации UCSI согласно значению VERSION в структуре.

Примечание

Для устройств ACPI UCM-UCSI это новая функция в существующем методе _DSM. Другие функции этого метода _DSM должны были быть реализованы в рамках реализации intel BIOS документа UCSI . Функция 0, которая возвращает битовую маску всех поддерживаемых функций, также должна быть обновлена соответствующим образом.

Пример потока для UCSI

В примерах, приведенных в этом разделе, описывается взаимодействие между оборудованием и встроенным ПО USB Type-C, драйвером UCSI и операционной системой.

Обнаружение роли DRP

  1. Оборудование и встроенное ПО USB Type-C обнаруживает событие подключения устройства, и система DRP Windows 10 изначально становится ролью UFP.
    1. Встроенное ПО отправляет уведомление об изменении соединителя.
    2. Драйвер UCSI отправляет запрос GET_CONNECTOR_STATUS.
    3. Встроенное ПО отвечает, что состояние подключения = 1, а тип партнера соединителя — DFP.   ​
  2. Драйверы в стеке функций USB реагируют на перечисление .
  3. Расширение класса диспетчера USB-соединителей распознает, что стек функций USB загружен и, следовательно, система находится в неправильном состоянии. Он сообщает драйверу UCSI отправлять запросы Set USB Operation Role и Set Power Direction Role во встроенное ПО.
  4. Оборудование или встроенное ПО USB Type-C инициирует операцию переключения ролей с помощью DFP.

Обнаружение ошибки несоответствия зарядного устройства

  1. Usb Type-C оборудование или встроенное ПО обнаруживает, что зарядное устройство подключено, и согласовывает контракт на питание по умолчанию. Он также отмечает, что зарядное устройство не обеспечивает достаточную мощность системы.

  2. Оборудование и встроенное ПО USB Type-C задает разрядку медленной зарядки.

    1. Встроенное ПО отправляет уведомление об изменении соединителя.
    2. Драйвер UCSI отправляет запрос GET_CONNECTOR_STATUS.
    3. Встроенное ПО отвечает состоянием подключения = 1, тип партнера соединителя = DFP и состоянием зарядки батареи = медленный/струйный.
  3. Расширение класса диспетчера USB-соединителей отправляет уведомление в пользовательский интерфейс для отображения сообщения об устранении неполадок с несоответствием зарядного устройства.

Тестирование UCSI

Существует множество способов тестирования реализации UCSI. Чтобы протестировать отдельные команды в реализации BIOS/EC UCSI, используйте UCSIControl.exe, которая предоставляется в пакете программного обеспечения MUTT. Чтобы проверить полную реализацию UCSI, используйте как тесты UCSI, которые можно найти в комплекте лабораторий оборудования Windows (HLK), так и шаги, описанные в процедурах ручного взаимодействия Type-C.

UCSIControl.exe

Вы можете протестировать отдельные команды в реализации BIOS/EC UCSI с помощью UCSIControl.exe. Это средство позволяет отправлять команды UCSI в встроенное ПО через драйвер UCSI. Для этого требуется загрузить и запустить драйвер, а также включить тестовый интерфейс для драйвера. По умолчанию этот интерфейс не включен, чтобы предотвратить доступ к нему для неавторизованных пользователей в розничной системе.

  1. Найдите узел устройства в диспетчер устройств (devmgmt.msc) с именем UCSI USB Connector Manager. Узел относится к категории контроллеров универсальной последовательной шины .

  2. Выберите и удерживайте (или щелкните правой кнопкой мыши) на устройстве, выберите Свойства и откройте вкладку Сведения .

  3. Выберите Путь к экземпляру устройства в раскрывающемся списке и запишите значение свойства.

  4. Откройте редактор реестра (regedit.exe).

  5. Перейдите к пути к экземпляру устройства под этим ключом.

    <HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Device Parameters

  6. Создайте значение DWORD с именем TestInterfaceEnabled и присвойте ей значение 0x1.

  7. Перезапустите устройство, выбрав параметр Отключить на узле устройства в диспетчер устройств и выбрав Включить. Кроме того, можно перезагрузить компьютер.

Чтобы просмотреть справку, выполнитеUcsiControl.exe /?.

Ниже приведены распространенные команды.

Команда UCSI команда UcsiControl.exe
Сброс PPM UcsiControl.exe Отправить 0 1
Сброс соединителя Обратимый сброс: UcsiControl.exe Отправить 0 10003

Жесткий сброс: UcsiControl.exe Отправить 0 810003
Настройка включения уведомлений Все уведомления: UcsiControl.exe Отправить 0 ffff0005

Только завершение команды: UcsiControl.exe Отправить 0 00010005

Нет уведомлений: UcsiControl.exe Отправить 0 00000005
Получение возможности UcsiControl.exe Отправить 0 6
Получение возможности соединителя UcsiControl.exe Отправить 0 10007
Настройка UOM DFP: UcsiControl.exe Отправить 0 810008

UFP: UcsiControl.exe Отправить 0 1010008

DRP: UcsiControl.exe Отправить 0 2010008
Задать UOR DFP: UcsiControl.exe Отправить 0 810009

UFP: UcsiControl.exe Отправить 0 1010009

Принять: UcsiControl.exe Отправить 0 2010009
Настройка PDR Поставщик: UcsiControl.exe Отправить 0 81000B

Потребитель: UcsiControl.exe Отправить 0 101000B

Принять: UcsiControl.exe Отправить 0 201000B
Получение PDO Локальный источник: UcsiControl.exe Отправить 7 00010010

Локальный приемник: UcsiControl.exe Отправить 3 00010010

Удаленный источник: UcsiControl.exe Отправить 7 00810010

Удаленный приемник: UcsiControl.exe отправить 3 00810010
Получение состояния соединителя UcsiControl.exe Отправить 0 010012
Получение состояния ошибки UcsiControl.exe Отправить 0 13