Где именно находится спецификация USB, которая объясняет, что делать при первом подключении кабеля?


15

Итак, я знаю о спецификации USB 2.0, расположенной на сайте USB.org .

Я немного ленивый и нетерпеливый. Может кто-нибудь сказать мне, куда идти, чтобы узнать, что именно ожидается от моего периферийного устройства при подключении USB-кабеля?

Например, если мое периферийное устройство является принтером, как я могу сообщить компьютеру на другом конце, что принтер (с определенным описанием модели, я полагаю) только что был подключен? Чем в компьютере как драйвер принтера узнает, какой порт USB был подключен к принтеру?

Мое приложение на самом деле USB MIDI. Я также получил этот документ USB-MIDI , но мне не хватает более фундаментального протокола USB.

Просто для информации, я использую USB-чип FTDI FT220x, и он подключен к SPI ADSP-21479 SHARC. Теперь мы используем его просто для обмена текстовыми сообщениями, используя ПК (работающий с TeraTerm) в качестве «консоли» . У меня есть доступ к коду, который устанавливает порт SPI и подключается к чипу FTDI, но нет кода, который выполняет какие-либо начальные связи. Я не знаю, что делает FT220x при первом подключении к ПК.

Я не недоволен чтением и изучением, но я хотел бы знать, с чего начать чтение, и спецификация USB на 100 МБ слишком велика для цели, на которую можно стрелять. Искреннее спасибо всем за действенную помощь.


1
Так что вам просто интересно, что FTDI FT220x делает за кулисами, верно? Поскольку FTDI позаботится о многих вещах USB для вас, есть также некоторые ограничения на то, что он позволит вам делать. Некоторое время я использовал семейство FT2232H, постараюсь объяснить, что я знаю ...
MarkU

В конечном итоге я пытаюсь использовать этот USB-порт, который уже достаточно умен для отправки текста назад и вперед на ПК с TeraTerm, и я надеялся использовать тот же USB-разъем для USB MIDI. Мне нужно понять, как «упаковать» данные в 32-битный пакет, но я подумал (и все еще думаю), что должен быть какой-то протокол, который сообщает другому концу, что это USB MIDI-устройство. (до сих пор, я просто не понимаю основы USB, и ваш ответ кажется мне очень полезным для меня.)
Роберт Бристоу-Джонсон

Ответы:


21

USB имеет несколько уровней, которые описаны в спецификации USB 2.0 . Если вы знакомы с многоуровневой сетевой моделью OSI, вы можете думать об этом так:

  • Сеансовый уровень = Глава 10 USB Host Аппаратное и программное обеспечение (драйверы устройств)
  • Транспортный уровень = Глава 9 Структура устройства USB
  • Сетевой уровень = Глава 8 Уровень протокола (битовый поток)
  • Уровень канала передачи данных = Глава 7 Электрические (схема)
  • Физический уровень = Глава 6 Механическая (кабель и разъем)

Концептуально USB основан на потоках данных, называемых конечными точками , которые могут быть либо IN (для хоста), либо OUT (для хоста). Каждое устройство имеет конечную точку 0, которая используется для контроля и состояния. Устройство может иметь дополнительные конечные точки для данных приложения. Каждая конечная точка ведет себя как буфер FIFO.

Данные передаются на конечную точку как Bulk (например, TCP / IP, гарантированный, что каждый байт прибывает и в правильном порядке), или изохронные (как UDP / IP, гарантированно свежие, но могут отбрасывать пакеты). Существует вводящий в заблуждение тип передачи « Прерывание », который на самом деле просто опрашивается хостом.

USB 2.0 использует дифференциальную пару для связи данных. Я не буду вдаваться в подробности, так как это описано в главе 7 спецификации USB 2.0. Как правило, на схеме PCB мы рассматриваем это как дифференциальную пару согласованной длины и вставляем последовательные резисторы, требуемые любым физическим USB (физическим) Интерфейс) используется. Периферийное устройство USB использует резистор высокого значения на одной из линий D + или D-, чтобы сообщить хосту, что это высокоскоростное или низкоскоростное периферийное устройство.

Вскоре после того, как хост USB обнаруживает, что устройство присутствует, хост запрашивает группу дескрипторов с устройства. Об этом позаботится микросхема FTDI. Описания описаны в главе 9.5 . К ним относятся устройства Descriptor , дескриптор конфигурация , интерфейс дескрипторы , Endpoint дескрипторы , Струнные дескрипторы , может быть , даже HID Report дескрипторы .

Device Descriptor включает в себя USB VID (Vendor Identification) и PID номера (Идентификация продукта). Операционная система использует эту пару чисел, VID_PID, чтобы определить, какой драйвер устройства должен использоваться для этого устройства. Обратите внимание, что номер VID выдается при участии в форуме разработчиков USB, так что это своего рода проблема, если вы являетесь индивидуальным изобретателем.

Кроме того, есть драйвер класса HID (Human Interface Device), который обеспечивает несколько общих вводов для клавиатуры / мыши / и т. Д., А также любой общий ввод / вывод. Одним из преимуществ HID является то, что он не требует предоставления пользовательского драйвера устройства, но его пропускная способность несколько ограничена по сравнению с нестандартным драйвером массовых устройств. Существует целый другой документ спецификации о дескрипторах HID; и документ таблицы использования HID, в котором подробно описаны все кодовые номера, которые описывают различные функции, доступные на данном устройстве с интерфейсом человека.

Чип FTDI, такой как спецификация FT220X, обеспечивает «механизм последовательного интерфейса» USB (не путать с последовательным интерфейсом SPI или последовательным интерфейсом RS232). Это заботится о большинстве вещей низкого уровня, описанных в главах 6, 7 и 8.

FTDI использует EEPROM (дополнительный модуль на FT2232H, встроенный в FT220X) для хранения небольшого количества информации, которая входит в дескрипторы. Вы можете настроить значения VID / PID и предоставить пользовательские строки описания.


6
Мне понравилось резюме. Я должен был прочитать спецификацию ВСЕ 2.0 (более 1000 страниц, насколько я помню) в течение нескольких недель, потому что мне пришлось самому разбираться со всем этим дерьмом. Это НЕ приятный опыт, я должен сказать. (Не могу использовать HID в моем случае.) Также нет хороших книг по этой теме. Я ненавидел книгу Яна Аксельсона по USB и считаю ее книгу «почти полностью бесполезной» для тех, кто пытается сделать эту работу как встроенный микро с нуля. Это на самом деле в основном бесполезно, в противном случае. Если вы знаете хорошую книгу для разработчика (пользовательское оборудование), я был бы рад услышать название! +1
jonk

1
В зависимости от потенциального рынка Op, VID / PID является самой большой проблемой. Использование методологии Axelsons работает в том смысле, что вы можете использовать ее VID (стоимость которой составляет 3,5 тыс. Долларов США) и бесплатно запросить один или несколько ее PID. Вы также можете запросить PID в таких организациях, как Microchip / Atmel, FTDI и TI (на основе их VID). Лучшая книга IMO - Intel "USB design by example", она немного длинная, но хороша для USB 2.x. К сожалению, многие из примеров кода ломаются из-за изменений в Visual Studio из-за изменений.
Джек Криси

1
Лучший способ получить доступ к VID / PID для любителя - это использовать LUFA (это бесплатно): fourwalledcubicle.com/files/LUFA/Doc/130303/html/… ..... их нельзя использовать в коммерческом продукте, но хороши для домашнего / демонстрационного использования, где вы можете контролировать столкновения в значительной степени.
Джек Криси

1
PS. Отличным введением является использование «Встроенного дизайна USB на примере: выпущенного FTDI: ftdichip.com/Support/Documents/TechnicalPublications/… ... здесь есть много полезных примеров (конечно, на основе устройств FTDI) и все связанные с ними рабочие файлы, включая использование контроллеров PSOC
Джек Кризи

1
Обратите внимание, что если устройство USB работает от собственного источника питания, оно должно подождать, пока не будет обнаружено напряжение VBUS, прежде чем подавать подтягивающий резистор D + или D-. Я не прошел сертификацию по этому поводу.
Адам Хаун

4

Поведение и взаимодействие USB-партнеров (хоста и устройства) разбросано по спецификации USB. Лучший способ получить некоторые основания - это взглянуть на «структуру устройства», Глава 9, которая описывает возможные (обязательные) состояния устройства (Рисунок 9-1), и структуру Host (и Hub), в Главах 10 и 11. Игнорирование детали протокола (каналы / типы транзакций / абстрактные уровни протокола OSI, компоновка печатной платы и т. д.), лучшее понимание начального взаимодействия можно получить, изучив диаграмму состояния порта (рис. 11-10)

По сути, если кабель не подключен между хостом и устройством, порты хоста находятся в «Powered State» (VBUS включен), но «Disconnected». Провода D + и D- удерживаются на низком уровне с 15 тыс. Провалов.

Когда кабель подключен, VBUS переходит в устройство. Устройство распознает, что оно подключено, и сигнализирует о событии «подключения», потянув HIGH за один из проводов D, D +, если это устройство FS / HS, и D-, если это устройство LS.

Потяните за провода D +/- на определенном порте, что дает прерывание программному обеспечению хоста, сообщая об «изменении состояния порта». Программное обеспечение хоста (обычно ehci.sys) затем запускает последовательность «сброса порта» на этом конкретном порту. После успешного завершения «сброса USB-порта» хост-порт включен для связи через USB. Порт становится активным (пакеты пакетов начинают вытекать).

Используя протокол USB, хост назначает этому устройству уникальный адрес и читает «дескриптор устройства». Это запускает процесс «перечисления устройств». Дескриптор устройства содержит информацию о том, к какому классу устройства он принадлежит (HID, COM, MIDI, Printer и т. Д.), А также VID / PID этого конкретного устройства, а также кучу другой информации, см. Таблицу 9-8.

После получения класса устройства и VID / PID программное обеспечение хоста пытается сопоставить эту информацию в реестре устройства и загружает соответствующий драйвер DEVICE, либо общий, либо специфичный для поставщика (если он существует). Затем драйвер устройства завершает процесс перечисления, выбирая интерфейс устройства, заканчивая настройкой «конфигурация устройства». Очевидно, что вся связь USB распознается только за этим конкретным портом , даже если все пакеты транслируются на все разрешенные порты.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.