Повечето от нас никога не мислят много за нашите USB устройства, просто ги включим и забравим за тях. Но какво ще стане, ако сте любопитен тип, който иска да знае повече за това как работи USB? Днешната публикация "Суперуслуги Q & A" има отговорите на въпросите на любознателен читател.
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Снимката е предоставена от Evilelka Kowalski (Flickr).
Суичът на четец на супелеус smeeb иска да разбере дали наистина има действителен USB комуникационен протокол:
Според Wikipedia, USB:
- Определя кабелите, конекторите и комуникационните протоколи, използвани в шина за връзка, комуникация и захранване между компютри и електронни устройства.
Но има ли реалност USB комуникационен протокол? Моето разбиране е, че:
- Свързвате USB устройство към машина (например Ubuntu или някакъв Linux).
- Linux намира драйвера на устройството за това устройство по някакъв начин (бонус, ако знаете!) и го зарежда.
- Устройството вече е свързано под / Сътрудничество / за устройства.
- Потребителските приложения за пространство вече могат да четат и пишат / Сътрудничество / за устройства и драйверът обработва ниско ниво на вход и изход към основното устройство / хардуер.
Доколкото мога да кажа, 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? Вижте цялата тема на дискусията тук.