Де саме знаходиться специфікація 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, і ваша відповідь виявляється дуже корисною для того, щоб змусити мене йти.)
robert bristow-johnson

Відповіді:


21

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


6
Резюме мені сподобалось. Мені довелося прочитати цілу специфікацію 2.0 (понад 1000 сторінок, наскільки я пам’ятаю) протягом декількох тижнів, тому що мені довелося розібратися з усією цією лайною самостійно. Я не маю приємного враження. (Не вдалося використати HID в моєму випадку.) Також немає хороших книг з цієї теми. Я ненавидів книгу Яна Аксельсона на USB і вважаю її книгу «майже повністю марною» для тих, хто намагається виконати цю роботу як вбудований мікрофон з нуля. Це насправді здебільшого нічого не варто, інакше. Якщо ви знаєте хорошу книгу для реалізатора (користувацьке обладнання), я би радий почути заголовок !! +1
джонк

1
Залежно від потенційного ринку Op, VID / PID є найбільшою проблемою. Використовуючи методологію Axelsons, ви працюєте в тому сенсі, що ви можете використовувати її VID (який коштує 3,5 тис. Доларів за ваш власний) і безкоштовно запитувати один або кілька її PID-кодів. Ви також можете попросити PID від таких організацій, як Microchip / Atmel, FTDI і TI (на основі їх VID). Найкраща книжка IMO - це Intels «USB-дизайн за прикладом», він трохи довгий в зубі, але хороший для USB 2.x. На жаль, багато прикладів коду ламаються через зміни в Visual Studio через його версії.
Джек Крісі

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

1
PS. Чудовим вступом є використання "Вбудованого USB-дизайну на прикладі: FTDI випустив: ftdichip.com/Support/Documents/TechNIPublications/…. У цьому є багато корисних прикладів (на основі FTDI-пристроїв, звичайно) та всіх пов'язаних з ними робочі файли, включаючи використання контролерів PSOC
Джек Крісі

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

4

Поведінка та взаємодія USB-партнерів (хост і пристрій) розсіяно по специфікації USB. Найкращий спосіб отримати певні підстави - розглянути розділ 9 "рамки пристроїв", де описано можливі (мандатні) стани пристроїв (мал. 9-1) та рамку хоста (та концентратора) у главах 10 та 11. Ігнорування Деталі протоколу (труби / типи транзакцій / абстрактні шари протоколу OSI, компонування PCB тощо), краще зчеплення з початковою взаємодією можна досягти, вивчаючи діаграму стану порту (мал. 11-10).

По суті, якщо кабель не з'єднаний між хостом і пристроєм, порти хосту знаходяться в режимі "Powered" (VBUS ON), але "Disconnected". Дріт D + і D утримується низько, з пониженням 15 к.

Коли кабель підключений, VBUS переходить у пристрій. Пристрій розпізнає, що він підключений, і сигналізує про подію "підключення", потягнувши ВИСОКИЙ з проводів D, D +, якщо це пристрій FS / HS, і D-, якщо це пристрій LS.

Потяг на D +/- провід на певному порту дає перерву для розміщення програмного забезпечення, повідомляючи про "зміну статусу порту". Потім програмне забезпечення хосту (зазвичай ehci.sys) потім ініціює послідовність "скидання порту" на цьому конкретному порту. Після успішного завершення "Скидання USB-порту", порт хосту вмикається для зв'язку через USB. Порт стає активним (пакети кадрів починають витікати).

Використовуючи протокол USB, хост призначає цьому пристрою унікальну адресу і читає "дескриптор пристрою". Це запускає процес "перерахування пристроїв". Дескриптор пристрою містить інформацію про те, до якого класу пристроїв він належить (HID, COM, MIDI, принтер тощо) та VID / PID цього конкретного пристрою, а також купу іншої інформації, див. Таблицю 9-8.

Отримавши клас пристрою та VID / PID, хост-програмне забезпечення намагається співставити цю інформацію в реєстрі пристроїв і завантажує відповідний драйвер DEVICE, або загальний, або специфічний для постачальника (якщо він існує). Потім драйвер пристрою закінчує процес перерахування, вибираючи інтерфейс пристрою, що закінчується налаштуванням "конфігурація пристрою". Очевидно, весь USB-зв’язок розпізнається лише за цим конкретним портом , навіть якщо всі пакети транслюються у всі включені порти.

Вищенаведене є загальною основою протоколу підключення USB. Упаковка даних для будь-якої конкретної мети (наприклад, MIDI) - це інша історія, і вона обробляється або на рівні програми, або на рівні драйверів пристрою, якщо система отримує належний клас пристроїв. Для отримання нативного MIDI-зв’язку пристрій повинен мати цей клас у своєму дескрипторі та дотримуватися всіх визначень класу MIDI .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.