Stap 3: Begrip USB
USB-bussen hebben een apparaat en de gastheer, de computer is meestal de host, onze gamepad is een apparaat, meer in het bijzonder, een HID (human interface device). Het is belangrijk op te merken dat de host altijd communicatie initiëren, of de host het apparaat regelmatig om te zien controleert als er iets te zeggen. Het apparaat beschikt niet over de functionaliteit om communicatie te initiëren, het kan alleen wachten totdat het wordt gesproken.
Er zijn pull-up weerstanden op D + of D - afhankelijk van al dan niet het apparaat USB 1.0, USB 1.1 of USB 2.0. De aanwezigheid van deze weerstanden pull-up is ook hoe een computer weet wanneer iets heeft aangesloten. Op de USnooBie en de meeste V-USB circuits is de pull-up weerstand altijd op het D-signaal omdat V-USB alleen geschikt is voor de uitvoering van lage snelheid USB-apparaten.
De twee 68 ohm weerstanden op de D + en D-signalen zijn tot beëindiging van weerstanden, hun impedantie worden berekend (rekening houdend met de interne circuits van de AVR) worden vergeleken met de karakteristieke impedantie van de USB-kabel. Dit minimaliseert reflecties van het signaal. Lees http://en.wikipedia.org/wiki/Transmission_line voor meer informatie.
Wanneer een apparaat verbinding met een host, wordt de host probeert te "inventarisatie" van het apparaat. Als dit niet zo (het apparaat niet reageert, of reageert met huisvuil), dat is wanneer Windows zegt 'apparaat niet herkend'.
De gastheer en apparaat praat over kanalen genaamd "eindpunten", eindpunten worden geïdentificeerd door een nummer. Er zijn sommige eindpunten die een gereserveerd voor speciaal gebruik, terwijl anderen kunnen worden geconfigureerd om te werken in verschillende modi (interrupt, bulk, etc).
De host gebruikt altijd eerst de "controle eindpunt" (eindpunt 0) eerst te vragen een beschrijving van de inrichting, deze "descriptor" zal de apparaat-id's bevatten (leverancier-ID en product-ID, enz), samen met de stuurprogramma-installatieklasse, subklasse, etc (HID zoals een muis of toetsenbord? of misschien massaopslag?). Vervolgens wordt de configuratie-descriptor aangevraagd, waarin ook het aantal eindpunten beschikbaar op het apparaat. Elk eindpunt heeft eigen descriptor als goed. Al deze gegevens worden verzonden als pakketten van gegevensbytes die vertegenwoordigt een bekende opgegeven datastructuur.
V-USB en andere USB-kaders/stacks hebben API's en andere methoden om de programmeur toestaan om te wijzigen van de inhoud in de descriptoren. Moet u eerst begrijpen elk descriptor worden gecontroleerd en vervolgens de documentatie met betrekking tot V-USB om te zien hoe u deze (ik zal je laten zien later) wijzigt.
De host maakt de aanvragen door te sturen "setup pakketten" op het "eindpunt van de controle". Installatie pakketten hebben een gedefinieerde structuur waardoor het gemakkelijk is voor het apparaat te begrijpen wat de host wil. V-USB (en soortgelijke kaders) meestal verwerkt de standaard setup-pakketten. Een programmeur kan het schrijven van stuurprogramma's die aangepaste setup-pakketten verzendt, in welk geval de firmware moet omgaan met de setup-pakketten handmatig, V-USB (en anderen) biedt sommige manieren om te helpen mee.
Later in dit instructable, ik heb ook een dump van de descriptoren gevangen genomen door mijn USB-verkeer analyzer. U kunt een kijkje nemen en het overeenkomen met USB-specificaties om te zien wat elk gedeelte vertegenwoordigt.
Na alle de descriptoren uitname van het apparaat, kan de host begrijpen van het apparaat en ermee communiceren. We zullen kijken naar alle de descriptoren in detail later.
Ik heb een ander Instructable die u hoe toont te bouwen van een USB-toetsenbord dat soorten uit de code opgeslagen in RFID-tags:
Huiswerk: USB in een notendop- http://www.beyondlogic.org/usbnutshell/usb1.shtml die vrij veel een USB Bijbel is lezen
Belangrijke opmerking: De meeste van de USB-terminologie is vanuit het perspectief van de host (de computer), dus de woorden "in" en "input" betekent van het apparaat naar de host, en de woorden "out" of "output" betekenen van de host naar apparaat.