Дескриптор устройства что это
Интерфейс 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 (стандартный дескриптор устройства) — содержит информацию об устройстве вцелом и о количестве его возможных конфигураций. Такой дескриптор может быть в устройстве только один.
Структура стандартного дескриптора устройства | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах (всегда 18) |
1 | bDescriptorType | 1 | Тип дескриптора (всегда 1) |
2 | bcdUSB | 2 | Номер версии USB в формате BCD |
4 | bDeviceClass | 1 | Код класса |
5 | bDeviceSubClass | 1 | Код подкласса (всегда 0) |
6 | bDeviceProtocol | 1 | Код протокола (всегда 0) |
7 | bMaxPacketSize0 | 1 | Максимальный размер пакета для нулевой конечной точки (64 для HS, 8 — для FS и LS) |
8 | idVendor | 2 | Идентификатор производителя |
10 | idProduct | 2 | Идентификатор продукта |
12 | bcdDevice | 2 | Номер версии устройства в формате BCD |
14 | iManufacturer | 1 | Индекс дескриптора строки, описывающей производителя |
15 | iProduct | 1 | Индекс дескриптора строки, описывающей продукт |
16 | iSerialNumber | 1 | Индекс дескриптора строки, содержащей серийный номер устройства |
17 | bNumConfigurations | 1 | Количество возможных конфигураций устройства |
Номер версии USB может принимать следующие значения:
Коды классов бывают следующими:
Если устройство поддерживает режимы HS и FS, то у него должно быть два разных дескриптора для этих режимов, один из которых — это стандартный дескриптор устройства, а другой — уточняющий дескриптор устройства.
Device Qualifier Descriptor (уточняющий дескриптор устройства) — содержит дополнительную информацию об устройстве, для его работы на другой скорости.
Структура уточняющего дескриптора устройства | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах |
1 | bDescriptorType | 1 | Тип дескриптора |
2 | bcdUSB | 2 | Номер версии USB в формате BCD |
4 | bDeviceClass | 1 | Код класса |
5 | bDeviceSubClass | 1 | Код подкласса |
6 | bDeviceProtocol | 1 | Код протокола |
7 | bMaxPacketSize0 | 1 | Максимальный размер пакета для нулевой конечной точки (64 для HS, 8 — для FS и LS) |
8 | bNumConfigurations | 1 | Количество дополнительных конфигураций устройства |
9 | bReserved | 1 | Зарезервировано (всегда 0) |
Standard Configuration Descriptor (стандартный дескриптор конфигурации) — содержит информацию об одной из возможных конфигураций устройства.
Структура стандартного дескриптора конфигурации | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах |
1 | bDescriptorType | 1 | Тип дескриптора |
2 | wTotalLength | 2 | Общий объём данных (в байтах), возвращаемых для данной конфигурации |
4 | bNumInterfaces | 1 | Количество интерфейсов для данной конфигурации |
5 | bConfigurationValue | 1 | Идентификатор конфигурации (используется при запросе SetConfiguration для установки данной конфигурации) |
6 | iConfiguration | 1 | Индекс дескриптора строки, описывающей данную конфигурацию |
7 | bmAttributes | 1 | Характеристики конфигурации |
8 | MaxPower | 1 | Максимальный потребляемый ток, делённый на 2 |
Битовая маска атрибутов содержит следующую информацию:
Standard Interface Descriptor (стандартный дескриптор интерфейса) — содержит информацию об одном из доступных в какой-либо конфигурации интерфейсов.
Структура стандартного дескриптора интерфейса | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах |
1 | bDescriptorType | 1 | Тип дескриптора |
2 | bInterfaceNumber | 1 | Номер интерфейса в наборе, поддерживаемом в данной конфигурации (нумерация начинается с нуля) |
3 | bAlternateSetting | 1 | Альтернативный номер интерфейса |
4 | bNumEndpoints | 1 | Количество конечных точек данного интерфейса (нулевая конечная точка не учитывается, поскольку она общая для всех) |
5 | bInterfaceClass | 1 | Код класса интерфейса |
6 | bInterfaceSubClass | 1 | Код подкласса интерфейса |
7 | bInterfaceProtocol | 1 | Код протокола |
8 | iInterface | 1 | Индекс дескриптора строки, содержащей описание данного интерфейса |
Standard Endpoint Descriptor (стандартный дескриптор конечной точки) — содержит информацию об одной из доступных для какого-либо интерфейса конечных точек.
Структура стандартного дескриптора конечной точки | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах |
1 | bDescriptorType | 1 | Тип дескриптора |
2 | bEndpointAddress | 1 | Адрес конечной точки |
3 | bmAttributes | 1 | Атрибуты конечной точки |
4 | wMaxPacketSize | 2 | Максимальный размер пакета для конечной точки |
6 | bInterval | 1 | Интервал опроса конечной точки в миллисекундах (используется при передаче данных по прерываниям, для остальных, кроме изохронных, — игнорируется, для изохронных всегда равен 1) |
Битовая маска атрибутов содержит следующую информацию:
Unicode String Descriptor (дескриптор строки) — текст в формате Unicode. Строка не содержит нуль-терминатора, а её размер вычисляется как размер дескриптора минус два.
Структура стандартного дескриптора конечной точки | |||
Смещение (байт) | Название поля | Размер (байт) | Описание |
0 | bLength | 1 | Размер дескриптора в байтах |
1 | bDescriptorType | 1 | Тип дескриптора |
2 | bString | N | Строка в формате Unicode |
Дескрипторы строк являются необязательными. Если девайс не поддерживает дескрипторы строк, то во всех остальных дескрипторах индексы дескрипторов строк, содержащих текстовое описание, должны быть равны нулю.
При подключении USB-устройства, хост с помощью управляющих передач запрашивает у устройства список дескрипторов в следующем порядке:
Причём при запросе дескриптора конфигурации хост получает сразу все дескрипторы (дескрипторы интерфейсов, конечных точек), относящиеся к этой конфигурации. Общий объём этих дескрипторов хосту заранее неизвестен, он хранится в поле wTotalLength дескриптора конфигурации, поэтому хост сначала запрашивает первые 8 байт этого дескриптора, запоминает из прочитанных данных значение поля wTotalLength, а потом снова запрашивает этот же дескриптор конфигурации, но размер запрашиваемых данных уже указывает равным wTotalLength. В результате такого трюка устройство присылает хосту все дескрипторы, относящиеся к данной конфигурации, в следующем виде:
Специфические дескрипторы мы рассмотрим подробнее когда будем разрабатывать какой-нибудь конкретный девайс, какого-нибудь определённого класса, а пока на этом всё.
Сбой запроса дескриптора USB устройства под управление Windows 8/10 — что делать?
Сбой запроса дескриптора usb устройства — что делать?
Случается так, что при подключении USB компьютер выдаёт «Сбой запроса дескриптора usb устройства».
Что делать в таком случае и как это исправить? Наша статья поможет вам разобраться в этой проблеме.
Что такое «сбой запроса дескриптора usb»?
Читайте также: Ошибка «Windows не удается завершить форматирование»: причины возникновения ошибки и 5 способов ее устранения
Сейчас USB-средства активно используются во всём мире. Это и способ передачи информации, и возможность синхронизации устройств, и достаточно удобная штука, которая может легко подключить то, что вам нужно, туда, куда нужно.
Да и вообще, это значительно облегчает работу с такими устройствами, как смартфон, планшет, компьютер и ноутбук, и бывает очень полезным в любых жизненных ситуациях.
К тому же, USB почти идеально синхронизируется с операционной системой Windows.
Вы, пользуясь всеми прелестями шнура, наверное, много раз замечали, как винда самостоятельно распознаёт подключённое устройство.
Также она готовит устройство к работе без каких-нибудь дополнительных программ или драйверов.
Но что делать, если распознавания не произошло, а компьютер выдал «Сбой дескриптора запроса USB»? Ведь бывает и так, что система упрямится и не хочет подключать, например, телефон, а он именно в этот момент катастрофически нужен.
Что это вообще за «сбой»?
«Сбой запроса дескриптора USB» — или, проще говоря, «код ошибки 43», или иногда «неизвестное USB-устройство», — это показатель того, что устройство не подключено через USB-порт надлежащим образом. Компьютер или ноутбук просто не в состоянии поймать его и распознать.
Чаще всего причиной может быть физическая проблема, то есть, к примеру, поврежден USB-порт или сам шнур подключаемого устройства. Так что компьютер просто не может «прочитать» ваш телефон или планшет.
Но бывает, что проблема совсем не в шнурах и портах, а в самой системе, и тут уже нужно знать, как правильно и быстро исправить эту ситуацию.
Как выглядит проблема
Основная причина «сбоя запроса дескриптора USB-устройства»
Читайте также: Ошибки при загрузке Windows (XP/7/8/10): Разбираемся с самыми частыми
Прежде всего, нужно проверить шнур или порт, к которому этот шнур был подключён. Очень хорошо, если у вас есть несколько шнуров, или USB-портов, или устройств, к которым можно подключиться, так как это поможет выявить причину.
Неполадки могут быть, в первую очередь, именно в месте или способе подключения.
То есть, переподключая шнур на различные устройства или порты, как и наоборот (различные шнуры к одному порту), вы можете проверить, в чём из них причина.
Выход в такой ситуации очень простой, достаточно всего лишь заменить USB-шнур или поменять порт.
Шнур можно купить в любом магазине сотовой связи, а порт можно сменить, если, к примеру, вы использовали долгое время один и тот же, но теперь просто включитесь в соседний или задний/боковой.
И эта проблема не зря является самой распространённой, так как порты часто дают сбой, а распознать устройство в таком случае Windows просто не сможет.
Но что делать, если при смене кабелей/портов проблема так и не исчезает?
Обновление драйвера USB при «Сбое запроса дескриптора».
Читайте также: ТОП-3 Способа как обновить драйвера на Windows (Виндовс) 10
Как ни странно, дело может быть далеко не только в физической нестабильности компьютера или кабеля.
Вот, например, вторая по распространённости причина – это устаревшие, а то и вовсе отсутствующие драйвера.
Для этого их необходимо переустановить/установить, и для этого существует два очень и очень простых способа. Итак, первый:
Но если этот путь вам не подходит, или все драйвера обновлять не нужно, то для обновления есть и второй вариант. Как же это делается:
Вот и всё! Всего лишь несколько движений мышью и пару щелчков на клавиатуре, и драйверы будут обновлены, а любое устройство можно будет подключить с помощью USB-кабель уже через несколько минут, Windows моментально его распознает.
Но бывает и так, что даже это не решает проблему, или драйверы уже были переустановлены раньше. Как решить этот вопрос в таком случае?
Отключение режима энергосбережения
Читайте также: 3 способа как отключить Спящий режим на Виндовс
Если «Сбой запроса дескриптора USB-устройства» на вашем Windows так никуда и не подевался, то проблема может быть в самодеятельности компьютера или ноутбука.
То есть, он сам решает, отключать ему какой-либо из портов или нет, и когда именно ему это делать. Система старается сберечь энергопотребление, и для экономии энергии начинает творить такие вот чудеса.
Чтоб решить эту проблему, нужно сего лишь отключить режим, который позволяет вашему компьютеру самовольничать:
Эти нехитрые действия помогут вашему персональному компьютеру или ноутбуку перестать уходить в такой произвол и отключать порты, когда ему вздумается.
После того, как вы проделали одну и ту же инструкцию на всех необходимых пунктах из «Диспетчера устройств», можно пробовать подключать устройство через USB ещё раз.
Возможно, для проверки придётся подключить несколько разных кабелей, но результат должен вас порадовать – порты начнут работать стабильно и без подобных перебоев.
Правда, бывает, что даже после всех этих операций компьютер продолжает самостоятельно отключать устройства и порты.
Чтоб проверить, в чём причина, нужно войти в «Свойства» одного из уже известных нам пунктов.
Если галочка на месте, значит, произвол железки и бунт портов происходит по более серьёзной причине, и тут уже стоит обратиться к специалисту, который поможет отремонтировать железо.
Драйвера материнской платы
Читайте также: 5 Советов по настройке файла подкачки Windows (7/8/10)
Иногда причина может быть и в драйверах материнской платы. Редко, но случается и так.
Для решения этой проблемы нужно всего лишь знать производителя установленной у вас детали, перейти на сайт этой компании и отыскать драйвера, которые следует скачать и обновить.
Дело буквально пяти-десяти минут, но может решить массу проблем не только с USB, но и со многими другими неполадками.
Статическое электричество и обесточивание компьютера
Да, именно так. Очередная причина, по которой USB может быть указано как «Сбой дескриптора USB-устройства».
Тут проблема может возникнуть в перенапряжении, недостатке питания на портах или статических сгустках, в неправильном потреблении энергии или её попадании на компьютер.
В таком случае, если уж все вышеперечисленные способы не помогли, поможет только обесточивание вашего компьютера или ноутбука.
Сделать это не сложнее, чем, к примеру, обновить драйвера. И займёт у вас всего лишь пару-тройку минут. Итак, чтоб обесточить компьютер, нужно:
После этих действий пропадает проблема с неправильным потреблением энергии или недостатком питания, что облегчит работу с системой в целом и, конечно же, наконец наладит работу USB-портов.
Если всё сделано правильно, как рассказано в этой инструкции, то «Сбой дескриптора USB-устройства» должен исчезнуть. А вместо него появится обнаруженное и установленное, полностью готовое к работе, устройство.
Конечно, в самом крайнем случае можно затронуть и материнскую плату, но этого настоятельно не рекомендуется делать, если ваш компьютер на гарантии или вы недостаточно хорошо знаете систему и работу железа.
Вывод
С такой проблемой сталкиваются очень многие, и неудивительно, если и у вас возникла такая же ситуация.
В принципе, в отказе компьютера от чтения USB-кабеля ничего пугающего нет, как нет и причин для паники, разве что вам придётся затратить немного времени на устранение этой неполадки и решения данной проблемы.
Да и способв решения существует множество, каждый из которых имеет свои преимущества и свои методы работы, что может подойти именно к вашему случаю.
Как определить, что делать при «Сбое дескриптора USB-устройства»? Пробовать! От переустановки драйвера и до полного отключения питания.
Всё это делается легко и быстро, особых навыков в программировании, например, и знаний компьютера не требует, да и времени на это уходит немного.
Правда, если проблема не исчезла даже после того, как вы перепробовали все способы, стоит задуматься.
Возможно, дело тут далеко не в драйверах или энергопитании ноутбука или персонального компьютера. Возможно, причина такого поведения железки лежит намного глубже.
И тут уже не остаётся ничего, кроме как отнести ПК к мастеру, который и будет определять, в чём же дело.
Но, надеемся, хотя бы один из способов всё же пригодится и будет полезен, и «Неизвестное USB-устройство», будь у Вас Windows 8 или Windows 10, больше не потревожит вас своим появлением.
ВИДЕО: Windows 8, 10 — периодически отключается USB (решение проблемы)
Сбой запроса дескриптора USB устройства под управление Windows 8/10 — что делать?
В статье подробно разбираются причины появления проблем с подключением USB-устройств и появление ошибки «Сбой запроса дескриптора usb устройства». Доступно объясняется, как исправить ошибку.