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.
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.
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
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.
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
>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...
@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.
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.
der oben genannte Stack von https://github.com/nonolith/USB-XMEGA basiert auch auf dem LUFA Projekt, aber damit habe ich es nicht hinbekommen. :-(
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.