Hallo zusammen, zum Thema STM32 als USB-HID-Keyboard finde ich hier auf µC.net viele Fragen, z.B. Beitrag "STM32 USB-HID-programm" Beitrag "STM32 Fehler in USB-HID-HOST-Demo von ST" Beitrag "USB HID Frage" aber wenig Antworten. Mein Ziel ist es, eine normale HID-USB-Tastatur zu emulieren. Ich habe mir ein USB-eval-Board wie das hier besorgt: http://r.ebay.com/YQ56wP Später werden daran einfach Taster angeschlossen und das Ganze an einen PC angeschlossen werden. Bei der Erkennung eines Tastendrucks sollen dann Tastenkombinationen (so wie Ctrl+A usw) an den PC gesendet werden. Ich will sozusagen eine Sondertastentastatur "bauen". An sich ist das eine sehr überschaubare Aufgabe. Allerdings habe ich noch nie etwas mit USB gemacht. Als Entwicklungsumgebung für STM32 nutze ich die CooCox IDE mit dem ARM-GCC none EABI. Bislang habe ich nur das "Hallo Welt" (Rechtecksignal ausgeben) gemacht um zu testen, ob das Boards in Ordnung ist - mehr habe ich momentan noch nicht ausprobiert. 1. Ist dafür die STM32 USB-FS-Device Lib: Beitrag "USB HID Frage" der richtige Einstieg oder sollte man sich vorher noch mit anderen Themen beschäftigen? 2. Gibt es eine Möglichkeit (vielleicht ein PC-Programm, das alle USB-Kommunikation mit einem Geräte mitloggt oder alle Eingaben einer bestimmten Tastatur aufzeichnet oder oder ...) womit ich meine USB-Implementierung überprüfen kann? 3. Ist die CooCox "USB_FS" mit der obengenannten Library identisch? 4. Muß ich bei den USB-HID-Deskriptoren irgendetwas beachten, wenn ich das Projektchen später als Open Source weitergeben will? Viele Grüße W.T. Edit: Numerierung der Fragen hinzugefügt. Frage 3 hat sich schon fast erledigt - so ziemlich alle Variablen/Deklarationen passen zu der Beschreibung von STmicro.
:
Bearbeitet durch User
Walter Tarpan schrieb: > 4. Muß ich bei den USB-HID-Deskriptoren irgendetwas beachten, wenn ich > das Projektchen später als Open Source weitergeben will? Da du ja keine eigene, lizensierte USB Vendor ID besitzen wirst, wirst du dir für dein Projekt irgendeine VID "borgen". Für private Zwecke ist das natürlich legitim, aber der Hersteller, dem die VID gehört wird nicht entzückt sein, diese in fremdem Code wiederzufinden. Es gab schon Fälle, in denen irgendwelche Pappnasen einfach Deskriptoren aus dem Netz genommen haben, vergessen haben die VID anzupassen, und das Produkt für einen ganz anderen Hersteller auf den Markt geschmissen haben... Also am Besten die Vendor- und Product-ID im Deskriptor vor dem veröffentlichen durch einen Platzhalter ersetzen.
Walter Tarpan schrieb: > An sich ist das eine sehr überschaubare Aufgabe. Richtig, ... Walter Tarpan schrieb: > Allerdings habe ich > noch nie etwas mit USB gemacht. ... falls man sich mit USB auskennt. Walter Tarpan schrieb: > der richtige Einstieg oder sollte man sich vorher noch mit anderen > Themen beschäftigen? Mit der USB Spezifikation? Walter Tarpan schrieb: > 2. Gibt es eine Möglichkeit (vielleicht ein PC-Programm, das alle > USB-Kommunikation mit einem Geräte mitloggt oder alle Eingaben einer > bestimmten Tastatur aufzeichnet oder oder ...) womit ich meine > USB-Implementierung überprüfen kann? Protokoll-Analysator nennt man sowas. Walter Tarpan schrieb: > 4. Muß ich bei den USB-HID-Deskriptoren irgendetwas beachten, wenn ich > das Projektchen später als Open Source weitergeben will? Später? Die Deskriptoren sind das Entscheidende bei Deinem Projekt - Einlesen und Lernen oder irgendwo rauskopieren.
Die STM32 Joystick-Demo läuft jetzt auf meinem Board (mit deutlich weniger Aufwand als erwartet). Das Problem war ein bischen, daß die im CooCox-Repository liegenden Versionen der Library etwas älter sind - nachdem ich das Repository links liegen gelassen und die library aus dem Download von STmicro komplett genutzt habe, ging alles ganz einfach. Jetzt geht es darum, von der Maus zur Tastatur zu schwenken. pit schrieb: > Walter Tarpan schrieb: >> 2. Gibt es eine Möglichkeit (vielleicht ein PC-Programm, das alle >> USB-Kommunikation mit einem Geräte mitloggt oder alle Eingaben einer >> bestimmten Tastatur aufzeichnet oder oder ...) womit ich meine >> USB-Implementierung überprüfen kann? > > Protokoll-Analysator nennt man sowas. Kannst Du da ein Programm empfehlen? Viele Grüße W.T.
Tja, so ganz bin ich noch nicht weitergekommen... Das Programm "HID Demo" von ST kann keine angeschlossenen Devices erkennen (weder an einer VMware noch am PC). Bei dem Alter gehe ich mal davon aus, daß es auf 32-Bit-Systeme beschränkt ist, auch wenn im Readme nichts derartiges steht. Das "Simple HID-Write" von http://mikrocontroller.bplaced.net/wordpress/?page_id=1993 ist auch nicht mehr zu bekommen. Irgendwie fehlt mir gerade die Möglichkeit, angeschlossene USB-Geräte zu testen. Kennt jemand eine Lösung?
Walter Tarpan schrieb: > Die STM32 Joystick-Demo läuft jetzt auf meinem Board (mit deutlich > weniger Aufwand als erwartet). Das Problem war ein bischen, daß die im > CooCox-Repository liegenden Versionen der Library etwas älter sind - > nachdem ich das Repository links liegen gelassen und die library aus dem > Download von STmicro komplett genutzt habe, ging alles ganz einfach. > > Jetzt geht es darum, von der Maus zur Tastatur zu schwenken. > > Viele Grüße > W.T. Wäre es möglich das du den Code für das HID mit uns teilst? Ich würde gerne vier Tasten und eine Joystick Achse zu emulieren und suche genau das was du programmiert hast, da meine Platform auch ein STM32 ist. Wäre wirklich großartig. Geht mir wirklich nur um HID und vier Tasten + 1 x-Achse. VG E
Was gefällt euch nicht bei: http://mikrocontroller.bplaced.net/wordpress/?page_id=1993 ? Unten gibt es links für den STM und das PC Prog...
hp-freund schrieb: > Was gefällt euch nicht bei: > > http://mikrocontroller.bplaced.net/wordpress/?page_id=1993 ? Nun, daran gefällt mir nicht, daß es a) für die STM32F4-Serie ist und b) der link zu dem Werkzeug nicht funktioniert. Ersan G. schrieb: > Wäre es möglich das du den Code für das HID mit uns teilst? > Ich würde gerne vier Tasten und eine Joystick Achse zu emulieren und > suche genau das was du programmiert hast, da meine Platform auch ein > STM32 ist. Die Device-Lib gibt es hier: http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/PF258157?s_searchtype=keyword# und was Du suchst, ist das Joystick-Demo. Ich habe die Variante für das STM3210E-Demo-Board genutzt und einfach die Ports entsprechend meinem eigenen Board angepaßt. Viele Grüße W.T.
Irgendwie fehlt mir noch immer ein USB-Analyzer-Programm. Momentan hängt alles: Mit den Descriptoren aus dem Joystick-Demo funktioniert alles, mit den eigenen Descriptoren nicht. Gibt es nicht irgendeine Möglichkeit festzustellen, an welcher Stelle die Anmeldung des USB-Devices fehlschlägt?
Wie kann das sein, daß die einzige Antwort, wenn man eine Frage zum Implementierung einer HID-Tastatur auf einem STM32f10x lautet: "Ätsch, ja das ist einfach, wenn man ein USB-Experte ist!" Ich kann mir nicht vorstellen, daß das noch niemand gemacht hat, das das irgendwie Geheimwissen ist oder das meine Fragen zu unkonkret sind. Und wenn die Fragen falsch sind, wäre das ja durchaus auch eine hilfreiche Information. Momentan lautet die Frage: Wie kann man auf einem (Windows- oder Linux-) PC feststellen, woran die Enumeration eines USB-HID-Geräts schiefgegangen ist?
Hi, ich glaube einfach das du zuviel verlangst von diesem Forum :D Es gibt doch bei USB.org diesen HID Debugger bzw. von einigen Herstellern diverese USB Debugging Software Tools. Hast du keine passende gefunden? Ich denke damit könnte man das USB Debugging erleichtern und siehst wo dein Problem ist. Jedoch kann es sein, dass wenn sich das Device mit nem fehlerhaften Discr. anmeldet etwas mit der Hardware / Firmware nicht stimmt.... Ich kann dir leider nicht helfen ich bin kein USB Experte.
Walter Tarpan schrieb: > Wie kann das sein, daß die einzige Antwort, wenn man eine Frage > zum > Implementierung einer HID-Tastatur auf einem STM32f10x lautet: "Ätsch, > ja das ist einfach, wenn man ein USB-Experte ist!" Erstens ist es nicht die einzige Antwort. Zweitens ist die Antwort richtig. Du kommst bei der Fehlersuche nicht drumherum USB-Experte zu werden. Ansonsten musst du verdammt viel Glück haben durch puren Zufall die Probleme zu finden und dann noch über eine Lösung zu stolpern. > Ich kann mir nicht vorstellen, daß das noch niemand gemacht hat, das das > irgendwie Geheimwissen ist oder das meine Fragen zu unkonkret sind. Nein, aber die Erwartung ist, dass du dir das Wissen selber aneignest, statt zu versuchen dass andere für dich arbeiten. USB zu debuggen ist nervig, kompliziert und zeitaufwendig. Zu versuchen USB in einem Forum debugged zu bekommen ist naiv. > Momentan lautet die Frage: Wie kann man auf einem (Windows- oder Linux-) > PC feststellen, woran die Enumeration eines USB-HID-Geräts > schiefgegangen ist? Die Antwort hast du bereits bekommen. Sogar mehrere. Mit einem Protokoll-Analysator suchen. Gepflegt, Stück für Stück den eigenen Deskriptor durchgehen und mit dem Standard vergleichen. Ja, das ist Arbeit. Als zusätzliche Antwort, bevor du weiter jammerst: Eventuell findet man im verwendeten Treiber oder der Bibliothek Debugging-Optionen. Dazu muss man sich in den Treiber / die Bibliothek einarbeiten. Um dann zu verstehen was die beim Debuggen machen und Anzeigen - wenn überhaupt etwas - muss man wiederum USB verstehen. Also sind wir wieder beim Anfang: USB lernen.
Ich kann dir nur empfehlen etwas auf http://janaxelson.com/hidpage.htm und im angeschlossenen Forum zu stöbern. Janet hat u.a. diverse Links zu nützlichen Tools dort gesammelt. An Tools haben mir schon USBlyzer (zeitbeschränkt) und USBtreeview (Freeware) von Uwe Sieber weitergeholfen.
Micha schrieb: > An Tools haben mir schon USBlyzer (zeitbeschränkt) und USBtreeview > (Freeware) von Uwe Sieber weitergeholfe Hallo Micha, danke für die beiden Programmtipps. USBtreeview hat schon seine erste Hilfe gezeigt: Ich sollte HID-Descriptor und Report Descriptor noch einmal gründlich durchsehen... obwohl schon dreimal geschehen. Mark 99 schrieb: > [...] > Die Antwort hast du bereits bekommen. Sogar mehrere. Mit einem > Protokoll-Analysator suchen. Gepflegt, Stück für Stück den eigenen > Deskriptor durchgehen und mit dem Standard vergleichen. Ja, das ist > Arbeit. > > Als zusätzliche Antwort, bevor du weiter jammerst: Eventuell findet man > im verwendeten Treiber oder der Bibliothek Debugging-Optionen. Dazu muss > man sich in den Treiber / die Bibliothek einarbeiten. Um dann zu > verstehen was die beim Debuggen machen und Anzeigen - wenn überhaupt > etwas - muss man wiederum USB verstehen. Also sind wir wieder beim > Anfang: USB lernen. > [...] Hallo Mark 99, "mit einem Protokoll-Analysator suchen"...diese Info ist jetzt schon mehrmals gekommen. Das ist ungefähr so hilfreich wie "benutze ein passendes Landfahrzeug, wenn Du nach Niederfischbach willst". Hilfreich wäre eine Information gewesen wie "Ich habe mal Wireshark/USBPcap für einen ähnlichen Zweck ausprobiert. Bas braucht aber etwas Einarbeitung und man muß das Beobachten ständig unterbrechen, um sich die Ergebnisse anzugucken." Die Debug-Optionen baue ich in die Library gerade ein. Nur leider unterscheiden sich die Debug-Ausgaben eines funktionierenden Devices (Maus) und des nicht-funktionierenden Devices (Tastatur) so wenig, daß sich dadurch nicht so schnell feststellen läßt, ab welcher Stelle Windows der Meinung ist, daß ihm das USB-Device nicht gefällt (siehe angehängtes Log). Mark 99 schrieb: > [...] > Nein, aber die Erwartung ist, dass du dir das Wissen selber aneignest, > statt zu versuchen dass andere für dich arbeiten. USB zu debuggen ist > nervig, kompliziert und zeitaufwendig. Zu versuchen USB in einem Forum > debugged zu bekommen ist naiv. > [...] Die HID-1.11-Spezifikation und die Hut- 1.12v2-Spezifikation sind für Spezifikationen richtig gut geschrieben. Lesbar. Und ich wüßte keinen Grund, warum man sich darum drücken sollte. Auch hier wieder: " ... die Erwartung ist, dass du dir das Wissen selber aneignest ..." ist wenig hilfreich. Besser wäre gewesen: "Bei http://www.beyondlogic.org/usbnutshell gibt es einen prima Erklärungen zu Sachen, die im USB-Standard nicht so gut erklärt sind und gibt sogar noch Tipps, in welcher Reihenfolge man das gut lesen kann". Aber beides wäre ohnehin eine Antwort auf eine Frage gewesen, die nicht gestellt war. Ich frage niemanden danach, ob er meine Arbeit macht (auch wenn's nur Hobby ist). Ich frage nur danach, ob jemand, der das schon gemacht hat, einen Tipp geben kann, um lange Irrwege zu vermeiden. Was ist daran verkehrt? Viele Grüße W.T.
Das Programm "USB Tree View" war tatsächlich das, was mir zu meinem Glück gefehlt hat. Es war ein "one-off"-Tippfehler im Report Descriptor.
Nachtrag: Ich habe den vorherigen Beitrag gelöscht, damit sich niemand durch meinen ekligen Quelltext hangeln muß, um eine Frage, deren Antwort ich schon gefunden habe, zu beantworten. Sinngemäß ging es darum, daß ich auf die Mithilfe jemandes hoffte, der soetwas schon einmal gemacht hat. Ich nutze die STM32_USB-FS-Device_Lib_V4.0.0 auf einem STM32F103C8T6, der auch schon korrekt als HID-Keyboard erkannt wird, und der Tastendrücke korrekt an den PC schickt. Wenn der PC die Tastatur-Status-LEDs ändern will, schickt er zweimal einen ein Byte großen Set Report, der mit einem "Stall" quittiert wird, wenn innerhalb des Data-Setup-Callbacks für SET REPORT nicht die passende CopyRoutine hinterlegt ist. Im "CustomHID"-Beispiel ist die fehlende Funktion als "CustomHID_SetReport_Feature" implementiert und kann direkt an der gleichen Stelle übernommen werden. Und wer sich wirklich gerne durch meinen ekligen Quelltext quält, kann gerne das Gesamtpaket haben, sobald es fertig ist. Von der Funktion ist jetzt alles vollständig. Jetzt geht es noch darum, ein paar wichtige Details genau zu verstehen und das Ganze anschließend schön zu machen. Danke nochmal für die passenden Werkzeuge. Sie haben auf dem Endspurt sehr geholfen. Viele Grüße W.T.
:
Bearbeitet durch User
Hallo, ich möchte das selbe tun wie Walter... ich will mit dem STM32f103c8T6 Minimal Board Tastaturdrucke statt einer echten Tastatur an den PC schicken. Habe das Beispiel Custom_HID compiliert und auf das Stm32 system gespielt. es wird auch richtig als STM32 Custm HID device von Windows erkannt. wie schicke ich nun konkret ein Tastendruck raus? aus dem Interrupt habe ich die Zeilen: Send_Buffers[0] = 0x01; Send_Buffers[1] = 0x19; PrevXferComplete = 0; USB_SIL_Write(EP1_OUT, (uint8_t*) Send_Buffers, 2); SetEPTxValid(ENDP1); kopiert und ausgeführt. Das Problem ist: es passiert nichts auf der PC Seite? Gruß, Michael
Michael schrieb: > Das Problem ist: es passiert nichts auf der PC Seite? Das wundert mich nicht. Du brauchst einen gültigen HID-Descriptor einer Tastatur - sonst weiß der PC ja nicht, wie er das Telegramm interpretieren soll: Als Maus- oder Joystick-Bewegung, als Tastendruck, als Braille-Zeile oder sonstwas. Hier ist mein fertiges Projekt: http://dl1dow.de/artikel/hid_keyboard/index.htm Da solltest Du alles passend zusammenkupfern können. Viele Grüße W.T.
Danke Walter, jetzt tut alles so wie es soll. Bei Bedarf kann ich mein Projekt auch noch hier reinstellen... Gruß, Michael
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.