De fleste af os tænker aldrig meget over vores USB-enheder, vi tilslutter dem bare og glemmer dem. Men hvad hvis du er den nysgerrige type, der vil vide mere om, hvordan USB fungerer? Dagens SuperUser Q & A-indlæg har svarene på en nysgerrig læsers spørgsmål.
Dagens spørgsmål og svar-session kommer til os med tilladelse fra SuperUser - en underinddeling af Stack Exchange, en community-driven gruppe af Q&A websteder.
Foto med tilladelse til Evilelka Kowalski (Flickr) .
Spørgsmålet
SuperUser-læser-smeeb vil vide, om der virkelig er en egentlig USB-kommunikationsprotokol:
Ifølge Wikipedia, USB :
- Definerer kabler, stik og kommunikationsprotokoller, der bruges i en bus til forbindelse, kommunikation og strømforsyning mellem computere og elektroniske enheder.
Men er der en faktisk USB-kommunikationsprotokol ? Min forståelse er, at:
- Du tilslutter en USB-enhed til en maskine (f.eks. Ubuntu eller enhver form for Linux).
- Linux finder enhedsdriveren til denne enhed på en eller anden måde ( bonus, hvis du ved det! ) og indlæser det.
- Enheden er nu tilsluttet under / dev / theDevice .
- Brugerplads-apps kan nu læse og skrive til / dev / theDevice og driveren håndterer input og output på lavt niveau til den underliggende enhed / hardware.
Så vidt jeg kan vide, er a USB-kommunikationsprotokol vises ikke nogen steder i denne strøm. Hvis min forståelse er korrekt, er USB kun kablet og den elektriske forbindelse mellem pc'en og enheden.
Tager jeg fejl her? Implementerer USB faktisk en slags lavt niveau protokol, der understreger strømmen ovenfor? Hvis ja, hvad er det, og hvordan fungerer det med en 30.000 fods visning?
Er der en egentlig USB-kommunikationsprotokol?
Svaret
SuperUser-bidragydere RedGrittyBrick og projectdp har svaret til os. Først op, RedGrittyBrick:
Ja ( se USB-protokoller ).
Som jeg forstår det, definerer USB-specifikationen et komplekst sæt lagprotokoller og enhedsprofiler.
For eksempel kan USB-enheder overholde skabeloner på højt niveau som masselagring, tastatur, human interface-enhed osv. Og administreres af en generisk enhedsdriver. Nogle USB-enheder kan kommunikere på et lavere niveau, så operativsystemets USB-understøttelse på lavt niveau kan genkende, at enhedsspecifikke drivere på højere niveau er nødvendige.
Efterfulgt af svaret fra projectdp:
Spørgsmål
Er der en USB-kommunikationsprotokol på lavt niveau i aktion, og hvad er den?
Svar
Ja der er. USB-specifikationen inkluderer USB-protokollen, der definerer den måde, bussen bruges på et bitniveau. Dette ville være protokollen på lavt niveau, der ligger til grund for protokollerne på højere niveau (dvs. masselagring, HID osv.).
For detaljer om hvordan USB-protokollen fungerer, dette OSDev wiki er nyttigt. Her er en anden interessant beskrivelse ved hjælp af sekvensdiagrammer til at beskrive de forskellige datatransaktioner pr. USB-protokollen.
Bonus spørgsmål
Hvordan finder og indlæser Linux enhedsdriveren til den pågældende enhed?
Bonussvar
På Linux, når du bruger en USB-aktiveret kerne, registreres en fungerende USB-enhed via hardware og kerne på grund af USB-specifikationen. På hardwaresiden udføres detekteringen af USB Host Controller. Så i kernen overtager Host Controller Driver og oversætter bitene på lavt niveau på ledningen til USB-protokollformateret information. Disse oplysninger bliver derefter befolket i usbcore-driveren i kernen.
Jeg omskrev fra dette fremragende Opensourceforu-artikel , som har meget mere detaljer og klarhed om dit spørgsmål i Linux-sammenhæng.
Sørg for at tjekke resten af den livlige diskussion via trådlinket, der er delt nedenfor!
Har du noget at tilføje til forklaringen? Lyd fra i kommentarerne. Vil du læse flere svar fra andre teknisk kyndige Stack Exchange-brugere? Tjek den fulde diskussionstråd her .