Hallo Leute Bin seit einigen Wochen an einem USB-HID Device am tüfteln und habe probleme mit der Kommunikation. Ich möchte vom PC max. 32Bytes an den Controller über den CONTROL-EP schicken und bin verwirrt mit all den Acks, Banks usw. Kann mir jemand sagen wie man eine vernünftige SetReport-Methode erstellt? Ich habe den komischen effekt dass meistens die ersten zwei Bytes die ich lese korrekt sind und dann kommt nur noch mist. Was muss ich genau nach einem gelesenen Byte tun und welches ereignis zeigt mir an dass wieder gültige Daten da sind? Habe mit RXOUTI, FIFOCON und TXINI experimentiert nach Datenblatt, was zwar die gelesenen Werte verändert hat, sie sind jedoch immmer noch nicht korrekt. Aber die Setup-Stage funzt, es wird die richtige Methode aufgerufen... Wäre genial wenn mir jemand einen Code-Fetzen von einer ähnlichen Aufgabe zeigen könnte oder sich mit den Mechanismen auskennt und ein paar tips geben könnte. MfG Humpe Umgebung: - AVR-Studio 4.12 mit SP und GCC - JTAG-ICE mkII - At90USB1287 auf AT90USB-Key - Beispiel-Code von Atmel als Grundlage
Da sich sonst keiner gemeldet hat: Für Linux habe ich eigenen Code geschrieben -- der funktioniert im Prinzip auch, wird aber noch verbessert und erweitert. In einigen Tagen wird es eine überarbeitete Version mit einer Beispielanwendung geben. http://www.ssalewski.de/USB-Sources/ Aber dich interessiert die Nutzung des Atmel-Codes unter Windows. Dazu kann ich nichts sagen, da ich weder Windows noch den Atmel-Code nutze. Ich hatte auch mal einen kurzen Blick in Teile des Atmel-Codes geworfen, das erschien mir aber als recht aufgebläht und unübersichtlich und eben leider nicht frei. Ich musste auch sehr viel Arbeit in die Entwicklung des USB-Codes stecken -- aber jetzt habe ich zumindest freien (GPL) Code, der funktioniert und den ich verstehe. Gruß Stefan Salewski
Vielen Dank für die Antwort! Der Code ist in der Tat ein bisschen aufgebläht, aber hat auch Vorteile wie der Scheduler zum Beispiel. Als Grundgerüst für ein Projekt ist das nicht mal übel. Hab mal einen kleinen Blick in dein Projekt riskiert und mir ist da sicher mal der Byte-Count aufgefallen... da ich eben je nach Befehl weiss wieviel Bytes ich erwarte hab ich den weggelassen. Aber der bezieht sich ja wahrscheinlich auf den HW-Buffer, oder? Bin eben noch ein bisschen Verloren im Protokoll von USB und welecher Teil die HW übernimmt und was selbst programmiert werden muss. Aber werde das mal genauer anschauen! MfG Humpe
Hast Du denn alle verfügbaren Quellcodes von Atmel? (Es gibt auch ein PDF zu deren Firmware-Architektur) Es gibt ja verschiedene Beispiele -- ich glaube mir hatte Atmel 6 verschiedene zugeschickt, in das Mouse-Archive hatte ich kurz hineingesehen. Ist wohl alles Geräteklasse HID. Ich würde mir an Deiner Stelle eines dieser Beispiele aussuchen und dann schrittweise verändern -- erstmal ganz ohne Veränderung compilieren und ausprobieren. Zu HID kann ich Dir leider überhaupt nicht helfen. Ich verwende nur die 8 Byte großen StandardDeviceRequests für Enumeration usw. Die Übertragung von Nutzdaten erfolgt bei mir über die Datenendpoints EP1 bis EP6. Auf Hostseite (PC) spreche ich mein Gerät mit LibUSB an. Gruß Stefan Salewski
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.