Stap 21: Bijlage C: de kortste Explaination van USB ooit
USB-bussen hebben een apparaat en de gastheer, de computer is meestal de host, onze speler van de muziek is een apparaat, meer in het bijzonder, een apparaat voor massaopslag. 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.
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. In de AT90USB1286 (aka de microcontroller op de Teensy ++), de pull-up-weerstanden zijn ingebouwde en configureerbaar via software.
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.
LUFA (lichtgewicht USB kader voor AVR's) en andere USB-kaders/stacks hebben "structs" 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 over LUFA om te zien hoe u deze 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. LUFA (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, LUFA (en anderen) biedt sommige manieren om te helpen mee.
In sommige van mijn voorbeelden, heb ik 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. In sommige van mijn demonstraties fungeert het USB-apparaat als een virtuele seriële poort. Wanneer u roept de functie "usb_serial_putchar", het karakter worden verzonden is in een buffer geplaatst, en verzonden wanneer de computer (host) een periodieke checkup doet (Onthoud wat ik zei over de host altijd het initiëren van communicatie). Wanneer de AT90USB1286 op de Teensy ++ een USB-apparaat voor massaopslag, wordt wanneer de computer verstuurt via SCSI-commando's om te lezen van gegevensblokken, antwoordt het apparaat terug met de gegevens over een bulk-eindpunt.
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