Чи дійсно існує "протокол зв'язку USB"?


24

За даними Вікіпедії , USB:

визначає кабелі, роз'єми та протоколи зв'язку, що використовуються в шині для з'єднання, зв'язку та електроживлення між комп'ютерами та електронними пристроями

Але чи дійсно є " протокол зв'язку USB "? Я розумію , що:

  1. Ви підключаєте USB-пристрій до машини (скажімо, Ubuntu або будь-якого типу Linux)
  2. Linux знаходить драйвер пристрою для цього пристрою (якось - бонус, якщо ви знаєте!) І завантажує його
  3. Тепер пристрій підключено під /dev/theDevice
  4. Тепер програми користувальницького простору можуть читати / записувати, /dev/theDeviceа драйвер обробляє IO низького рівня до базового пристрою / обладнання

Для мене ніде в цьому потоці не з'являється "протокол зв'язку USB". Якщо я розумію правильно, USB - це лише кабельний та електричний зв’язок між ПК та пристроєм.

Я тут помиляюся? Чи реально USB реалізує якийсь протокол низького рівня, підкреслює потік вище? Якщо так, що це таке і як це працює при зорі 30 000 футів?


45
"драйвер обробляє IO низького рівня до базового пристрою / обладнання", він робить це за допомогою протоколу зв'язку, який є у стандарті.
EBGreen

29
Ох, я прочитав питання "Чи дійсно є" протокол зв'язку USB "?" Тож відповідь була б так. Якщо ви хочете знати, що таке власне протокол зв'язку, просто прочитайте стандарт. Або прочитайте розділ 11 на сторінці вікі, на яку ви пов’язані.
EBGreen

6
"USB - це лише кабельне та електричне з'єднання між ПК та пристроєм". Кабель Ethernet - це лише кабель між ПК та комутатором / маршрутизатором / що завгодно. Проте є деякі протоколи, які використовуються для зв'язку через цей кабель і для цього корисні речі.
ysdx

13
"Linux знаходить драйвер пристрою для цього пристрою" Як ви вважаєте, що Linux здатний виявити, який пристрій підключено до іншого кінця. Мабуть, звичайний протокол?
витрачається

4
@Ramhound "Ці протоколи зв'язку незалежні від стандарту принаймні у випадку з Ethernet." Це помилково. Протоколи Ethernet (як фізичний, так і MAC-рівень) визначаються стандартами IEEE Ethernet (конкретно, стандартами 802.3 .) Звичайно, можливо (і звичайно) надсилати щось інше, ніж протокол Ethernet по кабелю категорії 6 з Роз'єми RJ-45, але в цей момент це вже не Ethernet. Наприклад, це звичайна практика для телефонних систем, що не належать до VoIP.
reirab

Відповіді:


47

Так, дивіться протоколи USB

Як я розумію, специфікація USB визначає складний набір шаруватих протоколів та профілів пристроїв.

Наприклад, USB-пристрої можуть відповідати шаблонам високого рівня, таких як масове зберігання даних, клавіатура (або пристрій людського інтерфейсу тощо) та керуватися ними загальним драйвером пристроїв. Деякі USB-пристрої можуть спілкуватися на нижчому рівні, так що підтримка USB низького рівня ОС може визнати, що необхідні драйвери більш високого рівня для пристрою.


30

Питання: Чи діє протокол зв'язку USB низького рівня і що це?

Відповідь:

Так, специфікація USB включає протокол USB, який визначає спосіб використання шини на бітовому рівні. Це був би протокол "низького рівня", який лежить в основі протоколів вищого рівня, тобто масового зберігання даних, HID тощо.

Інформація про те, як працює протокол USB, корисна для цього вікі OSDev . Ось ще один цікавий опис використання діаграм послідовності для опису різних транзакцій даних по протоколу USB.

Питання про бонус: як Linux знаходить і завантажує драйвер пристрою для цього пристрою?

Бонусна відповідь:

"У Linux під час використання USB-ядра робочий USB-пристрій буде виявлено через апаратне забезпечення та ядро завдяки специфікації USB. З боку апаратного забезпечення виявлення виконується USB-хост-контролером. Потім в ядрі приймається драйвер хост-контролера і переводить біти низького рівня на дріт до інформації, відформатованої протоколом USB. Потім ця інформація заповнюється у драйвері USB ядра. '

Я перефразовував цю чудову статтю Opensourceforu , де є детальніше та чіткіше щодо вашого питання в контексті Linux.


7
Я сподіваюся, що "Бонусне питання" означає для вас "Баунті".
dotancohen

@projectdp - Було б дуже корисно, якби ви помістили частину інформації з ваших основних посилань у свою відповідь.
Рамхаунд

@Ramhound - Дякую за Ваш відгук, я переписав свою відповідь на більш корисний спосіб. Що стосується додавання додаткової інформації з ресурсів, що б ви хотіли бачити, що це стосується питань?
projectdp

14

Як і майже кожен інший тип комунікаційного інтерфейсу, USB реалізується як стек протоколів. Рівні в межах цього стеку, загальні для всіх або декількох типів пристроїв, визначаються самими стандартами USB, що дозволяє забезпечити сумісність і не дозволяє кожному пристрою робити надлишкову конструкцію протоколу. Крім того, кожен шар протоколу абстрагує деталі, про які не потрібно хвилюватися наступному шару. Таким чином, коли ви фактично пишете специфічний для пристрою шар, у вас просто є загальні функції "відправити" та "отримати", які отримують дані від кінцевої точки А до кінцевої точки В. Вам, як дизайнеру пристрою, не потрібно піклуватися про це як це відбувається Крім того, нижчі рівні в стеку протоколів можуть змінювати реалізацію, якщо вони відкривають загальний інтерфейс для шару над ними. Таким чином, коли одна частина стека протоколів змінюється, решта стека не обов'язково повинна змінюватися.який протокол використовується на деякому нижньому рівні стеку. Взагалі кажучи, кожен наступний рівень внизу стека буде інкапсулювати повідомлення, що створюється наступним найвищим шаром, у межах власного поля корисної навантаження під час надсилання повідомлення. Коли повідомлення отримано, кожен шар відшаровує частину, відповідну цьому шару, і пересилає свою корисну навантаження на наступний відповідний шар вгору на стек. Це стосується не тільки USB, але майже кожної шини зв'язку. Наприклад, стек TCP / IP / Ethernet, мабуть, є найбільш часто використовуваним. Завдання, за які задані шари зазвичай відповідають, описані в таких моделях, як модель OSI .

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

Далі, є протокол управління шиною, який використовується для опису того, хто може говорити в шині, коли. Це називається шаром доступу до медіа в моделі OSI. У USB цей шар може бути підсумований так, як "пристрій може передавати, коли хост скаже це зробити", тому на цьому шарі в USB немає особливо складного протоколу.

Далі є стандартний протокол, який описує пакет даних та те, як він повинен бути направлений від відправника до одержувача. Цей шар також повинен бути частиною самого стандарту USB, так що початкове повідомлення про виявлення того, який тип пристрою було приєднано, може відбуватися до того, як хост фактично знає конкретний тип пристрою. На додаток до кожного пристрою, який має певний ідентифікатор на цьому шарі, в USB також існує концепція ідентифікатора кінцевої точки. Це дозволяє будь-якому даному пристрою мати декілька кінцевих точок USB, які мультиплексовані та демультиплексовані за допомогою стандартного стека USB, приблизно так само, як і розетки мультиплексовані та демультиплексовані стандартним стеком TCP / IP. Додаток може розглядати кожну з цих кінцевих точок як окремі потоки даних.

Нарешті, є протокол, визначений для самого пристрою. Зауважте, що насправді є деякі загальноприйняті попередньо розроблені, які входять до стандарту USB для випадків загального користування, такі як пристрої масового зберігання, миші, клавіатури тощо, тому кожному виробнику пристрою не доведеться заново вигадувати колесо. Однак більш складні пристрої вільно розробляють власний користувальницький протокол на цьому шарі. Вихід цього шару для даної передачі передається як корисне навантаження пакета даних на попередньому рівні. Зауважте, що для досить складних пристроїв частина протоколу, що залежить від пристрою, може бути поділена на кілька незалежних шарів, але нижчі рівні не повинні знати про це і не турбуватися про них. Все, що вони повинні знати, - це те, що їм потрібно передати заданий набір байтів від хоста до певної кінцевої точки пристрою або від конкретної кінцевої точки пристрою до хоста. Знову ж таки, наявність стандартного інтерфейсу між шарами дозволяє розділяти проблеми, тому одному шару не потрібно дбати про внутрішню роботу іншого шару, а лише про конкретні дані, які він повинен передати або очікувати отримання від шарів безпосередньо над або під ним у стеці.


9

Насправді існує набір пов'язаних протоколів зв'язку, які взаємодіють.

На найнижчому рівні існує протокол, який описує, як пакети байтів надсилаються через послідовне з'єднання. Це є загальним для всіх USB-пристроїв (але відрізняється між USB2 та USB3).

Один з перших надісланих пакетів просить пристрій описати себе. Щоб запобігти проблемі з куркою і яйцями, протокол ідентифікації є однаковим для всіх пристроїв USB. ОС може використовувати цю ідентифікацію для завантаження правильного драйвера.

На іншому рівні USB - це шина, що означає, що декілька пристроїв повинні розділяти пропускну здатність. Це означає, що існує протокол, який повідомляє кожному пристрою, коли він може говорити, а коли ні. Оскільки всі USB-пристрої повинні відповідати цьому, для цього використовується загальний протокол.

Нарешті, багато простих USB-пристроїв настільки прості, що є додаткові протоколи, які описують цілий клас пристроїв (миші, клавіатури, накопичувачі, адаптери Ethernet, ...). Більшість пристроїв підтримують нульовий або один із цих функціональних протоколів.


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

@sawdust Оскільки це працює взагалі (навіть точка-точка), ми можемо зробити висновок про наявність протоколу. Наприклад, виявлення пристрою було б неможливим, якби не було стандартного протоколу.
reirab

Дійсно, є стандарт зв'язку і в основі його послідовне спілкування Universal Serial Bus.
Рамхаунд

@Ramhound Так, як і більшість сучасних конструкцій шин для всього, крім інтерфейсів пам'яті, USB використовує послідовні диференціальні пари для передачі даних. USB <= 2.0 мав одну диференціальну пару, тоді як USB 3 має дві додаткові диференціальні пари (одна для передачі SuperSpeed, а інша для прийому SuperSpeed, що дозволяє повнодуплексне спілкування зі швидкістю 5 Гбіт / с у кожному напрямку.)
reirab

Я просто думав, що я вкажу його серійну шину на серцевину стандарту, автор не здався в курсі цього факту, таким чином, питання.
Рамхаунд

5

Можливо, частина відповіді лежить у визначенні фрази " протокол зв'язку ". Перейшовши до того самого джерела, що і ви (Wikipedia), ви знайдете корисну інформацію, таку як:

  • Для того, щоб спілкуватися, протоколи повинні бути узгоджені.
  • Системи зв'язку використовують чітко визначені формати (протокол) для обміну повідомленнями.
  • протокол повинен визначати синтаксис, семантику та синхронізацію зв'язку.
  • Отже, протокол може бути реалізований як апаратне, програмне забезпечення, або те і інше.

Простий спосіб подумати про те, що протокол є заздалегідь визначеним і узгодженим способом щось робити , в цьому випадку щось полягає в тому, як переміщувати дані в USB-пристрій, підключений до нього. На апаратному рівні кожен штифт має попередньо визначений рівень напруги та протокол використання, кожен тип пристрою має заздалегідь визначений протокол використання для кожного контакту , а кожен пакет даних має заздалегідь визначений синтаксис та формат даних. Також вбудований протокол струшування зв'язку вручну . У сукупності - це всі частини колекції стандартів для використання USB-пристроїв, відомих як протокол USB, про що вирішили (тобто розробили, запропонували, обговорили, переглянули та згодом узгодили) члени Форуму USB Implementers, Inc.

Так що так, є це протокол USB, або більш правильно там є ряд заздалегідь визначені і узгоджений протокол USB з для різних видів використання USB.


1
1. процес зв'язку включаєсебе (як мінімум) три елементи: (1) кодування / відправка і (2)які отримують / декодування (3) _information_ (на відміну від випадкового шуму). Якщо будь-який з цих 3 елементів відсутній, процес виходить з ладу. Також можуть бути присутні додаткові елементи, такі як зворотний зв'язок, носій (канал) та контекст серед інших. Джерело: Один з моїх ступенів в комунікаційних досліджень
OMY

1
2. SETI - це не спілкування, а розвідка та відкриття . Навіть якщо ми виявимо справжній виготовлений сигнал, немає гарантії, що ми його коли-небудь зрозуміємо або зможемо зв’язатися з відправником. ДЖЕРЕЛО: [Заява місії SETI] [1] [1]: seti.org/about-us
1515 року

1
3. Перехресна сумісність браузера, як правило, викликається (a) виробниками браузерів, які не дотримуються протоколів, або (b) погано написаними протоколами, що спричиняють хибні реалізації (наприклад, розглядають сумнозвісніпомилки в коробці IE , а також див. < Quirksmode.org> ). Тобто зараз у нас є HTML 5 та CSS 3 , тому що протоколи потребували вдосконалення. ДЖЕРЕЛО: Я був власником і керував власною компанією з веб-розробок протягом декількох років
OMY

1
4. По-перше, радіосигнали, які "синхронізуються" на частоті, використовують протоколи AM (амплітудна модуляція). FM (частотна модуляція) радіосигнали "синхронізуються" з інтегралом часу. Протоколи для FM-систем передбачають фіксовані та динамічні елементи для обробки інформації. Динамічний елемент - це параметри змінної частоти , які обмежені заздалегідь визначеним і обмеженим діапазоном частот.
OMY

1
Фіксовані елементи - це математичні формули для модуляції та демодуляції сигналу. Незалежно від того, які частоти ці формули є постійними і їх можна реалізувати для обробки сигналу через аналогове обладнання або цифрове програмне забезпечення. Джерело: Особистий досвід як електроніка радіоаматорам , а також [Вікіпедія] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.