Hemsida » hur » Finns det ett faktiskt USB-kommunikationsprotokoll?

    Finns det ett faktiskt USB-kommunikationsprotokoll?

    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 Question & Answer-session 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äsaren smeeb vill veta om det verkligen finns ett 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 är det en faktisk USB-kommunikationsprotokoll? Min förståelse är att:

    1. Du kopplar en USB-enhet till en maskin (t.ex. Ubuntu eller någon typ av Linux).
    2. Linux hittar enhetsdrivrutinen för den enheten på något sätt (bonus om du vet!) och laddar den.
    3. Enheten är nu ansluten under / Dev / theDevice.
    4. Användarutrymmeapp kan nu läsa och skriva till / Dev / theDevice och föraren hanterar ingång och utgång på låg nivå till den underliggande enheten / hårdvaran.

    Så långt jag kan säga, a USB-kommunikationsprotokoll visas inte någonstans i detta flöde. 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 aktuellt 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 lagrade protokoll och enhetsprofiler.

    USB-enheter kan till exempel överensstämma med mallar på hög nivå som masslagring, tangentbord, mänsklig gränssnittsenhet 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 enhetsspecifika högre drivrutiner behövs.

    Följd av svaret från projektdp:

    Fråga

    Finns det ett lågnivå USB-kommunikationsprotokoll i aktion och vad är det?

    Svar

    Ja, det finns det. 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 enligt 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 detekteringen av USB-värdkontrollen. Sedan i kärnan tar Host Controller Driver över och översätter bitarna på låg nivå på ledningen till USB-protokollformaterad information. Denna information blir sedan befolad i usbcore-drivrutinen i kärnan.

    Jag parafraserade 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.