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 и предоставить пользовательские строки описания.