Startpagina » hoe » Is er een echt USB-communicatieprotocol?

    Is er een echt USB-communicatieprotocol?

    De meesten van ons denken nooit aan onze USB-apparaten, we pluggen ze gewoon in en vergeten ze. Maar wat als u het merkwaardige type bent dat meer wil weten over hoe USB werkt? De SuperUser Q & A-post van vandaag biedt de antwoorden op de vragen van een nieuwsgierige lezer.

    De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.

    Foto met dank aan Evilelka Kowalski (Flickr).

    De vraag

    SuperUser-lezer smeeb wil weten of er echt een USB-communicatieprotocol bestaat:

    Volgens Wikipedia, USB:

    • Definieert de kabels, connectoren en communicatieprotocollen die in een bus worden gebruikt voor verbinding, communicatie en voeding tussen computers en elektronische apparaten.

    Maar is er een feitelijk USB communicatieprotocol? Ik heb begrepen dat:

    1. Je verbindt een USB-apparaat met een machine (bijvoorbeeld Ubuntu of elke vorm van Linux).
    2. Linux vindt op de een of andere manier de apparaatdriver voor dat apparaat (bonus als je het weet!) en laadt het.
    3. Het apparaat is nu verbonden onder / Dev / theDevice.
    4. Gebruikersruimteapps kunnen nu lezen en ernaar schrijven / Dev / theDevice en de bestuurder omgaat met de invoer en uitvoer op laag niveau naar het onderliggende apparaat / hardware.

    Voor zover ik kan vertellen, a USB communicatieprotocol verschijnt nergens in deze stroom. Als ik het goed begrijp, is de USB slechts de kabel en elektrische verbinding tussen de pc en het apparaat.

    Heb ik het hier mis? Implementeert USB eigenlijk een soort low-level protocol dat de bovenstaande stroom onderstreept? Zo ja, wat is het en hoe werkt het op een zicht van 30.000 voet?

    Is er een echt USB-communicatieprotocol?

    Het antwoord

    SuperUser-bijdragers RedGrittyBrick en projectdp hebben het antwoord voor ons. Ten eerste, RedGrittyBrick:

    Ja (zie USB-protocollen).

    Zoals ik het begrijp, definieert de USB-specificatie een complexe reeks gelaagde protocollen en apparaatprofielen.

    USB-apparaten kunnen bijvoorbeeld voldoen aan sjablonen op hoog niveau zoals massaopslag, toetsenbord, menselijk interface-apparaat enz. En worden beheerd door een generieke apparaatdriver. Sommige USB-apparaten kunnen op een lager niveau communiceren, zodat de low-level USB-ondersteuning van het besturingssysteem kan herkennen dat apparaatspecifieke hogere niveau-stuurprogramma's nodig zijn.

    Gevolgd door het antwoord van projectdp:

    Vraag

    Is er een low-level USB-communicatieprotocol in werking en wat is het?

    Antwoord

    Ja dat is er. De USB-specificatie omvat het USB-protocol dat de manier bepaalt waarop de bus op bitniveau wordt gebruikt. Dit zou het low-level protocol zijn dat ten grondslag ligt aan de protocollen op hoger niveau (dat wil zeggen massa-opslag, HID, etc.).

    Voor specifieke informatie over hoe het USB-protocol werkt, is deze OSDev-wiki nuttig. Hier volgt een andere interessante beschrijving met behulp van sequentiediagrammen om de verschillende datatransacties per USB-protocol te beschrijven.

    Bonusvraag

    Hoe vindt en laadt Linux de apparaatdriver voor dat apparaat?

    Bonusantwoord

    Op Linux bij het gebruik van een USB-enabled kernel, zal een werkend USB-apparaat worden gedetecteerd via de hardware en kernel vanwege de USB-specificatie. Aan de kant van de hardware wordt de detectie uitgevoerd door de USB Host Controller. Vervolgens neemt in de kernel de hostcontrollerstuurprogramma het over en vertaalt de low-level bits op de draad naar USB-protocol geformatteerde informatie. Deze informatie wordt vervolgens ingevuld in het usbcore-stuurprogramma in de kernel.

    Ik parafraseerde van dit uitstekende Opensourceforu-artikel, dat veel gedetailleerder en duidelijker is over je vraag in de Linux-context.

    Zorg ervoor dat je de rest van de levendige discussie bekijkt via de onderstaande threadlink!


    Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.