Интересно, как ПК может различать несколько USB. Например, когда я подключаю флешку USB к компьютеру, как он узнает, что это флешка USB, а не клавиатура USB?
Заранее спасибо.
Интересно, как ПК может различать несколько USB. Например, когда я подключаю флешку USB к компьютеру, как он узнает, что это флешка USB, а не клавиатура USB?
Заранее спасибо.
в стандарте USB есть классы USB, карта памяти — это класс USB-накопителей, клавиатура, мышь, джойстик — класс USB HID (Human Interface Device) em>, камеры реализуют 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-аудио ...