Има ли действително USB комуникационен протокол?
Повечето от нас никога не мислят много за нашите USB устройства, просто ги включваме и забравяме за тях. Но какво, ако сте любопитен тип, който иска да знае повече за това как работи USB? Днешната публикация за въпроси и отговори SuperUser има отговори на любопитни въпроси на читателя.
Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.
Снимката е предоставена от Evilelka Kowalski (Flickr).
Въпроса
Изчислителят SuperUser smeeb иска да знае дали наистина има действителен USB комуникационен протокол:
Според Уикипедия, 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. След това в ядрото Host Controller Driver поема и превежда ниско ниво на бита по кабела към USB протокол, форматирана информация. Тази информация се попълва в usbcore драйвера в ядрото.
Аз перифразирах от тази отлична статия Opensourceforu, която има много повече детайли и яснота относно вашия въпрос в контекста на Linux..
Не забравяйте да проверите останалата част от оживената дискусия чрез линка, който се споделя по-долу!
Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.