Поделиться через


Драйвер системного программного интерфейса соединителя 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. Драйверы загружаются, если драйвер переключения ролей перечисляет роль хоста. Если контроллер узла не соответствует спецификации, вы можете написать пользовательский драйвер с помощью программного интерфейса расширения UCX для USB-контроллера узла. Дополнительные сведения см. в статье Разработка драйверов Windows для контроллеров USB-узлов.

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

  • диспетчер USB разъёма

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

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

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

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

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

  • ПОЛУЧИТЬ_АЛЬТЕРНАТИВНЫЕ_РЕЖИМЫ
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: система или контроллер должны поддерживать следующие уведомления в SET_NOTIFICATION_ENABLE:
    • Изменение поддерживаемых возможностей поставщика
    • Согласование изменений уровня мощности
  • GET_CONNECTOR_STATUS: система или контроллер должны поддерживать следующие изменения состояния соединителя в GET_CONNECTOR_STATUS:
    • Изменение поддерживаемых возможностей поставщика
    • Согласование изменений уровня мощности

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

UCM-UCSI устройство ACPI для 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 под устройством ACPI UCM-UCSI в прошивке ACPI и возвращала ненулевое значение, чтобы указать, что UCSI OPM должна следовать указанной версии спецификации UCSI.

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

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

Элемент Тип объекта Описание
UsePpmReportedUcsiVersion Целое число (32-разрядная версия) 0x00000000 (по умолчанию): если структура VERSION, как определено в таблице 3-1 структуры данных спецификации UCSI, имеет значение 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 отправить в встроенное ПО запросы для установки роли USB-операции и для установки роли направления питания.
  4. USB-Type-C оборудование или встроенное ПО инициирует операцию переключения ролей с помощью DFP.

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

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

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

    1. Встроенное ПО отправляет уведомление, указывающее на изменение соединителя.
    2. Драйвер UCSI отправляет запрос GET_CONNECTOR_STATUS.
    3. Встроенное ПО отвечает: состояние подключения = 1, тип партнера соединителя = DFP, состояние зарядки батареи = медленное/трickle.
  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\<путь к экземпляру устройства>\Параметры устройства

  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