что такое дескриптор устройства

Поддержка USB в KolibriOS: что внутри? Часть 5: уровень логического устройства

что такое дескриптор устройства. Смотреть фото что такое дескриптор устройства. Смотреть картинку что такое дескриптор устройства. Картинка про что такое дескриптор устройства. Фото что такое дескриптор устройстваОбработка подключения устройства, начатая на уровне поддержки хост-контроллеров, остановилась, подготовив нулевую конечную точку устройства к работе. Уровень поддержки каналов предоставил методы работы с каналами. Самое время их применить для продолжения инициализации устройства: включается функция usb_new_device из bus/usb/protocol.inc.

Уровень логического устройства имеет две задачи: во-первых, сконфигурировать устройство; во-вторых, расспросить его, загрузить соответствующий драйвер — или даже драйверы — и сообщить драйверу о новом устройстве.

Первые шаги

usb_new_device начинает с создания канала к нулевой конечной точке устройства. Код поддержки хост-контроллеров перед вызовом usb_new_device заполнил структуру, описывающую устройство, остаётся только указать параметры конечной точки: номер — нулевой — и максимальный размер пакета. Максимальный размер пакета для управляющей конечной точки может варьироваться от 8 до 64 байт и записан среди первых 8 байт дескриптора устройства. Однако, чтобы прочесть дескриптор, нужен уже открытый канал. К счастью, можно выбраться из цикла зависимостей: максимальный размер пакета нужен только для того, чтобы разбить одну передачу на транзакции; гарантируется, что максимальный размер пакета для управляющей конечной точки не меньше 8 байт; если на начальных стадиях конфигурации передавать только данные длиной 8 байт или меньше, то точное значение максимального размера пакета неважно. Поэтому в качестве максимального значения пакета можно установить любое число, не меньшее 8 байт.

Впрочем, есть одна проблема: эмуляция EHCI в VirtualBox не совсем корректна и требует указания 64 байт для работы с HighSpeed-устройствами. Поскольку других требований нет, канал к нулевой конечной точке начинает существование с максимальным размером пакета в 64 байт.

Дескриптор устройства

что такое дескриптор устройства. Смотреть фото что такое дескриптор устройства. Смотреть картинку что такое дескриптор устройства. Картинка про что такое дескриптор устройства. Фото что такое дескриптор устройства

Вместе с дескриптором конфигурации устройство возвращает много других дескрипторов, задающих детали конфигурации. Общий объём данных, ассоциированных с дескриптором конфигурации, заранее неизвестен, но содержится в самом дескрипторе конфигурации. Поэтому запрос протекает в два этапа — на первом этапе функция usb_get_descr_callback запрашивает 8 байт, на втором этапе функция usb_know_length_callback вытаскивает из прочитанных байт общий размер и запрашивает уже его.

Дескриптор конфигурации

что такое дескриптор устройства. Смотреть фото что такое дескриптор устройства. Смотреть картинку что такое дескриптор устройства. Картинка про что такое дескриптор устройства. Фото что такое дескриптор устройства

Одна из самых простых конфигураций — у виртуального хаба RMH, она показана на рисунке. Вместе с дескриптором конфигурации устройство возвращает дескрипторы всех интерфейсов этой конфигурации, для каждого интерфейса — дескрипторы всех его конечных точек. Среди ассоциированных данных бывают и дескрипторы других типов — например, HID-устройства вроде мышек и клавиатур возвращают HID-дескриптор между дескриптором интерфейса и дескриптором конечной точки; их разбор — дело драйвера.

Источник

Интерфейс USB. Часть 4. Дескрипторы и классы

В зависимости от назначения, все usb устройства разделены по классам. Это деление довольно широкое и объединяет довольно большие группы устройств. Например, класс HID (human interface device) включает все устройства человеко-машинного взаимодействия (мышки, клавиатуры и тому подобное), класс Printer — все печатающие устройства и так далее. Зачем это деление нужно?

Дело в том, что для каждого класса устройств написаны свои спецификации, которые позволяют унифицировать общение с устройствами. Это удобно и разработчикам устройств (не надо каждый раз изобретать новые интерфейсы и протоколы) и производителям операционок (можно организовать поддержку всяких стандартных устройств на уровне операционок). Да и для простых пользователей навигация в менеджере устройств становится приятнее.

Наряду с классом, определить для чего предназначен девайс, как с ним общаться и какие дрова при этом использовать, помогает пара идентификаторов VID/PID, а также номер версии устройства.

VID — это уникальный идентификатор производителя (Vendor ID), а PID — это уникальный идентификатор продукта (Product ID). Каждый VID стоит денег и покупать его надо у некоммерческой международной организации, занимающейся разработкой USB, которая называется USB Implementers Forum или просто USB-IF. Покупая VID, производитель получает в своё распоряжение пачку PID-ов от 0x0000 до 0xFFFF и гарантии того, что серьёзные производители не будут делать свои продукты с такими же VID/PID (и писать под них свои дрова). То есть его оборудование будет идентифицироваться операционкой одназначно и она будет однозначно выбирать для работы с этим оборудованием нужные дрова.

Всю информацию о себе и отдельных своих частях (классы, VID/PID, интерфейсы, конечные точки …) устройства хранят в специальных структурах данных, называемых дескрипторами (от англ. description — описание).

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

Ниже описаны структуры и назначения различных стандартных дескрипторов:

Standard Device Descriptor (стандартный дескриптор устройства) — содержит информацию об устройстве вцелом и о количестве его возможных конфигураций. Такой дескриптор может быть в устройстве только один.

Структура стандартного дескриптора устройства
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах (всегда 18)
1bDescriptorType1Тип дескриптора (всегда 1)
2bcdUSB2Номер версии USB в формате BCD
4bDeviceClass1Код класса
5bDeviceSubClass1Код подкласса (всегда 0)
6bDeviceProtocol1Код протокола (всегда 0)
7bMaxPacketSize01Максимальный размер пакета для нулевой конечной точки (64 для HS, 8 — для FS и LS)
8idVendor2Идентификатор производителя
10idProduct2Идентификатор продукта
12bcdDevice2Номер версии устройства в формате BCD
14iManufacturer1Индекс дескриптора строки, описывающей производителя
15iProduct1Индекс дескриптора строки, описывающей продукт
16iSerialNumber1Индекс дескриптора строки, содержащей серийный номер устройства
17bNumConfigurations1Количество возможных конфигураций устройства

Номер версии USB может принимать следующие значения:

Коды классов бывают следующими:

Если устройство поддерживает режимы HS и FS, то у него должно быть два разных дескриптора для этих режимов, один из которых — это стандартный дескриптор устройства, а другой — уточняющий дескриптор устройства.

Device Qualifier Descriptor (уточняющий дескриптор устройства) — содержит дополнительную информацию об устройстве, для его работы на другой скорости.

Структура уточняющего дескриптора устройства
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах
1bDescriptorType1Тип дескриптора
2bcdUSB2Номер версии USB в формате BCD
4bDeviceClass1Код класса
5bDeviceSubClass1Код подкласса
6bDeviceProtocol1Код протокола
7bMaxPacketSize01Максимальный размер пакета для нулевой конечной точки (64 для HS, 8 — для FS и LS)
8bNumConfigurations1Количество дополнительных конфигураций устройства
9bReserved1Зарезервировано (всегда 0)

Standard Configuration Descriptor (стандартный дескриптор конфигурации) — содержит информацию об одной из возможных конфигураций устройства.

Структура стандартного дескриптора конфигурации
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах
1bDescriptorType1Тип дескриптора
2wTotalLength2Общий объём данных (в байтах), возвращаемых для данной конфигурации
4bNumInterfaces1Количество интерфейсов для данной конфигурации
5bConfigurationValue1Идентификатор конфигурации (используется при запросе SetConfiguration для установки данной конфигурации)
6iConfiguration1Индекс дескриптора строки, описывающей данную конфигурацию
7bmAttributes1Характеристики конфигурации
8MaxPower1Максимальный потребляемый ток, делённый на 2

Битовая маска атрибутов содержит следующую информацию:

Standard Interface Descriptor (стандартный дескриптор интерфейса) — содержит информацию об одном из доступных в какой-либо конфигурации интерфейсов.

Структура стандартного дескриптора интерфейса
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах
1bDescriptorType1Тип дескриптора
2bInterfaceNumber1Номер интерфейса в наборе, поддерживаемом в данной конфигурации (нумерация начинается с нуля)
3bAlternateSetting1Альтернативный номер интерфейса
4bNumEndpoints1Количество конечных точек данного интерфейса (нулевая конечная точка не учитывается, поскольку она общая для всех)
5bInterfaceClass1Код класса интерфейса
6bInterfaceSubClass1Код подкласса интерфейса
7bInterfaceProtocol1Код протокола
8iInterface1Индекс дескриптора строки, содержащей описание данного интерфейса

Standard Endpoint Descriptor (стандартный дескриптор конечной точки) — содержит информацию об одной из доступных для какого-либо интерфейса конечных точек.

Структура стандартного дескриптора конечной точки
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах
1bDescriptorType1Тип дескриптора
2bEndpointAddress1Адрес конечной точки
3bmAttributes1Атрибуты конечной точки
4wMaxPacketSize2Максимальный размер пакета для конечной точки
6bInterval1Интервал опроса конечной точки в миллисекундах (используется при передаче данных по прерываниям, для остальных, кроме изохронных, — игнорируется, для изохронных всегда равен 1)

Битовая маска атрибутов содержит следующую информацию:

Unicode String Descriptor (дескриптор строки) — текст в формате Unicode. Строка не содержит нуль-терминатора, а её размер вычисляется как размер дескриптора минус два.

Структура стандартного дескриптора конечной точки
Смещение
(байт)
Название поляРазмер
(байт)
Описание
0bLength1Размер дескриптора в байтах
1bDescriptorType1Тип дескриптора
2bStringNСтрока в формате Unicode

Дескрипторы строк являются необязательными. Если девайс не поддерживает дескрипторы строк, то во всех остальных дескрипторах индексы дескрипторов строк, содержащих текстовое описание, должны быть равны нулю.

При подключении USB-устройства, хост с помощью управляющих передач запрашивает у устройства список дескрипторов в следующем порядке:

Причём при запросе дескриптора конфигурации хост получает сразу все дескрипторы (дескрипторы интерфейсов, конечных точек), относящиеся к этой конфигурации. Общий объём этих дескрипторов хосту заранее неизвестен, он хранится в поле wTotalLength дескриптора конфигурации, поэтому хост сначала запрашивает первые 8 байт этого дескриптора, запоминает из прочитанных данных значение поля wTotalLength, а потом снова запрашивает этот же дескриптор конфигурации, но размер запрашиваемых данных уже указывает равным wTotalLength. В результате такого трюка устройство присылает хосту все дескрипторы, относящиеся к данной конфигурации, в следующем виде:

Специфические дескрипторы мы рассмотрим подробнее когда будем разрабатывать какой-нибудь конкретный девайс, какого-нибудь определённого класса, а пока на этом всё.

Источник

Сбой запроса дескриптора usb устройства

Ошибка USB device descriptor failure (code43) часто встречается у пользователей Windows 10, когда они хотят подключить USB-накопитель к ПК или ноутбуку. При попытке найти USB-устройства, вы заметите над ними ярко-желтый значок с уведомлением об ошибке, а сама флешка не будет считываться.

Почти всегда это указывает на то, что устройство неисправно или же произошёл сбой устройства, но некоторые проблемы решаются программным путём.

Что означает эта ошибка

Любое устройство, которое имеет USB порт, должно иметь уникальный дескриптор набор информации о нём, включающей в себя идентификатор поставщика (idVendor), идентификатор продукта (idProduct) и др. Данная информация используется Windows 10 для создания аппаратного идентификатора этого конкретного устройства, а значит без него OC не увидит и будет постоянно выдавать сбой запроса дескриптора.

Ошибка «Сбой дескриптора» отображаются всякий раз, когда Windows обнаруживает проблемы с программным или аппаратным обеспечением системы. Проблемы эти могут быть разного характера, но в целом ошибка указывает на то, что устройство или его программное обеспечение неисправно.

Проще говоря, вы можете их увидеть, если подсоединяемое к системнику устройство обнаруживается, но не идентифицируется системой.

Обновить драйвера и ошибка уйдёт

Самым надёжным вариантом избавиться от «usb device descriptor failure» или же «сбой запроса дескриптора» является обновление программных компонентов составного usb устройства. Пошагово эта процедура выглядит следующим образом:

Нарушенная работа usb устройств напрямую связана с электропитанием

Ошибка драйвера «usb device descriptor failure» он же «сбой запроса дескриптора» может возникнуть в результате недостаточного электропитания USB-блока. Исправить её можно при помощи настроек электропитания. Для этого проделайте следующее:

Отключение режима энергосбережения

Энергосберегающий режим может быть одной из причин того, что подключаемые девайсы не определяются и периодически выдают «сбой запроса дескриптора» Поэтому его следует деактивировать. Для этого:

Драйвера на чипсет

Чипсет — это набор микросхем на мат.плате компьютера, которые отвечают за его непосредственную работу и корректное функционирование всех его составляющих, в том числе USB портов. Поэтому Microsoft регулярно поставляет обновления для ПО, обеспечивающего работу системы. Установить их можно через встроенный инструмент «десятки». Вот что для этого нужно сделать:

Обновление драйверов usb оборудования

Допустим, вы попробовали все варианты, но ошибка кода 43 по-прежнему присутствует (ошибка USB) и устранить её до сих пор не получается. Тогда вам нужно попробовать переустановить драйвера, вместо их обновления. Для этого проделайте следующее:

Важный момент: если Windows отказывается устанавливать драйвера, вам придётся переустановить их вручную. Для этого лучше всего использовать программу Driver Booster PRO, которая поможет вам подобрать оптимальный драйвер и вы избавитесь от ошибки «сбой запроса дескриптора» Но вы также можете скачать файл с оф.ресурсов поставщиков или иных источников.

Usb порты не функционируют из за неисправности с электросетями

Ситуация может в том числе сопровождаться ошибкой «Power surge on the USB port». Она показывает, что питание осуществляется неправильно. Это может быть связано с перебоями в работе электросетей.

Чтобы избавиться от ошибки, следуйте данному гайду:

Важный момент: для ноутбуков со съёмной батареей последовательность действия такая же, за исключением того, что к третьему пункту добавляется «снимите аккумулятор с ноутбука».

Установка драйверов на материнку в ручную

Если автоустановка драйверов на материнку не помогла, то попробуйте данный метод. Вы можете скачать драйверы чипсета с оф.сайта и установить их на свой компьютер вручную, для исключения ошибки usb device descriptor failure.

Но для этого вам необходимо сначала проверить системную информацию компьютера. Важно загрузить правильный драйвер, который подходит конкретно для вашей системы Windows — будь то Windows 10, 32-разрядная или 64-разрядная версия и т.п. Для этого:

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

Какие причины могут быть для сбоя

За подобными ошибками всегда стоят технические или программные причины. В конкретном кейсе с ошибкой сбоя дескриптора устройства, их целое множество:

Ошибка «сбой запроса дескриптора» также может появиться, если гаджет подключён к порту с более высокой пропускной способностью, чем он сам. Например, порт USB 3.0 (этот вход всегда выделен синим входом) поддерживает устройства USB, указанные в стандарте USB 2.0, но при этом могут возникать трудности при соединении или передаче информации.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *