De flesta av oss tänker aldrig mycket 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 svaren på en nyfiken läsares frågor.
Dagens Fråga & Svar-session kommer till oss med tillstånd av SuperUser - en underavdelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Foto med tillstånd av Evilelka Kowalski (Flickr) .
Frågan
SuperUser-läsare vill veta om det verkligen finns ett faktiskt USB-kommunikationsprotokoll:
Enligt Wikipedia, USB :
- Definierar kablar, kontakter och kommunikationsprotokoll som används i en buss för anslutning, kommunikation och strömförsörjning mellan datorer och elektroniska enheter.
Men finns det en verklig USB-kommunikationsprotokoll ? Min förståelse är att:
- Du ansluter en USB-enhet till en maskin (till exempel 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ändarutrymme-appar kan nu läsa och skriva till / dev / theDevice och föraren hanterar lågnivåinmatning och utdata till den underliggande enheten / hårdvaran.
Så vitt jag kan säga, a USB-kommunikationsprotokoll visas inte någonstans i detta flöde. Om jag förstår är USB bara kabeln och den elektriska anslutningen mellan datorn och enheten.
Har jag fel här? Implementerar USB faktiskt något slags lågnivåprotokoll som understryker flödet ovan? Om så är fallet, vad är det och hur fungerar det vid 30 000 fot?
Finns det ett faktiskt 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 det definierar USB-specifikationen en komplex uppsättning lagerprotokoll och enhetsprofiler.
Till exempel kan USB-enheter överensstämma med mallar på hög nivå som masslagring, tangentbord, mänsklig gränssnittsenhet etc. och hanteras av en generisk enhetsdrivrutin. Vissa USB-enheter kan kommunicera på en lägre nivå så att operativsystemets USB-stöd på låg nivå kan känna igen att enhetsspecifika drivrutiner på högre nivå behövs.
Följt av svaret från projectdp:
Fråga
Finns det ett USB-kommunikationsprotokoll på låg nivå i aktion och vad är det?
Svar
Ja, det finns det. USB-specifikationen inkluderar USB-protokollet som definierar hur bussen används på en bitnivå. Detta skulle vara protokollet på låg nivå som ligger till grund för protokollen på högre nivå (dvs. masslagring, HID, etc.).
För detaljer om hur USB-protokollet fungerar, detta OSDev wiki är till hjälp. Här är en annan intressant beskrivning använda sekvensdiagram för att beskriva de olika datatransaktionerna per USB-protokollet.
Bonusfråga
Hur hittar och laddar Linux enhetsdrivrutinen 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å maskinvarusidan görs detekteringen av USB Host Controller. Sedan i kärnan tar Host Controller Driver över och översätter de låga bitarna på kabeln till USB-protokollformaterad information. Denna information fylls sedan i usbcore-drivrutinen i kärnan.
Jag omformulerade från detta utmärkta Opensourceforu artikel , som har mycket mer detaljer och tydlighet om din fråga i Linux-sammanhanget.
Se till att kolla in 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 fler svar från andra tekniskt kunniga Stack Exchange-användare? Kolla in hela diskussionstråden här .