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