If-Koubou

Има ли действителен USB комуникационен протокол?

Има ли действителен USB комуникационен протокол? (Как да)

Повечето от нас никога не мислят много за нашите USB устройства, просто ги включим и забравим за тях. Но какво ще стане, ако сте любопитен тип, който иска да знае повече за това как работи USB? Днешната публикация "Суперуслуги Q & A" има отговорите на въпросите на любознателен читател.

Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.

Снимката е предоставена от Evilelka Kowalski (Flickr).

Въпроса

Суичът на четец на супелеус smeeb иска да разбере дали наистина има действителен USB комуникационен протокол:

Според Wikipedia, USB:

  • Определя кабелите, конекторите и комуникационните протоколи, използвани в шина за връзка, комуникация и захранване между компютри и електронни устройства.

Но има ли реалност USB комуникационен протокол? Моето разбиране е, че:

  1. Свързвате USB устройство към машина (например Ubuntu или някакъв Linux).
  2. Linux намира драйвера на устройството за това устройство по някакъв начин (бонус, ако знаете!) и го зарежда.
  3. Устройството вече е свързано под / Сътрудничество / за устройства.
  4. Потребителските приложения за пространство вече могат да четат и пишат / Сътрудничество / за устройства и драйверът обработва ниско ниво на вход и изход към основното устройство / хардуер.

Доколкото мога да кажа, a USB комуникационен протокол не се появява никъде в този поток. Ако моето разбиране е правилно, USB е само кабелната и електрическата връзка между компютъра и устройството.

Лошо ли съм тук? Дали USB наистина внедрява някакъв протокол от ниско ниво, който подчертава потока по-горе? Ако е така, какво е това и как работи при 30 000 фута?

Има ли действителен USB комуникационен протокол?

Отговорът

Присъединителите към SuperUser RedGrittyBrick и projectdp имат отговора за нас. Първо, RedGrittyBrick:

Да (виж USB протоколи).

Както разбирам, USB спецификацията определя сложен набор от слоеве протоколи и профили на устройствата.

Например, USB устройствата могат да се придържат към шаблони на високо ниво като масово съхранение, клавиатура, устройство за интерфейс за хора и т.н. и да се управляват от общ драйвер на устройството. Някои USB устройства могат да комуникират на по-ниско ниво, така че по-ниската поддръжка на USB на операционната система да разпознае, че са необходими драйвери за по-високо ниво, специфични за дадено устройство.

Следва отговор от projectdp:

въпрос

Има ли протокол за ниско ниво на комуникация в USB и какво е това?

Отговор

Да, има. USB спецификацията включва USB протокол, който определя начина, по който автобусът се използва на малко ниво. Това би било протоколът от ниско ниво, който стои в основата на протоколите от по-високо ниво (т.е. масово съхранение, HID и т.н.).

За подробности относно начина на работа на USB протокола, тази OSDev wiki е полезна. Тук е друго интересно описание, използващо диаграми на последователности, за да се опишат различните транзакции на данни по USB протокола.

Бонус Въпрос

Как Linux намира и зарежда драйвера на устройството за това устройство?

Бонус отговор

На Linux, когато използвате USB ядро, работно USB устройство ще бъде открито чрез хардуера и ядрото, поради USB спецификацията. От страна на хардуера откриването се извършва от USB Host Controller. След това в ядрото драйверът на контролера на хоста поема и превежда нивата на нивото на бита на информацията за форматиране на USB протокол. След това тази информация се попълва в драйвера на usbcore в ядрото.

Аз парафразирах от тази отлична статия на Opensourceforu, която има много повече подробности и яснота по въпроса ви в контекста на Linux.

Не забравяйте да проверите останалата част от оживената дискусия чрез линка за нишка, споделен по-долу!

Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.