Hallo zusammen,
ich lese mich gerade etwas in das USB-Protokoll ein und möchte
(demnächst) auch das USB auf dem XMega realisieren. Da ich bisher noch
GAR KEINE Ahnung vom USB habe, habe ich mir diese Webseite
herausgepickt:
http://www.usbmadesimple.co.uk
An für sich ist die Webseite auch sehr verständlich geschrieben (gut USB
3 fehlt, aber ich möchte sowieso erst einmal mit Low Speed anfangen).
Bisher habe ich es so verstanden, dass das Gerät angesteckt und vom Host
ein Reset durchgeführt wird. Danach sendet der Host ein Get_Descriptor
um den Device Descriptor abzufragen (in Kapitel 4 beschrieben). Das
ganze wird dann Setup Transaction genannt (Kapitel 3) und das komplette
Paket vom Host zum Slave sieht dann so aus:
1 | Sync-PID(Setup)-ADDR(0)-ENDP(0)-CRC5-EOP -> Sync-PID(DATA0)-DATA(Get_Descriptor)-CRC16-EOP -> Sync-PID(ACK)-EOP
|
Und die Daten für Get_Descriptor sehen wie folgt aus:
1 | 0x80 0x06 0x0000 0x0000 0x12
|
Der Slave antwortet dann darauf und sendet den Descriptor (als Data
Packet oder in welchem Format?).
Ist das soweit korrekt?
Beim Token Packet wird als Adresse und Endpoint beim Setup immer 0
gesendet, weil jedes neu angesteckte Device erst einmal diese Adresse
hat und der Endpoint 0 für die Erstkonfiguration gedacht ist. Ist das
korrekt?
Dann habe ich mir mal "Free Device Monitoring Studio" heruntergeladen um
das ganze Spiel bei einer USB-Maus mitzuverfolgen. Was mich jetzt
wundert ist, dass in den Artikeln auch noch von einem Set_Address
gesprochen wird, ich dieses aber nicht sehe.
Es wird erst der Device-Descriptor abgerufen und dann ein
Configuration-Descriptor. Wieso wird kein Set_Address gesendet?
Vielleicht kann mir ja jemand die paar Fragen eben beantworten :)
Vielen Dank schon mal
Gruß
Daniel