LPC1788 USB Device

OP #2645569
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?
Angehängte Dateien:
#2645913
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.
OP #2647110
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.
OP #2650758
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!
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.