Forum: Mikrocontroller und Digitale Elektronik USB Stack Xmega


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Martin J. (bluematrix) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
... hat sich noch niemand mit dem USB Stack vom Xmega beschäftigt?

von Basti (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
hab den Video Link vergessen: http://www.atmel.com/video/default.aspx

von Martin J. (bluematrix) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:
// #if (ARCH == ARCH_AVR8) entfernt

#define F_USB 48000000
#define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH)

main.c:
#include <LUFA/Platform/XMEGA/ClockManagement.h>

// Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it
XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);

// Start the 32MHz internal RC oscillator and start the DFLL 
// to increase it to 48MHz using the USB SOF as a reference
XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);

// Enable all interrupt levels
PMIC_CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;

Das wars im Prinzip auch schon. In den Compilersymbolen steht:
-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)


Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.