Forum: Mikrocontroller und Digitale Elektronik LPC1788 USB Device


von Alexander F. (alexf91)


Angehängte Dateien:

Lesenswert?

Guten Abend
Da ich für ein schon etwas länger laufendes Hobbyprojekt eine 
USB-Verbindung realisieren möchte, arbeite ich seit einiger Zeit an der 
Implementierung eines USB-Devices mit einem LPC1788.
Empfangen von Paketen funktioniert eigentlich schon ganz gut (jedenfalls 
für das 1. Paket mit dem GET_DESCRIPTOR Request), jedoch wird die 
Antwort (Descriptor) nicht gesendet. Ich sehe jetzt schon seit ca. 2 
Stunden Datenblatt und Code durch und komme einfach nicht weiter. Ich 
vermute dass der Fehler in der Initialisierung liegt, da die Funktion 
USB_WriteEndpoint im Prinzip genau nach UserManual implementiert ist. 
Wenn ich den Error Status der SIE abfrage, kommt als Rückmeldung 
"Timeout" und "PID Error". Weiß vielleicht sonst jemand Rat?

von Jim M. (turboj)


Lesenswert?

Eventuell hilft ein Blick in die USB Spec:
Das erste, was der Host mit einem Device macht, ist die Zuweisung der 
USB Adresse. Das scheint in Deinem Code noch zu fehlen.

Außerdem schreibst Du 17 Bytes auf den EP0, der darf aber nur 8 auf 
einmal bekomme, siehe UM10360.pdf, 11.10.4.4: USB MaxPacketSize 
register.

von Alexander F. (alexf91)


Lesenswert?

Die maximale Paketgröße habe ich jetzt mal auf 8 Byte gesetzt, der 
Device Descriptor wird jetzt auf 3 Pakete aufgeteilt und gesendet. 
Ankommen tut trotzdem nichts (es wird auch kein EP0_TX Interrupt 
ausgelöst).
Das mit dem GET_DESCRIPTOR als erstes müsste so richtig sein, der Ablauf 
ist, soweit ich weiß:
GET_DESCRIPTOR Request
GET_DESCRIPTOR Response
SET_ADDRESS Request
SET_ADDRESS Response

Jedenfalls wird das bei meiner USB-Maus so durchgeführt.

von Alexander F. (alexf91)


Angehängte Dateien:

Lesenswert?

Hier der derzeitige Stand.
Der Enumeration-Process funktioniert soweit, die weiteren Anpassungen 
erfolgen also an den einzelnen Deskriptoren. Weiters müssen natürlich 
noch einige Requests implementiert werden. Ich habe versucht, bei der 
Programmierung eine möglichst klare Linie einzuhalten, so dass der Code 
eventuell auch für andere zu verwerten ist. Da dies aber das erste 
größere Projekt ist, wo ich auch Code für etwas höhere Schnittstellen 
von Grund auf neu schreibe bin ich mir nicht sicher, ob das auch 
geklappt hat...

Das Ziel des Projekts ist Gestenerkennung über einen 
Beschleunigungssensor, eventuell in Verbindung mit einem Gyro, das Ganze 
als HID, derzeit arbeite ich aber nur an der USB Verbindung. Als 
Prototyping Board benutze ich das LPC1788-32 Developer's Kit von 
Embedded Artists, später soll das ganze aber wenn möglich auf einem 
LPC1343 laufen.

Über eventuelle Verbesserungsmöglichkeiten (die mit Sicherheit vorhanden 
sind) würde ich mich natürlich freuen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.