USB-Wii Classic Controller (4 / 18 steg)
Steg 3: Förståelse USB
USB-bussar har en enhet och mottagande, datorn är vanligen värd, våra spelkontroll är en enhet, närmare bestämt en HID (human interface device). Det är viktigt att notera att värden alltid påbörja kommunikation eller värddatorn kontrollerar enheten ofta för att se om det har något att säga. Enheten har inte förmågan att initiera kommunikation, det kan bara vänta tills det talas till.
Det finns pull-up motstånd på D + eller D - beroende på om enheten är USB 1.0, USB 1.1 eller USB 2.0. Närvaron av dessa pull-up motstånd är också hur en dator vet när något har ansluten. På USnooBie och de flesta V-USB-kretsar är pull-up resistor alltid på D-signalen sedan V-USB är endast kan genomföra låg fart USB-enheter.
De två 68 ohm motstånd på D + och D-signaler avslutande motstånden, deras impedansen beräknas (med hänsyn tagen till AVR: s interna kretsar) matchas med den karakteristiska impedansen av USB-kabeln. Detta minimerar signal reflektioner. Läs http://en.wikipedia.org/wiki/Transmission_line för mer information.
När en enhet ansluts till en värd, försöker värd att "räkna" enheten. Om den underlåter att göra så (enheten svarar inte eller svarar med skräp), det är då Windows säger "enhet känns inte igen".
Värd- och enheten talar över kanaler kallas "slutpunkter", slutpunkter identifieras av ett nummer. Det finns några slutpunkter som ett reserverat för särskild användning, medan andra kan konfigureras för att fungera i olika lägen (avbrott, bulk, etc).
Värden kommer alltid först använda "kontrollslutpunkt" (slutpunkt 0) först att begära en beskrivning av enheten, detta "deskriptorn" kommer att innehålla enhetsidentifierare (vendor ID och produkt-ID, etc), tillsammans med dess enhetsklass, underklass, etc (HID som mus eller tangentbord? eller kanske masslagring?). Sedan begärs konfiguration deskriptorn, som också innehåller antalet slutpunkter tillgängliga på enheten. Varje slutpunkt har sin egen deskriptor. All denna data skickas som paket data-byte som representerar en välkänd angivna datastruktur.
V-USB och andra USB-ramar/stackar har API: er och andra metoder för att programmeraren ändra innehållet i beskrivare. Du måste först förstå varje deskriptor, och sedan finns i dokumentationen på V-USB för att se hur du ändrar dem (jag ska visa er senare).
Värden gör begäran genom att skicka "setup paket" till "kontrollslutpunkt". Setup-paket har en definierad struktur gör det enkelt för enheten att förstå vad värden vill. V-USB (och liknande ramar) vanligtvis hanterar standard setup paket. En programmerare kan skriva drivrutiner som skickar anpassad installation paket, i vilket fall firmware måste hantera paketen installationsprogrammet manuellt, V-USB (och andra) ger några metoder för att hjälpa med det.
Senare i detta instructable, har jag inkluderat en soptipp beskrivare fångas upp av min USB-traffic analyzer. Du kan ta en titt och matcha det med USB specifikationer att se vad varje del representerar.
När alla beskrivningar har hämtats från enheten, kan värden sedan förstå enheten och kommunicera med den. Vi kommer titta på samtliga beskrivare i detalj senare.
Jag har en annan Instructable som visar dig hur man bygger ett USB-tangentbord som typer ut koden lagras i RFID-taggar:
Läxor: Läsa USB i ett nötskal http://www.beyondlogic.org/usbnutshell/usb1.shtml vilket är ganska mycket en USB-bibel
Viktigt: De flesta av USB-terminologin är ur värden (datorn), så orden "i" och "input" betyder från enheten till mottagande, och orden "out" eller "utgång" betyder från mottagande enheten.