Forum: Mikrocontroller und Digitale Elektronik Kommunikation mit AT90USB


von Humpe (Gast)


Lesenswert?

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

von Stefan Salewski (Gast)


Lesenswert?

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

von Rolf W. (humpe)


Lesenswert?

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

von Stefan Salewski (Gast)


Lesenswert?

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