Forum: Mikrocontroller und Digitale Elektronik USB Stack Xmega


von Martin J. (bluematrix) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

hat jemand schon Erfahrungen mit den internen USB Modulen der Xmega 
Familie  gemacht? Momentan versuche ich eine USB Kommunikation von einem 
Xmega128A3U zum PC herzustellen. Leider bisher ohne Erfolg.

Für die Verbindung verwende ich den USB Stack von nonolith, dieser wurde 
schon erfolgreich bei mehreren auf einem xmega32A4U eingesetzt.
die original Dateien für den USB Stack findet man unter 
https://github.com/nonolith/USB-XMEGA
Trotz der umfangreichen Bibliothek konnte ich bisher keine Verbindung 
herstellen. Leider kann ich auch keine einzige Reaktion an den 
entsprechenden Pins D+ und D- mit dem Oszi erkennen. Bei allen Xmegas 
sind das es die gleichen Pins, PortD Pin 6 und 7.
Zur Programmierung des Xmega128A3U nutze ich das AVR Studio 5.1

Ich würde mich freuen, wenn mir jemand helfen könnte das Problem zu 
finden.
Dafür habe ich das von mir erstellte AVR Studio Projekt in den Anhang 
gepackt.

Grüße Martin

... ja der Controller ist von der aktuellen Xmega Version 
(Xmega128A3U)und hat somit schon ein internes USB Modul.

von tobi (Gast)


Lesenswert?

morgen allerseits,
das ist ein sehr interessantes Thema.
Habe gerade gesehen, das der Stack auch schon bei anderen Projekten 
verwendet wurde. Der Controller war jedoch immer der xmega32A4U, also 
immer der gleiche.

von tobi (Gast)


Lesenswert?

... hat sich noch niemand mit dem USB Stack vom Xmega beschäftigt?

von Basti (Gast)


Lesenswert?

Wer denn nun, Martin oder Tobi?

Ich habe schon einige an USB am rennen... aber mit der Atmel lib... also 
der ASF...
Find ich ganz gut... geht auch ordentlich Flott wenn man nix zu rechnen 
hätte... also 5 MBit sind drin!

(bis jetzt nur CDC benutzt und MMC mal angetestet)

Grüße

Basti

von Markus W. (Gast)


Lesenswert?

ich verwende die USB stacks vom Atmel Studio 6 auf einem Xmega256A3U 
ohne Probleme, ich hab die Beispiele die im Software Framework als 
Startpunkt genommen. Was dann auch hilfreich wäre ist folgende 
Step-By-Step Anleitung wenn man das USB Modul vom Software Framework ins 
eigene Projekt einbindet:
API Beschreibung (für CDC)
http://asf.atmel.com/docs/latest/xmegaau/html/group__udi__cdc__group.html

Und der Quickstart Guide:
http://asf.atmel.com/docs/latest/xmegaau/html/udi_cdc_quickstart.html

Wenn man das Schritt für Schritt befolgt dürften zukünftige USB Projekte 
in 5min gelingen :)

Schau Dir auch die Videos dazu an, dort ist eigentlich auch erklärt wie 
man USB vom Xmega nutzt. Findest dort ein 5-Teiliges Training Video 
fängt mit "ASF Design ..." an, dort wird z.b. gezeigt wie man einen USB 
HID Treiber anbindet.

Den erwähnen Nonolith Stack kenn ich nicht, keine Ahnung was man da 
machen muß um das Projekt zu portieren, vielleicht stimmt das Pin 
Mapping nicht überein da der 128A3U ein größeres Package hat. Wenn Du 
den Nonolith Stack verwenden willst anstelle der Atmel eigenen Treiber, 
wird dir hier wahrscheinlich kaum einer helfen können.

von Markus W. (Gast)


Lesenswert?

hab den Video Link vergessen: http://www.atmel.com/video/default.aspx

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Hallo,
ich habe mir gestern noch ein atmel Beispielprojekt (im AVR Studio) 
angesehen, jedoch ist da soviel Müll drin, da dort alles mit allen 
Boards funktionieren muss.
@ Markus W.
Danke für die Links, die hab ich bisher noch nicht gefunden. Wenn du 
schon so viel mit dem USB gearbeitet hast, kannst du mir da mal mal ein 
brauchbares Beispiel Projekt in den Anhang packen? Es kann auch für den 
von dir verwendeten Xmega256A3U sein.

Vielen Dank
Martin

von Basti (Gast)


Lesenswert?

>ich habe mir gestern noch ein atmel Beispielprojekt (im AVR Studio)
>angesehen, jedoch ist da soviel Müll drin, da dort alles mit allen
>Boards funktionieren muss.

aha, Beispiel? #ifdef zählen nicht, die landen nicht im hexfile...

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

@Basti
Was willst du?
Schau dir die Beispiele im AS an, dort ist alles mit allem aus dem ASF 
verlinkt. Ich wollte nur den USB Teil daraus haben, aber das zu 
entmüllen macht nicht wirklich Spaß.
Also wenn du ein brauchbares Beispiel hast bei dem nur ein paar Daten 
per USB versendet werden, wäre ich sehr dankbar.

von Fabian O. (xfr)


Lesenswert?

Du kannst Dir auch mal die LUFA anschauen. Die Xmega-Unterstützung gilt 
allerdings noch als experimentell, daher gibt es in den offiziellen 
Quellen leider noch keinen Beispielcode für den Xmega. Der Autor hat 
aber in diesem Thread ein paar Demos gepostet:
https://groups.google.com/forum/#!topic/lufa-support/ql7ScMDshZ4

Neben der richtigen Einstellung der Taktquellen muss man für den Xmega 
nur sehr wenig ändern, dann sollten auch die ganzen Beispiele für die 
normalen AVRs funktionieren. Bei mir läuft es auf einem Xmega128A4U 
jedenfalls ganz gut.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

der oben genannte Stack von https://github.com/nonolith/USB-XMEGA 
basiert auch auf dem LUFA Projekt, aber damit habe ich es nicht 
hinbekommen. :-(

von Basti (Gast)


Lesenswert?

Ja natürlich, die benutzen ihre eigenen lowlevel Treiber in der USB lib 
und damit ist das tief in C verflochten. Deswegen ist das aber nicht 
uneffektiv und von überflüssigen Code durch tausend mögliche Userboards 
kann ich auch nichts berichten.

Wenn du den einfachen Weg willst, machs wie wir (Markus). Nimm das Atmel 
Studio 6 und die neuste ASF. Mach dir ein neues Projekt und drücke auf 
"USB Treiber CDC" einfügen, mache deine USB Settings in der Config Datei 
und freu dich das es Befehle gibt wie: read and write für USB...

Oder anderer Weg, aber der hat ja nicht geklappt und da kann ich dir 
auch nicht weiterhelfen...

Grüße

Basti

von Fabian O. (xfr)


Lesenswert?

Da mich jemand gefragt hat, wie ich die LUFA mit dem XMEGA zum Laufen 
gebracht habe, hier meine Änderungen gegenüber einem ATmega-Projekt:

LUFAConfig.h:
1
// #if (ARCH == ARCH_AVR8) entfernt
2
3
#define F_USB 48000000
4
#define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH)

main.c:
1
#include <LUFA/Platform/XMEGA/ClockManagement.h>
2
3
// Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it
4
XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
5
XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
6
7
// Start the 32MHz internal RC oscillator and start the DFLL 
8
// to increase it to 48MHz using the USB SOF as a reference
9
XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
10
XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
11
12
// Enable all interrupt levels
13
PMIC_CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;

Das wars im Prinzip auch schon. In den Compilersymbolen steht:
1
-DF_CPU=32000000 -DUSE_LUFA_CONFIG_HEADER -DARCH=ARCH_XMEGA

Außerdem habe ich die C-Dateien aus LUFA/Core/XMEGA ins Projekt 
eingefügt statt LUFA/Core/AVR8. An den Descriptors habe ich nichts 
geändert.

von BP (Gast)


Lesenswert?

Markus W. schrieb:
> API Beschreibung (für CDC)
> http://asf.atmel.com/docs/latest/xmegaau/html/group__udi__cdc__group.html
>
> Und der Quickstart Guide:
> http://asf.atmel.com/docs/latest/xmegaau/html/udi_cdc_quickstart.html

Hallo,

kann mir jemand evtl. den aktuellen Link zu den oben genannten Dateien 
geben?
Ich konnte die Dateien über die Atmelseite leider nicht finden.

Vielen Dank!

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.