No Image

Составное usb устройство является устаревшим usb устройством

СОДЕРЖАНИЕ
4 просмотров
11 марта 2020

Windows не распознает USB-устройства

Иногда можно наблюдать вариант, когда Windows не распознает накопитель.

Существует довольно много причин, которые способствуют появлению такой неполадки.

Проблема с портом

Если вы подключили к компьютеру какое-то внешнее оборудование — мышь, клавиатуру, принтер или просто флешку, а Windows не удается опознать что это за девайс — выполните приведенные ниже действия.

Вначале проверяем разъем компьютера и подключаемый штекер на предмет неисправности.

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

Кроме этого проверьте целостность подключаемого кабеля, если он имеет внешние повреждения — замените его.

Зачастую бывает, что передний порт попросту не подключен к материнской плате.

Возможно и такое, что не опознается системой в связи с подключением в порт USB 3.0.

Они наиболее скоростные, чем серии 2.0.

Отличить их достаточно просто, так как контактная пластина порта имеет синий цвет.

Переподключите устройство в другой разъем и возможно проблема исчезнет сама собой.

Снятие статического электричества

Можно решить этот вопрос путем полного обесточивания персонального лаптопа.

Завершите его работу и отключите от USB-выхода не распознаваемое устройство.

Это необходимо для того, чтобы полностью избавиться от электрических разрядов, оставшихся в конденсаторах материнской платы.

Кнопка запуска ПК

После этого осуществите запуск «компа» и подключите любое внешнее запоминающее устройство в usb-выход.

Вполне вероятно, что Windows избавится от имевшейся ошибки и сможет его распознать.

Если же этого не произошло — возможно проблема заключается в некорректной работе драйверов.

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

Постарайтесь найти и установить максимально свежие и рабочие драйвера к накопителю USB.

Строка с ним имеет иконку с вопросительным знаком и надписью: «Неизвестное устройство».

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

Строка с ним имеет иконку с вопросительным знаком и надписью: «Неизвестное устройство».

Для этого кликните по нему правой кнопкой мышки и в выпадающем списке выберите пункт «Обновить драйверы…».

Тогда, когда неопознанный накопитель находится в разделе «Контроллеры USB» — кликните по нему мышью.

В открывшемся окне перейдите на вкладку «Драйвер» и попробуйте вернуть ОС до того момента, когда драйвера работали корректно. Для этого необходимо нажать на кнопку Откатить.

Однако такая процедура действенна при наличии предыдущей версии, в противном случае придется их полностью удалить.

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

Чтобы убедиться в этом необходимо открыть окно свойств корневого usb-концентратора и на вкладке управления электропитанием снять галочку с пункта «Разрешить отключение этого устройства для экономии энергии».

Запрет на отключение порта usb

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

Чтобы это устранить, понадобится открыть «Панель управления» и перейти на вкладку «Электропитание».

В появившемся окне раскройте список пункта «Параметры usb» и выберите «Параметр временного отключения usb-порта».

Установите в нем значение «Запрещено» и нажмите «Ок» для подтверждения изменения.

Кроме этого установите на операционку новые обновления, а при необходимости — последние программы для материнской платы.

Это можно выполнить при помощи программы Driver Easy, которая устанавливает драйвера для любого имеющегося оборудования, в том числе и usb.

Внешний вид программы

Что делать, если usb устройство не опознает Windows 10?

Во — первых следует убедиться в том, что само устройство полностью исправно.

В противном случае причину следует искать в самом компьютере. Для начала проверьте аппаратную часть.

Проверка аппаратной части

При подключении винчестера или флеш-накопителя с помощью usb-разветвителя (usb-hub) появление подобной ошибки связано с недостаточным питанием.

Читайте также:  Coreldraw расстояние между буквами

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

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

После этого следует 10-15 секунд удерживать в нажатом состоянии кнопку запуска, чтобы избавиться от остаточного электричества.

После этого снова включаем комп в сеть и производим запуск системы.

В случае с ноутбуком — присоединяем батарею и запускаете его.

Ошибка должна исчезнуть, а если нет — ищите причину в программном обеспечении.

Проверка программного обеспечения

Проверка программного обеспечения

Вначале проверяем режим энергосбережения, так как в целях экономии электроэнергии система может сама отключать usb-порт.

Откройте «Диспетчер устройств». кликнув правой кнопкой мыши по меню «Пуск».

Можно также нажать на клавиатуре сочетание клавиш Win+X и в открывшемся окне выбрать необходимый пункт.

Из списка всех имеющихся устройств, отображаемых на вкладке «Диспетчера», разверните список «Контроллеры USB».

Переходите поочередно на следующие вкладки — «USN Generic Hub», «Корневой USB-концентратор» и «Составное USB-устройство».

По каждой из них кликаете правой кнопкой мыши и выбираете пункт меню «Свойства».

В каждом окне свойств необходимо открыть вкладку «Управление электропитанием» и с пункта «Разрешить отключение этого устройства для экономии энергии» снять галочку выделения.

Для подтверждения кликните по кнопке «Ок».

Снова откройте «Диспетчер устройств» и кликните правой кнопкой мыши по пункту «Корневой USB-концентратор».

Из выпавшего списка выберите «Обновить драйверы…».

В появившемся окне жмете на «Поиск и установка драйверов вручную».

В следующем — «Выбрать драйвер из списка уже установленных драйверов».

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

Код ошибки 43 возникает в Windows из-за физических неполадок в работе USB-устройств. Как следствие: Диспетчер устройств отображает желтые треугольники предупреждения около тех устройств, которые подключены по USB.

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

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

Если вы подключили внешний жесткий диск, то проблема может быть в дефектном USB-кабеле. В любом случае, проверьте несколько приборов, подключив их к различным USB-разъемам.

В некоторых случаях вам может помочь следующий трюк: откройте «Панель управления» и в разделе «Система» зайдите в «Диспетчер устройств». Нажмите правой кнопкой мыши на «Контроллеры USB» и деактивируйте соответствующую команду в контекстном меню. Перезагрузите компьютер и активируйте контроллер снова. USB-порты должны снова стабильно работать.

Фото: компании-производители

Не так давно, была опубликована статья «Пастильда — открытый аппаратный менеджер паролей». Так как данный проект является открытым, то мы решили, что будет интересно, если мы будем писать небольшие заметки о процессе проектирования, о задачах, которые перед нами стоят и о трудностях, с которыми мы сталкиваемся.

Основная суть Пастильды заключается в том, что она является своеобразным переходником между клавиатурой и ПК. Таким образом, она должна уметь:

  • быть USB хостом для клавиатуры, которая к ней подключается,
  • быть клавиатурой для ПК, чтобы либо перенаправлять сообщения от реальной клавиатуры, либо самой быть клавиатурой,
  • быть дисковым накопителем, чтобы можно было редактировать базу данных паролей в удобном для человека виде.
Читайте также:  Portal minagri gov kz vet

Данный функционал является скелетом нашего проекта, поэтому первая заметка будет посвящена именно ему.

Реализация USB хоста

Итак, во-первых мне нужно было реализовать на устройстве USB хост, чтобы оно могло распознавать и общаться с подключенной к нему клавиатурой. Так как в работе я использую связку Eclipse + GNU ARM Eclipse + libopencm3, то очень хотелось найти уже что-то готовое и желательно написанное с использованием библиотеки libopencm3. Желание мое было очень жирным, до последнего момента не верила, что мои поиски увенчаются успехом. Однако под конец рабочего дня, проскролив интернет до самого дна, я вдруг наткнулась вот на это. libusbhost? Серьезно? И это был не просто написанный на основе libopencm3 usb хост, он еще и был написан под STM32F4, под тот самый, который мы решили использовать в проекте. В общем, звезды сошлись и радости моей не было предела. Кстати, оказалось, что этот проект создавался как часть libopencm3, однако его так и не добавили в библиотеку.

Как библиотеку, libusbhost я не собирала, просто взяла необходимые мне исходники, написала драйвер для клавиатуры и, в общем-то все, погнали! Но обо всем по-порядку.

Из libusbhost я взяла следующие файлы:

  • usbh_device_driver.h
  • usbh_config.h
  • usbh_hubbed.[ch]
  • usbh_lld_stm32f4.[ch]

Там был еще файл usart_helpers.[ch], с его помощью можно было по UART передавать в терминал все сообщения, приходящие от устройства в хост и еще много различной отладочной информации. Я с этим функционалом поигралась, но из проекта его убрала.

По аналогии с usbh_driver_hid_mouse.[ch], я написала драйвер для клавиатуры (usbh_driver_hid_kbd.[ch]).

Далее был реализован простенький класс, для работы с хостом:

Здесь все прозрачно. Устройство должно слушать клавиатуру и ждать набора специальной комбинации клавиш, для перехода в режим выбора логина и пароля. Это происходит в обработчике прерывания от клавиатуры kbd_in_message_handler(uint8_t data_len, const uint8_t *data). Тут есть два варианта развития событий:

  • Если комбинации нет, то нам нужно пропустить сообщение от клавиатуры дальше в ПК. Для обработки данного события, в конструктор передана функция _redirect_callback.
  • Если комбинация нажата, то нам нужно оповестить систему о том, что мы перешли в режим выбора логина и пароля, следовательно, мы больше не транслируем сообщения от клавиатуры в ПК. Теперь само устройство является клавиатурой, а сообщения от настоящей клавиатуры теперь интерпретируются как команды устройству. Для обработки такого события, в конструктор передана функция _control_interception_callback.

Реализация составного USB устройства

Далее мне нужно было сделать так, чтобы наше устройство отображалось в диспетчере устройств и как клавиатура, и как дисковый накопитель. Тут вся магия в дескрипторах=) В этом документе, в главе 9, подробно описан USB Device Framework. Эту главу нужно очень внимательно прочитать и в соответствии с ней описать дескрипторы устройства. В моем случае получилось следующее:

keyboard_report_descriptor был взят из документа Device Class Definition for Human Interface Devices (HID) , Appendix E.6 Report Descriptor (Keyboard). Честно, сильно не разбиралась со структурой отчета, поверила документу) В целом, вот пара моментов, на которые нужно обратить особое внимание:

  • usb_config_descriptor: поле bNumInterfaces должно отражать столько интерфейсов, сколько реально реализовано. В нашем случае два: HID и MSD
  • usb_interface_descriptor: поле bInterfaceNumber обозначает номер интерфейса, но отсчет начинается с нуля, следовательно, номер первого интерфейса — 0.

Вот, с описательной точки зрения, наверно, и все. Не могу не отметить, как грамотно в библиотеке описаны дескрипторы (их описание находится в файле usbstd.h). Все четко по документации. Полагаю, это значительно упростило мне задачу, так как не возникало вопросов «Как же мне описать составное устройство?». Все сразу было понятно.

Для работы с составным устройством был написан класс USB_composite, представленный ниже.

Читайте также:  Как повысить напряжение на импульсном блоке питания

Ключевыми в этом классе являются две функции:

  • Функция hid_control_request нужна для общения Пастильды как клавиатуры с хостом (в данном случае, хост — это ПК). Вне класса данная функция вызывается через USB_control_callback.
  • Функция hid_set_config нужна для того, чтобы настроить конечные точки (endpoints) и зарегистрировать USB_control_callback, описанный в предыдущем пункте. Вне класса данная функция вызывается через USB_set_config_callback.

Ниже представлен вариант их реализации:

Как правило, функции control_request и set_config должны быть явно описаны для каждого устройства. Однако из этого правила есть исключение: Mass Storage Device. Итак, разберемся с конструктором класса USB_Composite.

Во-первых, мы инициализируем ноги USB OTG FS:

Во-вторых, нам нужно проинициализировать наше составное устройство, зарегистрировать USB_set_config_callback, о котором шла речь выше, и разрешить прерывание:

Этого достаточно для того, чтобы в диспетчере устройств наше устройство распознавалось:

  • Во вкладке «Контроллеры USB»: как составное устройство,
  • В этой же вкладке, как «Запоминающее устройство для USB»,
  • Во вкладке «Клавиатуры», как «Клавиатура HID».

Однако «Запоминающее устройство для USB» будет помечено предупреждением о том, что устройство работает неправильно. Все дело в том, что в отличие от других USB устройств, Mass Storage инициализируется немного иначе, через функцию usb_msc_init, описанную в файле usb_msc.c библиотеки libopencm3. Выше я уже упоминала о том, что для MSD нет необходимости явно описывать функции control_request и set_config. Это потому, что функция usb_msc_init все сделает за нас: и конечные точки настроит, и все колбэки зарегистрирует. Таким образом, нам нужно дополнить конструктор еще одной строчкой:

Тут можно заметить, что при инициализации MSD, нам нужно передать ему минимальное API для работы с памятью:

  • block_count: количество секторов памяти,
  • read_block: функция для чтения сектора,
  • write_block: функция для записи сектора.

В Пастильде мы используем внешний флеш SST25VF064C. Драйвер для этой микросхемы можно посмотреть здесь. В дальнейшем, на основе этого драйвера, во флеше будет реализована файловая система. Скорее всего, об этом как-нибудь подробно напишет мой коллега. Но так как я хотела поскорее протестировать работу MSD, я написала зародыш файловой системы=) Над ним можно поплакать здесь.

Так вот. Теперь, когда конструктор класса USB_Composite дописан, можно собрать проект, прошить устройство и увидеть, что «Запоминающее устройство для USB» больше не помечено предупреждением, а во вкладке «Дисковые устройства» можно обнаружить «ThirdPin Pastilda USB Device». И, казалось бы, все хорошо. Но нет=) Проблем стало больше:

1. Зайти на диск невозможно. При попытке сделать это все виснет, умирает, компьютеру очень плохо.
2. Распознавание устройства как дискового занимает более 2-х минут.

Об этих проблемах и о том, как их решить без вреда для здоровья написано здесь: USB mass storage device и libopencm3.

И, о, чудо! Никаких пятен=) Теперь все работает. У нас есть USB хост и составное USB устройство. Осталось только объединить их работу.

Объединение хоста и составного устройства

Наша цель:

    Транслировать сообщения от клавиатуры в ПК до тех пор, пока не нажата комбинация Ctrl + Shift +

.
После нажатия комбинации Ctrl + Shift +

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

Код, реализующий все это, простой как палка:

, мы будем попадать в однострочное меню, а во флеше будет храниться наша зашифрованная база данных паролей.

Буду рада любым комментариям и пожеланиям.

И, конечно же, ссылка на github.

UPD 27.06.2017:

  1. Репозиторий проекта Пастильда переехал сюда. Недавно был опубликован релиз 1.0.
  2. Последние новости по проекту можно смотреть здесь.
  3. А еще мы наконец-то запустили сайт проекта!
Комментировать
4 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector