USB interfejs: opis i osnove interfejs uređaja. Protokol USB magistrale USB 2.0 protokol

10.09.2021
  • Mini-B konektor ECN: Obaveštenje izdato oktobra 2000.
  • Greška, od decembra 2000: Obavijest izdata decembra 2000.
  • Pull-up/Pull-down otpornici ECN
  • Errata, od maja 2002: Obavijest izdata u maju 2002.
  • Asocijacije interfejsa ECN: Obavijest izdata u maju 2003.
    • Dodati su novi standardi kako bi se omogućilo povezivanje više sučelja s jednom funkcijom uređaja.
  • Zaobljena ivica ECN: Obaveštenje izdato oktobra 2003.
  • Unicode ECN: Obaveštenje izdato februara 2005.
    • Ovaj ECN specificira da su stringovi kodirani korištenjem UTF-16LE.
  • Inter-Chip USB dodatak: Obaveštenje izdato marta 2006.
  • On-The-Go dodatak 1.3: Obaveštenje izdato decembra 2006.
    • USB On-The-Go omogućava da dva USB uređaja međusobno komuniciraju bez zasebnog USB hosta. U praksi, jedan od uređaja djeluje kao domaćin za drugi.

USB OTG

USB 3.0

USB 3.0 je u završnoj fazi razvoja. Sljedeće kompanije razvijaju USB 3.0: Microsoft, Texas Instruments, NXP Semiconductors. IN USB specifikacije 3.0 konektori i kablovi ažuriranog standarda biće fizički i funkcionalno kompatibilni sa USB 2.0. USB kabl 2.0 sadrži četiri linije - par za prijem/prenos podataka, jedan za napajanje i još jedan za uzemljenje. Pored ovih, USB 3.0 dodaje pet novih linija (što rezultira mnogo debljim kablom), ali novi pinovi se nalaze paralelno sa starim u drugom redu pinova. Sada možete lako utvrditi pripada li kabel jednoj ili drugoj verziji standarda, jednostavno gledajući njegov konektor. USB 3.0 specifikacija je poboljšana maksimalna brzina prijenos informacija do 4,8 Gbit/s – što je za red veličine veće od 480 Mbit/s koje USB 2.0 može pružiti. USB 3.0 se može pohvaliti ne samo većim brzinama prijenosa podataka, već i povećanom strujom sa 500 mA na 900 mA. Od sada korisnik ne samo da će moći da napaja mnogo veći broj uređaja iz jednog čvorišta, već će ih se sam hardver, koji je ranije isporučivan sa zasebnim izvorima napajanja, rešiti.


Ovdje je GND "kućište" kolo za napajanje perifernih uređaja, VBus je +5 V, također i za strujna kola. Podaci se prenose različito kroz D+ i D− žice (stanja 0 i 1 (u terminologiji službene dokumentacije diff0 i diff1, respektivno) određena su potencijalnom razlikom između vodova većom od 0,2 V i pod uslovom da je na jednom od potencijal linija (D− u slučaju diff0 i D+ na diff1) u odnosu na GND je veći od 2,8 V. Metod diferencijalnog prenosa je glavni, ali ne i jedini (na primer, tokom inicijalizacije, uređaj obaveštava host o načinu rada koji uređaj podržava (Full-Speed ​​ili Low-Speed) povlačenjem podataka jedne od linija na V_BUS kroz otpornik od 1,5 kOhm (D− za Low-Speed ​​mod i D+ za Full-Speed U ovom režimu, uređaji koji rade u režimu visoke brzine ponašaju se kao uređaji u režimu pune brzine.

USB 3.0 tip B konektor

USB 3.0 konektor tip A

USB 3.0 kablovi i konektori

Nedostaci USB-a

Iako je vršna propusnost USB 2.0 480 Mbps (60 MB/s), u praksi je moguće postići propusnost, blizu vrha, ne uspijeva. To je zbog prilično velikih kašnjenja USB magistrala između zahtjeva za prijenos podataka i stvarnog početka prijenosa. Na primjer, FireWire sabirnica, iako ima nižu vršnu propusnost od 400 Mbps, što je 80 Mbps manje od USB 2.0, zapravo omogućava veću propusnost za razmjenu podataka sa tvrdi diskovi i drugi uređaji za skladištenje informacija.

USB i FireWire/1394

USB protokol za pohranu, koji je metoda za prijenos naredbi

Pored toga, USB memorija nije bila podržana u starijim operativnim sistemima (originalni Windows 98) i zahtevala je instalaciju drajvera. U njima je podržan i SBP-2. Takođe, u starijim operativnim sistemima (Windows 2000), USB protokol za skladištenje je implementiran u skraćenom obliku, što nije dozvoljavalo upotrebu funkcije narezivanja CD-a/DVD-a na spojenom USB drajvu SBP-2.

USB magistrala je strogo orijentisana, tako da je za povezivanje 2 računara ili 2 periferna uređaja potrebna dodatna oprema. Neki proizvođači podržavaju povezivanje štampača i skenera, ili kamere i štampača, ali ove implementacije su veoma specifične za proizvođača i nisu standardizovane. 1394/FireWire sabirnica ne podliježe ovom nedostatku (možete spojiti 2 video kamere).

Međutim, zbog Appleove politike licenciranja, kao i mnogo veće složenosti hardvera, 1394 je manje uobičajen. matične ploče stariji računari nemaju 1394 kontrolera. Što se tiče perifernih uređaja, 1394 podrška se obično ne nalazi ni u čemu osim u kamkorderima i kućištima fotoaparata. eksterno tvrdo diskove i CD/DVD drajvove.

Vidi također

  • FireWire
  • TransferJet

Izvori

Linkovi

  • USB vijesti (njemački)

Brzina prijenosa signala velike brzine - 12 Mb/s - Maksimalna dužina kabla za veliku brzinu prijenosa signala - 5 m - Brzina prijenosa signala male brzine - 1,5 Mb/s - Maksimalna dužina kabela za brzinu prijenosa signala male brzine - 3 m - Maksimalan broj priključenih uređaja (uključujući multiplikatore) - 127 - Moguće je povezati uređaje sa različitim brzinama prijenosa - Nema potrebe da korisnik instalira dodatne elemente kao što su terminatori za SCSI - Napon napajanja za periferne uređaje - 5 V - Maksimalna potrošnja struje po uređaju - 500 mA

Ožičenje USB 1.1 i 2.0 konektora

USB signali se prenose preko dvije žice oklopljenog četverožičnog kabela.

Evo :

GND- krug “kućica” za napajanje perifernih uređaja V BUS- +5V i za strujna kola sabirnice D+ dizajniran za prenos podataka

Tire D- za primanje podataka.

Nedostaci usb 2.0

Iako je maksimalna brzina prijenosa podataka USB 2.0 480 Mbps (60 MB/s), u stvarnom životu je nerealno postići takve brzine (~33,5 MB/s u praksi). To je zbog velikih kašnjenja na USB magistrali između zahtjeva za prijenos podataka i stvarnog početka prijenosa. Na primjer, FireWire sabirnica, iako ima nižu vršnu propusnost od 400 Mbps, što je 80 Mbps (10 MB/s) manje od USB 2.0, zapravo omogućava veću propusnost za razmjenu podataka sa tvrdim diskovima i drugim uređajima za pohranu uređaja. U tom smislu, različiti mobilni diskovi su dugo bili ograničeni nedovoljnom praktičnom propusnošću USB 2.0.

Najznačajnija prednost USB 3.0 je njegova veća brzina (do 5 Gbps), koja je 10 puta brža od starijeg porta. Novi interfejs je poboljšao uštedu energije. Ovo omogućava pogonu da pređe u stanje mirovanja kada se ne koristi. Moguće je izvršiti dvosmjerni prijenos podataka u isto vrijeme. Ovo će dati više velike brzine, ako povežete više uređaja na jedan port (razdvojite port). Možete granati pomoću čvorišta (hub je uređaj koji se grana sa jednog porta na 3-6 portova). Sada, ako povežete hub na USB 3.0 port, i povežete nekoliko uređaja (na primjer, fleš diskova) na čvorište i izvršite simultani prijenos podataka, vidjet ćete da će brzina biti mnogo veća nego što je bila s USB-om 2.0 interfejs. Postoji karakteristika koja može biti i plus i minus. USB 3.0 interfejs je povećao struju na 900 mA, a USB 2.0 radi sa strujom od 500 mA. Ovo će biti plus za one uređaje koji su prilagođeni za USB 3.0, ali mali minus je što može postojati rizik prilikom punjenja slabijih uređaja, poput telefona. Fizički nedostatak novog interfejsa je veličina kabla. Da bi se održala velika brzina, kabl je postao deblji i kraći (ne može biti duži od 3 metra) od USB 2.0. Važno je napomenuti da će uređaji sa različitim USB interfejsima rad dobro i ne bi trebalo da bude problem. Ali nemojte misliti da će se brzina povećati ako povežete USB 3.0 na stariji port ili povežete stariji interfejs kabl na novi port. Brzina prijenosa podataka bit će jednaka brzini najslabijeg porta.

  • Tutorial

Ilustrovana projekcija OSI mrežnog modela na univerzalnu serijsku magistralu.

Tri "izvanredna" nivoa USB steka

Nisam bio zadovoljan izgledom USB steka koji se najčešće može naći na internetu:

Nije baš koristan USB stog


Nivo magistrale, logičan, funkcionalan... Ovo su, naravno, divne apstrakcije, ali su vjerovatnije za one koji će napraviti drajver ili aplikativni softver za host. Na strani mikrokontrolera očekujem šablonsku mašinu konačnog stanja, u čije čvorove obično ugrađujemo naš korisni kod, a u početku će, po svim zakonima žanra, propasti. Ili će softver na hostu biti kvar. Ili vozač. U svakom slučaju, neko će propasti. Takođe je nemoguće odmah otkriti MK biblioteke. I tako analiziram promet na USB magistrali, gdje se događaji koji se odvijaju na nepoznatom jeziku sa tri divna nivoa nikako ne uklapaju. Pitam se da li imam takav nesklad u glavi zbog gripe?

Ako je čitalac imao slične osjećaje, nudim alternativnu viziju USB steka, koja mi se odjednom učinila jasnom u mom pregrijanom mozgu, zasnovanu na voljenom 7-slojnom OSI modelu. Ograničio sam se na pet nivoa:

Ne želim reći da su svi softveri i biblioteke već napravljeni ili bi trebali biti dizajnirani na osnovu ovog modela. Iz inženjerskih razloga, kod sa nivoima će biti u velikoj meri izmešan. Ali želim pomoći onima koji počinju svoje upoznavanje sa USB magistralom, koji žele razumjeti protokole za razmjenu uređaja i terminologiju predmetne oblasti, da se približe gotovi primjeri, biblioteke i bolje se kretati po njima. Ovaj model nije za učitavanje u MK, već u vaše briljantne umove, dragi prijatelji. A onda će tvoje zlatne ruke sve same uraditi, ne sumnjam :)

Dakle, idemo, ispravite ako vidite greške. Ovo je radna verzija, a ako je ovako nešto već negde nacrtano, oprostite, nisam mogao da nađem, pa sam napravio sam. Mislim da slika neće pobjeći, ali za sada ću uglednoj javnosti objasniti zašto sam uopće pokrenuo ovu publikaciju.

Još jedan flešbek iz devedesetih

Svoju prvu grešku izbacio sam iz tuđeg koda kasnih devedesetih, dok sam radio kao student kao student. Bio je to pppd za FreeBSD, koji smo zatim instalirali na skup modema. Motorola modemi su bili zaglavljeni na prekidu, niko nije mogao da prođe, linija je izgubljena uzalud, a jedini preostali metod putem PPP-a je bio iz nekog razloga greška. Tada sam saznao da je pppd iz nekog razloga čekao šest bajtova LCP odgovora umjesto potrebna četiri. Tada sam se osećao tako ludo bug shaker iz devedesetih :-) Kakve veze ima JPP? Jednostavno je sličan USB-u: paketni i point-to-point. Istina, za razliku od USB 2.0, on je pun dupleks.


Sviđalo nam se to ili ne, evolucija mikrokontrolera očigledno neće stati. Ne, ne, i pojavit će se u publikacijama (http://habrahabr.ru/post/208026/, http://habrahabr.ru/post/233391/) “teške periferije” - implementacije USB sabirnice ugrađene u MK, sa primjerima analize, korištenjem HID-a, itd. Moramo odati počast autoru RaJa: od osam primjera navedenih u standardna biblioteka STSW-STM32121 (UM0424) i nekako je odabrao najkorisniji (Custom HID), prenio ga u besplatno Em::Blocks okruženje, ocrtao jasnim jezikom, malo uljepšao, bravo! Ovo mi je uštedelo mnogo vremena.

Kako doći do biblioteke?

Pošto sam primio RHIDDemo projekat za Em::Blocks koji je autor ljubazno objavio na GitHub-u, počeo sam da ga prenosim na Keil (moj FTDI-bazirani CoLink debuger; neko mi kaže Coocox dodatak za Em::Blocks). Ali jednostavno nisam mogao razumjeti: gdje je, dovraga, autor dobio SPL 3.6.1 iz 2012, ako je stranica objavila 3.5.0 iz 2011? Prošao sam kroz prilično dosadnu potragu, koja je na moje iznenađenje dovela... pravo do gotovog Custom HID projekta za Keila kao dijela USB FS 4.0.0 biblioteke. Leži na vidiku, kao miš pod metlom. Oh dobro. Ali konačno sam došao do STMicroelectronics izdanja, pronašao opis STSW-STM32121 (UM0424) USB FS biblioteke i zaustavio pokušaje programera da me izludi. Reci mi, da li je normalno staviti starinski CMSIS 1.30 iz 2009. godine u SPL 3.5.0 set iz 2011. godine, sakriti novi SPL 3.6.1 iz 2012. godine u USB-FS 4.0.0 iz 2013. (stavljanje CMSIS 3.0.1 iz 2012. godine u 2012. godinu). i tamo), uprkos činjenici da su objavili trenutna verzija CMSIS 3.30 izdanje 2014? Inače, u SPL 3.6.x za STM32F10X, ispravljeno je nekoliko grešaka sa USART-om u vezi sa signalima prekoračenja bafera. Hvala, barem su ostavili bilješke o izdanju...

HID vs SNMP

Dakle, nakon što sam preuzeo STM32F103C8T6, odlučio sam i da se malo udubim u temu USB HID, USB HID apstrakcija se vrlo dobro uklapa u koncept svih vrsta senzora, senzora i drugih PWM-kontroliranih drajvera napajanja. Nekako me to podsjetilo na SNMP, samo u znatno pojednostavljenom obliku: HID deskriptori igraju ulogu SNMP MIB-a. Kada uređaj inicijalizira domaćin: “Zdravo, domaćine! Ja sam aparat za kafu. Imam dugme [start], [krema], [šećer] kontrole, [preostala kafa], [preostala voda], [preostalo šećera], [preostalo vrhnja]. Povucite vozače, pritisnite dugme, idemo na kafu.” Ne podsjeća te ni na šta? Primjer SNMP dijaloga: „Pa, zdravo, upravljačka stanica sa softverom za 100.000 dolara. I imam šasiju prekidača za 200.000 dolara, i imam još 4 modula na njoj za 100.000 dolara po komadu; svaki ima još 16 portova nepristojne brzine, i jednostavno je nemoguće navesti sve funkcije ovdje... pitajte posebno za svaku stavku; o, da, opterećenje procesora je takvo-i-tako, memorija je takva-i-takva...” I još desetak stranica u istom duhu.

Svidjela mi se ideja HID-a. Ali čim sam ostavio Windows izvan obrazovnih zadataka treperenja LED dioda (naprijed u prava UNIX okruženja!), počeo je da prodire kroz sve nezapečaćene pukotine i osjećao sam se kao neka vrsta bespomoćnog hroma. Dok sam ispravljao greške u projektu, instinktivno sam zgrabio neku vrstu tcpdump (tako se zove: usbdump(8) ili usbmon), ali sam vidio samo poruke na nepoznatom jeziku.

Postalo je očigledno: nedostaje osnovno znanje o USB magistrali. Ako bilo koji iskusni IT stručnjak razumije OSI model i TCP/IP stek negdje na nivou kičmene moždine jednostavno iz potrebe, onda je s USB-om situacija drugačija. To je i razumljivo: tamo možete (trebati) špijunirati promet kroz isti tcpdump i konfigurirati hardver i softver, ali ovdje je potpuno plug and play, a možete popraviti nešto ažuriranjem drajvera ili firmvera (ili ponovnom instalacijom OS). Ali mi smo se okupili ovdje samo da napravimo dobar firmver, zar ne? Nakon što sam pročitao neke USB opise na internetu, bio sam iznenađen koliko zbunjujuća dokumentacija može biti. Imao sam čak i osjećaj da su nas namjerno htjeli odvesti na krivi put širenjem magle i rješavanjem konkurencije u korijenu. Ne slažem se sa ovakvim stanjem stvari!

Još jedna odlična šema

Na internetu sam naišao na još jednu ilustraciju (bila je u BMP formatu, bez šale):

Na prvi pogled izgleda optimistično. Na kraju, stek se rastavlja. Okviri su, međutim, slabo označeni: nacrtao bih ih vertikalnim isprekidanim linijama, a EOF je samo pauza, nikakvi podaci se zapravo ne prenose. Ali počinjemo čitati kontekst i gubimo razumijevanje autorove prave namjere (da nas zbuni):

Sučelje USB sabirnice host kontroler generiše osoblje;
Osoblje prenosi serijskim prijenosom bitova korištenjem NRZI metode.
A evo još jednog:
svaki okvir sastoji se od najvišeg prioriteta parcele, čiji sastav formira glavni vozač;
svaki emitovanje sastoji se od jedne ili više transakcija;
svaka transakcija se sastoji od paketi;
svaki plastična vrećica sastoji se od identifikatora paketa, podataka (ako ih ima) i kontrolne sume.

Čini se da je sve ispravno nacrtano, ali kako čitate pitanja postaju sve više. Da li je minimalna struktura podataka koja se prenosi na magistralu okvir ili paket? Općenito, treba li gledati odozgo prema dolje ili obrnuto? A šta je kodirano pomoću NRZI metode - okviri, paketi ili samo cijeli bit stream na magistrali? Transakcije se sastoje od paketa, prijenosa ili možda neke vrste vrijednosnog paketa?
Zašto ne možeš jednostavno: da li domaćin grupiše pakete u transakcije i distribuira ih u vremenske isječke zvane okviri da bi dao prioritet vremenski kritičnim podacima (video, audio) na osnovu trenutnog propusnog opsega magistrale? Da, USB ima nijanse sa zakazivanjem prijenosa paketa, još ih ne diram.

Moja vizija USB steka

Smatram da su USB in a NutShell spomenut ovdje na čvorištu (ura, prijevod), kao i USB Made Simple, dobra dokumentacija. Na osnovu njih sam sastavio svoju verziju USB steka, nacrtaću je ponovo.

Fizički sloj
Na fizičkom nivou, skup električnih modova diferencijalnog para vodiča (zajedno sa uzemljenjem) koristi se za označavanje stanja s kojima je tok bitova kodiran pomoću NRZI metode sa punjenjem bitova: ovdje nakon šest uzastopnih "1s" ( pa, htio sam prenijeti, recimo, 0xffff) “0” je umetnuto tako da prijemnik ne ostane dugo zaglavljen u jednom stanju; prijemnik A Nema umetnute "0" i neće se računati kao podaci; ovo je prilično uobičajena tehnika kodiranja za bolje automatsko podešavanje frekvencija. Par žica zajedno sa zemljom omogućava formiranje najmanje četiri statička stanja (označena su J, K, SE0, SE1). U USB 2.0 SE1 se ne koristi, a tri preostala se dodatno reprodukuju u dinamici (sa taktovima i prelazima) za prenos još nekoliko kontrolnih karaktera (granice paketa, resetovanje, povezivanje/isključivanje, ušteda energije/izlaz). Postoje dobre ilustracije u USB Made Simple, Dio 3 - Protok podataka.
One. Kao rezultat, podaci se prenose u obliku nula i jedinica, plus sve vrste kontrolnih znakova, tako da se normalni paketi podataka mogu pripremiti iz cijele ove elektrodinamičke kuhinje.
(dodato na zahtjev čitalaca)
Nivo serije
Na nivou paketa, paketi bez adrese se prenose između hosta i uređaja (par uređaja na poludupleks liniji može bez adresiranja). Paket se sastoji od SYNC markera za sinhronizaciju sata prijemnika, niza bajtova i EOP karaktera. Dužina paketa je promjenjiva, ali se dogovara preko gornjih nivoa steka. Prvi bajt se zove Packet Identifier (PID), ima jednostavan redundantni format za otpornost na buku i pogodan je za napajanje mašini sledećeg nivoa (za sklapanje transakcija iz paketa). Paketi sa punjenjem (duži od jednog PID bajta) se isporučuju sa kontrolnom sumom (kratak CRC5 ili dug CRC16, u zavisnosti od tipa paketa). Analizator protokola bi trebao, u najmanju ruku, da nam pokaže pakete.
Nivo transakcije
Na sledećem nivou od paketi idu transakcije. Transakcija je mali skup paketa (u Full Speed ​​USB 1, 2 ili 3), koji slijede striktno jedan za drugim, koje (u poludupleksnom načinu) host razmjenjuje sa krajnjom točkom, i to samo jednim. Veoma je važno da samo domaćin otvara transakciju, ovo je specifičnost USB-a (manje je problema za nas u MK firmveru). Na nivou transakcije možemo razgovarati kanal(cijev) između hosta i jedne od krajnjih tačaka uređaja, ali namjerno izbjegavam termin "Data Link" iz OSI modela. Analizator protokola mora barem dekodirati transakcije.
Nivo brzine
Povrh transakcija postavićemo sloj transfera. Postoje četiri tipa njih u USB-u: kontrolni transferi sa krajnjom tačkom br. 0, transferi prekida, izohroni transferi i masovni transferi. Posljednje tri su varijante streaming kanala (stream pipe), o kojima ću reći nekoliko riječi kasnije. Ovaj nivo bi takođe trebao prikazati dobar analizator protokola.
Aplikacioni sloj
Na vrhu steka, kao i obično, nalazi se sloj aplikacije. Ono što se ovdje događa je: postavljanje adrese uređaja od strane hosta, pričanje uređaja o sebi na jeziku deskriptora, naredbe hosta za odabir konfiguracije (kontrolni prijenosi), razmjena podataka sa HID uređajima (u primjerima koje sam pronašao prenos sa prekidima do sada, hoću da isprobam kontrolni), štampanje na štampaču i skeniranje, pristup USB memoriji (veliki blok), komunikacija preko slušalica i web kamera (izohron) i mnoge druge sjajne stvari.
Završni dodir
Skačući nivoe na sekundu, možemo dodati da host periodično baca te iste pakete Start of Frame (SOF) preko magistrale, dijeleći vrijeme na jednake intervale, ali na način da ne prekida same transakcije. Stoga se SOF paketi mogu smatrati nezavisnim transakcijama. USB okvir ne treba brkati sa homonimom za sloj veze podataka OSI modela. Bolje je zapamtiti okvire (frame) audio CD-a, ovo je samo kvantum vremena: host „ubacuje“ u sabirnicu sa SOF paketima tako da povezani uređaji unaprijed planiraju učešće u tzv. izohroni prenosi, pokrećući tokove podataka u realnom vremenu. Pa, ili ovako: grupe transakcija su zakazane od strane hosta u vremenskim intervalima koji se nazivaju okviri. Okvir je 1ms na Full Speed ​​i 125μs na High Speed ​​USB-u, ali High Speed ​​je složeniji standard, bolje ga je proučavati zasebno.
UPD:
Čitaoci su postavili dobro pitanje: šta je sa fragmentacijom? Nisam našao nikakve znakove fragmentacije u USB 2.0 na nivou transakcije i ispod, tj. Transakcije su namijenjene da se prenesu u cijelosti. U nekim slučajevima, transferi se mogu i trebaju podijeliti na nekoliko transakcija, posebno uzimajući u obzir izohrone načine. I ponoviću da je za sada domaćin zadužen za sve planiranje za nas (sa MK strane moramo manje razmišljati).

Gledajući USB saobraćaj

Dobar izbor ilustracija je u spomenutoj knjizi USB Made Simple, poglavlje 5: www.usbmadesimple.co.uk/ums_5.htm

Evo jednog od njih


Dakle, transakciju uvijek inicira host u odnosu na jednu odabranu krajnju tačku na uređaju (pored posebne tačke sa brojem 0, može ih biti do 15 na jednom uređaju, na primjer, kombinovana tastatura sa miš, termometar, fleš disk, aparat za kafu i dugme za poziv za naručivanje pizze od vodoinstalatera).
Ako host prima podatke od uređaja, ovaj ne može sam otvoriti transakciju, već može samo čekati pravi trenutak i učestvovati u tome. Domaćin otvara transakciju uređaju sa paketom sa PID = IN (Token group) i garantuje slobodu magistrale za potrebno vrijeme, uređaj ubacuje paket iz Data grupe, ovisno o vrsti transakcije, host može potvrditi uspjeh sa trećim paketom iz grupe Handshake (ACK, NAK, STALL, NYET ), transakcija je zatvorena.
Prilikom slanja podataka na uređaj (PID = OUT, Token group), host otvara transakciju, šalje paket podataka (Data), a ovisno o načinu rada može primiti i Handshake paket koji potvrđuje uspješnost transakcije.
Na kraju transakcije, sve će se vratiti u normalu, uređaj će ponovo čekati kontrolne pakete od hosta.

Načini USB prijenosa u primjerima STM32 USB FS

Da biste koristili jedan par žica za kopiranje s diska istovremeno sa audio-video streamom, pokretima miša i brzim signalom osciloskopa, postoje različite vrste poruke i emisije.
Malo iznad sam upravo opisao jednostavnu streaming kanal(Stream Pipe) između hosta i krajnje tačke, pri čemu paketi sa punjenjem (grupe podataka) ne nose nikakve posebne ili kontrolne informacije samom USB podsistemu. Potpuna sloboda dopisivanja, biblioteka kontrolera mora obezbijediti primitive za preuzimanje bafera proizvoljne veličine iz MK memorije na host ili nazad. Neka MK biblioteka zajedno sa drajverom hosta upravljaju sečenjem u pakete, prosleđivanjem i „defragmentacijom“. U STM32 to su USB_SIL_Write() i USB_SIL_Read(), opisani u UM0424. Oni su vrlo logičan nivo apstrakcije. Na strani domaćina pogledajte opis odgovarajućeg drajvera (na primjer, na FreeBSD-u to je ugen(4)).
Međutim, smatram bogohuljenjem koristiti teške periferne uređaje poput USB-a za organiziranje jednostavnog kanala za striming (pitanje je: šta nije u redu sa USART-om?). Ali, naravno, postoje razne situacije.
U svakom slučaju, da bi USB podsistem uopšte zaživeo i uređaj bio detektovan, potrebna je razmena kontrolnih transakcija.

ODDRICANJE ODGOVORNOSTI

Daljnji primjeri će biti spomenuti iz iste UM0424 biblioteke za rad sa Full Speed ​​USB od STMicroelectronics, ali su dizajnirani za njihove matične demo ploče. Uzmite primjer od autora Raje, pokažite inženjersku pamet u prilagođavanju projekata vašoj demo ploči.

Sve je jasno u vezi sa softverom: ovo su primjeri koji nisu za industrijsku upotrebu, mogu postojati greške, neki dijelovi (kao što je tabela veza u primjeru masovne pohrane) su zaštićeni patentom i nemate pravo koristiti ih u komercijalnom projektu. Ali to nije ništa, Kinezi tada uspijevaju prodati USB proizvode na tržištu, za koje se ni ne trude promijeniti VID i PID biblioteke.

Za gvožđe, koliko sam shvatio, morate početi sa kvarcom. Imam Chelyabinsk PinBoard II sa 12 MHz kvarca (sve biblioteke su dizajnirane za 8 MHz), promijenio sam PLL množitelj sa 9 na 6 (link sa objašnjenjima), inače će MK ubrzati na 108 MHz umjesto 72 MHz, a USB neće ići na 72 MHz umjesto potrebnih 48 MHz. Također možete usporiti MK brzinu na 48 MHz mijenjanjem USB razdjelnika magistrale sa jedan i po na jedan. Stručnjaci ne vole koristiti interni generator HSI MK-a: frekvencija može lagano pomjerati zbog zagrijavanja, a teško je predvidjeti posljedice za USB. Pa, ne zaboravite na periferiju, naravno. Bez SPI/SDIO flash memorije, iz primjera masovne memorije možete napraviti samo analogni /dev/null, ali ga ne možete formatirati :-)

Kontrolirajte prijenose i kanale poruka
Razmišljajući o USB-u, sjećam se starog dobrog PPP protokola sa svojim LCP, IPCP, CCP i također xzCP. Razmjena poruka posebnog tipa između hosta i krajnje točke br. 0 je lokalni ekvivalent x3CP.
Putem kontrolnih prijenosa, uređaj se inicijalizira, prima adresu, govori hostu o sebi na jeziku deskriptora (tako da može pronaći i aktivirati potreban drajver). Bez kontrolnih operacija, jednostavno strujanje neće raditi ako uređaj ne odgovori u obrascu, domaćin će brzo isključiti port: mora se slijediti protokol.
U principu, protokol ne zabranjuje držanje kontrolna tačka br. 0 i razmjena podataka, slična načinu prekida. U isto vrijeme razmislite o tome: kako ćete ažurirati MK firmver, da tako kažem, na terenu? Da li imate spreman programator? Postoji još jedno rješenje.
primjer: Nadogradnja firmvera uređaja
Prekinuti prijenosi
Ova sorta ( prekinuti transfer) namijenjen je razmjeni malih transakcija sličnih kontrolnim. Ne, uređaj ne može prekinuti host, on čeka na prozivanje, njihova frekvencija i veličina paketa su unaprijed specificirani u deskriptoru uređaja. Pogodan za sve vrste daljinskih upravljača, senzora, miševa, LED dioda i drugih HID aparata za kafu. Kanal sa prekidima u svakoj tački je jednosmjeran.
primjeri: Custom HID, Joystick miš, Virtuelni COM port
Izohroni prenosi
Χρόνος na grčkom znači “vrijeme”. izohroni prijenos ( izohroni transfer) - lokalna visoka tehnologija koja vam omogućava da upravljate tokovima podataka u realnom vremenu. Odlikuje se garantovanim (ali ne nužno širokim) propusnim opsegom i bez potvrdnih transakcija, slično kao UDP sa QoS-om. Pokvaren paket? Bog Chronos je bio taj koji je gurnuo MK na nogu. Nema potrebe da pokušavate ponovo da pošaljete paket, inače će Bog biti uznemiren. Međutim, proveravamo kontrolne sume tiho iz Chronosa. Izohroni prijenosi su dobri za audio-video i mjerne sisteme u realnom vremenu, kao i za druge igračke dvostruku upotrebu. Iako bi neki od njih mogli. Zanimljivije je okačiti neku vrstu AVR-a, povezujući ga sa našim ARM-om preko USART-a ili SPI-a. Izohrone operacije su uključene u signalizaciju okvira (zapamtite otkucavanje SOF paketa).
primjer: USB govorni zvučnik
Veliki blok transmisije
Ne, nećemo nositi vreće cementa. Mislim da su svi naučili različite načine rada USB diskovi. Transferi masovni transfer imaju za cilj slanje podataka što je više moguće i što je brže moguće, uvijek uz prijenos pokvarenih paketa, ali bez garancija na propusni opseg, prepuštajući ih izohronim prijenosima ako je potrebno (kao u TCP-u bez QoS-a). O unutrašnja struktura Već sam govorio o USB fleš diskovima, sada možete preuzeti i pokrenuti radni prototip. Nisam lično probao, ali tabela SCSI naredbi u opisu primjera (usput rečeno) prilično je simbolična. Nisam našao nikakve znakove algoritma za upravljanje trošenjem za NAND memoriju :-)
NAPOMENA: STM patentna zaštita se primjenjuje na mjestima.
primjer: Masovna pohrana

Šta je ostalo neotkriveno

Nemam cilj da pravim jos jedan udzbenik o USB-u, dosta ih je i bez mene, i dobro su opisani: elektricni deo, detalji protokola, rad sa hubovima, jezik deskriptora i HID nivo apstrakcije, problemi sa VID/ PID jedinstvenost, USB 3.0 i mnoge druge divne karakteristike USB magistrale, korisne za nas i ne toliko. Za informatičare posebno preporučujem izlet na tamnu stranu sa pregledom neprijateljskih uređaja (fleš disk sa prikrivenom HID tastaturom koji će učiniti strašne stvari).

Linkovi

Adaptacija Custom HID primjera besplatnom okruženju Em::Blocks i proračunskoj demo ploči STM32F103C8T6 koju proizvodi LC-Tech Industrial Electronics i IT ljudi. Ovo je vrsta inženjeringa Jin i Jang, svako od nas ima udeo i jednog i drugog.

Inženjeri industrijske elektronike imaju izvrsno znanje i vještine u hardveru, lemljuju radio komponente tanke kose sa zatvorenim očima (i onda to radi). Gledam elektronsko kolo, gotovo fizički počinju osjećati sve njegove struje sa potencijalima, rade i sa strujnim krugovima i sa (velikim, brzim, opasnim) industrijskim proizvodima. Pristup programiranju MK-a je prikladan: on jednostavno mora dati potrebne logičke nivoe na prave noge u pravo vrijeme, nije važno na koji način. Tehnološki su konzervativni (ne miješati se - radi), teške MK periferije nisu posebno omiljene. Kada govorimo o objektno orijentiranom programiranju, sigurnost informacija, gigantski projekti sa milion linija koda i svim vrstama fensi grafički interfejsi dosadi. Umjesto paketno orijentisane USB magistrale, oni preferiraju USART način striminga, poboljšan ili uobičajenim RS-232 ili brutalnijim RS-485 (serijska magistrala za industrijske aplikacije, do 10 Mbit/s na 15 m, do 100 kBit/s na 1200 m, do 32 uređaja).

IT ljudi su vaspitani da razumiju operativni sistemi, mrežnu infrastrukturu i složene interakcije, elita je dobro upućena u sigurnost informacija i razumije sve vrste nevidljivih načina da prodre u tuđi sistem. Neki ljudi zaista vole mačke (kako da ih ne volite? Ja, međutim, ne držim, ne uzgajam i ne kuvam :-). Mnogi ljudi vole slobodu informacija, kritiziraju korporacije/vlade i pobjeđuju sile prirode snagom misli. Patološki su lijeni, ali vole nove tehnologije i uvrnute inženjerske zagonetke sa skupim igračkama (po mogućnosti riješene na softverskom nivou ili, u ekstremnim slučajevima, skakače). Odnosi sa lemilom su čuvani: ne pitajte informatičara da li voli lemilicu, može pogrešno shvatiti; Bolje pitajte da li voli lemljenje elektronskih kola.

o čemu ja pričam? Mi samo drugačije vidimo ovaj svijet... Uostalom Linux kernel Isti momci su ga izrezali iz C modula i asemblerskih umetaka za određene platforme, i činilo se da su prošli bez holivara. Zaista ozbiljan projekat vidim kao sistem sa više jezgara koji kombinuje najnovije mikrokontrolere sa teškim periferijama, ali ne isključujem kombinacije sa klasičnim modelima kao što je AVR: oni se mogu koristiti za kačenje nekih kritičnih, brzo rotirajućih vrhova tehničkog napretka. Ako je kod testiran godinama, zašto ne?

Dodaj oznake

Krajem 2008. Kao što možete očekivati, novi standard povećana propusnost, iako povećanje nije toliko značajno kao povećanje brzine od 40x pri prelasku sa USB 1.1 na USB 2.0. U svakom slučaju, povećanje propusnosti 10x je dobrodošlo. USB 3.0 podržava maksimalna brzina prijenosa od 5 Gbit/s. Propusnost je skoro duplo veća od modernog Serial ATA standarda (3 Gbit/s, uzimajući u obzir prenos suvišnih informacija).

USB 3.0 logo

Svaki entuzijasta će potvrditi da je USB 2.0 interfejs glavno usko grlo modernih računara i laptopa, jer se njegova maksimalna „neto“ propusnost kreće od 30 do 35 MB/s. Ali moderni imaju 3,5″ tvrdi diskovi za desktop računare, brzina prenosa je već premašila 100 MB/s (pojavljuju se i 2,5″ modeli za laptop računare koji se približavaju ovom nivou). Brzi SSD uređaji uspješno su premašili prag od 200 MB/s. A 5 Gbit/s (ili 5120 Mbit/s) odgovara 640 MB/s.

Ne mislimo to u doglednoj budućnosti tvrdi diskoviće se približiti nivou od 600 MB/s, ali naredne generacije SSD uređaji može premašiti ovaj broj za samo nekoliko godina. Povećanje protoka postaje sve važnije kako se povećava količina informacija i shodno tome povećava vrijeme potrebno za njihovu sigurnosnu kopiju. Što brže skladište radi, kraće će biti vrijeme sigurnosne kopije, lakše će biti kreirati „prozore“ u rasporedu rezervnih kopija.

Tabela za poređenje brzine USB karakteristike 1.0 – 3.0

Digitalne video kamere danas mogu snimati i pohranjivati ​​gigabajte video podataka. Povećava se udio HD video kamera koje zahtijevaju veće i brže skladištenje za snimanje velika količina podaci. Ako koristite USB 2.0, prijenos nekoliko desetina gigabajta video podataka na računalo za uređivanje će zahtijevati dosta vremena. USB Implementers Forum vjeruje da će propusni opseg ostati fundamentalno važan, i USB 3.0će biti dovoljan za sve potrošačke uređaje u narednih pet godina.

8/10 bitno kodiranje

Da bi se osigurao pouzdan prijenos podataka USB 3.0 interfejs koristi 8/10 bitno kodiranje, poznato nam, na primjer, iz Serial ATA. Jedan bajt (8 bita) se prenosi korištenjem 10-bitnog kodiranja, što poboljšava pouzdanost prijenosa na račun propusnosti. Stoga se prijelaz sa bitova na bajtove vrši u omjeru 10:1 umjesto 8:1.

Poređenje USB 1.x – 3.0 propusnog opsega i konkurencije

Režimi uštede energije

svakako, glavni cilj interfejs USB 3.0 je povećanje dostupnog propusnog opsega, međutim, novi standard efektivno optimizuje potrošnju energije. USB 2.0 interfejs stalno ispituje dostupnost uređaja, koji troši energiju. Nasuprot tome, USB 3.0 ima četiri stanja veze, nazvana U0-U3. Stanje veze U0 odgovara aktivnom prenosu podataka, a U3 stavlja uređaj u stanje mirovanja.

Ako je veza neaktivna, tada će mogućnost primanja i prijenosa podataka biti onemogućena u stanju U1. Stanje U2 ide korak dalje tako što onemogućava interni sat. U skladu s tim, povezani uređaji mogu prijeći u stanje U1 odmah nakon završetka prijenosa podataka, što se očekuje da pruži značajne prednosti u potrošnji energije u odnosu na USB 2.0.

Viša struja

Pored različitih stanja potrošnje energije, standard USB 3.0 je drugačiji sa USB 2.0 i veća podržana struja. Ako je USB 2.0 pružao strujni prag od 500 mA, onda je u slučaju novog standarda ograničenje pomaknuto na 900 mA. Struja iniciranja veze je povećana sa 100 mA za USB 2.0 na 150 mA za USB 3.0. Oba parametra su prilično važna za prijenosne čvrste diskove, koji obično zahtijevaju nešto veće struje. Ranije se problem mogao riješiti korištenjem dodatnog USB priključka, crpeći napajanje iz dva porta, ali korištenjem samo jednog za prijenos podataka, iako je to kršilo USB 2.0 specifikacije.

Novi kablovi, konektori, kodiranje boja

USB 3.0 standard je kompatibilan sa USB 2.0, to jest, čini se da su utikači isti kao i obični utikači tipa A. USB 2.0 pinovi ostaju na istom mjestu, ali sada postoji pet novih pinova smještenih duboko u konektoru. To znači da trebate umetnuti USB 3.0 utikač do kraja USB port 3.0 kako bi se osigurao USB 3.0 način rada, koji zahtijeva dodatne pinove. Inače ćete dobiti USB 2.0 brzinu. USB Implementers Forum preporučuje proizvođačima da koriste Pantone 300C kodiranje boja na unutrašnjoj strani konektora.

Slična je situacija bila i sa USB utikačem tipa B, iako su razlike vizuelno uočljivije. USB 3.0 utikač se može prepoznati po pet dodatnih pinova.

USB 3.0 ne koristi optička vlakna, jer je preskupo za masovno tržište. Dakle, pred nama je stari dobri bakarni kabl. Međutim, sada će imati devet, a ne četiri žice. Prijenos podataka se vrši preko četiri od pet dodatnih žica u diferencijalnom načinu rada (SDP–Shielded Differential Pair). Jedan par žica je odgovoran za primanje informacija, drugi za prijenos. Princip rada je sličan Serial ATA, sa uređajima koji primaju punu propusnost u oba smjera. Peta žica je "uzemljenje".