как компьютер может различать USB-клавиатуру и USB-мышь?

Интересно, как ПК может различать несколько USB. Например, когда я подключаю флешку USB к компьютеру, как он узнает, что это флешка USB, а не клавиатура USB?

Заранее спасибо.


person Mahmoud Anwer    schedule 27.01.2017    source источник
comment
Неправильный сайт. Вместо этого вы ищете Super User. Этот сайт предназначен для вопросов, связанных с программированием. При этом: когда вы подключаете устройство, ОС запрашивает его, что это такое, и устройство сообщает об этом. Это как когда ты заходишь в ресторан и к тебе подходит официант. Они спрашивают вас, что вы хотели бы съесть, и вы говорите им. Как еще, по-вашему, это можно было бы сделать?   -  person Ken White    schedule 27.01.2017
comment
спасибо за ответ, мне просто интересно, как это происходит. Вы помогли мне, и я получил ответ, спасибо.   -  person Mahmoud Anwer    schedule 02.02.2017


Ответы (1)


в стандарте USB есть классы USB, карта памяти — это класс USB-накопителей, клавиатура, мышь, джойстик — класс USB HID (Human Interface Device), камеры реализуют USB PTP (протокол передачи изображений), USB-to-serial (виртуальные COM-порты,...) - это класс USB CDC ACM,...

по следующей ссылке перечислены все классы USB для Windows с драйверами https://msdn.microsoft.com/en-us/library/windows/hardware/ff538820%28v=vs.85%29.aspx

когда USB-устройство подключено, между MCU на USB-устройстве (прошивка) и ПК (USB-хост) устанавливается связь. в этом сообщении устройство сообщает, какой у него класс USB, и хост загружает подходящий драйвер.

вы можете пронюхать это сообщение, используя wireshark или посмотреть dmesg (в linux)

это общение очень низкоуровневое и не легко читаемое человеком. для этого есть такие инструменты, как wireshark или lsusb -v

USB-устройство должно реализовать специальную иерархию дескрипторов, в которой содержится информация о внутренней структуре USB-устройства. иерархия такова:

дескриптор устройства -> дескриптор конфигурации -> дескриптор интерфейса -> дескриптор конечной точки

EP0 зарезервирован для передачи управления, в противном случае любая передача должна идти в конечную точку или исходить из нее (конечная точка OUT / конечная точка IN).

см. http://www.beyondlogic.org/usbnutshell/usb1.shtml

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

person ralf htp    schedule 27.01.2017