Početna » kako da » Postoji li stvarni USB komunikacijski protokol?

    Postoji li stvarni USB komunikacijski protokol?

    Većina nas nikada ne razmišlja o našim USB uređajima, samo ih uključimo i zaboravimo na njih. Ali što ako ste znatiželjni tip koji želi znati više o tome kako USB radi? Današnja postova s ​​pitanjima o odgovorima korisnika imaju odgovore na pitanja znatiželjnog čitatelja.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Fotografija ljubaznošću Evilelke Kowalski (Flickr).

    Pitanje

    SuperUser čitač smeeb želi znati postoji li stvarno USB komunikacijski protokol:

    Prema Wikipediji, USB:

    • Definira kabele, priključke i komunikacijske protokole koji se koriste u sabirnici za povezivanje, komunikaciju i napajanje između računala i elektroničkih uređaja.

    No postoji li stvarna USB komunikacijski protokol? Koliko ja razumijem:

    1. USB uređaj povezujete s računalom (na primjer, Ubuntu ili bilo koja vrsta Linuxa).
    2. Linux nekako pronalazi pogonitelj uređaja za taj uređaj (bonus ako znate!) i učitava ga.
    3. Uređaj je sada povezan s / Dev / theDevice.
    4. Aplikacije za prostor korisnika sada mogu čitati i pisati / Dev / theDevice i upravljački program rukuje niskim nivoom ulaza i izlaza na temeljni uređaj / hardver.

    Koliko mogu reći, a USB komunikacijski protokol ne pojavljuje se nigdje u ovom toku. Ako je moje razumijevanje ispravno, USB je samo kabelska i električna veza između računala i uređaja.

    Zar ovdje griješim? Da li USB zapravo implementira neku vrstu protokola niske razine koji naglašava protok iznad? Ako je tako, što je to i kako radi na pogledu od 30.000 stopa?

    Postoji li stvarni USB komunikacijski protokol?

    Odgovor

    SuperUser suradnici RedGrittyBrick i projectdp imaju odgovor za nas. Prvo gore, RedGrittyBrick:

    Da (pogledajte USB protokole).

    Kao što sam shvatio, USB specifikacija definira složeni skup slojevitih protokola i profila uređaja.

    Na primjer, USB uređaji mogu odgovarati predlošcima visoke razine kao što su masovno pohranjivanje, tipkovnica, uređaj za ljudsko sučelje itd., A njima upravlja generički upravljački program uređaja. Neki USB uređaji mogu komunicirati na nižoj razini, tako da podrška USB-a niske razine operativnog sustava može prepoznati da su potrebni upravljački programi više razine za određeni uređaj..

    Slijedi odgovor iz projectdp:

    Pitanje

    Postoji li USB komunikacijski protokol niske razine i što je to?

    Odgovor

    Da tamo je. USB specifikacija uključuje USB protokol koji definira način na koji se sabirnica koristi na razini bita. To bi bio protokol na niskoj razini koji je u osnovi protokola više razine (tj. Masovno pohranjivanje, HID itd.).

    Za pojedinosti o tome kako funkcionira USB protokol, ovaj OSDev wiki je od pomoći. Ovdje je još jedan zanimljiv opis pomoću dijagrama sekvenci za opis različitih transakcija podataka po USB protokolu.

    Pitanje za bonus

    Kako Linux pronalazi i učitava upravljački program za taj uređaj?

    Bonus odgovor

    Na Linuxu kada se koristi kernel koji podržava USB, radni USB uređaj bit će otkriven putem hardvera i kernela zbog USB specifikacije. S hardverske strane, detekciju obavlja USB Host Controller. Zatim u jezgru upravljački program host kontrolera preuzima i prevodi niske razine bitova na žicu u formatirane informacije o protokolu USB. Te se informacije zatim popunjavaju u usbcore pogonitelju u kernelu.

    Parafrazirao sam iz ovog izvrsnog članka Opensourceforu, koji ima mnogo više detalja i jasnoću o vašem pitanju u kontekstu Linuxa.

    Provjerite ostatak živahne rasprave putem niže navedene poveznice!


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.