Kommentarer
- Har du tittat på Universal Serial Bus Specification särskilt USB kapitel 9? Eller läs Jan Axelson ' s USB komplett?
- Tack för dessa resurser, men det enda problemet är att jag knappt vet någonting om elektronik så att guiden inte är vettig att mig. Jag vet att förståelse av hela USB-protokollet kräver specifik fördjupad kunskap, men jag behöver bara en snabb översikt. (Den här frågan är inte ' t för ett projekt. Jag ställde det bara för att jag var nyfiken)
Svar
Jag försöker svara på dina frågor så att du föreslog dem (numrering kan hjälpa).
Det finns verkligen fyra ledningar (ignorerar USB3.x för tillfället). Två verkligen för ström (+ 5V och GND) och två för signalering (D + och D -).
Det viktigaste att notera om signalkablarna är deras namn, notera + och – (även ibland P och N eller P och M). Dessa indikerar vanligtvis i elektroniken att något är differentiellt. Vad detta betyder att 1 ”och 0” är indikerade med polariteten för spänningen mellan varje kabel. Detta är i motsats till enstaka ändar där 1 ”och 0” s bärs som en spänning i förhållande till GND.
Vad menar jag med polaritet? Tänk dig att D + -kabeln drivs till \ $ + 3.3 \ m athrm {V} \ $, och D- körs till \ $ 0 \ mathrm {V} \ $. Skillnaden mellan de två är \ $ V_ {D +} – V_ {D-} = 3.3 – 0 = 3.3 \ mathrm {V} \ $. Om D + -kabeln istället kördes till \ $ 0 \ mathrm {V} \ $ och D-driven till \ $ + 3.3 \ mathrm {V} \ $, blir skillnaden \ $ V_ {D +} – V_ {D- } = 0 – 3.3 = -3.3 \ mathrm {V} \ $. Lägg märke till minustecknet som indikerar motsatt polaritet.
För att detta ska fungera måste de två datakablarna vara komplement till varandra (när den ena är hög, den andra är låg) för att överföra data, alltså måste fungera med samma frekvens. Du kanske tänker varför bry dig, använd bara en kabel. Saken är att världen är en ganska bullrig plats, en enda ände (gemensamt läge) är mycket benägen för buller som vid höga hastigheter (även vid låga hastigheter i tuffa miljöer) som kan skada data (gör en 1 till 0). Vid differentiell signalering utsätts båda kablarna för samma ljud, så det avbryts!
Ett snabbt exempel. Anta att signalen du skickar är \ $ 2 \ mathrm {V} \ $ eller \ $ 0 \ mathrm {V} \ $. Låt oss också säga på varje tråd att du får \ $ 1 \ mathrm {V} \ $ brus (orealistiskt, men ett exempel). För enstaka slut skulle dina signaler vid mottagaren vara antingen \ $ 2 + 1 = 3 \ mathrm {V} \ $ vilket helt klart är en logisk 1 eller \ $ 0 + 1 = 1 \ mathrm {V} \ $ vid vilken tidpunkt du har ingen aning om vad det var. För differentiering skulle dock dina signaler vid mottagaren vara antingen \ $ (2 + 1) – (0 + 1) = 2 \ mathrm {V} \ $ eller \ $ (0 + 1) – (2 + 1) = – 2 \ mathrm {V} \ $ som båda är desamma som om det inte fanns något ljud alls!
Det finns andra fördelar med att ha två ledningar. När data inte skickas använder USB-specifikationen de två ledningarna oberoende för styrsignaler, t.ex. en synkroniseringssignal, ett återställningskommando etc. Dessa kan tydligt särskiljas från datapaket genom olika knep som förmodligen är för djupt (allt kommer att finnas i USB-specifikationen som nämns i kommentarerna).
I USB måste båda enheterna ha samma frekvens. Detta är vanligtvis en multipel av 12MHz – det är därför du ser USB-enheter som arbetar vid klockfrekvenser som 48MHz eller 12MHz, etc. Dessa frekvenser genereras av en kristallreferens som vanligtvis är korrekt till cirka 20 ppm (240Hz för en 12MHz kristall ). Detta är i allmänhet tillräckligt nära att på grund av synkroniseringspulser på datalinjerna och det faktum att data skickas i skurar (vilket innebär att frekvensdrift inte lägger till under lång tid), att de två enheterna kan förbli synkroniserade. du skulle av misstag använda en 16MHz kristall, enheten kommer antagligen inte att räkna.
Hur vet master att enheten behöver ström? Enkelt, alla USB-enheter får rita en mängd ström utan att begära det – upp till \ $ 100 \ mathrm {mA} \ $ så vitt jag minns. Detta ger enheten tillräckligt med ström för att slå på, hävda sin närvaro (med ett uppdragningsmotstånd på D + -linjen – igen troligen När befälhavaren är medveten om enheten tilldelar den en strömtillägg till den enheten och frågar om den kommer att behöva mer (t.ex. för en enhet med hög effekt, om den vill ha $ 500 \ matrh {mA} \ $ hög strömtillägg).
USB-protokollet är allt i specifikationen. Att försöka gå igenom skulle förmodligen fortfarande vara för djupt.Men med detta sagt kanske du vill kolla in det här svaret på en annan fråga som ger detaljer.
Svar
USB 1.x (1,5 Mbit / s och 12 Mbit / s) och 2,0 (480 Mbit / s) använder fyra ledningar, V \ $ _ {BUS} \ $ ( +5), D +, D- och GND. D + och D- bildar ett differentiellt par. Det finns också en förlängning som heter OTG (On-The-Go) som gör att en enhet kan fungera som antingen en USB-värd eller enhet, och detta använder en femte ID-ledning som vi kan ignorera.
Om maximal hastighet för varje värd och enhet är olika, en förhandling äger rum och den högsta gemensamma hastigheten för båda används.
Differentiell signalering ger en hög grad av bullerimmunitet. Datasignalerna skickas gå positiva på D + -linjen och negativa på D-linjen. På den mottagande sidan skickas plusledningen till + -ledningen för en komparator (fungerar som en subtraktor) och minusledningen skickas till komparatorns ledning.
För giltiga pulser lägger dessa två till (eftersom den negativa pulsen skickades till ledningen för komparatorn, tillägger de). Men om brus induceras på linjen kommer det i allmänhet att påverka både D + och D-linjerna samma, och komparatorn subtraherar dem.
Diagrammet visar data som går i endast en riktning. Det beror på att USB-signaler är halv-duplex, data går bara en riktning åt gången.
USB 3.0 (upp till 10 Gbit / s) använder nio ledningar istället för fyra och ger full duplex-drift sedan det finns olika par varje sätt för sändning och mottagning.
Enheter kan dra upp till 100 mA utan att behöva ”fråga”. För USB 1.x och 2.0 kan enheten be värden att leverera upp till 500 mA. För USB 3.0 har detta ökats till 900 mA. Det finns ett separat protokoll som används för batteriladdning (inget datautbyte); i vissa fall kan detta gå så högt som 5A.
Kommentarer
- Tack för svaret. Vad händer om de två enheterna har olika klockfrekvenser?
- En teknik som kallas " klockåterställning " används: arrowdevices.com/blog/beginners-guide-to-clock-data-recovery
Svar
USB använder differentiell signalering för att minska störningar och tillåta höghastighetsöverföring över långa sträckor. En differentialbuss är byggd med två ledningar, den ena representerar de överförda data och den andra kompletterar den. Tanken är att den ”genomsnittliga” spänningen på ledningarna inte innehåller någon information, vilket resulterar i mindre störningar. De flesta moderna serier bussar (USB, Ethernet, PCIe, SATA, etc.) är olika eftersom kostnaden för de extra ledningarna övervägs av fördelarna med brusreducering. USB 2 är också det som kallas ”halv duplex.” Detta innebär att länken bara fungerar i en riktning vid varje givet ögonblick. Säg, din dator kan skicka ett meddelande till din mus. Eller din mus kan skicka ett meddelande till din dator. Men inte båda samtidigt. Bussen måste ”vändas” varje tidsdata måste skickas i den andra riktningen.
När det gäller klockning utnyttjar USB enheter som kallas serie- och deserialiserare. Serialiseraren ansvarar för att generera seriell data på sändningsänden och deserialiseraren ansvarar för att återställa bitarna på den andra sv d. En del av jobbet för serialiseraren är att koda data på ett sätt som det blir lätt att avkoda genom att inkludera inramnings- och synkroniseringsinformation. En del av deserialiserarens jobb är att återställa klocksignalen. USB använder en kodning som heter NRZI eller inverterad non-return-to-zero. I NRZI representeras logisk 0 av en övergång och logisk 1 representeras av ingen övergång. USB använder bitstoppning för att begränsa längden på på varandra följande 1: er som skickas över kabeln. Resultatet av detta innebär att det ofta finns övergångar för att återställa alla bitar, även om klockorna på sändaren och mottagaren inte kryssar i exakt samma hastighet. De måste dock vara relativt nära. Det finns också uttryckliga synkroniseringssekvenser som skickas tillsammans med data.
När det gäller ström får enheten dra en viss mängd ström utan att fråga värden. För att dra mer än så är det nödvändigt att förhandla för att se till att värden inte blir överbelastad. Enheten måste vänta tills den får tillstånd innan den kan dra mer aktuell.