14Aug
De flesta av oss ger aldrig mycket tanke på våra USB-enheter, vi kopplar bara in dem och glömmer dem. Men vad händer om du är den nyfikna typen som vill veta mer om hur USB fungerar? Dagens SuperUser Q & A-inlägg har svar på en nyfiken läsarens frågor.
Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Foto med tillstånd av Evilelka Kowalski( Flickr).
Frågan
SuperUser-läsare smeeb vill veta om det verkligen finns ett USB-kommunikationsprotokoll:
Enligt Wikipedia, definierar USB:
- de kablar, kontakter och kommunikationsprotokoll som används i en buss för anslutning, kommunikation och strömförsörjning mellandatorer och elektroniska enheter.
Men finns det ett faktiskt USB-kommunikationsprotokoll ?Min förståelse är att:
- Du kopplar en USB-enhet till en maskin( t.ex. Ubuntu eller någon form av Linux).
- Linux hittar enhetsdrivrutinen för den enheten på något sätt( -bonus om du vet! ) och laddar den.
- Enheten är nu ansluten under /dev/ theDevice .
- Användarutrymmeappar kan nu läsas och skrivas till /dev/ theDevice och drivrutinen hanterar ingång och utgång på låg nivå till den underliggande enheten / hårdvaran.
Såvitt jag kan säga, visas ett USB-kommunikationsprotokoll inte någonstans i det här flödet. Om min förståelse är korrekt är USB bara kabeln och den elektriska anslutningen mellan datorn och enheten.
Har jag fel här? Utför USB faktiskt någon form av lågnivåprotokoll som understryker flödet ovan? Om så är fallet, vad är det och hur fungerar det med en 30.000 fotvy?
Finns det ett verkligt USB-kommunikationsprotokoll?
Svaret
SuperUser-bidragsgivare RedGrittyBrick och projectdp har svaret för oss. Först upp, RedGrittyBrick:
Ja( se USB-protokoll).
Som jag förstår, definierar USB-specifikationen en komplex uppsättning skiktprotokoll och enhetsprofiler.
USB-enheter kan till exempel överensstämma med mallar på hög nivå som masslagring, tangentbord, human interface, etc. och hanteras av en generisk drivrutin. Vissa USB-enheter kan kommunicera på en lägre nivå så att operativsystemets låga USB-stöd kan känna igen att det krävs enhetsspecifik högre drivrutiner på högre nivå.
Följd av svaret från projectdp:
Fråga
Finns det ett lågnivå USB-kommunikationsprotokoll i aktion och vad är det?
Svar
Ja, det finns. USB-specifikationen innehåller USB-protokollet som definierar hur bussen används på en bitnivå.Detta skulle vara det lågnivåprotokoll som ligger till grund för protokollen med högre nivåer( dvs masslagring, HID, etc.).
För specifika uppgifter om hur USB-protokollet fungerar, är den här OSDev wiki till hjälp. Här är en annan intressant beskrivning med hjälp av sekvensdiagram för att beskriva de olika datatransaktionerna per USB-protokollet.
Bonus Fråga
Hur hittar och laddar enheten drivrutinen för den enheten?
Bonussvar
På Linux när du använder en USB-aktiverad kärna, kommer en fungerande USB-enhet att upptäckas via hårdvaran och kärnan på grund av USB-specifikationen. På hårdvarusidan görs upptäckten av USB-värdkontrollen. Sedan i kärnan tar värdkontrollen drivrutinen över och översätter de låga bitarna på ledningen till USB-protokollformaterad information. Denna information blir sedan befolad i usbcore-drivrutinen i kärnan.
Jag parafraserades från denna utmärkta Opensourceforuartikel, som har mycket mer detaljer och klarhet om din fråga i Linux-sammanhanget.
Se till att kolla resten av den livliga diskussionen via trådlänken som delas nedan!
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.