USB має кілька шарів, які описані в специфікації USB 2.0 . Якщо ви знайомі з багатошаровою мережевою моделлю OSI, ви можете думати про це так:
- Сесійний шар = Розділ 10 Обладнання та програмне забезпечення для хостів USB (драйвери пристроїв)
- Транспортний шар = Розділ 9 Рамка пристрою USB
- Мережевий рівень = Розділ 8 рівня протоколу (бітовий потік)
- Шар передачі даних = Розділ 7 Електричний (схема)
- Фізичний шар = Розділ 6 Механічний (кабель та з'єднувач)
Концептуально USB базується на потоках даних, званих Кінцевими точками , які можуть бути як IN (для хоста), так і OUT (від хоста). Кожен пристрій має кінцеву точку 0, яка використовується для контролю та стану. Пристрій може мати додаткові кінцеві точки для даних програми. Кожна кінцева точка поводиться як буфер FIFO.
Дані передаються на кінцевій точці або масово (наприклад, TCP / IP, гарантовано, що кожен байт надходить у правильному порядку), або ізохронними (наприклад, UDP / IP, гарантовано свіжими, але можуть скидати пакети). Існує оманливо названий тип передачі " Переривання ", який дійсно просто опитується хостом.
USB 2.0 використовує диференціальну пару для передачі даних. Я не буду деталізувати багато деталей, оскільки це висвітлено у розділі 7. Специфікація USB 2.0. Як правило, на макеті друкованої плати ми трактуємо це як диференційовану пару відповідної довжини та вкладаємо в серію резистори, необхідні будь-яким USB PHY (фізичний Інтерфейс) використовується. 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 (offchip на FT2232H, на мікросхемі на FT220X), щоб містити трохи інформації, яка надходить у дескриптори. Ви можете налаштувати значення VID / PID та надати спеціальні рядки опису.