USB tipai ir standartai. USB sąsaja: sąsajos įrenginių aprašymas ir pagrindai USB 2.0 aprašymas

10.09.2021

Sveiki visi. Kartais žmonėms įdomu sužinoti, kuo USB 3.0 skiriasi nuo USB 2.0, kartais norisi suprasti, kokios versijos ar tipo USB jungtis jie turi savo kompiuteryje, koks dinozauras yra USB 1.0 ir pan. Pasigilinkime į šią temą šiek tiek giliau.

USB standartas pasirodė 90-ųjų viduryje. Iššifruota USBštai kaip - Universali serijinė magistralė. Šis standartas buvo sukurtas specialiai ryšiui tarp periferinių įrenginių ir kompiuterio ir dabar užima pirmaujančią vietą tarp visų tipų ryšio sąsajų. Tai nestebina. Šiais laikais sunku įsivaizduoti bet kurį įrenginį be USB jungties, nors šios jungtys skiriasi.

USB jungčių tipai

Šiandien jų užtenka didelis skaičius USB jungčių tipai. Kai kurie yra dažnesni, kiti mažiau. Bet kokiu atveju, pažvelkime į juos.

USBtipas-A– vienas iš labiausiai paplitusių USB jungčių tipų. Galbūt matėte jį ant savo, ant bloko įkroviklis ir ne tik. Turi daug naudos. Su juo galite prijungti peles ir klaviatūras prie kompiuterio (ar kito įrenginio), „flash drives“, išoriniai diskai, išmanieji telefonai ir pan. Šis sąrašas gali būti tęsiamas ilgai, jei gerai pagalvosite.

USBtipas-B– jungtis daugiausia naudojama spausdintuvui ar kitiems išoriniams įrenginiams prijungti prie kompiuterio. Gauta daug mažiau paplitusi nei A tipo USB.

Mini USB buvo labai dažnas mobiliuosius įrenginius ah prieš „Micro USB“ atsiradimą. Šiuo metu tai labai reta, bet vis tiek galite jį rasti kai kuriuose senesniuose įrenginiuose. Mano nešiojamoje garso kolonėlėje mini USB jungtis gauna elektros energiją, kad įkrautų akumuliatorių. Šį garsiakalbį pirkau prieš kokius 5 metus (pasirodė, kad patvarus).

Mikro USB dabar naudojamas išmaniuosiuose telefonuose ir Mobilieji telefonai beveik visi gamintojai. Ši USB jungtis įgijo neįtikėtiną populiarumą tarp mobiliųjų įrenginių. Tačiau USB Type-C pamažu užima vietą.

USB 1.0 versija – archeologiniai kasinėjimai

USB standarto proprosenelis yra USB 1.0 gimė šaltą 1995 metų lapkritį. Tačiau jis gimė šiek tiek per anksti ir nesulaukė didelio populiarumo. Tačiau jo jaunesnysis brolis USB 1.1, gimęs po trejų metų, buvo perspektyvesnis pavyzdys ir sugebėjo pritraukti pakankamai dėmesio.

Kalbant apie techninę dalį, duomenų perdavimo greitis buvo mažas, tačiau pagal tų laikų standartus šio greičio buvo daugiau nei pakankamai. Greitis siekė iki 12 Mbit/s ir tai buvo didelio pralaidumo režimu.

USB 2.0 ir USB 3.0 jungčių skirtumai

USB 2.0 ir USB 3.0 yra du visiškai modernūs USB standartai, kurie dabar naudojami visur kompiuteriuose ir nešiojamuosiuose kompiuteriuose. USB 3.0, žinoma, yra naujesnis ir greitesnis, taip pat turi pilną suderinama atgal su USB 2.0 įrenginiais. Bet greitis šiuo atveju bus ribojamas iki didžiausio greičio pagal USB 2.0 standartą.

Teoriškai USB 3.0 perdavimo greitis yra maždaug 10 kartų didesnis nei USB 2.0 (5 Gbps palyginti su 480 Mbps). Tačiau praktikoje informacijos mainų tarp įrenginių greitį dažnai riboja patys įrenginiai. Nors apskritai USB 3.0 vis tiek laimi.

Techniniai skirtumai

Nors USB 2.0 ir USB 3.0 standartai yra suderinami atgal, vis dėlto jie turi tam tikrų techninių skirtumų. USB 2.0 turi 4 kontaktus – 2 įrenginiams maitinti ir 2 duomenims perduoti. Šie 4 kaiščiai buvo išsaugoti USB 3.0 standarte. Bet be jų buvo pridėti dar 4 kontaktai, kurių reikia didelis greitis duomenų perdavimas ir greitesnis įrenginių įkrovimas. Beje, USB 3.0 gali veikti iki 1 ampero srove.

Dėl to USB 3.0 standartinis laidas tapo storesnis, o jo ilgis dabar neviršija 3 metrų (USB 2.0 maksimalus ilgis siekė 5 metrus). Tačiau išmanųjį telefoną galite įkrauti daug greičiau, net jei prie vienos jungties per skirstytuvą prijungsite kelis išmaniuosius telefonus.

Natūralu, kad gamintojai pasirūpino vizualiniais skirtumais. Nereikia ieškoti pagrindinės plokštės pakuotės, kad pamatytumėte, kokius USB standartus ji palaiko. Ir jums nereikia eiti į kompiuterio nustatymus ar įrenginių tvarkytuvę, kad tai padarytumėte. Tiesiog pažiūrėkite į savo jungties spalvą. USB 3.0 jungtis beveik visada yra mėlyna. Labai retai jis būna ir raudonas. Nors USB 2.0 beveik visada yra juodas.

Taigi dabar vienu greitu žvilgsniu galite nustatyti, ar nešiojamajame kompiuteryje yra USB 2.0 ar USB 3.0.

Tai turbūt ir baigiasi pokalbis apie tai, kuo USB 2.0 skiriasi nuo USB 3.0.

Išvada

Ko išmokome iš šio straipsnio? Tas USB yra padalintas į duomenų perdavimo standartus, kurie skiriasi duomenų perdavimo greičiu. Ir taip pat, kad USB turi daugybę jungčių tipų.

Ir įdomiausias dalykas, kurį pamiršau paminėti straipsnyje, yra tai, kad jungčių tipus galima derinti taip. Galite rasti viso dydžio A tipo USB jungtį ir viso dydžio B tipo USB, tuo pačiu metu yra (bet retai) A tipo mikro USB ir B tipo mikro USB (labai paplitę). A tipo USB gali veikti naudojant USB 2.0 protokolą arba USB 3.0 protokolą. Apskritai, jei norite, galite susipainioti.

Ir jei nerimaujate dėl klausimo, kurias jungtis geriau pasirinkti USB 2.0 ar USB 3.0 nešiojamam kompiuteriui, nesijaudinkite. Dabar visuose šiuolaikiniuose nešiojamuosiuose ir kompiuteriuose yra abiejų tipų USB. Pavyzdžiui, mano nešiojamasis kompiuteris turi dvi USB 2.0 jungtis ir vieną USB 3.0 jungtį. Ir visos trys jungtys yra A tipo USB.

Štai kokie jie – USB!

Ar perskaitėte iki galo?

Ar šis straipsnis buvo naudingas?

Ne visai

Kas tiksliai nepatiko? Ar straipsnis buvo neišsamus ar klaidingas?
Rašykite komentaruose ir pažadame tobulėti!

Didelės spartos signalizacijos bitų sparta – 12 Mb/s – Maksimalus laido ilgis didelės spartos signalizacijos bitų spartai – 5 m – Mažo greičio signalizacijos bitų sparta – 1,5 Mb/s – Maksimalus kabelio ilgis, skirtas mažos spartos signalizacijos bitų spartai – 3 m – Maksimalus prijungtų įrenginių skaičius (įskaitant daugiklius) - 127 - Galima prijungti įrenginius su skirtingais duomenų perdavimo sparta - 500 mA

USB 1.1 ir 2.0 jungčių laidai

USB signalai perduodami dviem ekranuoto keturių laidų kabelio laidais.

Čia :

GND- „dėklo“ grandinė, skirta išoriniams įrenginiams maitinti V AUTOBUSAS- +5V taip pat maitinimo grandinėms Magistralė D+ skirtas duomenų perdavimui

Padanga D- gauti duomenis.

USB 2.0 trūkumai

Nors Maksimalus greitis USB 2.0 duomenų perdavimas yra 480 Mbit/s (60 MB/s), realiame gyvenime tokius greičius pasiekti nerealu (praktikoje ~33,5 MB/s). Taip yra dėl didelio USB magistralės vėlavimo tarp užklausos dėl duomenų perdavimo ir faktinės perdavimo pradžios. Pavyzdžiui, FireWire magistralė, nors ir turi mažesnę 400 Mb/s didžiausią pralaidumą, kuri yra 80 Mb/s (10 MB/s) mažesnė nei USB 2.0, iš tikrųjų leidžia padidinti duomenų mainų su standžiaisiais diskais ir kitais įrenginiais pralaidumą. prietaisai. Šiuo atžvilgiu įvairius mobiliuosius įrenginius jau seniai ribojo nepakankamas praktinis USB 2.0 pralaidumas.

Svarbiausias USB 3.0 pranašumas yra didesnis greitis (iki 5 Gbps), kuris yra 10 kartų greitesnis nei senesnio prievado. Naujoji sąsaja pagerino energijos taupymą. Tai leidžia pavarai pereiti į miego režimą, kai jis nenaudojamas. Vienu metu galima atlikti dvipusį duomenų perdavimą. Tai suteiks didesnį greitį, jei prie vieno prievado prijungsite kelis įrenginius (padalinkite prievadą). Galite šakotis naudodami šakotuvą (koncentratorius yra įrenginys, kuris iš vieno prievado išsišakoja į 3-6 prievadus). Dabar, jei prijungsite šakotuvą prie USB 3.0 prievado, o prie šakotuvo prijungsite kelis įrenginius (pavyzdžiui, „flash drives“) ir vienu metu atliksite duomenų perdavimą, pamatysite, kad greitis bus daug didesnis nei naudojant USB. 2.0 sąsaja. Yra savybė, kuri gali būti pliusas ir minusas. USB 3.0 sąsaja padidino srovę iki 900 mA, o USB 2.0 veikia su 500 mA srove. Tai bus pliusas tiems įrenginiams, kurie buvo pritaikyti USB 3.0, tačiau nedidelis minusas – gali kilti rizika kraunant silpnesnius įrenginius, pavyzdžiui, telefoną. Fizinis naujos sąsajos trūkumas yra kabelio dydis. Kad būtų išlaikytas didelis greitis, kabelis tapo storesnis ir trumpesnis (negali būti ilgesnis nei 3 metrai) nei USB 2.0. Svarbu pažymėti, kad įrenginiai su skirtingomis USB sąsajomis bus dirbti gerai ir neturėtų būti problema. Tačiau nemanykite, kad greitis padidės, jei USB 3.0 prijungsite prie senesnio prievado arba senesnį sąsajos kabelį prijungsite prie naujo prievado. Duomenų perdavimo greitis bus lygus silpniausio prievado greičiui.

  • Pamoka

Iliustruota OSI tinklo modelio projekcija į universaliąją nuosekliąją magistralę.

Trys „puikūs“ USB krūvos lygiai

Nebuvau patenkintas USB kamino išvaizda, kurią dažniausiai galima rasti internete:

Nelabai naudingas USB kaminas


Autobuso lygis, logiškas, funkcionalus... Tai, žinoma, nuostabios abstrakcijos, bet jos labiau tikėtinos tiems, kurie ruošiasi padaryti tvarkyklę ar taikomąją programinę įrangą pagrindiniam kompiuteriui. Iš mikrovaldiklio pusės tikiuosi šabloninės baigtinės būsenos mašinos, kurios mazguose dažniausiai įterpiame savo naudingą kodą ir iš pradžių jis pagal visus žanro dėsnius suges. Arba pagrindinio kompiuterio programinė įranga trikdys. Arba vairuotojas. Bet kokiu atveju kažkam nepavyks. Taip pat neįmanoma iš karto išsiaiškinti MK bibliotekų. Ir taip žiūriu į eismą USB magistralė analizatorius, kur įvykiai, vykstantys nepažįstama kalba, visiškai nedera į tris nuostabius lygius. Įdomu, ar mano galvoje toks disonansas dėl gripo karštinės?

Jei skaitytojui yra buvę panašių jausmų, siūlau alternatyvią USB kamino viziją, kuri staiga man pasirodė aiškiai perkaitusiose smegenyse, paremtą pamėgtu 7 sluoksnių OSI modeliu. Aš apsiribojau penkiais lygiais:

Nenoriu pasakyti, kad visa programinė įranga ir bibliotekos jau yra sukurtos arba turėtų būti sukurtos remiantis šiuo modeliu. Dėl inžinerinių priežasčių kodas su lygiais bus labai sumaišytas. Bet noriu padėti tiems, kurie pradeda pažintį su USB magistrale, kurie nori suprasti įrenginių mainų protokolus ir dalykinės srities terminologiją, priartėti prie paruošti pavyzdžiai, bibliotekas ir geriau jose naršyti. Šis modelis skirtas ne įkelti į MK, o į jūsų nuostabius protus, brangūs draugai. Ir tada tavo auksinės rankos viską padarys pačios, neabejoju :)

Taigi, eikime, pataisykite, jei pastebėsite klaidų. Tai juodraštinis variantas, ir jei jau kažkas panašaus kur nors buvo nupieštas, atsiprašau, neradau, todėl pasidariau pats. Manau, kad paveikslas nepabėgs, bet kol kas garbingai visuomenei paaiškinsiu, kodėl iš viso pradėjau šį leidinį.

Dar vienas prisiminimas iš devintojo dešimtmečio

Pirmąją klaidą iš kažkieno kodo pašalinau devintojo dešimtmečio pabaigoje, dirbdamas studentu kaip studentas. Tai buvo pppd skirta FreeBSD, kurią vėliau įdiegėme modemo telkinyje. „Motorola“ modemai įstrigo ant ragelio, niekas negalėjo patekti, linija buvo prarasta veltui, o vienintelis likęs būdas per PPP išlaikyti gyvą buvo kažkodėl klaidingas. Tada ir sužinojau, kad pppd kažkodėl laukia šešių LCP atsako baitų, o ne reikalingų keturių. Tada jaučiausi tokia beprotiška klaidų kratytuvas iš devintojo dešimtmečio :-) Ką su tuo turi PPP? Tai tiesiog panašu į USB: paketas ir taškas į tašką. Tiesa, skirtingai nei USB 2.0, jis yra visiškai dvipusis.


Norime to ar ne, mikrovaldiklių evoliucija akivaizdžiai nestovės vietoje. Ne, ne, ir tai bus rodoma leidiniuose (http://habrahabr.ru/post/208026/, http://habrahabr.ru/post/233391/) „sunkieji išoriniai įrenginiai“ - USB magistralės diegimas, integruotas į MK, su analizės pavyzdžiais, naudojant HID ir kt. Turime pagerbti autorių RaJa: iš aštuonių pateiktų pavyzdžių standartinė biblioteka STSW-STM32121 (UM0424) ir kažkaip išsirinko naudingiausią (Custom HID), perkėlė į nemokamą Em::Blocks aplinką, nubrėžė aiškia kalba, šiek tiek pagražinau, bravo! Taip sutaupiau daug laiko.

Kaip patekti į biblioteką?

Gavęs RHIDDemo projektą, skirtą Em::Blocks, kurį autorius maloniai paskelbė GitHub, pradėjau jį perkelti į Keil (mano FTDI pagrįstas CoLink derinimo įrankis; kas nors pasakykite man Coocox įskiepį, skirtą Em::Blocks). Bet aš tiesiog negalėjau suprasti: iš kur, po velnių, autorius gavo SPL 3.6.1 nuo 2012 m., jei svetainė paskelbė 3.5.0 nuo 2011 m.? Išgyvenau gana nuobodžią užduotį, kuri, mano nuostabai, atvedė... tiesiai į paruoštą „Keil“ pritaikytą HID projektą kaip USB FS 4.0.0 bibliotekos dalį. Guli matomoje vietoje, kaip pelė po šluota. Na, gerai. Bet pagaliau susipažinau su STMicroelectronics leidimais, radau STSW-STM32121 (UM0424) USB FS bibliotekos aprašymą ir sustabdžiau kūrėjo bandymus išvesti mane iš proto. Pasakyk man, ar normalu įdėti senovinį CMSIS 1.30 nuo 2009 į SPL 3.5.0 rinkinį nuo 2011 m., slėpti naują SPL 3.6.1 nuo 2012 USB-FS 4.0.0 nuo 2013 m (įdedant CMSIS 3.0.1 iš 2012 ir ten), nepaisant to, kad jie paskelbė Dabartinė versija CMSIS 3.30 2014 m. leidimas? Beje, SPL 3.6.x, skirta STM32F10X, buvo ištaisyta keletas USART klaidų, susijusių su buferio perpildymo signalais. Ačiū, bent jau jie paliko laidos pastabas...

HID vs SNMP

Taigi, ėmęsis STM32F103C8T6, taip pat nusprendžiau šiek tiek pasigilinti į USB HID temą, USB HID abstrakcija labai gerai įsilieja į visokių jutiklių, jutiklių ir kitų PWM valdomų maitinimo tvarkyklių koncepciją. Kažkaip tai man priminė SNMP, tik labai supaprastinta forma: HID deskriptoriai atlieka SNMP MIB vaidmenį. Kai įrenginį inicijuoja šeimininkas: „Sveiki, šeimininke! Aš esu kavos virimo aparatas. Turiu mygtuką [pradėti], [grietinėlės], [cukraus] valdiklius, [likęs kavos kiekis], [likęs vanduo], [likęs cukrus], [likęs grietinėlė]. Patraukite vairuotojus, paspauskite mygtuką, išgerkime kavos. Ar tau nieko neprimena? SNMP dialogo pavyzdys: „Na, sveiki, valdymo stotis su programine įranga už 100 000 USD. Ir aš turiu jungiklio važiuoklę už 200 000 USD ir turiu dar 4 modulius už 100 000 USD už vienetą; kiekvienas turi dar 16 prievadų, kurių greitis nepadorus, o visų funkcijų čia išvardyti tiesiog neįmanoma... dėl kiekvienos prekės teirautis atskirai; o, taip, procesoriaus apkrova yra tokia ir tokia, atmintis yra tokia ir tokia...“ Ir dar keliolika puslapių ta pačia dvasia.

Man patiko HID idėja. Bet kai tik palikau „Windows“ už mokomųjų užduočių, susijusių su mirksinčiais šviesos diodais (pirmyn į tikrą UNIX aplinką!), ji pradėjo skverbtis pro visus neužsandarintus plyšius ir jaučiausi kaip kažkoks bejėgis luošas. Derindamas projektą instinktyviai griebiau kažkokį tcpdump (taip jis vadinasi: usbdump(8) , arba usbmon), bet mačiau tik žinutes nepažįstama kalba.

Tapo akivaizdu: trūksta esminių žinių apie USB magistralę. Jei koks patyręs IT specialistas tiesiog iš reikalo supranta OSI modelį ir TCP/IP stacką kažkur nugaros smegenų lygyje, tai su USB situacija yra kitokia. Tai suprantama: ten galite (reikia) šnipinėti srautą per tą patį tcpdump ir konfigūruoti aparatinę bei programinę įrangą, tačiau čia viskas yra visiškai „plug and play“, ir jūs galite ką nors pataisyti atnaujindami tvarkyklę ar programinę įrangą (arba iš naujo įdiegdami OS). Bet mes čia susirinkome tik tam, kad sukurtume gerą programinę-aparatinę įrangą, tiesa? Perskaičiusi kai kuriuos USB aprašymus internete, nustebau, kokia paini gali būti dokumentacija. Netgi buvo toks jausmas, kad jie tyčia norėjo mus suklaidinti, skleisdami rūką ir atsikratydami konkurencijos. Aš nesutinku su tokia padėtimi!

Dar viena puiki schema

Internete aptikau dar vieną iliustraciją (ji buvo BMP formato, nejuokaujant):

Iš pradžių tai atrodo optimistiškai. Galiausiai rietuvė išardoma. Tačiau kadrai yra prastai pažymėti: brėžčiau juos vertikaliomis punktyrinėmis linijomis, o EOF yra tik pauzė, faktiškai duomenys neperduodami. Bet mes pradedame skaityti kontekstą ir prarandame supratimą apie tikrąjį autoriaus ketinimą (supainioti mus):

Sugeneruoja USB magistralės sąsajos pagrindinio kompiuterio valdiklis personalas;
Personalas perduodami serijiniu bitų perdavimu naudojant NRZI metodą.
Ir čia dar vienas:
kas rėmelis susideda iš aukščiausio prioriteto siuntinių, kurios sudėtį sudaro priimančioji vairuotojas;
kiekviena transliacija susideda iš vienos ar kelių operacijų;
kiekvienas sandoris susideda iš paketus;
kas plastikinis maišelis susideda iš paketo identifikatoriaus, duomenų (jei yra) ir kontrolinės sumos.

Atrodo, kad viskas nupiešta teisingai, bet skaitant klausimų vis daugėja. Ar minimali duomenų struktūra, perduodama magistrale, yra kadras ar paketas? Apskritai, ar turėtume žiūrėti iš viršaus į apačią ar atvirkščiai? O kas užkoduota naudojant NRZI metodą – kadrai, paketai ar tik visas bitų srautas magistralėje? Sandorius sudaro siuntinys, perdavimas, o gal koks nors vertingas siuntinys?
Kodėl tu negali tiesiog: ar pagrindinis kompiuteris sugrupuoja paketus į operacijas ir paskirsto juos į laiko pjūvius, vadinamus kadrais, kad suteiktų pirmenybę laikui svarbiems duomenims (vaizdo, garso) pagal esamą magistralės pralaidumą? Taip, USB turi niuansų planuojant paketų perdavimą, aš jų dar neliečiu.

Mano vizija apie USB kaminą

Manau, kad USB in a NutShell, paminėtas čia ant šakotuvo (hurray, vertimas), taip pat USB Made Simple yra gera dokumentacija. Remdamasis jais, surinkau savo USB kamino versiją, nupiešiu dar kartą.

Fizinis sluoksnis
Fiziniu lygiu diferencinės laidininkų poros elektrinių režimų rinkinys (kartu su įžeminimu) naudojamas būsenoms, kuriomis bitų srautas užkoduojamas naudojant NRZI metodą su bitų užpildymu, nurodyti: čia po šešių iš eilės „1“ ( na, norėjau perduoti, tarkim, 0xffff) „0“ įdėtas, kad imtuvas ilgai neužstrigtų vienoje būsenoje; Imtuvas A Nėra įterpto „0“ ir jie nebus skaičiuojami kaip duomenys; tai gana įprasta kodavimo technika, skirta geresniam automatiniam dažnių derinimui. Laidų pora kartu su įžeminimu leidžia suformuoti mažiausiai keturias statines būsenas (jos žymimos J, K, SE0, SE1). USB 2.0 SE1 nenaudojamas, o trys likę papildomai žaidžiami dinamikoje (su laikrodžiais ir perėjimais), kad būtų perduota dar keletas valdymo simbolių (paketo ribos, atstatymas, prijungimas/atjungimas, energijos taupymas/išėjimas). Gerų iliustracijų yra USB Made Simple 3 dalyje – duomenų srautas.
Tie. Dėl to duomenys perduodami nulių ir vienetų pavidalu, taip pat visokiais valdymo ženklais, kad iš visos šios elektrodinaminės virtuvės būtų galima paruošti įprastus duomenų paketus.
(pridėta skaitytojų pageidavimu)
Partijos lygis
Paketų lygiu beadresiai paketai perduodami tarp pagrindinio kompiuterio ir įrenginio (pora įrenginių, esančių pusiau dvipusėje linijoje, gali apsieiti be adresavimo). Paketą sudaro SYNC žymeklis, skirtas sinchronizuoti imtuvo laikrodį, baitų seka ir EOP simbolis. Paketo ilgis yra kintamas, bet derinamas per viršutinius krūvos lygius. Pirmasis baitas vadinamas Packet Identifier (PID), turi paprastą perteklinį formatą, skirtą atsparumui triukšmui, ir yra tinkamas tiekimui į kito lygio mašiną (operacijų surinkimui iš paketų). Paketai su užpildu (ilgesni nei vienas PID baitas) pateikiami su kontroline suma (trumpas CRC5 arba ilgas CRC16, priklausomai nuo paketo tipo). Protokolo analizatorius turėtų bent parodyti mums paketus.
Sandorio lygis
Kitame lygyje nuo paketus vyksta sandorius. Sandoris yra nedidelis paketų rinkinys (viso greičio USB 1, 2 arba 3), kurie griežtai seka vienas po kito, kuriais (pusdupleksiniu režimu) pagrindinis kompiuteris keičiasi su galutiniu tašku ir tik vienu. Labai svarbu, kad operaciją atidarytų tik pagrindinis kompiuteris; tai yra USB specifika (mums mažiau vargo su MK programine įranga). Sandorio lygmeniu galime kalbėti apie kanalas(vamzdis) tarp pagrindinio kompiuterio ir vieno iš įrenginio galinių taškų, bet aš sąmoningai vengiu termino „duomenų saitas“ iš OSI modelio. Protokolo analizatorius turi bent iššifruoti operacijas.
Pavaros lygis
Ant operacijų įdėsime pervedimų sluoksnį. USB jų yra keturių tipų: valdymo perdavimai su galutiniu tašku Nr. 0, pertraukimų perdavimai, izochroniniai perdavimai ir masiniai perdavimai. Paskutiniai trys yra srautinių kanalų (stream pipe) variantai, apie kuriuos pasakysiu keletą žodžių vėliau. Šiame lygyje taip pat turėtų būti rodomas geras protokolo analizatorius.
Taikymo sluoksnis
Kamino viršuje, kaip įprasta, yra taikymo sluoksnis. Čia nutinka: įrenginio adreso nustatymas pagrindinio kompiuterio, įrenginio pasakojimas apie save deskriptorių kalba, pagrindinio kompiuterio komandos konfigūracijai pasirinkti (valdymo perdavimai), keitimasis duomenimis su HID įrenginiais (pavyzdžiuose radau perdavimas su pertraukimais iki šiol, noriu išbandyti kontrolinį), spausdinimas spausdintuvu ir skenavimas, prieiga prie USB atmintinės (didelis blokas), bendravimas per ausines ir web kameras (izochroninis) ir daug kitų puikių dalykų.
Apdailos prisilietimas
Sekundei pašokdami lygius žemyn, galime pridurti, kad šeimininkas periodiškai meta tuos pačius Start of Frame (SOF) paketus per magistralę, laiką skirstydamas į vienodus intervalus, bet taip, kad nenutrauktų pačių operacijų. Todėl SOF paketai gali būti laikomi nepriklausomomis operacijomis. USB rėmelio nereikėtų painioti su OSI modelio duomenų ryšio sluoksnio homonimu. Geriau atsiminti garso kompaktinio disko kadrus (kadrus), tai tik laiko kvantas: pagrindinis kompiuteris „įsirašo“ į magistralę su SOF paketais, kad prijungti įrenginiai iš anksto planuotų dalyvauti vadinamajame. izochroninės transmisijos, valdydami duomenų srautus realiuoju laiku. Na, arba taip: operacijų grupes suplanuoja šeimininkas laiko intervalais, vadinamais kadrais. Kadras yra 1 ms naudojant „Full Speed“ ir 125 μs „High Speed ​​​​USB“, tačiau „High Speed“ yra sudėtingesnis standartas, todėl geriau jį ištirti atskirai.
UPD:
Gerą klausimą uždavė skaitytojai: o kaip su fragmentacija? Neradau jokių suskaidymo požymių USB 2.0 transakcijų lygiu ir žemiau, t.y. Sandoriai turi būti perduoti visos. Kai kuriais atvejais pervedimus galima ir reikia suskirstyti į kelias operacijas, ypač atsižvelgiant į izochroninius režimus. Ir pasikartosiu, kad kol kas už mus visą planavimą atsakingas šeimininkas (iš MK pusės turime mažiau galvoti).

Žiūrint į USB srautą

Geras iliustracijų pasirinkimas yra minėtos knygos USB Made Simple 5 skyriuje: www.usbmadesimple.co.uk/ums_5.htm

Štai vienas iš jų


Taigi operaciją visada inicijuoja pagrindinis kompiuteris, susijęs su vienu pasirinktu įrenginio galiniu tašku (be specialaus taško, kurio skaičius 0, viename įrenginyje jų gali būti iki 15, pavyzdžiui, kombinuotoje klaviatūroje su pelė, termometras, „flash drive“, kavos virimo aparatas ir skambinimo mygtukas santechniko užsakymui pica).
Jei pagrindinis kompiuteris gauna duomenis iš įrenginio, pastarasis pats negali atidaryti operacijos, o gali tik laukti tinkamas momentas ir jame dalyvauti. Pagrindinis kompiuteris atidaro operaciją į įrenginį su paketu su PID = IN (Token group) ir garantuoja magistralės laisvę reikiamam laikui, įrenginys įmeta paketą iš duomenų grupės, priklausomai nuo operacijos tipo, kompiuteris gali patvirtinti sėkmės su trečiuoju paketu iš Handshake grupės (ACK, NAK, STALL, NYET), sandoris uždarytas.
Siųsdamas duomenis į įrenginį (PID = OUT, Token group), šeimininkas atidaro transakciją, išsiunčia duomenų paketą (Data), o priklausomai nuo režimo gali gauti ir Handshake paketą, patvirtinantį operacijos sėkmę.
Pasibaigus operacijai, viskas grįš į normalią būseną, įrenginys vėl lauks valdymo paketų iš pagrindinio kompiuterio.

USB perdavimo režimai STM32 USB FS pavyzdžiuose

Norint vienu laidų porą kopijuoti iš disko kartu su garso ir vaizdo srautu, pelės gestais ir didelės spartos osciloskopo signalu, yra skirtingi tipaižinutes ir transliacijas.
Tiesiog aukščiau aš ką tik aprašiau paprastą transliacijos kanalas(Stream Pipe) tarp pagrindinio kompiuterio ir galinio taško, kur paketai su užpildymu (duomenų grupės) neperneša jokios specialios ar valdymo informacijos į patį USB posistemį. Visiška korespondencijos laisvė, valdiklio biblioteka turi pateikti primityvus savavališko dydžio buferiui atsisiųsti iš MK atminties į pagrindinį kompiuterį arba atgal. Leiskite MK bibliotekai kartu su pagrindine tvarkykle tvarkyti paketų pjaustymą, persiuntimą ir „defragmentavimą“. STM32 tai yra USB_SIL_Write() ir USB_SIL_Read(), aprašyti UM0424. Jie yra pats logiškas abstrakcijos lygis. Prieglobos pusėje žr. atitinkamos tvarkyklės aprašymą (pavyzdžiui, FreeBSD tai yra ugen(4)).
Tačiau aš laikau šventvagyste naudoti sunkius išorinius įrenginius, tokius kaip USB, norint organizuoti paprastą srautinio perdavimo kanalą (klausimas: kas negerai su USART?). Bet, žinoma, būna visokių situacijų.
Bet kuriuo atveju, norint, kad USB posistemis apskritai atgytų ir įrenginys būtų aptiktas, reikia keistis valdymo operacijomis.

ATSISAKYMAS

Kiti pavyzdžiai bus paminėti iš tos pačios UM0424 bibliotekos, skirtos darbui su Full Speed ​​​​USB iš STMicroelectronics, tačiau jie yra skirti jų vietinėms demonstracinėms plokštėms. Paimkite pavyzdį iš autorės Raja, parodykite inžinerinį išprusimą pritaikydami projektus savo demonstracinei lentai.

Dėl programinės įrangos viskas aišku: tai ne pramoniniam naudojimui skirti pavyzdžiai, gali būti klaidų, kai kurios dalys (pavyzdžiui, nuorodų lentelė masinės atminties pavyzdyje) yra apsaugotos patentu ir jūs neturite teisės jų naudoti komerciniame projekte. Bet tai nieko, kinai tada sugeba parduoti USB produktus rinkoje, kuriems net nesivargina pakeisti bibliotekos VID ir PID.

Dėl geležies, kaip suprantu, reikia pradėti nuo kvarco. Turiu Chelyabinsk PinBoard II su 12 MHz kvarcu (visos bibliotekos skirtos 8 MHz), pakeičiau PLL daugiklį nuo 9 į 6 (nuoroda su paaiškinimais), kitaip MK įsibėgės iki 108 MHz, o ne 72 MHz, o USB neis į 72 MHz vietoj reikalingų 48 MHz. Taip pat galite sulėtinti MK greitį iki 48 MHz, pakeisdami USB magistralės daliklį iš pusantro į vieną. Specialistai nemėgsta naudoti vidinio HSI MK generatoriaus: dėl šildymo dažnis gali šiek tiek nukrypti, o pasekmes USB sunku numatyti. Na, žinoma, nepamirškite apie periferiją. Be SPI / SDIO „flash“ atminties, iš didelės atminties pavyzdžio galite sukurti tik /dev/null analogą, bet negalite jo suformatuoti :-)

Valdykite perdavimus ir pranešimų kanalus
Galvodamas apie USB, prisimenu seną gerą PPP protokolą su jo LCP, IPCP, CCP ir taip pat xzCP. Ypatingo tipo pranešimų mainai tarp pagrindinio kompiuterio ir galinio taško Nr. 0 yra vietinis x3CP atitikmuo.
Per valdymo perdavimus įrenginys inicijuojamas, gauna adresą ir deskriptorių kalba apie save praneša pagrindiniam kompiuteriui (kad jis galėtų rasti ir suaktyvinti reikiamą tvarkyklę). Be valdymo operacijų paprastas srautinis perdavimas neveiks, jei įrenginys neatsako formoje, pagrindinis kompiuteris greitai išjungs prievadą: reikia laikytis protokolo.
Iš esmės protokolas nedraudžia kabintis valdymo taškas 0 ir duomenų mainai, panašūs į pertraukimo režimą. Tuo pačiu pagalvokite apie tai: kaip atnaujinsite MK programinę-aparatinę įrangą, taip sakant, lauke? Ar turite pasiruošę programuotoją? Yra ir kitas sprendimas.
Pavyzdys: Įrenginio programinės įrangos atnaujinimas
Pertrauktos transliacijos
Ši veislė ( nutraukti perdavimą) skirtas apsikeitimui nedideliais sandoriais, panašiais į kontrolinius. Ne, įrenginys negali pertraukti pagrindinio kompiuterio, jis laukia apklausos, jų dažnis ir paketų dydžiai yra iš anksto nurodyti įrenginio apraše. Puikiai tinka visų tipų nuotolinio valdymo pultams, jutikliams, pelėms, šviesos diodams ir kitiems HID kavos virimo aparatams. Kanalas su pertraukimais kiekviename taške yra vienakryptis.
Pavyzdžiai: Pasirinktinis HID, Vairasvirtės pelė, Virtualus COM prievadas
Izochroninės transmisijos
Χρόνος graikų kalba reiškia „laikas“. Izochroninė transmisija ( izochroninis perkėlimas) – vietinės aukštosios technologijos, leidžiančios valdyti duomenų srautus realiuoju laiku. Jame yra garantuotas (bet nebūtinai platus) pralaidumas ir jokių patvirtinančių operacijų, panašiai kaip UDP su QoS. Sugedusi pakuotė? Tai buvo dievas Chronos, kuris pastūmė MK ant kojos. Nereikia bandyti išsiųsti siuntos dar kartą, kitaip Dievas nusimins. Tačiau mes tyliai tikriname kontrolines sumas iš Chronos. Izochroniniai perdavimai tinka garso ir vaizdo bei realaus laiko matavimo sistemoms, taip pat kitiems žaislams dvejopo naudojimo. Nors kai kurie iš jų gali. Įdomiau pakabinti kokį nors AVR, prijungiant jį prie mūsų ARM per USART arba SPI. Izochroninės operacijos yra susijusios su kadrų signalizavimu (prisiminkite SOF paketo žymėjimą).
Pavyzdys: USB balso garsiakalbis
Didelio bloko transmisijos
Ne, cemento maišų nenešime. Manau, visi išmoko įvairių darbo režimų USB atmintinės. Pervedimai masinis perdavimas turi tikslą siųsti kuo daugiau duomenų ir kuo greičiau, visada perduodant sugedusius paketus, bet be garantijų dėl pralaidumo, prireikus atiduodant jį izochroniniam perdavimui (kaip TCP be QoS). APIE vidinė struktūra Jau kalbėjau apie USB atmintines, dabar galite atsisiųsti ir paleisti veikiantį prototipą. Pats nebandžiau, bet SCSI komandų lentelė pavyzdžio aprašyme (kaip beje) yra gana simbolinė. Neradau jokių NAND atminties nusidėvėjimo valdymo algoritmo požymių :-)
PASTABA: vietomis taikoma STM patentinė apsauga.
Pavyzdys: Masinė saugykla

Kas liko neatskleista

Neturiu tikslo daryti dar vieno vadovėlio USB, jų užtenka ir be manęs, ir jie puikiai aprašyti: elektrinė dalis, protokolo detalės, darbas su šakotuvais, deskriptorių kalba ir HID abstrakcijos lygis, problemos su VID/ PID unikalumas, USB 3.0 ir daug kitų nuostabių USB magistralės savybių, kai kurios mums naudingos, o kai kurios nelabai. IT specialistams ypač rekomenduoju ekskursiją į tamsiąją pusę su priešo įrenginių apžvalga (flash drive su užmaskuota HID klaviatūra, kuri darys baisius dalykus).

Nuorodos

Custom HID pavyzdžio pritaikymas nemokamai Em::Blocks aplinkai ir biudžetinei demonstracinei plokštei STM32F103C8T6, kurią gamina LC-Tech Industrial Electronics ir IT žmonės. Tai savotiška inžinerija Yin ir Yang, kiekvienas iš mūsų turime abiejų dalį.

Pramonės elektronikos inžinieriai turi puikių žinių ir įgūdžių aparatūros srityje, kaire ranka užmerktomis akimis lituoja iki plauko plonus radijo komponentus (ir tada jis veikia). Žiūrėti į elektroninė grandinė, beveik fiziškai pradeda jausti visas jo sroves su potencialais, jie taip pat dirba su maitinimo grandinėmis ir su (dideliais, greitais, pavojingais) pramoniniais gaminiais. MK programavimo metodas yra tinkamas: jis tiesiog turi išvesti reikiamus loginius lygius į tinkamas kojas tinkamu laiku, nesvarbu, kokiu būdu. Jie yra konservatyvūs technologijų atžvilgiu (nesikiškite - tai veikia), sunkieji MK periferiniai įrenginiai nėra ypač palankūs. Kai kalbame apie objektinį programavimą, informacijos saugumas, gigantiški projektai su milijonu kodo eilučių ir visokiomis įmantriomis grafinėmis sąsajomis darosi nuobodūs. Vietoj į paketus orientuotos USB magistralės jie renkasi USART srautinio perdavimo režimą, patobulintą arba įprastu RS-232, arba žiauresniu RS-485 (nuoseklioji magistralė pramoninėms reikmėms, iki 10 Mbit/s 15 m atstumu, iki 100 kbit/s 1200 m atstumu iki 32 įrenginių).

IT žmonės yra auklėjami suprasti Operacinės sistemos, tinklo infrastruktūra ir sudėtingos sąveikos, elitas puikiai išmano informacijos saugumą ir supranta visus nematomus būdus, kaip įsiskverbti į kažkieno sistemą. Kai kurie žmonės labai myli kates (kaip jų nemyli? Tačiau aš nelaikau, neauginu ir negaminu :-). Daugelis žmonių mėgsta informacijos laisvę, kritikuoja korporacijas/vyriausybes ir minties galia nugali gamtos jėgas. Jie yra patologiškai tingūs, tačiau mėgsta naujas technologijas ir susuktus inžinerinius galvosūkius su brangiais žaislais (geriausia išspręsti programinės įrangos arba, kraštutiniais atvejais, džemperių lygmeniu). Santykiai su lituokliu saugomi: neklauskite IT specialisto, ar jam patinka lituoklis, gali nesuprasti; Geriau paklauskite, ar jam patinka lituoti elektronines grandines.

apie ką aš kalbu? Tiesiog kitaip matome šį pasaulį... Juk Linux branduolys Tie patys vaikinai išpjaustė jį iš C modulių ir surinkėjų įdėklų konkrečioms platformoms, ir atrodė, kad jie apsieina be holivarų. Tikrai rimtą projektą matau kaip kelių branduolių sistemą, apjungiančią naujausius mikrovaldiklius su sunkiais periferiniais įrenginiais, tačiau neatmetu derinių su klasikiniais modeliais, tokiais kaip AVR: juose galima pakabinti kai kuriuos kritinius, greitai besisukančius technikos progreso ietigalius. Jei kodas buvo išbandytas metų metus, kodėl gi ne?

Pridėti žymes

USB (Universali serijinė magistralė- "universali nuoseklioji magistralė") - Serijinė sąsaja duomenų perdavimas vidutinio ir mažo greičio išoriniams įrenginiams.Jungimui naudojamas 4 laidų laidas, kurio du laidai naudojami duomenims priimti ir perduoti, o 2 laidai – išoriniam įrenginiui maitinti. Dėl įmontuotų linijų USB maitinimo šaltinis leidžia prijungti periferinius įrenginius be savo maitinimo šaltinio.

Pagrindinė informacija

USB kabelis susideda iš 4 varinių laidininkų - 2 maitinimo laidų ir 2 duomenų laidų vytos poros ir įžemintos pynimo (ekrano).

USB kabeliai turi fiziškai skirtingus patarimus „į įrenginį“ ir „prie pagrindinio kompiuterio“. Galima USB diegimas prietaisai be laido, su korpuse įmontuotu antgaliu „to-host“. Taip pat galima nuolat integruoti kabelį į įrenginį(pavyzdžiui, USB klaviatūra, interneto kamera, USB pelė), nors standartas tai draudžia pilnos ir didelės spartos įrenginiuose.

USB magistralė griežtai orientuotas, t. y. turi „pagrindinio įrenginio“ sąvoką (host, taip pat žinomas kaip USB valdiklis, paprastai įmontuotas į pietų tilto lustą pagrindinė plokštė) ir „išoriniai įrenginiai“.

Įrenginiai gali gauti +5 V maitinimą iš magistralės, tačiau gali prireikti ir išorinio maitinimo šaltinio. Budėjimo režimas taip pat palaikomas įrenginiams ir skirstytuvams gavus komandą iš magistralės, išjungiant pagrindinį maitinimą, išlaikant budėjimo režimą ir įjungiant jį gavus komandą iš magistralės.

USB palaikoĮrenginių prijungimas ir atjungimas karštu būdu. Tai įmanoma dėl padidėjusio įžeminimo kontaktinio laidininko ilgio, palyginti su signaliniais. Prisijungus USB jungtis yra pirmieji, kurie užsidaro įžeminimo kontaktai, abiejų įrenginių korpusų potencialai susilygsta ir tolesnis signalų laidų sujungimas nesukelia viršįtampių, net jei įrenginiai maitinami iš skirtingų trifazio elektros tinklo fazių.

Loginiame lygmenyje USB įrenginys palaiko duomenų gavimo ir perdavimo operacijas. Kiekviename kiekvienos operacijos pakete yra skaičius galutinis taškas prietaise. Kai įrenginys yra prijungtas, OS branduolio tvarkyklės nuskaito įrenginio galinių taškų sąrašą ir sukuria valdymo duomenų struktūras, kad galėtų susisiekti su kiekvienu įrenginio galiniu tašku. Galinių taškų ir duomenų struktūrų rinkimas OS branduolyje vadinamas vamzdis.

Galiniai taškai, taigi ir kanalai, priklauso vienai iš 4 klasių:

1) srautas (masinis),

2) vadovas (kontrolė),

3) izochroninis (isoch),

4) pertraukimas.

Mažo greičio įrenginiai, tokie kaip pelė, negali turėti izochroniniai ir srauto kanalai.

Valdymo kanalas skirtas trumpiems klausimų-atsakymų paketams keistis su įrenginiu. Bet kuris įrenginys turi valdymo kanalą 0, kuris leidžia programinė įranga OS skaitymas trumpa informacija apie įrenginį, įskaitant gamintojo ir modelio kodus, naudojamus tvarkyklei pasirinkti, ir kitų galinių taškų sąrašą.

Pertraukite kanalą leidžia pristatyti trumpus paketus į abi puses, nesulaukus atsakymo/patvirtinimo, tačiau su pristatymo laiko garantija – paketas bus pristatytas ne vėliau kaip per N milisekundžių. Pavyzdžiui, naudojamas įvesties įrenginiuose (klaviatūrose, pelėse ar vairasvirtėse).

Izochroninis kanalas leidžia pristatyti paketus be pristatymo garantijos ir be atsakymų/patvirtinimų, bet su garantuotu N paketų pristatymo greičiu per magistralės laikotarpį (1 KHz mažam ir visam greičiui, 8 KHz dideliam greičiui). Naudojamas garso ir vaizdo informacijai perduoti.

Srauto kanalas suteikia kiekvieno paketo pristatymo garantiją, palaiko automatinį duomenų perdavimo sustabdymą dėl įrenginio nenorėjimo (buferio perpildymo ar paleidimo), tačiau negarantuoja pristatymo greičio ir vėlavimo. Naudojamas, pavyzdžiui, spausdintuvuose ir skaitytuvuose.

Autobuso laikas yra padalintas į periodus, periodo pradžioje valdiklis perduoda „periodo pradžios“ paketą visai magistralei. Tada per laikotarpį siunčiami pertraukimo paketai, po to reikiamu kiekiu izochroniniai, likusį laikotarpį – kontroliniai paketai, o galiausiai – srautiniai paketai.

Aktyvioji autobuso pusė visada yra valdiklis, duomenų paketo perdavimas iš įrenginio į valdiklį įgyvendinamas kaip trumpas valdiklio klausimas ir ilgas atsakymas iš įrenginio, kuriame yra duomenys. Paketų judėjimo tvarkaraštį kiekvienam magistralės periodui kartu sukuria valdiklio aparatinė įranga ir tvarkyklės programinė įranga; tam daugelis valdiklių naudoja Tiesioginė prieiga prie atminties DMA (Tiesioginė prieiga prie atminties) - duomenų mainų tarp įrenginių arba tarp įrenginio ir pagrindinės atminties būdas be dalyvavimo Centrinis procesorius(CPU). Dėl to perdavimo greitis padidėja, nes duomenys nėra siunčiami pirmyn ir atgal į centrinį procesorių.

Galinio taško paketo dydis yra konstanta, įmontuota į įrenginio galinių taškų lentelę ir negali būti pakeista. Jį parenka įrenginio kūrėjas iš tų, kuriuos palaiko USB standartas.


Specifikacijos

USB galimybės:

Didelė perdavimo sparta (visos spartos signalizacijos bitų sparta) – 12 Mb/s
- Maksimalus laido ilgis esant dideliam perdavimo greičiui - 5 m
- Mažos spartos signalizacijos bitų sparta - 1,5 Mb/s
- Maksimalus kabelio ilgis esant mažam duomenų perdavimo greičiui - 3 m
- Maksimalus prijungtų įrenginių skaičius (įskaitant daugiklius) - 127
- Galima prijungti įrenginius su skirtingais duomenų perdavimo sparta
- Vartotojui nereikia diegti papildomų elementų, tokių kaip SCSI terminatoriai
- Išorinių įrenginių maitinimo įtampa - 5 V
- Maksimalus srovės suvartojimas vienam įrenginiui - 500 mA

USB 1.1 ir 2.0 jungčių laidai

USB signalai perduodami dviem ekranuoto keturių laidų kabelio laidais.

Čia :

GND- „dėklo“ grandinė, skirta išoriniams įrenginiams maitinti
V AUTOBUSAS- +5V taip pat maitinimo grandinėms
Padanga D+ skirtas duomenų perdavimui

Padanga D- gauti duomenis.

USB 2.0 trūkumai

Nors maksimalus perdavimo greitis USB duomenys 2.0 yra 480 Mbit/s (60 MB/s), realiame gyvenime tokius greičius pasiekti nerealu (praktikoje ~33,5 MB/s). Taip yra dėl didelio USB magistralės vėlavimo tarp užklausos dėl duomenų perdavimo ir faktinės perdavimo pradžios. Pavyzdžiui, „FireWire“, nors jos didžiausias pralaidumas yra mažesnis – 400 Mb/s, ty 80 Mb/s (10 MB/s) mažesnis nei USB 2.0, iš tikrųjų leidžia pasiekti didesnį duomenų perdavimo pralaidumą. kietieji diskai ir kiti informacijos saugojimo įrenginiai. Šiuo atžvilgiu įvairius mobiliuosius įrenginius jau seniai ribojo nepakankamas praktinis USB 2.0 pralaidumas.

Užtikrina duomenų mainus tarp pagrindinio kompiuterio ir įrenginio. Protokolo lygmeniu sprendžiamos tokios užduotys kaip perdavimo ir srauto valdymo patikimumo ir patikimumo užtikrinimas. Visas srautas USB magistrale perduodamas per operacijas; kiekvienoje operacijoje apsikeitimas galimas tik tarp pagrindinio kompiuterio ir adresuoto įrenginio (jo galinio taško).

Visos operacijos (keitimai) su USB įrenginiais susideda iš dviejų arba trijų paketų; tipinės paketų sekos operacijose parodytos Fig. 1. Kiekvieną operaciją suplanuoja ir inicijuoja pagrindinis valdiklis, kuris siunčia operacijos prieigos rakto paketą. Operacijos prieigos raktas apibūdina perdavimo tipą ir kryptį, pasirinkto USB įrenginio adresą ir galinio taško numerį. Prietaisas, kuriam skirtas žymeklis, atpažįsta savo adresą ir pasiruošia apsikeitimui. Žetonu identifikuotas duomenų šaltinis perduoda duomenų paketą. Šiuo metu operacijos, susijusios su izochroniniais pervedimais, baigiamos – nėra paketo gavimo patvirtinimo. Kitų tipų perdavimo atveju yra patvirtinimo mechanizmas, užtikrinantis garantuotą duomenų pristatymą. Paketų formatai parodyti pav. 2, pakuotės tipai pateikti lentelėje. Visuose paketo laukuose, išskyrus CRC lauką, pirmiausia perduodami mažiausiai reikšmingi bitai (laiko diagramose kairėje rodomas mažiausiai reikšmingas bitas). Paketas prasideda sinchronizavimo seka ir baigiasi terminatoriumi - EOP. Paketo tipas nustatomas pagal PID lauką. Likusių laukų paskirtis paaiškinta toliau. Sinchronizavimo ir EOP laukų ilgis nurodomas perdavimui naudojant FS/LS; didelės spartos perdavimo atveju laukas Sync išplečiamas iki 32 bitų intervalų, o EOP - iki 8 (SOF paketuose EOP laukas yra 40 bitų ).

Visi gauti paketai yra tikrinami, ar nėra klaidų, kaip leidžia priimti paketų formatai ir tam tikros sutartys:

  • paketas prasideda sinchronizavimo seka, po kurios nurodomas jo PID (paketo identifikatorius). Po identifikatoriaus seka atvirkštinė kopija – Patikrinkite. Dviejų kopijų neatitikimas laikomas klaidos požymiu;
  • Paketo turinys (visi paketo laukai, išskyrus PID ir EOP atributą) yra apsaugotas CRC kodu: 5 bitų žymeklio paketams, 16 bitų duomenų paketams. CRC, kuris neatitinka laukiamos vertės, laikomas klaida;
  • paketas baigiasi specialiu EOP signalu; Jei pakete yra ne sveikasis skaičius baitų, jis laikomas klaidingu. Klaidingas EOP, net ir ant baitų ribos, neleis priimti paketo dėl beveik neišvengiamos CRC klaidos šioje situacijoje;
  • Paketiniai duomenys į fizinį sluoksnį (į magistralę) perduodami naudojant bitų užpildymą (po šešių bitų įterpiamas nulis), kuris neleidžia prarasti bitų sinchronizacijos monotoninio signalo metu. Daugiau nei šešių vieno bitų gavimas iš eilės laikomas klaida (HS – kadro pabaigos ženklas).

Aptikus bet kurią iš šių klaidų pakete, imtuvas jį laiko negaliojančiu. Nei įrenginys, nei pagrindinis valdiklis nereaguoja į gautus paketus su klaida. Izochroninio perdavimo metu neteisingi paketiniai duomenys turėtų būti tiesiog ignoruojami (jie prarandami); Kitų tipų transmisijai naudojamos patikimą pristatymą užtikrinančios priemonės.

Norint aptikti, kad partneris neatsako į paketą, kiekvienas įrenginys turi skirtojo laiko skaitiklį, kuris nustoja laukti atsakymo praėjus tam tikram laikui. USB turi ribotą magistralės reiso laiką: laikas nuo sugeneruoto paketo EOP pabaigos iki atsakymo paketo gavimo pradžios. Galutiniam įrenginiui (ir pagrindinio kompiuterio valdikliui) didžiausias atsako delsa (atsakymo laikas) nuo matomo EOP pabaigos iki paketo pradžios įvedimo normalizuojama. Stebulių paketų perdavimo delsa normalizuojama, kabelių signalo sklidimo delsa normalizuojama. Laiko pabaigos skaitiklis turi atsižvelgti į maksimalų galimą vėlavimą esant galiojančiai magistralės konfigūracijai: iki 5 tarpinių šakotuvų, iki 5 metrų kiekvienas kabelis. Leidžiama skirtojo laiko reikšmė, išreikšta bitų intervalais (bt), priklauso nuo greičio:

  • FS/LS greičiui, vieno kabelio segmento įvestas delsimas yra mažas, palyginti su bitų intervalu (bt). Remiantis tuo, USB 1.0 leidžia apskaičiuoti leistiną delsą naudoja šį modelį. Kiekvienam kabelio segmentui skiriama 30 ns, o šakotuvui – 40 ns. Taigi, penki tarpiniai šakotuvai su jų kabeliais dvigubo apsisukimo metu įveda 700 ns vėlavimą, o tai atitinka maždaug 8,5 bt FS. FS įrenginiui atsako delsa neturėtų viršyti 6,5 bt (o atsižvelgiant į jo laidą - 7,5 bt). Remiantis tuo, specifikacijoje reikalaujama, kad FS siųstuvai naudotų 16–18 bt skirtojo laiko skaitiklį;
  • esant HS greičiui, vėlavimas kabelio segmente yra daug didesnis nei bitų intervalas, o USB 2.0 skaičiavimo modelis šiek tiek skiriasi. Čia kiekvienam kabelio segmentui skiriama 26 ns, o šakotukui – 4 ns plius 36 bt. Taigi, praėjimas per 6 kabelio segmentus du kartus (2 × 6 × 26 = 312 ns ≈ 150 bt) ir penkis šakotuvus (2 × 5 × 4 = 40 ns ≈ 19 bt plius 2 × 5 × 36 = 360 bt) užtrunka iki 529 bt . Įrenginio atsako delsa priimtina iki 192 bt, o bendras vėlavimas, atsižvelgiant į kabelius ir šakotuvus, bus iki 721 bt. Remiantis tuo, specifikacijoje reikalaujama, kad HS siųstuvai naudotų 736–816 bt skirtojo laiko skaitiklį.

Pagrindinis valdiklis turi savo klaidų skaitiklį, susietą su kiekvienu visų įrenginių galiniu tašku, kuris iš naujo nustatomas į nulį, kai suplanuojama kiekviena operacija. Šis skaitiklis skaičiuoja visas protokolo klaidas (įskaitant skirtojo laiko klaidas), o jei klaidų skaičius viršija slenkstį (3), tada kanalas su šiuo galutiniu tašku sustabdomas ir pranešama jo savininkui (įrenginio tvarkyklei arba USBD). Kol neviršijama slenkstis, pagrindinis kompiuteris apdoroja neizochroninių perdavimų klaidas, bandydamas iš naujo atlikti operacijas, nepranešdamas kliento programinei įrangai. Izochroniniai perdavimai nekartojami; pagrindinis kompiuteris nedelsiant praneša apie klaidas.

Rankų paspaudimo paketai naudojami patvirtinimui, srauto valdymui ir klaidų signalizavimui. Iš šių paketų pagrindinis valdiklis gali siųsti įrenginiui tik ACK paketą, patvirtinantį duomenų paketo priėmimą be klaidų. Įrenginys naudoja šiuos rankos paspaudimo paketus, kad atsakytų į pagrindinį kompiuterį:

ACK – patvirtinimas (teigiamas) apie sėkmingą išvesties arba valdymo operacijos atlikimą;
NAK - neigiamas patvirtinimas, yra ženklas, kad įrenginys nėra pasirengęs atlikti šią operaciją (nėra duomenų, kuriuos būtų galima perduoti pagrindiniam kompiuteriui, buferyje nėra vietos priėmimui, valdymo operacija nebaigta). Tai įprastas atsakymas, apie kurį niekas nežinos, išskyrus pagrindinio kompiuterio valdiklį, kuris vėliau yra priverstas pakartoti operaciją. Įvesties operacijose įrenginys pateikia NAK atsakymą, o ne duomenų paketą, jei jie nėra paruošti;
STALL yra rimtas klaidos pranešimas, reiškiantis, kad be specialaus programinės įrangos įsikišimo dirbti su šiuo galutiniu tašku tampa neįmanoma. Šis atsakymas perduodamas ir USBD tvarkyklei, kuri atšaukia tolesnes operacijas su šiuo tašku, ir kliento tvarkyklei, iš kurios programinės įrangos intervencija turėtų atblokuoti tašką. Valdymo operacijose (Control) STALL atsakymas reiškia nevykdomą šio prašymo; Taško atblokuoti nereikia.

Išvesties srauto valdymas, kuris remiasi tik galimybe atsakyti NAK, jei įrenginys neparengtas, yra labai neefektyvus magistralės pralaidumo panaudojimas: didelis duomenų paketas iššvaistomas magistralėje, siekiant užtikrinti, kad įrenginys neparengtas. Naudojant USB 2.0, šios problemos išvengiama atliekant masinio išdavimo ir valdymo operacijas naudojant Ping protokolą. Pagrindinis kompiuteris gali apklausti įrenginio pasirengimą gauti maksimalų paketo dydį, nusiųsdamas jam PING zondo prieigos raktą. Įrenginys gali atsakyti į šį prieigos raktą ACK (jei paruoštas) arba NAK (jei negali gauti didžiausio paketo dydžio). Neigiamas atsakymas privers šeimininką bandyti dar kartą vėliau, teigiamas atsakymas leis atlikti išvesties operaciją. Į išėmimo operaciją po teigiamo testo atsakymo įrenginio atsakymai yra įvairesni:

  • ACK reiškia sėkmingą priėmimą ir pasirengimą priimti kitą pilno dydžio paketą;
  • NYET reiškia sėkmingą priėmimą, bet nepasiruošimą kitam paketui;
  • NAK yra netikėtas atsakas (jis prieštarauja testo sėkmei), tačiau tai įmanoma, jei įrenginys staiga tampa laikinai nepasiekiamas.

Galinių taškų deskriptoriuose esantis didelės spartos įrenginys praneša apie galimą NAK siuntimų intensyvumą: masinio ir valdymo galinių taškų lauke bInterval nurodomas mikrokadrų skaičius NAK (0 reiškia, kad įrenginys niekada neatsakys NAK į išvesties operaciją).

Masyvas, pertraukimas ir valdymas užtikrina patikimą duomenų perdavimą. Sėkmingai gavęs paketą, duomenų imtuvas išsiunčia patvirtinimą – ACK patvirtinimo paketą. Jei duomenų imtuvas aptinka klaidą, paketas yra ignoruojamas ir į jį nesiunčiamas joks atsakymas. Duomenų šaltinis mano, kad kitas paketas buvo sėkmingai perduotas, kai gauna ACK iš imtuvo. Jei patvirtinimas negaunamas, kitos operacijos metu šaltinis pakartoja siųsdamas tą patį paketą. Tačiau patvirtinimo paketas gali būti prarastas dėl trukdžių; kad tokiu atveju pakartotinis imtuvo siuntimas paketo nebūtų suvokiamas kaip kita duomenų dalis, duomenų paketai sunumeruojami. Numeravimas yra modulo 2 (1 bito numeris): paketai skirstomi į lyginius (su identifikatoriumi DATA0) ir nelyginius (DATA1). Kiekvienam galutiniam taškui (išskyrus izochroninį) pagrindinis kompiuteris ir įrenginys turi perjungimo bitus, jų pradinės būsenos vienaip ar kitaip yra nuoseklios. IN ir OUT operacijos perduoda ir laukia duomenų paketų su identifikatoriais DATA0 arba DATA1, atitinkančiais esamą šių bitų būseną. Duomenų imtuvas perjungia savo bitą be klaidų priimant duomenis su laukiamu identifikatoriumi, duomenų šaltinis persijungia gavęs patvirtinimą. Jei imtuvas gauna paketą be klaidų su netikėtu ID, jis siunčia ACK, bet nepaiso pakete esančių duomenų, nes paketas yra jau gautų duomenų pakartotinis siuntimas.

Sandoriai už įvairių tipų perdavimo protokolai skiriasi dėl pralaidumo, atsako laiko, pristatymo patikimumo ir įvesties bei išvesties sinchronizavimo garantijos arba negarantijos. Priklausomai nuo šių charakteristikų, operacijose naudojamas vienas ar kitas aukščiau aprašytas protokolo mechanizmas. Atminkite, kad perdavimo klaidų aptikimas veikia visose operacijose, todėl per klaidą gauti duomenys visada yra ignoruojami. Kokie protokolo mechanizmai naudojami atliekant dabartinę operaciją, „žino“ ir pagrindinio kompiuterio valdiklis (remiantis anksčiau gautu galutinio taško aprašu), ir USB įrenginys, kuriame šis galutinis taškas yra įdiegtas.

Izochroniniai sandoriai užtikrina garantuotus valiutos keitimo kursus, bet neužtikrina patikimo pristatymo. Dėl šios priežasties protokole nėra patvirtinimų, nes paketų atkūrimas sukels duomenų perdavimo planų nesėkmę. Nėra patvirtinimu pagrįsto srauto valdymo – įrenginys turi palaikyti srauto greitį, nurodytą izochroniniame galutinio taško apraše.

Izochroninės išvesties operacijos susideda iš dviejų paketų, kuriuos siunčia pagrindinis valdiklis, OUT prieigos rakto ir DATA duomenų paketo. Vykdydamas įvesties operaciją, pagrindinis kompiuteris siunčia IN prieigos raktą, į kurį įrenginys atsako duomenų paketu, kurio duomenų lauko ilgis gali būti lygus nuliui (jei nėra paruoštų duomenų). Bet koks kitas įrenginio atsakas (taip pat ir „tyla“) pagrindinio kompiuterio laikomas klaida, dėl kurios šis kanalas sustabdomas.

Naudojant izochroninį keitimą, galima kontroliuoti patikimumą (atmesti paketus su klaidomis) ir duomenų vientisumą (nustatyti trūkstamo paketo faktą). Vientisumo kontrolė pagrįsta griežtu valiutos kurso determinizmu – pagal jo aprašą taškas tikisi sandorio su 2bInterval-1 mikrokadrų periodu. Tipiškam izochroniniam galutiniam taškui viename mikrokadre galima tik viena operacija, o klaida priimant paketą negauna jokių gautų duomenų mikrokadre, kuriame jų tikėtasi. Taigi, paketų numeravimas (Toggle Bit jungiklis) nereikalingas. Viso greičio įrenginiai ir pagrindiniai valdikliai turėtų siųsti tik DATA01 tipo paketus. Plačiajuosčio ryšio izochroniniams galiniams taškams (USB 2.0) kiekviename mikrokadre galima perduoti iki trijų duomenų paketų. Bet kuris iš šių paketų gali būti prarastas, todėl norint aptikti šią situaciją, reikalingas paketų numeravimas mikrokadre. Šiai numeracijai buvo pristatyti du nauji duomenų paketų tipai: DATA2 ir MDATA. Paketų tipų įvairovė, be numeracijos, taip pat leidžia informuoti komunikacijos partnerį apie jūsų planus dėl konkretaus mikrokadro. IN operacijose įrenginys pagal paketo identifikatorių nurodo, kiek dar paketų ketina išleisti tame pačiame mikrokadre, o tai leidžia pagrindiniam kompiuteriui išvengti nereikalingų įvesties bandymų. Taigi, jei vienas paketas perduodamas mikrokadre, tai bus DATA0; jei du, seka bus DATA1, DATA0; trys - DATA2, DATA1, DATA0. OUT operacijos naudoja MDATA (daugiau duomenų) paketą, kad išvestų ne paskutinį paketą mikrokadrelyje, o paskutinio paketo identifikatorius rodo, kiek paketų buvo perduota prieš jį. Taigi, su viena išvesties operacija naudojamas DATA0 paketas, su dviem - seka MDATA, DATA1, su trimis - MDATA, MDATA, DATA2. Visoms operacijoms, išskyrus paskutinę mikrokadre, turi būti naudojamas maksimalus paketo dydis. Atminkite, kad kitos operacijos gali būti įtrauktos tarp plačiajuosčio ryšio operacijų mikrokadre.