Vraag:
Hoe werkt het USB-protocol?
zack1544
2015-11-11 09:18:26 UTC
view on stackexchange narkive permalink

Ik heb me altijd afgevraagd hoe USB-apparaten eigenlijk communiceren. Toen ik een usb-kabel verwijderde, merkte ik dat er vier verschillende draden waren. Twee daarvan zijn voor stroom (positief en aarde) en ook twee andere draden.

Ik heb de pinnamen van deze twee andere USB-aansluitingen opgezocht en ze heten data + en data-. Worden deze twee draden gebruikt om gegevenssignalen te verzenden, en zo ja, waarom zijn er dan twee (één voor elke gegevensuitvoer voor elk apparaat?)

Wat als de twee apparaten twee verschillende klokfrequenties hebben? Zou dit de gegevensuitwisseling niet verpesten? En de vragen die me echt in mijn hoofd raken, zijn: hoe "weet" het ene apparaat of het andere apparaat stroom nodig heeft, of het andere apparaat geen stroombron heeft om het "meesterapparaat" te "vertellen" dat het stroom nodig heeft? Kan iemand mij een overzicht geven over hoe het USB-protocol werkt?

Heb je gekeken naar de [Universal Serial Bus Specification] (http://sdphca.ucsd.edu/Lab_Equip_Manuals/usb_20.pdf) in het bijzonder USB hoofdstuk 9?Of lees Jan Axelson's USB Complete?
Bedankt voor deze bronnen, maar het enige probleem is dat ik nauwelijks iets van elektronica weet, dus de handleiding slaat nergens op.Ik weet dat het begrijpen van het hele USB-protocol specifieke diepgaande kennis vereist, maar ik heb alleen een snel overzicht nodig (deze vraag is niet voor een project, ik heb het net gevraagd omdat ik nieuwsgierig was)
Drie antwoorden:
Tom Carpenter
2015-11-11 11:30:00 UTC
view on stackexchange narkive permalink

Ik zal proberen uw vragen te beantwoorden zodat u ze heeft voorgesteld (nummering kan helpen).

Er zijn inderdaad vier draden (USB3.x wordt momenteel genegeerd). Twee inderdaad voor stroom (+ 5V en GND), en twee voor signalering (D + en D-).


Het belangrijkste om op te merken over de signaaldraden is hun naam, let op de + en - (soms ook P en N of P en M). Deze geven meestal in elektronica aan dat iets differentieel is. Dit betekent dat de enen en nullen worden aangegeven door de polariteit van de spanning tussen elke kabel. Dit is in tegenstelling tot single-ended waar de enen en nullen worden gedragen als een spanning ten opzichte van GND.

Wat bedoel ik met polariteit? Stel je voor dat de D + kabel naar \ $ + 3.3 \ mathrm {V} \ $ wordt gestuurd, en de D- naar \ $ 0 \ mathrm {V} \ $. Het verschil tussen de twee is \ $ V_ {D +} - V_ {D-} = 3.3 - 0 = 3.3 \ mathrm {V} \ $. Als in plaats daarvan de D + kabel naar \ $ 0 \ mathrm {V} \ $ en de D- naar \ $ + 3.3 \ mathrm {V} \ $ werd gestuurd, wordt het verschil \ $ V_ {D +} - V_ {D- } = 0 - 3.3 = -3.3 \ mathrm {V} \ $. Let op het minteken dat de tegenovergestelde polariteit aangeeft.

Om dit te laten werken, moeten de twee datakabels elkaar aanvullen (wanneer de ene hoog is, is de andere laag) om gegevens over te dragen, dus moet op dezelfde frequentie werken. U denkt misschien waarom u zich druk maakt, gebruik gewoon één kabel. Het punt is dat de wereld een nogal luidruchtige plaats is, een draad met één uiteinde (common mode) is erg gevoelig voor ruis die bij hoge snelheden (zelfs bij lage snelheden in ruwe omgevingen) de gegevens kan beschadigen (maak een 1 a 0). Bij differentiële signalering worden beide kabels blootgesteld aan dezelfde ruis, dus deze wordt uitgeschakeld!

Een snel voorbeeld. Stel dat het signaal dat u verzendt \ $ 2 \ mathrm {V} \ $ of \ $ 0 \ mathrm {V} \ $ is. Laten we ook zeggen dat je op elke draad \ $ 1 \ mathrm {V} \ $ ruis krijgt (onrealistisch, maar een voorbeeld). Voor single-ended zijn uw signalen bij de ontvanger ofwel \ $ 2 + 1 = 3 \ mathrm {V} \ $, wat duidelijk een logische 1 is, of \ $ 0 + 1 = 1 \ mathrm {V} \ $ op welk punt u heb geen idee wat het was. Voor differentiaal zijn uw signalen bij de ontvanger echter \ $ (2 + 1) - (0 + 1) = 2 \ mathrm {V} \ $ of \ $ (0 + 1) - (2 + 1) = - 2 \ mathrm {V} \ $ die allebei hetzelfde zijn alsof er helemaal geen ruis was!


Er zijn andere voordelen aan het hebben van twee draden. Wanneer geen gegevens worden verzonden, gebruikt de USB-specificatie de twee draden onafhankelijk van elkaar voor besturingssignalen, bijv. een synchronisatiesignaal, een resetcommando, enz. Deze kunnen duidelijk worden onderscheiden van datapakketten door verschillende trucs die waarschijnlijk te diepgaand zijn (het zal allemaal in de USB-specificatie staan ​​die in de opmerkingen wordt genoemd).


Bij USB moeten beide apparaten dezelfde frequentie hebben. Dit is meestal een veelvoud van 12 MHz - daarom zult u zien dat USB-apparaten werken op klokfrequenties zoals 48 MHz of 12 MHz, enz. Deze frequenties worden gegenereerd door een kristalreferentie die doorgaans nauwkeurig is tot ongeveer 20 ppm (240 Hz voor een 12 MHz-kristal). ). Dit komt over het algemeen zo dichtbij dat, dankzij synchronisatiepulsen op de datalijnen en het feit dat gegevens in bursts worden verzonden (wat betekent dat drift in frequentie niet over een lange tijd wordt opgeteld), de twee apparaten synchroon kunnen blijven. Als u per ongeluk bijvoorbeeld een 16MHz-kristal gebruikt, zal het apparaat waarschijnlijk niet opsommen.


Hoe weet de meester dat het apparaat stroom nodig heeft? Simpel: alle USB-apparaten mogen een hoeveelheid stroom trekken zonder erom te vragen - tot \ $ 100 \ mathrm {mA} \ $ voor zover ik me herinner. Dit geeft het apparaat voldoende vermogen om in te schakelen, zijn aanwezigheid te bevestigen (met een pull-up-weerstand op de D + -lijn - opnieuw waarschijnlijk te diep). Zodra de master op de hoogte is van het apparaat, wijst het een stroomtoeslag toe aan dat apparaat en vraagt ​​of het meer nodig heeft (bijv. Voor een apparaat met een hoog vermogen, als het de \ $ 500 \ mathrm {mA} \ $ hoge stroomtoeslag wil).


Het USB-protocol staat allemaal in de specificaties. Proberen eroverheen te gaan, zou waarschijnlijk nog te diepgaand zijn. Maar dat gezegd hebbende, wil je misschien eens kijken naar dit antwoord op een andere vraag die wat details geeft.

tcrosley
2015-11-11 11:23:04 UTC
view on stackexchange narkive permalink

USB 1.x (1,5 Mbit / s en 12 Mbit / s) en 2.0 (480 Mbit / s) gebruiken vier draden, V \ $ _ {BUS} \ $ (+5), D +, D- en GND . De D + en D- vormen een differentieel paar. Er is ook een extensie genaamd OTG (On-The-Go) waarmee een apparaat kan fungeren als een USB-host of apparaat, en dit maakt gebruik van een vijfde ID-lead die we kunnen negeren.

Als de de maximale snelheid van elk van de host en het apparaat is verschillend, er vindt een onderhandeling plaats en de hoogste snelheid die beide gemeen hebben, wordt gebruikt.

enter image description here

Differentiële signalering zorgt voor een hoge mate van immuniteit tegen ruis. De datasignalen worden positief verzonden op de D + -lijn en negatief op de D-lijn. Aan de ontvangende kant wordt de plus-lead naar de + lead van een comparator gestuurd (die als aftrekker fungeert), en de min-lead wordt naar de - lead van de comparator gestuurd.

enter image description here

Voor geldige pulsen worden deze twee opgeteld (aangezien de negatief gaande puls naar de - leiding van de comparator werd gestuurd, voegen ze toe). Maar als er ruis op de lijn wordt geïnduceerd, zal dit in het algemeen zowel de D + als de D-lijnen hetzelfde beïnvloeden, en de comparator zal ze aftrekken.

Het diagram toont gegevens die in slechts één richting gaan. Dat komt omdat USB-signalen half-duplex zijn, de gegevens gaan maar in één richting tegelijk.

USB 3.0 (tot 10 Gbit / s) gebruikt negen draden in plaats van vier en biedt volledige duplexwerking, aangezien er zijn in beide richtingen differentiële paren voor zenden en ontvangen.

Apparaten kunnen tot 100 mA opnemen zonder te "vragen". Voor USB 1.x en 2.0 kan het apparaat de host vragen om tot 500 mA te leveren. Voor USB 3.0 is dit verhoogd naar 900 mA. Er is een apart protocol dat wordt gebruikt voor het opladen van de batterij (geen gegevensuitwisseling); dit kan in sommige gevallen oplopen tot 5A.

Dank je voor het antwoord.Wat gebeurt er als de twee apparaten verschillende klokfrequenties hebben?
Een techniek genaamd "klokherstel" wordt gebruikt: http://www.arrowdevices.com/blog/beginners-guide-to-clock-data-recovery/
alex.forencich
2015-11-11 11:35:48 UTC
view on stackexchange narkive permalink

USB gebruikt differentiële signalering om interferentie te verminderen en snelle verzending over een lange afstand mogelijk te maken. Een differentiële bus is gebouwd met twee draden, een ervan vertegenwoordigt de verzonden gegevens en de andere is complementair. Het idee is dat de 'gemiddelde' spanning op de draden geen informatie bevat, waardoor er minder storing optreedt. De meeste moderne seriële bussen (USB, Ethernet, PCIe, SATA, etc.) zijn differentieel, aangezien de kosten van de extra kabels ruimschoots opwegen tegen de voordelen van ruisonderdrukking. USB 2 is ook wat 'half duplex' wordt genoemd. Dit betekent dat de link op een bepaald moment maar in één richting werkt. Stel dat uw computer een bericht naar uw muis kan sturen. Of je muis kan een bericht naar je computer sturen. Maar niet allebei tegelijk. De bus moet telkens 'omgedraaid' worden als er data in de andere richting gestuurd moet worden.

Wat het klokken betreft, maakt USB gebruik van apparaten die serializers en deserializers worden genoemd. De serialisator is verantwoordelijk voor het genereren van de seriële gegevens aan de zendzijde en de deserialisator is verantwoordelijk voor het terugwinnen van de bits aan de andere kant. Een deel van de taak van de serialisator is het coderen van de gegevens op een manier die gemakkelijk te decoderen is door framing- en synchronisatie-informatie op te nemen. Een deel van de taak van de deserializer is om het kloksignaal te herstellen. USB gebruikt een codering genaamd NRZI, oftewel niet-terugkeer-naar-nul omgekeerd. In NRZI wordt logische 0 weergegeven door een overgang en wordt logische 1 weergegeven door geen overgang. USB gebruikt bit-stuffing om de lengte van opeenvolgende enen die over de draad worden verzonden te beperken. Het resultaat hiervan betekent dat er vaak genoeg overgangen zijn om alle bits te herstellen, zelfs als de klokken op de zender en ontvanger niet precies dezelfde snelheid tikken. Ze moeten echter relatief dichtbij zijn. Er zijn ook expliciete synchronisatiesequenties die samen met de gegevens worden verzonden.

Wat stroom betreft, mag het apparaat een bepaalde hoeveelheid stroom afnemen zonder de host te vragen. Om meer te tekenen, is het nodig om te onderhandelen om ervoor te zorgen dat de host niet overbelast raakt. Het apparaat moet wachten tot het toestemming krijgt voordat het meer stroom kan trekken.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...