USB устройство не опознано
Содержание:
- USB-устройства на OS X
- Подключение USB-устройств
- Ошибка возникает по-прежнему
- Доступ USB-устройства в основанном на Intel Macintosh
- Архитектура USB-устройства и терминология
- Устройство не опознано или почему ОС Windows 10 не видит USB-устройство
- Внешние накопители
- Регистрация USB драйвера
- Популярные драйвера категории USB устройства
- Какие устройства поддерживает драйвер
- Типы USB-устройства и скорости шины
- USB устройство не опознано причины ошибки
USB-устройства на OS X
То, когда USB-устройство включается, семья OS X USB абстрагирует содержание дескриптора устройства в объект куска Набора I/O, вызвало . Этот объект куска присоединен плоскость Реестра I/O как дочерний элемент драйвера для контроллера USB. объект куска тогда регистрируется для соответствия Набору I/O.
Если устройство является составным устройством класса без специфичного для поставщика драйвера для соответствия против него, драйвер соответствует против него и запускается как его провайдер. драйвер тогда конфигурирует устройство путем установки конфигурации в списке устройства дескрипторов конфигурации с использованием максимальной мощности, которое может быть удовлетворено портом, к которому присоединяется устройство. Это позволяет устройству с низкой мощностью и мощной конфигурацией быть сконфигурированным по-другому в зависимости от того, присоединено ли это к приводимому в действие шиной концентратору или автономному концентратору. Кроме того, если объект куска имеет свойство «Preferred Configuration», драйвер будет всегда использовать то значение, когда это попытается сконфигурировать устройство.
Конфигурация устройства заставляет семью USB абстрагировать каждый интерфейсный дескриптор в выбранной конфигурации в объект куска. Эти объекты куска присоединены к Реестру I/O как к дочерним элементам оригинала объект куска и регистрируется для соответствия Набору I/O.
Для несоставных устройств класса или составных устройств класса со специфичными для поставщика драйверами, соответствующими против них, нет никакой гарантии, что любая конфигурация будет установлена, и Вам, вероятно, придется выполнить эту задачу в Вашем приложении.
Важно помнить различие между USB-устройством (представленный в Реестре I/O объект куска) и его интерфейсы (каждый представленный объект куска). Многофункциональное USB-устройство, например, представлено в Реестре I/O одним возразите и один объект для каждого интерфейса
Различие между интерфейсом и устройством важно, потому что это определяет, какой объект Ваше приложение должно найти в Реестре I/O и с каким типом устройства соединяют интерфейсом для получения. Например, если Ваше приложение должно связаться с определенным интерфейсом в многофункциональном USB-устройстве, оно должно найти, что интерфейс и добирается связываться с ним
Приложение, которое должно связаться с USB-устройством в целом, с другой стороны, должно было бы найти устройство в Реестре I/O и добраться связываться с ним. Для получения дополнительной информации о нахождении устройств и интерфейсов в Реестре I/O, посмотрите ; для получения дополнительной информации о том, как заставить надлежащий интерфейс устройства связываться с устройством или взаимодействовать через интерфейс, видеть .
Подключение USB-устройств
Скрыть рекламу в статье
Разделы на этой странице:
Подключение USB-устройств
На задней стенке системного блока обычно можно обнаружить четыре USB-порта (иногда 6 или даже 8). Данные порты (рис. 10.3) принадлежат к корневым концентраторам USB. У каждого корневого концентратора есть два USB-порта. Следовательно, если у вас на системной плате четыре USB-порта, то всего в системе два корневых концентратора, если восемь портов – в системе четыре корневых концентратора.
Рис. 10.3. USB-порты
Откройте Диспетчер устройств (для этого выполните команду Пуск, Настройка, Панель управления, Система, перейдите на вкладку Оборудование и нажмите кнопку Диспетчер устройств). В окне Диспетчера устройств раскройте группу Контроллеры универсальной последовательной шиныUSB (рис. 10.4).
Рис. 10.4. Диспетчер устройств
Щелкните правой кнопкой по любому корневому концентратору и выберите команду Свойства. В появившемся окне перейдите на вкладку Питание. Вы увидите следующую информацию (рис. 10.5):
• тип питания концентратора – наш концентратор корневой, поэтому имеет свое собственное питание;
• информацию о подключенных к портам концентратора устройствах и об их питании – в нашем случае подключено одно устройство и оно требует питания в 100 мА. Максимум наш концентратор может передать до 500 мА на порт;
• количество свободных портов – у корневого концентратора всего два порта, один из них занят (подключено запоминающее устройство – USB-диск), поэтому свободен один порт.
Рис. 10.5. Подробная информация о концентраторе
Если у вас всего два концентратора и к каждому можно подключить всего два устройства, то как, спрашивается, можно подключить к компьютеру до 127 USB-устройств? Во-первых, к портам корневого концентратора вы можете подключить дополнительные USB-концентраторы (рис. 10.6). USB-концентратор подключается к USB-порту, но взамен предоставляет как минимум три свободных USB-порта. Бывают два типа USB-концентраторов: с собственным питанием и с питанием от родительского порта. Лучше покупать концентраторы с собственным питанием. Почему? Как мы знаем, на один порт передается сила тока максимум 500 мА; 100 мА потребуется для питания самого концентратора, поэтому для устройств останется 400 мА. Выходит, что к каждому порту такого концентратора вы уже не сможете подключить какое-либо мощное USB-устройство, а сможете подключать устройства вроде USB-дисков, которым необходимо всего 100 мА.
Рис. 10.6. USB-концентратор
Если же концентратор будет обладать собственным питанием, то можно будет обеспечить по 500 мА на каждый порт, то есть USB-порты будут полноценными, как на корневых концентраторах.
Кроме того, некоторые устройства, например клавиатура, могут выступать в роли USB-концентратора (данные устройства должны быть USB-устройствами). Вы подключаете клавиатуру к USB-порту, а к ней можно подключить еще несколько устройств. Обычно к клавиатуре подключают USB-мыши и иногда USB-дис-ки. Понятно, что данные устрой ства должны быть не «обжорливыми», поскольку всего на порт подаются те самые 500 мА; 100 мА уходит на питание клавиатуры, а остальное делится между подключенными к клавиатуре устройствами. Учитывая такое иерархическое подключение устройств, несложно себе представить всего 127 подключенных к компьютеру устройств. Это же не 63 000, как в случае с IEEE-1394!
Теперь о разъемах USB. Разъемы, имеющиеся на задней стенке системного блока (самые обычные USB-разъемы), называются USB типа А. Кабель для разъема типа А изображен на рис. 10.7.
Рис. 10.7. Кабель типа А
Разъем и кабель типа B изображены на рис. 10.8. Обычно разъем типа B используется на периферийных устройствах (принтерах, сканерах). USB-кабель для подключения периферийного устройства к компьютеру (рис. 10.9) оснащен разъемом типа B (для подклю че-ния к прин теру/сканеру) и разъемом типа A (для подключения к компьютеру).
Рис. 10.9. Кабель для подключения USB-принтера
Кроме разъемов типа A и B, есть еще мини-разъем, который так и называется – mini-USB (рис. 10.10). Обычно он используется для подсоединения USB-кабеля к цифровому фотоаппарату, мобильному телефону. При этом один конец кабеля – mini-USB, а второй – типа A.
Ошибка возникает по-прежнему
Каждому пользователю windows 10 рано или поздно становится знакома ситуация, когда при подключении к порту юсб неожиданно выскакивает ошибка, что оно не опознано «Сбой_запроса_дескриптора USB-устройства» (Код 43).
Такие проблемы возникнуть могут не только в том случае, если device впервые подключен – например, ваша старая добрая флэшка, и как бы ни звучало банально – надо обновить драйвера, наряду с проверкой электропитания, дрова будем обновлять поочередно для всех категорий – пока проблема не исчезнет. Поэтапно:
- Следуем в «Device Manager» — выше указано 2 способа
- В раскрываемом списке «Контроллеры_USB» → кликом ПКМ «Корневой_USB-концентратор» → «Обновить_драйверы»
Будет предложено выбрать как именно провести поиск ПО → выбираем «Выполнить_ поиск_ драйверов_ на_ этом_ компьютере»
Жмем на «Выбрать_драйвер_из_списка…» → «Далее»
Обязательно должен быть предложен драйвер «Корневой_USB-концентратор» → «Далее»
На этом drivers успешно установлены – перезагрузите компьютер.
Доступ USB-устройства в основанном на Intel Macintosh
Этот раздел обеспечивает обзор некоторых проблем, связанных с разработкой универсальной версии двоичных файлов приложения, это получает доступ к USB-устройству. Перед чтением этого раздела, убедиться считать Универсальные Двоичные Инструкции по Программированию. Тот документ касается архитектурных различий, и порядок байтов форматирует и обеспечивает всесторонние инструкции для модификации кода и создания универсальных двоичных файлов. Инструкции в том документе применяются ко всем типам приложений, включая тех который аппаратные средства доступа.
Прежде чем Вы создадите свое приложение как универсальный двоичный файл, удостоверьтесь что:
-
Вы портируете свой проект на GCC 4 (XCode использует GCC 4 для предназначения для основанных на Intel компьютеров Macintosh),
-
Вы устанавливаете OS X v10.4 универсальный SDK
-
Вы разрабатываете свой проект в Xcode 2.1 или позже
Шина USB является шиной с прямым порядком байтов. Структурированные данные появляются на шине в формате с прямым порядком байтов независимо от собственного формата порядка байтов компьютера, в котором работает приложение. При разработке приложения доступа к устройствам USB для выполнения в основанном на PowerPC Macintosh, Вы, вероятно, выполняете некоторый свопинг байта на данных, которые Вы считываете из Шины USB, потому что процессор PowerPC использует формат с обратным порядком байтов. Например, структура дескриптора конфигурации USB содержит двухбайтовое поле, содержащее длину дескриптора. Если Ваше приложение PowerPC читает эту структуру из Шины USB (вместо того, чтобы получить его от функции интерфейса USB-устройства), необходимо подкачать значение от формата Шины USB (прямой порядок байтов) к формату PowerPC (обратный порядок байтов).
Семья USB обеспечивает несколько макросов свопинга, которые подкачивают от USB для хостинга и от узла до USB (для получения дополнительной информации о них макросы, посмотрите ). Платформа Ядра также обеспечивает подкачивающие байт макросы и функционирует, можно использовать в высокоуровневых приложениях (см. заголовочный файл в ). При использовании их макросы в приложении Вы не должны испытывать никакие затруднения при разработке универсальной версии двоичных файлов приложения. Это вызвано тем, что они, которые макросы определяют во время компиляции, если подкачка необходима. Если, однако, Ваше приложение будет использовать трудно кодированные подкачки от прямого порядка байтов до обратного порядка байтов, то Ваше приложение не будет работать правильно в основанном на Intel Macintosh. Поскольку Вы разрабатываете универсальную версию двоичных файлов своего приложения, поэтому, убедиться использовать семью USB, загружающую макросы или макросы для всего свопинга байта.
Несмотря на то, что Вы, возможно, должны выполнить свопинг байта на значениях Ваши чтения приложения от Шины USB, Вы не должны выполнять свопинг байта на значениях, Вы передаете в параметрах функциям в семье USB API. Необходимо передать значения аргументов в формате узла компьютера. Аналогично, любые значения, которые Вы получаете от функций семьи USB, будут в формате узла компьютера.
Архитектура USB-устройства и терминология
Архитектура универсального USB-устройства является многослойной. Устройство состоит из одной или более конфигураций, каждая из которых описывает возможную установку устройства, может быть запрограммирован в. Такие настройки могут включать характеристики электропитания конфигурации (например, максимальная мощность, использованная конфигурацией и является ли это автономным или не), и поддерживает ли конфигурация удаленное пробуждение.
Каждая конфигурация содержит один или несколько интерфейсов, которые доступны после того, как установлена конфигурация. Интерфейс обеспечивает определения функций, доступных в устройстве, и может даже содержать альтернативные настройки в единственном интерфейсе. Например, интерфейс для аудиоустройства может иметь различные настройки, которые можно выбрать для различной пропускной способности.
Каждый интерфейс содержит нуль или больше конечных точек. Конечная точка является уникально идентифицируемой частью USB-устройства, которое является источником или приемником информации в коммуникационном потоке между узлом и устройством. Каждая конечная точка имеет характеристики, описывающие коммуникацию, которую она поддерживает, такие как тип передачи (управление, изохронное, прерывание или объем, описанный в ), максимальный размер пакета и направление передачи (ввод или вывод).
Связь с USB-устройством выполняется через канал, логическую ассоциацию между конечной точкой и программным обеспечением, работающим на узле. Конечная точка и канал часто используются синонимично несмотря на то, что конечная точка является компонентом USB-устройства, и канал является логической абстракцией коммуникационного канала между конечной точкой и узлом.
Устройство не опознано или почему ОС Windows 10 не видит USB-устройство
Если операционная система Виндовс 10 при подключении накопителя к ПК или ноутбуку выдаёт сообщение о том, что «Устройство не опознано», стоит выполнить следующие действия:
- Подключаем флешку к другому ПК, чтобы исключить вероятность поломки самого накопителя.
- Отсоединяем флешку. Отключаем компьютер или ноутбук от сети и зажимаем на несколько секунд кнопку питания, чтобы убрать остатки заряда с материнской платы, блока питания и остальных комплектующих. Повторяем попытку подключения флешки к Win 10.
Если эти простые действия не помогли решить проблему, выполняем следующее:
Жмём «Win+R» и вводим «msc».
Откроется «Диспетчер устройств». Находим ветку «Контролеры» или «Другие устройства». Находим флешку. Жмём правой кнопкой мыши и выбираем «Обновить драйвер».
Если устройство отображается с жёлтым знаком восклицания, нажимаем на нём правой кнопкой мыши и выбираем «Свойства». Откроется новое окно. Переходим во вкладку «Управление питанием». Снимаем отметку с пункта «Разрешить отключение этого устройства для экономии энергии».
Если данное действие не помогло, переходим во вкладку «Драйвер» и жмём на кнопку «Откатить» (если она активна), или «Удалить».
Далее нужно либо скачать драйвер, либо обновить его через «Диспетчер устройств». При этом ПК с Windows 10 должен иметь подключение к сети.
Windows 10 не видит накопитель, но звук подключения есть
Если вы подключили флешку к ПК с Windows 10 и сигнал подключения прозвучал, а устройство в Проводнике не отображается, стоит выполнить следующие действия:
Жмём «Win+R» и вводим «msc».
Откроется утилита «Управление дисками». Смотрим, если ли в списке флешка. Если её нет, значит, устройство повреждено. Если же накопитель присутствует, стоит нажать на него правой кнопкой мыши и выбрать опцию «Сделать раздел активным».
Также можно попробовать назначить флешке букву.
Ошибка с кодом или сбой запроса дескриптора устройства в Windows 10
Если Windows 10 не видит в Проводнике флешку, а в «Диспетчере устройств» накопитель отображается с ошибкой «Сбой запроса дескриптора устройства» (и указан код), стоит выполнить следующие действия:
У всех устройств, которые имеются в разделе «Контролер USB», стоит обновить драйвера.
Для этого жмём правой кнопкой мыши на каждом элементе и выбираем «Обновить драйвер». В списке выбираем «Поиск драйверов на этом компьютере».
После поиска выделяем найденный драйвер и жмём «Далее».
- Запустится установка драйвера. Такие же действия повторяем и со всеми остальными элементами ветки «Контролеры».
- После перезагружаем компьютер.
Также, при возникновении такой ошибки, когда Win 10 не распознаёт флешку, стоит проверить, установлены ли следующие драйвера:
- ACPI Driver
- Intel Management Engine Interface
- Утилиты для ноутбуков типа Firmware.
Включение опции отображения флешки в настройках BIOS
Также система Windows 10 может не видеть флешку, если в настройках BIOS выставленные неправильные настройки. Чтобы их проверить, выполняем следующее:
- Перезагружаем ПК и заходим в BIOS;
- В зависимости от модели материнской платы, переходим в раздел «Advanced», а делее «USB Configuration».
Смотрим, чтобы в пункте «USB Controller» и «USB Functions» было разрешено использование USB портов. Для этого должно быть указано значение «Enabled».
Сохраняем результаты и загружаемся в обычном режиме.
Программный способ решения проблемы
Если Windows не определяет флешку после обновления операционной системы, проблема может крыться в неправильных записях реестра, правки в который были внесены при подключении USB-устройства. Чтобы исправить такую ситуацию, стоит скачать и воспользоваться программой USBOblivion. Однако перед её запуском стоит сделать бэкап реестра и создать точку восстановления Win 10, так как софт удалит их реестра все ключи USB-устройств.
Отключаем все флешки от ПК. Запускаем программу и ставим отметки для сохранения точек отката и выполнения полной очистки.
Запустится сканирование ПК. Жм ём «Очистка».
Перезагружаем ПК и повторяем попытку подключения съёмного носителя.
Также систему Win 10 стоит проверить на вирусы, установить в настройках отображения отметку «Показывать скрытые папки и файлы». Возможно, вирусное ПО изменило настройки системы.
Если же вы столкнулись с ошибкой, когда Windows 10 не видит накопитель и выдаёт сообщение о том, что прежде, чем использовать диск его нужно отформатировать, читайте далее.
Внешние накопители
В мир цифровых камер и смартфонов число фото и видео файлов растет с геометрической прогрессией, а потребность хранения ярких моментов и запоминающихся событий, приводит к использованию внешних жестких дисков, и зачастую при их подключении — windows 10 не видит usb, описываем пути решения.
Прежде всего, необходимо убедиться в работоспособности самого устройства, так, если есть возможность подключите его к другому ПК или ноутбуку, если ситуация повторится, значит проблема именно в накопителе. Если возможности такой нет или device прекрасно опознан и работает на другой машине, будем искать причину на текущем компе.
Регистрация USB драйвера
Основной структурой, которую должны создать все USB драйверы, является struct usb_driver. Эта структура должна быть заполнена драйвером USB и состоит из ряда функций обратного вызова и переменных, описывающих USB драйвер для кода USB ядра:
struct module *owner
Указатель на модуль владельца этого драйвера. Ядро USB использует его для правильного подсчёта ссылок на этот драйвер USB, чтобы он не выгружался в несвоевременные моменты. Переменной должен быть присвоен макрос THIS_MODULE.
const char *name
Указатель на имя драйвера. Он должен быть уникальным среди всех USB драйверов в ядре и, как правило, установлен на такое же имя, что и имя модуля драйвера. Оно проявляется в sysfs в /sys/bus/usb/drivers/, когда драйвер находится в ядре.
const struct usb_device_id *id_table
Указатель на таблицу struct usb_device_id, которая содержит список всех различных видов устройств USB, которые драйвер может распознать. Если эта переменная не установлена, функция обратного вызова probe в драйвере USB никогда не вызывается. Если вы хотите, чтобы ваш драйвер всегда вызывался для каждого USB устройства в системе, создайте запись, которая устанавливает только поле driver_info:
static struct usb_device_id usb_ids = {
{.driver_info = 42},
{ }
};
int (*probe) (struct usb_interface *intf, const struct usb_device_id *id)
Указатель на зондирующую функцию в USB драйвере. Эта функция (описанная в разделе ) вызывается USB ядром, когда оно думает, что оно имеет структуру usb_interface, которую этот драйвер может обработать. Указатель на struct usb_device_id, который использовало USB ядро, чтобы принять это решение также передается в эту функцию. Если USB драйвер признаёт переданную ему структуру usb_interface, он должен правильно проинициализировать устройство и вернуть 0. Если драйвер не хочет признавать устройство или произошла ошибка, он должен вернуть отрицательное значение ошибки.
void (*disconnect) (struct usb_interface *intf)
Указатель на функцию отключения в USB драйвере. Эта функция (описанная в разделе ) вызывается USB ядром, когда структура usb_interface была удалена из системы, или когда драйвер выгружается из ядра USB.
Таким образом, чтобы создать значимую структуру struct usb_driver, должны быть проинициализированы только пять полей:
static struct usb_driver skel_driver = {
.owner = THIS_MODULE,
.name = «skeleton»,
.id_table = skel_table,
.probe = skel_probe,
.disconnect = skel_disconnect,
};
struct usb_driver содержит несколько больше обратных вызовов, которые, как правило, очень часто не используются, и не требуются для правильной работы USB драйвера:
int (*ioctl) (struct usb_interface *intf, unsigned int code, void *buf)
Указатель на функцию ioctl в USB драйвере. Если он присутствует, то вызывается, когда программа пользовательского пространства делает вызов ioctl для записи файловой системы устройств usbfs, связанной с устройством USB, относящемуся к этому USB драйверу. На практике только драйвер USB концентратора использует этот ioctl, так как любому другому USB драйверу нет иной реальной необходимости его использовать.
int (*suspend) (struct usb_interface *intf, u32 state)
Указатель на функцию приостановки в USB драйвере. Она вызывается, когда работа устройства должна быть приостановлена USB ядром.
int (*resume) (struct usb_interface *intf)
Указатель на функцию возобновления в USB драйвере. Она вызывается, когда работа устройства возобновляется USB ядром.
Чтобы зарегистрировать struct usb_driver в USB ядре, выполняется вызов usb_register_driver с указателем на struct usb_driver. Для USB драйвера это традиционно делается в коде инициализации модуле:
static int __init usb_skel_init(void)
{
int result;
/* регистрируем этот драйвер в подсистеме USB */
result = usb_register(&skel_driver);
if (result)
err(«usb_register failed. Error number %d», result);
return result;
}
Когда драйвер USB будет выгружаться, необходимо разрегистрировать struct usb_driver в ядре. Это делается с помощью вызова usb_deregister. Когда происходит этот вызов, любые USB интерфейсы, которые в настоящее время связаны с этим драйвером, отключаются и для них вызывается функция disconnect.
static void __exit usb_skel_exit(void)
{
/* отменяем регистрацию этого драйвера в подсистеме USB */
usb_deregister(&skel_driver);
}
Популярные драйвера категории USB устройства
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: General
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: General
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: USB Compliance.
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: General
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: Sitecom INC.
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: 0.0.1.99
-
Производитель: USBDTT Technology
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: General
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: KYE
Операционная система: 2000 XP W2k3 Vista W7 W8 W8.1 W10
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: General
Операционная система: XP
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: NVIDIA Corporation
Операционная система: 2000 XP W2k3 XP64 W2k3x64
Дата драйвера: unknown
Версия драйвера: unknown
-
Производитель: DC1300
Операционная система: 2000 XP W2k3 Vista W7 W8 W8.1 W10
Дата драйвера: unknown
Версия драйвера: unknown
Какие устройства поддерживает драйвер
Структура struct usb_device_id содержит список различных типов USB устройств, которые поддерживает этот драйвер. Этот список используется ядром USB, чтобы решить, какой драйвер предоставить устройству, или скриптами горячего подключения, чтобы решить, какой драйвер автоматически загрузить, когда устройство подключается к системе.
Структура struct usb_device_id определена со следующими полями:
__u16 match_flags
Определяет, какие из следующих полей в структуре устройства должны сопоставляться. Это битовое поле определяется разными значениями USB_DEVICE_ID_MATCH_*, указанными в файле include/linux/mod_devicetable.h. Это поле, как правило, никогда не устанавливается напрямую, а инициализируется с помощью макросов типа USB_DEVICE, описываемых ниже.
__u16 idVendor
Идентификатор поставщика USB для устройства. Этот номер присваивается форумом USB для своих членов и не может быть присвоен кем-то еще.
__u16 idProduct
Идентификатор продукта USB для устройства. Все поставщики, которые имеют выданный им идентификатор поставщика, могут управлять своими идентификаторами продукта, как они предпочитают.
__u16 bcdDevice_lo
__u16 bcdDevice_hi
Определяют нижнюю и верхнюю границу диапазона назначаемого поставщиком номера версии продукта. Значения bcdDevice_hi является включительным; его значение является значением наибольшего номера устройства. Обе эти величины представлены в двоично-десятичной (BCD) форме. Эти переменные в сочетании с idVendor и idProduct используются для определения данного варианта устройства.
__u8 bDeviceClass
__u8 bDeviceSubClass
__u8 bDeviceProtocol
Определяют класс, подкласс и протокол устройства, соответственно. Эти номера присваиваются форумом USB и определены в спецификации USB. Эти значения определяют поведение для всего устройства, в том числе все интерфейсы на этом устройстве.
__u8 bInterfaceClass
__u8 bInterfaceSubClass
__u8 bInterfaceProtocol
Подобно зависимым от устройства вышеприведённым величинам, эти определяют класса, подкласс и протокол отдельного интерфейса, соответственно. Эти номера присваиваются форумом USB и определены в спецификации USB.
kernel_ulong_t driver_info
Это значение не используется для сравнения, но оно содержит информацию о том, что драйвер может использовать, чтобы отличать разные устройства друг от друга в функции обратного вызова probe драйвера USB.
Как и с PCI устройствами, существует ряд макросов, которые используются для инициализации этой структуры:
USB_DEVICE(vendor, product)
Создаёт struct usb_device_id, которая может быть использована только для соответствия указанными значениям идентификаторов поставщика и продукта. Она очень часто используется для устройств USB, которым необходим специальный драйвер.
USB_DEVICE_VER(vendor, product, lo, hi)
Создаёт struct usb_device_id, которая может быть использована только для соответствия указанным значениям идентификаторов поставщика и продукта внутри диапазона версий.
USB_DEVICE_INFO(class, subclass, protocol)
Создаёт struct usb_device_id, которая может быть использованы для соответствия определённому классу USB устройств.
USB_INTERFACE_INFO(class, subclass, protocol)
Создаёт struct usb_device_id, которая может быть использована для соответствия определённому классу USB интерфейсов.
Итак, для простого драйвера USB устройства, который управляет только одним USB устройством от одного поставщика, таблица struct usb_device_id будет определяться как:
/* таблица устройств, которые работают с этим драйвером */
static struct usb_device_id skel_table = {
{ USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
{ } /* Завершающая запись */
};
MODULE_DEVICE_TABLE (usb, skel_table);
Как и с драйвером PCI, необходим макрос MODULE_DEVICE_TABLE, чтобы разрешить инструментам пространства пользователя выяснить, какими устройствами может управлять этот драйвер. Но для USB драйверов первым значением в этом макросе должна быть строка usb.
Типы USB-устройства и скорости шины
Спецификация USB поддерживает широкий выбор устройств, колеблющихся от устройств малого быстродействия, таких как клавиатуры, мыши и джойстики к устройствам более высокой скорости, таким как сканеры и цифровые фотоаппараты. Спецификация перечисляет много классов устройства, что каждый определяет ряд ожидаемых способов поведения устройства. перечисляет некоторые примеры USB-устройств, категоризированных классом.
Класс USB-устройства |
USB-устройства в классе |
---|---|
Аудио класс |
Динамики, микрофоны |
Класс устройства интерфейса чип-карты |
Смарт-карты, чип-карты |
Коммуникационный класс |
Спикерфон, модем |
Составной класс |
Устройство, в котором вся специфичная для класса информация встраивается в ее интерфейсы |
Класс HID |
Клавиатуры, мыши, джойстики, таща планшеты |
Класс концентратора |
Концентраторы обеспечивают дополнительные точки подключения для USB-устройств |
Класс массового хранения |
Жесткие диски, читатели флэш-памяти, диски Чтения-записи CD, цифровые фотоаппараты и высокопроизводительные медиапроигрыватели |
Печать класса |
Принтеры |
Определенный поставщик |
Устройство, не вписывающееся ни в какой другой предопределенный класс или тот, не использующий стандартные протоколы для существующего класса |
Видео класс |
Цифровые видеокамеры, веб-камеры, цифровые цифровые видеокамеры для покадровой съемки та потоковая передача видео поддержки |
Версия 1.1 спецификации USB поддерживает две скорости шины:
-
Низкая скорость (1,5 Мбит/с)
-
Полная скорость (12 Мбит/с)
Версия 2.0 спецификации добавляет другую скорость шины до этого списка:
Высокая скорость (480 Мбит/с)
Спецификация USB 2.0 полностью совместима с USB-устройствами низкоскоростной и полной скорости и даже поддерживает использование кабелей и коннекторов, сделанных встретить более ранние версии спецификации. Apple обеспечивает порты USB 2.0 на всех новых компьютерах Macintosh и полностью поддерживает новую спецификацию с контроллерами Усовершенствованного интерфейса хост-контроллера (EHCI) и встроенными, низкоуровневыми драйверами USB.
USB устройство не опознано причины ошибки
Работающий ещё вчера девайс вдруг не опознается – почему такое происходит и с чего стоит начинать диагностику? Перед тем, как сетовать на неполадки ОС и самих устройств, стоит проверить – если одно из не работающих устройств на вашем ноутбуке функционирует в других системах без проблем, то, возможно, проблема кроется в неполадках порта.
Проверить это можно и просто поменяв адаптер, к которому вы подключаете клавиатуру или флешку. Так вы заодно убедитесь в функциональности самого девайса и наличии проблем именно с программной или аппаратной частью того ПК, на котором оно отказывается запускаться.
И вот вы определили, что флешка не определяется лишь на одном из компьютеров или же ПК не распознает мышь. Зачастую, вся проблема с такими устройствами кроется в банальном отсутствии драйверов на них. Даже при нормальном функционировании ранее необходимое для них ПО могло быть случайно удалено или замещено, вследствие чего вы и видите то самое сообщение. Вместе с ним, зачастую, возникает предложение поискать девайс в сети – пользователю достаточно кликнуть по всплывающему окошку и ждать результатов.