Чи існує фактичний протокол зв'язку USB?
Більшість з нас ніколи не приділяє багато уваги нашим пристроям USB, ми просто підключаємо їх і забуваємо про них. Але що, якщо ви цікавий тип, який хоче дізнатися більше про те, як працює USB? Сьогоднішня посада SuperUser Q&A має відповіді на запитання цікавого читача.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..
Фото люб'язно надано Евілелкою Ковальським (Flickr).
Питання
Читач SuperUser smeeb хоче знати, чи дійсно існує фактичний протокол зв'язку USB:
Згідно з Wikipedia, USB:
- Визначає кабелі, роз'єми та протоколи зв'язку, що використовуються в шині для підключення, зв'язку та електроживлення між комп'ютерами та електронними пристроями.
Але чи є фактичний Протокол зв'язку USB? Я розумію, що:
- Ви підключаєте USB-пристрій до машини (Ubuntu або будь-який тип Linux, наприклад).
- Linux знайде драйвер пристрою для цього пристрою ()бонус, якщо ви знаєте!) і завантажує його.
- Тепер пристрій під’єднано / dev / theDevice.
- Програми для простору користувача тепер можуть читати та писати / dev / theDevice і драйвер обробляє вхід і вихід низького рівня на базовий пристрій / апаратне забезпечення.
Наскільки я можу сказати, a Протокол зв'язку USB не з'являється ніде в цьому потоці. Якщо моє розуміння правильне, USB - це лише кабель і електричне з'єднання між ПК і пристроєм.
Я тут помиляюся? Чи дійсно USB реалізує якийсь протокол низького рівня, який підкреслює потоки вище? Якщо так, то що це таке і як він працює на 30 000 футів?
Чи існує фактичний протокол зв'язку USB?
Відповідь
Співробітники SuperUser RedGrittyBrick та projectdp мають відповідь для нас. Спочатку, RedGrittyBrick:
Так (див. Протоколи USB).
Як я розумію, специфікація USB визначає складний набір багаторівневих протоколів і профілів пристроїв.
Наприклад, пристрої USB можуть відповідати шаблонам високого рівня, такими як масив, клавіатура, людський інтерфейсний пристрій тощо і керуватися загальним драйвером пристрою. Деякі пристрої USB можуть спілкуватися на більш низькому рівні, так що підтримка операційної системи з низьким рівнем USB може визнати, що потрібні драйвери більш високого рівня для пристрою..
Далі йде відповідь з projectdp:
Питання
Чи існує низькорівневий протокол зв'язку USB у дії і що це?
Відповідь
Так, є. Специфікація USB включає в себе протокол USB, який визначає спосіб використання шини на бітовому рівні. Це буде протокол низького рівня, що лежить в основі протоколів вищого рівня (тобто масового зберігання, HID і т.д.).
Для того, щоб дізнатися, як працює протокол USB, вікі OSDev корисні. Ось ще один цікавий опис з використанням діаграм послідовностей для опису різних транзакцій даних за протоколом USB.
Бонусне питання
Як Linux знаходить і завантажує драйвер пристрою для цього пристрою?
Бонусний відповідь
У Linux при використанні ядра з підтримкою USB робоче пристрій USB буде виявлено за допомогою апаратного забезпечення та ядра через специфікацію USB. На апаратній стороні виявлення здійснюється за допомогою USB Host Controller. Потім в ядрі драйвер хост-контролера приймає і переводить біти низького рівня на дроті до форматованої інформації протоколу USB. Ця інформація потім заповнюється в драйвері usbcore у ядрі.
Я перефразував з цієї чудової статті Opensourceforu, яка має набагато більше деталей і ясності щодо вашого питання в контексті Linux.
Переконайтеся в тому, щоб перевірити решту жвавого обговорення через потік ниток, який поділився нижче!
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.