Forum: Mikrocontroller und Digitale Elektronik AVR32 <-USB->PC


von didi (Gast)


Lesenswert?

hallo!

ich möchte an einen AVR32 UC3A0256 die USB schnittstelle anwerfen und an 
pc seite ebenfalls ein programm schreiben, damit ich dann daten vom uC 
an PC und vom PC an uC schicken kann, um so logs etc auszulesen und 
andere daten aufzuspielen

jetz habe ich das Beispiel vom AVR zur verwenden der USB schnittstelle 
gestartet und werke sicher schon 40 stunden herum, aber außer dass sich 
der uC als HID maus angemeldet hat (was er jetz nicht mehr macht) ist da 
nichst gelaufen, na gut, mein mauszeiger ist davongefahren... das ist 
aber auch schon das startprojekt

jetzt meldet sich der uC als USB device an, Windows erkennt dies aber 
schon nicht mehr richtig, also hat keinen passenden treiber, somit 
meldet sich der uC falsch an...

ich bin mir sicher dass schon einer von euch so etwas lauffähiges hat, 
würde mich über einige tips und hilfe freuen!

danke im voraus

didi

von guest (Gast)


Lesenswert?

Warum Maus? Welches Beispiel hast du verwendet?
Wenn du nur Daten wie Logs austauschen möchtest, es also nicht auf hohe 
Geschwindigkeit ankommt, reicht die CDC Klasse zu verwenden zu der es 
auch ein Beispiel im AVR32Studio gibt.
Treiber auf PC Seite braucht es dazu nicht. Der AVR32 wird dann als 
serielle Schnittstelle erkannt.

von didi (Gast)


Lesenswert?

hallo!

das projekt habe ich ebenfalls probiert, jedoch funkitoniert dies auch 
ohne meines beituns nicht auf meinem board (ich habe nicht das eval 
board, sondern eines das sehr daran angelehnt ist, aber ohne jegliche 
taster, leds etc..)
das usb hid bsp läuft zumindest, darum dachte ich wär das ein guter 
ansatz.
ich müsste doch nur irgendwie die device descriptor vom MAUS auf etwas 
anderes ändern, einen zweiten endpoint einfügen und dann müsste das doch 
auch funktionieren?

Treiber schreib ich eh keinen, da das Ding ja als HID gerät erkannt wird 
(werden soll) und so ich mit ein paar API funktionen zugriff darauf 
hätte, das meinte ich mit programm, damit kann ich dann die daten 
ein-bzw auslesen

da ich vorher noch nichts mit usb gemacht habe, wollte ich halt auf dem 
USB HID aufbauen, da dieses funktioniert

lg

von didi (Gast)


Lesenswert?

hallo nochmal!

ich möchte meine schaltung als HID indentifizieren, da hierfür die 
windowstreiber reichen und ich somit bei kommerzieller nutzung dann 
keine probleme bekomme, falls ich irgendwelche treiber für andere USB 
devices brauchen würde

also meine bitte, wie mache ich daraus ein HID gerät, welches nicht die 
normale umgebung beeinflusst (zB Maus/Keyboard) und wo genau soll ich 
das anhand des Bsp der HID maus ändern? ich habe da schon so ziemlich 
alle Einstellungen geändert, jedoch war es immer eine HID maus bzw dann 
ein nicht richtig erkanntes HID gerät??

lg didi

von didi (Gast)


Lesenswert?

hallo

hat keiner ideen, wie ich das über HID lösen kann? ich möchte es nicht 
auf einen virtuellen COM aufbauen, wenn USB schon vorhanden ist, soll 
das auch richtig verwendet werden

mfg

von didi (Gast)


Lesenswert?

hi!

kleiner fortschritt wurde geschafft, mein µC meldet sich am pc an, und 
hat zwei erkannte endpoints, einen IN und einen OUT, soweit sogut, aber 
irgendwo ist noch ein fehler, weil er immer noch als HID Maus erkannt 
wird, zwar nicht fehlerfrei (gelbes rufzeichen bei der maus im geräte 
manager), aber er wird eine maus.

ich habe aber schon ziemlich alles probiert, die maus weg zu bekommen 
und ein HID konformes gerät anzumelden, hat bisher nicht geklappt
der report descriptor wurde komplett geändert..

wenn wer hinweise hat, wie ich da weiter mache, bitte melden

von didi (Gast)


Lesenswert?

soo, ich habe jetz den übeltäter gefunden... WIndows... merkt sich 
leider eine PID und VID und da diese Kombi einmal eine Maus war, glaubt 
Windows daraus immer wieder eine machen zu müssen, auch wenn der Report 
Descriptor komplett geändert wird!

abhilfe war hier einfach die PID zu ändern, jetzt habe ich ein HID 
konformes gerät mit zwei endpoints, das heisst jetzt gehts an die PC 
seitige programmierung

falls dazu einer Tips hat, immer her damit, vielleicht sind es ja etwas 
mehr als zuvor

von didi (Gast)


Lesenswert?

anscheinend interessiert es eh keinen, aber meine HID Enumeration 
funktioniert und jetzt mittlerweile auch meine Kommunikation zwischen Pc 
und uC

vielen Dank für die "Hilfe"

von Stefan (Gast)


Lesenswert?

Hallo Didi,

schade, dass Dir keiner geholfen hat. Habe diesen Thread leider erst 
heute entdeckt (hätte aber auch nicht helfen können ...).

Deine Arbeit interessiert mich sehr! Ich habe gerade eine schicke kleine 
Platine gemacht, mit ATMEGA32, 16 Lasttreibern, Fernbedienung und USB.
USB läuft bei mir unprofessionell über FT232 und COM-Programm.
Eine echte Implementierung von USB wäre da schon schick!

Zumal ich meinen Anwendern die Möglichkeit bieten möchte, unkompliziert 
per USB und Bootloader neue Software einzuspielen.

Doch die Einarbeitung in USB und Bootloader und so weiter ist echt der 
Hammer! - Wäre toll, an Deinen Erfahrungen teilhaben zu können!

von Brott (Gast)


Lesenswert?

Hi didi,

auch ich sehe deinen thread erst jetzt.

Bis jetzt habe ich auch nur die usb > Serial kommunikation in Betracht 
gezogen, weil mir alles andere zu umfangreich erschien.

Ich bin jedenfalls auch an deiner Loesung interessiert und moechte dich 
ermutigen, deine Erfahrungen zu teilen. Vielleicht magst du ja deinen 
code offenlegen oder etwas zur Artikelsammlung beisteuern.

Dass keiner auf deine Posts reagiert finde ich auch etwas schade.

Auf jeden Fall cool, dass dus geschafft hast.

von didi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Freut mich das sich zumindest irgendwer dafür interessiert!

@Stefan:
mit dem Atmega32 wird mein programm nicht wirklich helfen, da musst du 
halt alles umkupfern auf den mega, da ich den AVR32 verwendet habe. 
Dieser hat ja USB unterstützung, darum sind sehr viele Funktionen schon 
im Framework des AVR32 Studios inbegriffen. Die Deskriptoren wirst du 
aber sicher verwenden können.

Wer einmal im AVR32 Studio ein Bsp-Prog. öffnet, stellt fest dass dort 
alles in einige files zerlegt ist.

Eine gute Möglichkeit zu starten ist das USB-HID beispiel, wie ich 
benutzt habe.
Die wichtigeren Files habe ich angefügt, geändert muss aber auch in 
folgenden Dateien etwas werden:
°usb_standard_request   .h und .c
°usb_specific_request   .h und .c

Hierbei geht es Hauptsächlich um die richtige Anmeldung am PC, also dass 
man eben nicht nur einen Endpoint sondern zwei registriert und 
initialisiert, sind in diesen files nur ein paar zeilen.

Im usb_descriptor.h müssen eben die Descriptoren auf ein HID device 
geändert werden, und nicht wundern, sind nur Kleinigkeiten im Bezug zum 
Maus Projekt. Im .c ist dann der Report Descriptor zu ändern/neu zu 
erstellen, um eben mit den Daten machen zu können was einem beliebt.

die Files device_hid_task.h und .c sind dann die Funktionalitäten des 
Devices, wie bei mir, dass es auf eine Startsequenz vom Host beginnt 
Daten an PC zu senden bzw Daten vom PC zu empfangen. Ich habe das ganze 
mit einem einfachen Protokoll gelöst, dass keine Daten verloren gehen, 
wenn ein Part (Host /device) zu langsam sind beim empfangen. Habe eine 
packetnummer eingefügt, bis das gesendete apcket von der gegenseite 
bestätigt wird, sendet die andere seite fröhlich das gleiche packet 
raus.

wenn ihr noch Hilfe bei dem Code für den µC braucht, meldet euch, 
genauso wenn ihr Code vom PC seite braucht.

Didi

von michael (Gast)


Lesenswert?

Hallo Didi,

ich interessiere mich auch für die USB Programmierung auf dem UC3, 
versuche gerade die Informationen für Manufacturer, Product, 
Serialnumber einzustellen.
Im CDC example steht der Index auf 0.
Bei Dir sind diese drei Werte mit 0x01, 0x02, 0x03 gesetzt. Wird das bei 
Dir am PC bei der Erkennung auch angezeigt?

Gruß
Michael

von Didi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Also, wenn das neue device angesteckt wird, sieht man kurz den 
manufacturer string, danach sieht man im Gerätemanager nur den 
Productstring, anbei das Foto vom Gerätemanager.

CDC meldet sich ja nicht mit diesen Daten an, da am PC ja nur ein 
virtueller COM Port entsteht, daher ist dieses Bsp nicht ganz so 
sinnvoll wenn du auf HID umbauen willst.

von Didi (Gast)


Lesenswert?

Hallo an die noch schlaueren!

Ich habe jetzt die Kommunikation zwischn Device und PC, es geht auch in 
beide Richtungen, aber wie schnell kann es denn nun maximal gehen? es 
sollten doch jede ms ein Report hin und her geschickt werden, tut es 
aber nicht! bei mir ist das nur alle 2 ms laut sniffer, dass heisst ich 
habe einen Datendurchsatz von 32 KB/sek und nicht die erhofften 64 
KB/sek

Vielleicht schaut ja einer rein der sich damit auskennt

von Thomas B. (escamoteur)


Lesenswert?

Als was für ein HID- Device wird Dein AVR32 denn erkannt?

Welchen Windowsteiber benutzt Du dann zum Zugriff?

Gruß
Tom

von Didi (Gast)


Lesenswert?

Das Device wird als HID konformes Gerät erkannt, standart Windows 
treiber für HID Geräte, zugriff mittels WINAPI und dann über HANDLE 
read/writefile

gruß didi

von Thomas B. (escamoteur)


Lesenswert?

Ich dachte HID-Geräte müsensten immer einer bestimmten Klasse angehören 
(Maus etc.) Wusste nicht, dass es da auch ein Generic HID device gibt.

Gut zu wissen

Tom

von Didi (Gast)


Lesenswert?

Wenn man ein Device als Maus oder Tastatur oder Joystick anmeldet, hat 
man das Problem, das WIndows ein exklusives zugriffsrecht darauf hat, 
man kann also mit den gesendeten daten nichst anfangen, da NUR Windows 
darauf zugreifen darf. darum nimmt man auch die generic devices, da 
Windows mit diesen nichts macht (komisch mit dem zeiger fahren, 
buchstabe schreiben etc.) und man zugriff auf das device bekommt!

mir reichen die 32 KB/sek jetzt aber und ich lasse das jetzt

gruß didi

von Thomas B. (escamoteur)


Lesenswert?

Sind die 32 KB/sek das maximumg was man über ein HID-Treiber bekommt, 
oder liegt das am AVR32?

Gruß
Tom

von Didi (Gast)


Lesenswert?

Das ist eine gute frage, ich weiß es nicht :-( ich sehe nur im USB 
sniffer, dass alle 2 ms ein packet gesandt wird, egal in welche 
richtung, schneller wird es nicht mehr..

Falls mir noch irgendwo ein fünkchen an info zufliegt, mit dem ich das 
lösen kann, werd ich es posten, zur zeit sieht es aber schlecht aus, da 
sich noch nicht viele an eine reine HID programmierung getraut haben, 
die meisten haben entweder ein CDC Interface oder mit einem FTDI chip 
gearbeitet

gruß
dieter

von Karsten D. (karstendonat)


Lesenswert?

Hallo,

zu Device wird immer als Maus erkannt:
man kann schonmal enumerierte Geräte im Gerätemanager komplett löschen:

1. Gerätemanager freischalten
in den Systemeinstellungen die Systemvariable (nicht User!) 
DevMgr_Show_NonPresent_Devices=1 setzten

2. im Gerätemanager "Ansicht - Ausgeblendete Geräte anzeigen" aktivieren
jetzt kann man auch nicht mehr vorhanden Geräte entfernen (da sollte man 
gerade als Entwickler gelegentlich mal aufräumen). Die sind dann grau.


zur Geschwindigkeit:
Ich hab bisher immer mit CDC gearbeitet, will aber auch wie du über HID 
o.ä. ran um parallel ein Laufwerk zu simulieren. Bei CDC komm ich 
durchaus auf 1Mbps. Sicher läufts zumindest bis 0,5Mbps. Mein Problem 
mit 1Mbps dürfte aber am Bluetooth Port hängen. Das hatte ich zu 
Testzwecken durchgeschleift. 1Mbps sollte eigentlich laufen.


Das Beispiel von den Examples mit USB geht eigentlich. Zur Übersicht 
kann man auch den ganzen Host krahm löschen.

Karsten

von Marcel K. (marcelk)


Lesenswert?

Hallo zusammen,

ich habe ein paar Fragen zur Realisierung einer USB-Verbindung.
Kurz zum Problem:
Ich möchte zwischen einem PC und einem AVR32 UC3 eine USB-Verbindung 
herstellen und Messdaten aus einem externen Flash-Spiecher auf den PC 
kopieren.

Wie umfangreich ist denn das Software Framework zu dem µC? Sind dort 
schon entsprechende Funktionen vorhanden? Die Application Notes haben 
mich in dieser Hinsicht leider nicht weiter gebracht.

Alternativ könnte man die Daten auch auf einen USB-Stick kopieren oder 
eine SD-Karte anschließen.
Habt ihr Erfahrungen in diesem Bereich?

Viele Grüße,
Marcel

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.