usb composite device что это
Устройство USB Composite является устаревшим устройством USB и может не работать с USB 3.0
USB 3.0 стал крупным прорывом на рынке передачи данных. Отмеченный голубыми USB-портами, USB 3.0 предоставил пользователям скорость до 10 раз больше USB 2.0 (5 Гбит/с), благодаря чему большие медиа-файлы и программы можно было передавать за считанные минуты.
USB 3.0 поддерживает обратную совместимость, что означает, что все устройства, работающие на USB 2.0, должны хорошо работать с USB 3.0. Однако многие пользователи сообщают о следующей ошибке при попытке подключить устройства к слотам USB 3.0 – USB Composite Device является устаревшим устройством USB и может не работать в USB 3.0.
USB Composite Device – старое USB-устройство
Эта проблема более заметна с принтерами. Причиной обычно являются несовместимые драйверы. Попробуйте изменить порт USB, и если это не сработает, воспользуйтесь следующими решениями для решения проблемы:
1] Запуск оборудования и устранения неполадок USB
Средство устранения неполадок оборудования и устройств проверяет параметры, связанные с оборудованием, и, если возможно, корректирует их.
Чтобы использовать это средство устранения неполадок, нажмите кнопку «Пуск» и выберите «Настройки»> «Обновления и безопасность» >> «Устранение неполадок».
Выберите средство устранения неполадок оборудования и устройств и запустите его. Перезагрузите систему, как только вы закончите.
2] Обновите или переустановите драйверы USB
Чтобы обновить драйвер устройства. нажмите Win + R, чтобы открыть окно «Выполнить» и введите команду devmgmt.msc. Нажмите Enter, чтобы открыть диспетчер устройств.
Найдите драйверы Универсальный контроллер последовательной шины и раскройте список. Щелкните правой кнопкой мыши и выберите «Обновить драйвер» для каждого драйвера USB.
3] Удалите и переустановите драйверы принтера.
Поскольку вы не можете подключить принтер к компьютеру, новые драйверы необходимо будет загрузить с веб-сайта производителя. Установите их в систему и проверьте, нормально ли работает принтер после этого.
Это решение остается тем же для других аппаратных устройств, которые показывают ту же ошибку при попытке подключения к компьютеру.
USB Composite Device — старое USB-устройство
Если вы продолжаете получать приведенное выше сообщение об ошибке при попытке подключить USB-устройство к вашему компьютеру, вот реальные решения вашей проблемы. Эта статья поможет вам быстро и легко решить проблему!
Попробуйте эти исправления
Вот 3 исправления, которые помогли многим другим пользователям решить проблему с USB Composite Device. Вам не нужно пробовать их все; просто пройдите вниз по списку, пока не найдете тот, который подходит вам.
Исправление 1: Обновите драйвер USB Composite Device
Наиболее вероятной причиной ошибки USB Composite Device является проблема с драйвером устройства.
К счастью, это одна из самых простых проблем.
Есть два способа обновить драйвер USB Composite Device: вручную а также автоматически.
Обновите драйвер USB Composite Device вручную — Вы можете обновить драйвер вручную, перейдя на веб-сайт производителя оборудования и выполнив поиск последней версии драйвера для вашего USB Composite Device. Если вы выберете такой подход, обязательно выберите драйвер, совместимый с точным номером модели вашего оборудования и вашей версией Windows.
Обновите драйвер USB Composite Device автоматически — Если у вас нет времени, терпения или навыков работы с компьютером, чтобы обновить драйвер вручную, вместо этого вы можете сделать это автоматически с Водитель Легко. Вам не нужно точно знать, на какой системе работает ваш компьютер, вам не нужно беспокоиться из-за неправильного драйвера, который вы загружаете, и вам не нужно беспокоиться об ошибке при установке. Driver Easy справится со всем этим.
Исправление 2: переустановите драйверы контроллера USB
Вы также можете попробовать удалить и переустановить драйверы USB через диспетчер устройств. Это действие позволит Windows автоматически сканировать аппаратные изменения и переустанавливать необходимые драйверы. Вот что вам нужно сделать:
ключ
нажмите одновременно, чтобы открыть окно «Выполнить».
Исправление 3: использование средства устранения неполадок Windows USB
Если описанные выше действия не помогли вам, попробуйте Windows Устранение неполадок USB.
Чтобы использовать его, во-первых, вам нужно скачать инструмент с эта ссылка.
Затем вы можете открыть инструмент и следовать инструкциям на экране для устранения проблемы.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь оставлять комментарии ниже.
Составное устройство USB на STM32. Часть 4: Два-в-одном
В заключительной части публикации о составном устройстве USB я расскажу о том, как заставил заработать составное устройство USB, а также поделюсь некоторыми неочевидными нюансами этого процесса.
Работа составных частей устройства была описана во второй и третьей частях публикации.
Ответы на вопрос, зачем это всё было затеяно, даются в начале первой части и в конце четвёртой.
Ссылки на предыдущие части публикации:
Составное устройство USB на STM32. Часть 1: Предпосылки
Составное устройство USB на STM32. Часть 2: USB Audio Speaker
Составное устройство USB на STM32. Часть 3: Звуковое устройство отдельно, виртуальный СОМ-порт отдельно
Исходные коды публикуемой реализации составного устройства USB, состоящего из виртуального COM-порта и дуплексной звуковой карты находятся здесь: http://github.com/dmitrii-rudnev/selenite-habr
Создаём Composite Device Class
Файлы драйвера составного устройства usbd_comp.c и usbd_comp.h расположены в папках Core/Scr и Core/Inc соответственно.
Структура класса составного устройства аналогична структуре класса звукового устройства и содержит подобный набор функций-обработчиков событий.
Основная функция драйвера составного устройства заключается в том, чтобы определить, драйвер какого устройства нужно подключить для обработки события. При обработке запросов (Requests) это определяется по номеру интерфейса в случае Standard Requests или атрибутам запроса в случае Class-Specific Requests. При обработке пакетов данных переключение производится, как правило, по номеру конечной точки (EP).
Подробно Standard Requests описаны на стр.248 – 260 документа:
[5] Universal Serial Bus Specification, Revision 2.0, April 27, 2000
Запросы Communication Device Class-Specific Requests подробно описаны на стр.18 – 30 документа [4], а Audio Device Class-Specific Requests, соответственно, на стр.74 – 85 документа [3].
Читаем дескриптор
Дескриптор описанного в публикации составного устройства USB состоит из девяти байтов раздела Configuration Descriptor, восьми байтов раздела Interface Association Descriptor (IAD) для двух интерфейсов виртуального COM-порта, 58 байтов дескриптора виртуального COM-порта, восьми байтов раздела IAD для трёх интерфейсов звукового устройства и 183 байтов дескриптора звукового устройства USB.
Виртуальный COM-порт использует интерфейсы 0 и 1, а также конечные точки 1 и 2. Дуплексное звуковое устройство использует интерфейсы 2, 3 и 4, а также конечную точку 3.
Разбираем работу устройства
Рассмотрим доработанный файл usb_device.c, расположенный в папке USB_DEVICE/App:
Сначала создаётся переменная hUsbDeviceFS. Тип USBD_HandleTypeDef объявлен в usbd_def.h.
Функция MX_USB_DEVICE_Init вызывается из main.c.
Вызовом функции USBD_Init задаются начальные значения переменной hUsbDeviceFS.
Затем вызовом функций HAL_PCDEx_SetTxFiFo производится настройка буфера USB для каждой конечной точки составного устройства.
Неочевидный нюанс 1: по умолчанию настройка буфера USB производится при исполнении функции USBD_LL_Init, размещённой в файле usbd_conf.c. В теле этой функции области, помеченной как USER CODE, нет. Т.е. при каждой генерации кода STM32CubeMX будет удалять настройки буфера для конечных точек 2 и 3. Именно поэтому окончательная настройка буфера USB производится уже после того, как функция USBD_LL_Init отработала.
Вызовом функции USBD_RegisterClass в hUsbDeviceFS.pClass размещается указатель на созданную в usbd_comp.c переменную USBD_COMP, содержащую указатели на обработчики событий, относящихся к классу устройства. Тип USBD_ClassTypeDef объявлен в usbd_def.h.
Вызовом функции USBD_RegisterInterface в hUsbDeviceFS.pUserData размещается указатель на созданную в usbd_comp.h пустую переменную USBD_COMP_fops_FS.
В дальнейшем обработчики событий составного устройства USB будут вызывать обработчики событий нужного устройства, входящего в составное, а также подключать нужный интерфейс связи с оконечными устройствами.
Вызовом функции USBD_Start производится запуск устройства USB.
Неочевидный нюанс 2: составное устройство будет упорно определяться как виртуальный COM-порт, если не поменять значения трёх байтов в стандартном дескрипторе устройства USB (USB standard device descriptor), размещённом в файле usbd_desc.c, причём при каждой генерации кода STM32CubeMX эти изменения будет удалять:
Неочевидный нюанс 3: виртуальный COM-порт в данном решении работает корректно только в случае, когда номер используемой им конечной точки меньше, чем номер конечной точки звукового устройства.
Неочевидный нюанс 4: виртуальный COM-порт в данном решении работает корректно только в случае, когда при инициализации в его буфер прописываются параметры порта (см. USBD_COMP_Init). Без этой записи программы терминалов к COM-порту могут и не подключиться.
Проверка работоспособности драйвера составного устройства USB
Неочевидный нюанс 5: при проверке работоспособности «эхо» через COM-порт возвращается, когда составное устройство уже «переключено на COM-порт». В реальном применении устройства передача может начаться, когда подключено звуковое устройство. Чтобы избежать подобной ситуации, перед началом передачи производится вызов функции COMP_CDC_Transmit_FS для подключения драйвера виртуального COM-порта:
Выводы
Автору удалось реализовать составное устройство USB, состоящее из виртуального COM-порта и дуплексной звуковой карты, на ресурсах платы NUCLEO-F446ZE.
Решение оформлено в виде проекта в среде разработки STM32CubeIDE. После генерации кода STM32CubeMX для восстановления работоспособности решения необходимо вручную изменить значения трёх байтов в стандартном дескрипторе устройства USB (USB standard device descriptor), размещённом в файле usbd_desc.c.
От автора
Данный цикл публикаций подводит черту, фиксирует результат проекта, которой мне удалось достичь в одиночку.
Хочу поблагодарить своих читателей за доброжелательность и тёплый приём. Я никогда не был и никогда уже не буду профессиональным разработчиком ПО для микроконтроллеров. И это моя первая публикация про разработку программного обеспечения.
Благодарю Георгия (RX9CIM) за моральную поддержку при запуске проекта.
Отдельная благодарность romanetz_omsk, без которого я бы забросил проект ещё два года назад.
По логике дальнейшего развития MVP нужно приступать к написанию DSP, а это уже достаточно сложная для меня математика. Как это осилить в одиночку, ума не приложу…
Два в одном: USB хост и составное USB устройство
Не так давно, была опубликована статья «Пастильда — открытый аппаратный менеджер паролей». Так как данный проект является открытым, то мы решили, что будет интересно, если мы будем писать небольшие заметки о процессе проектирования, о задачах, которые перед нами стоят и о трудностях, с которыми мы сталкиваемся.
Реализация USB хоста
Итак, во-первых мне нужно было реализовать на устройстве USB хост, чтобы оно могло распознавать и общаться с подключенной к нему клавиатурой. Так как в работе я использую связку Eclipse + GNU ARM Eclipse + libopencm3, то очень хотелось найти уже что-то готовое и желательно написанное с использованием библиотеки libopencm3. Желание мое было очень жирным, до последнего момента не верила, что мои поиски увенчаются успехом. Однако под конец рабочего дня, проскролив интернет до самого дна, я вдруг наткнулась вот на это. libusbhost? Серьезно? И это был не просто написанный на основе libopencm3 usb хост, он еще и был написан под STM32F4, под тот самый, который мы решили использовать в проекте. В общем, звезды сошлись и радости моей не было предела. Кстати, оказалось, что этот проект создавался как часть libopencm3, однако его так и не добавили в библиотеку.
Как библиотеку, libusbhost я не собирала, просто взяла необходимые мне исходники, написала драйвер для клавиатуры и, в общем-то все, погнали! Но обо всем по-порядку.
По аналогии с usbh_driver_hid_mouse.[ch], я написала драйвер для клавиатуры (usbh_driver_hid_kbd.[ch]).
Далее был реализован простенький класс, для работы с хостом:
Реализация составного USB устройства
Далее мне нужно было сделать так, чтобы наше устройство отображалось в диспетчере устройств и как клавиатура, и как дисковый накопитель. Тут вся магия в дескрипторах=) В этом документе, в главе 9, подробно описан USB Device Framework. Эту главу нужно очень внимательно прочитать и в соответствии с ней описать дескрипторы устройства. В моем случае получилось следующее:
Для работы с составным устройством был написан класс USB_composite, представленный ниже.
Как правило, функции control_request и set_config должны быть явно описаны для каждого устройства. Однако из этого правила есть исключение: Mass Storage Device. Итак, разберемся с конструктором класса USB_Composite.
Во-первых, мы инициализируем ноги USB OTG FS:
Во-вторых, нам нужно проинициализировать наше составное устройство, зарегистрировать USB_set_config_callback, о котором шла речь выше, и разрешить прерывание:
Так вот. Теперь, когда конструктор класса USB_Composite дописан, можно собрать проект, прошить устройство и увидеть, что «Запоминающее устройство для USB» больше не помечено предупреждением, а во вкладке «Дисковые устройства» можно обнаружить «ThirdPin Pastilda USB Device». И, казалось бы, все хорошо. Но нет=) Проблем стало больше:
1. Зайти на диск невозможно. При попытке сделать это все виснет, умирает, компьютеру очень плохо.
2. Распознавание устройства как дискового занимает более 2-х минут.
Об этих проблемах и о том, как их решить без вреда для здоровья написано здесь: USB mass storage device и libopencm3.
И, о, чудо! Никаких пятен=) Теперь все работает. У нас есть USB хост и составное USB устройство. Осталось только объединить их работу.
Объединение хоста и составного устройства
, Пастильда должна перехватить управление и отправить сообщение в ПК как клавиатура, после чего мы возвращаемся в режим трансляции и снова ожидаем комбинацию.
Код, реализующий все это, простой как палка:
, мы будем попадать в однострочное меню, а во флеше будет храниться наша зашифрованная база данных паролей.
Буду рада любым комментариям и пожеланиям.
И, конечно же, ссылка на github.
Usb Composite Device Is An Older Usb Device
Если вы продолжаете получать указанное выше сообщение об ошибке при попытке подключить составное USB-устройство к компьютеру, вот настоящие исправления для вашей проблемы. Эта статья поможет вам быстро и легко решить проблему!
Попробуйте эти исправления
Вот 3 исправления, которые помогли многим другим пользователям решить их проблему с составным USB-устройством. Необязательно пробовать их все; просто продвигайтесь вниз по списку, пока не найдете тот, который вам подходит.
Исправление 1. Обновите драйвер комбинированного USB-устройства.
Наиболее вероятной причиной ошибки USB Composite Device является проблема с драйвером устройства.
К счастью, это одна из самых простых проблем, которую можно решить.
Исправление 2: переустановите драйверы контроллера USB.
Вы также можете попробовать удалить и переустановить драйверы USB через диспетчер устройств. Это действие позволит Windows автоматически сканировать аппаратные изменения и переустанавливать необходимые драйверы. Вот что вам нужно сделать:
ключ
одновременно нажмите клавишу, чтобы открыть окно «Выполнить».
Исправление 3: используйте средство устранения неполадок Windows USB
Если описанные выше действия не помогли вам, вы можете попробовать средство устранения неполадок Windows USB.
Затем вы можете открыть инструмент и следовать инструкциям на экране, чтобы устранить проблему.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий ниже.