Домашня » як » Чи існує фактичний протокол зв'язку USB?

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

    Більшість з нас ніколи не приділяє багато уваги нашим пристроям USB, ми просто підключаємо їх і забуваємо про них. Але що, якщо ви цікавий тип, який хоче дізнатися більше про те, як працює USB? Сьогоднішня посада SuperUser Q&A має відповіді на запитання цікавого читача.

    Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..

    Фото люб'язно надано Евілелкою Ковальським (Flickr).

    Питання

    Читач SuperUser smeeb хоче знати, чи дійсно існує фактичний протокол зв'язку USB:

    Згідно з Wikipedia, USB:

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

    Але чи є фактичний Протокол зв'язку USB? Я розумію, що:

    1. Ви підключаєте USB-пристрій до машини (Ubuntu або будь-який тип Linux, наприклад).
    2. Linux знайде драйвер пристрою для цього пристрою ()бонус, якщо ви знаєте!) і завантажує його.
    3. Тепер пристрій під’єднано / dev / theDevice.
    4. Програми для простору користувача тепер можуть читати та писати / 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? Перегляньте повний потік обговорення тут.