Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает архитектуру стека функций USB.
На USB-устройстве стек функций USB относится к группе драйверов, которые перечисляются Диспетчером Plug and Play, когда ACPI создает объект физического USB-устройства (PDO).
В одном устройстве с единственной конфигурацией USB-устройство может определить один или несколько интерфейсов. Например, протокол MTP для передачи файлов на устройство и с устройства. Составное USB-устройство может поддерживать несколько интерфейсов в одной конфигурации. Стек функций USB создает объекты физического устройства (PDO) для каждого интерфейса, а диспетчер PnP загружает драйвер класса, который создает объект функционального устройства (FDO) для данного интерфейса.
Стек функций USB концептуально представлен на этом изображении:
Приложения и службы
- Все запросы режима пользователя отправляются драйверу класса в режиме ядра, предоставленному Майкрософт, GenericUSBFn.sys. Вы можете создать службу пользовательского режима, которая взаимодействует с GenericUSBFn.sys, отправив коды управления ввода-вывода (IOCTLs), как определено в genericusbfnioctl.h. Дополнительные сведения об этих IOCTLs см. в разделе "Взаимодействие с GenericUSBFn.sys" в службе пользовательского режима
Драйвер класса функции USB
Драйвер класса функции USB реализует функциональные возможности определенного интерфейса (или группы интерфейсов) на USB-устройстве. MTP и IpOverUsb являются примерами системных драйверов классов. Драйвер класса может быть реализован исключительно как драйвер в режиме ядра, или это может быть служба пользовательского режима, связанная с драйвером класса, предоставляемым системой, GenericUSBFn.sys.
Драйвер класса функций отправляет запросы к контроллеру с помощью драйвера класса функции USB в интерфейсы программирования UFX.
Расширение класса функций USB (UFX)
Расширение класса функций USB (UFX) — это системное расширение для Kernel-Mode Driver Framework (KMDF). USB является стандартной шиной и обладает некоторыми необходимыми функциями и характеристиками. UFX отвечает за реализацию логики функции USB, которая является общей для всех контроллеров функций USB, а также за обработку и/или пересылку запросов от драйверов классов функций USB. В частности, UFX обрабатывает процесс перечисления устройства и обработки стандартной передачи управления. Для выполнения некоторых из этих операций UFX необходимо знать о возможностях шины. Эти возможности сообщаются в UFX при создании интерфейса расширения класса.
UFX предоставляет стандартные IOCTLs, которые верхние уровни (драйвер класса функций USB и службы пользовательского режима) могут использовать для отправки запросов контроллеру. Кроме того, UFX уведомляет верхние слои о стандартных запросах, полученных от узла.
Драйвер клиента-функции USB
UFX предоставляет абстрактный интерфейс, который работает согласованно в разных контроллерах. Однако контроллеры имеют различные возможности, имея такие ограничения, как количество конечных точек, их типы, низкая мощность и удаленное пробуждение. Например, некоторые контроллеры поддерживают DMA, а другие — нет. Некоторые контроллеры реализуют потоки в оборудовании, а другие контроллеры ожидают, что драйвер будет обрабатывать потоки. По этим причинам в UFX обрабатываются только распространенные функциональные возможности. Передача, управление питанием, поддержка потоков и другие функции, которые зависят от контроллера к контроллеру, обрабатываются драйвером клиента.
Драйвер клиента функции USB отвечает за реализацию операций, относящихся к контроллеру. К ним относятся реализация передачи данных конечных точек, изменения состояния USB-устройства (сброс, приостановка, возобновление), обнаружение подключения и отсоединения, обнаружение портов и зарядных устройств. Драйвер клиента также отвечает за обработку событий управления питанием и PnP.
Драйвер функции клиента написан как драйвер Kernel-Mode Driver Framework (KMDF) с использованием драйвера класса функций USB для программных интерфейсов UFX.
Корпорация Майкрософт предоставляет встроенные клиентские драйверы функций (UfxChipidea.sys, Ufxsynopsys.sys) для контроллеров ChipIdea и Synopsys.
Usb-драйвер нижнего фильтра
Usb-драйвер нижнего фильтра поддерживает обнаружение зарядных устройств, если контроллер функций использует встроенные драйверы Synopsys и ChipIdea. Драйвер фильтра управляет зарядкой USB, начиная с обнаружения USB-порта. Он должен опубликовать GUID для каждого типа зарядного устройства, который он поддерживает, и список свойств этого зарядного устройства. Если определенное зарядное устройство настраиваемо, нижний драйвер USB-фильтра формирует список поддерживаемых PropertyIDs и соответствующих типов значений. Эти значения могут быть отправлены для конфигурации зарядного устройства. Драйвер также уведомляет батарейный блок о том, когда он может начать зарядку, и максимальном количестве тока, который устройство может потребить. Для клиентских драйверов, отличных от драйверов Synopsys и ChipIdea, логика зарядки может быть реализована в драйвере клиента.
Драйвер класса функций отправляет запрос в UFX с помощью интерфейсов программирования для поддержки собственных зарядных устройств.