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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.