www.mikrocontroller.net

Forum: Compiler & IDEs AT90USB Software Library für avr-gcc?


Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hat irgend jemand schonmal mit den AT90USB und dem GCC gearbeitet? Gibt 
es vielleicht einen Port der Library von Atmel auf den avr gcc?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage verstehe ich nicht.  Wenn ich mir die Zipfiles aus den
Appnotes auspacke, dann gibt's da überall ein Verzeichnis "iar"
und ein Verzeichnis "gcc" drin.  Das gcc-Verzeichnis enthält dabei
außer einem Makefile und einem .aps-File (für AVR Studio) auch noch
die Compilate, also ist das Ganze offensichtlich auch mal damit
compiliert worden. ;-)

Außerdem gibt's noch Dean Cameras "myUSB".

Eine Implementierung für den RZRAVEN-USB-Stick gibt es in der
"RES" (radio evaluation software):

http://www.atmel.com/dyn/resources/prod_documents/...

Schließlich und endlich habe ich dem µracoli-Projekt:

https://savannah.nongnu.org/projects/uracoli/

noch eine CDC-Implementierung für AT90USB1287 & Co. spendiert, die
einen eher minimalistischen Ansatz verfolgt (ca. 1500 Zeilen C-Quelle
und knapp 500 Zeilen Header), während die anderen Projekte eher
umfassend sind (Host- und/oder Device-Implementierung, beliebige
USB-Klassen, adaptierbar für alle möglichen USB-Controller).

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade herausgefunden das die Library anscheinend so ausgelegt 
ist das sie für IAR und GCC funktioniert. Ich muss da Atmel echt mal 
loben.

Jetzt muss ich nur noch durchsteigen. Hat das schonmal jemand verwendet? 
Erfahrungen?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avrfan wrote:

> Jetzt muss ich nur noch durchsteigen.

Das ist genau der Punkt, warum ich das CDC (Emulation eines seriellen
Geräts) für µracoli neu geschrieben habe. ;-)  Die Komplexität der
anderen Implementierungen ist mehr als erschlagend.  Natürlich habe
ich es nicht neu geschrieben, ohne dabei auf den existierenden Code
zu schielen, man will ja schließlich nicht alle Fahrräder neu
erfinden.

Leider müsste man für eine Portierung auf AT90USB82/162 aber nochmal
einiges darin umschreiben, da diese Lowcost-Controller eine ziemlich
abgerüstete Variante des USB-Makros enthalten.

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,
da haben wir wohl zeitgleich gepostet :)

>Leider müsste man für eine Portierung auf AT90USB82/162 aber nochmal
>einiges darin umschreiben...

Meinst du damit deine eigene Implementierung? Ich will nämlich den 
USB162 verwenden. Brauch den nur als Device. Host ergibt irgendwie wenig 
Sinn bei dem.

Naja, mal durch die Doku und die Sourcen schlagen

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avrfan wrote:

> Meinst du damit deine eigene Implementierung?

Ja.

> Ich will nämlich den
> USB162 verwenden. Brauch den nur als Device. Host ergibt irgendwie wenig
> Sinn bei dem.

Hat nicht viel mit Host und Device zu tun: es gibt auch die ,,großen''
USB-AVRs in einer Version, die nur Device sein kann (AT90USB646 und
AT90USB1286).  Bei den ,,kleinen'' ist allerdings nochmals einiges
im Bereich des Businterfaces abgerüstet worden, da gibt es beispiels-
weise keine automatische Behandlung von Vbus-Änderungen mehr und sowas,
soweit ich das in Erinnerung habe.  Meine µracoli-Implementierung
benutzt aber diese Features im AT90USB64x/128x allesamt mit, daher
müsste ich sie umschreiben für den AT90USB162.

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Lib von Dean kann ich nur empfehlen. Früher hiess die MyUSB, 
seit kurzem LUFA. http://www.fourwalledcubicle.com/LUFA.php

Die ist deutlich aufgeräumter und einfacher nutzbar als die Atmel-"Lib" 
und auf GCC ausgelegt. Ausserdem ist sie durchgängig kommentiert und 
durch ein wenig preprocessor-magic auch auf allen USB-fähigen AVRs ohne 
grosse Anpassungen(nur ein paar defines) nutzbar.

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bei den ,,kleinen'' ist allerdings nochmals einiges
> im Bereich des Businterfaces abgerüstet worden, da gibt es beispiels-
> weise keine automatische Behandlung von Vbus-Änderungen mehr und sowas,
> soweit ich das in Erinnerung habe.

Was meinst du mit "automatischer Behandlung von VBUS-Änderungen? 
Interrupt oder so wenn man es vom USB-Bus trennt?

Ich hab halt momentan das problem das ich versuche einen AT90USB162 fest 
an einem Board anzuschliessen. Nur bisher hab ich noch keinen weg 
gefunden einen Reset des Boards zu erkennen um dann auch den Chip zu 
resetten.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avrfan wrote:
> Hi,
> hat irgend jemand schonmal mit den AT90USB und dem GCC gearbeitet? Gibt
> es vielleicht einen Port der Library von Atmel auf den avr gcc?

Hast du dir schon LUFA angesehen?
http://www.mikrocontroller.net/articles/USB#Spezie...

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich sag mal so, auf der Seite gibt es Demo Sourcen für das STK526, 
also für AT90USB162

http://www.atmel.com/dyn/products/tools_card.asp?t...

Sollte also kein Thema sein. Bin aber noch am "durchsteigen" ;)

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Jetzt muss ich nur noch durchsteigen. Hat das schonmal jemand verwendet?
> Erfahrungen?

Ja, hab vor einiger Zeit basierend auf der Lib ein HID-konformes Gerät 
aufgesetzt. Im groß und ganzen kann man sich an einem langen Nachmittag
mit der Lib anfreunden.

Allerdings ist mir damals an einigen Stellen ein Problem mit der Größe 
von Datentypen aufgefallen. Konkret erinnere ich mich an diese 
Konstrukte:
...
..
#define Usb_get_dev_desc_length()         (sizeof (usb_dev_desc))
...
...
U8    data_to_transfer;
...
...
case DESCRIPTOR_DEVICE:

  data_to_transfer = Usb_get_dev_desc_length(); //!< sizeof (usb_user_device_descriptor);

  pbuffer          = Usb_get_dev_desc_pointer();

  break;

...
...

Das Problem mit der Variable data_to_transfer zieht sich durch die 
gesamte Lib, es werden munter 16 Bit Werte in die Variable geschrieben. 
Das macht sich allerdings erst bei großen USB-Packeten (>255 Byte) 
bemerkbar. Wenn ich damals nicht einen recht dicken Report-Deskriptor in 
der Anwendung gehabt hätte, wer mir das vielleicht noch nicht einmal 
aufgefallen.

Von diesem Bug und der etwas eigenwilligen Datentyp-Bezeichnungen (U8 
statt uint8_t) sind mir jetzt gerade aber keine größeren Probleme in 
Erinnerung.

Viel Erfolg :)

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Hmm...
hast du den "Bug" bei dir gerade gebogen oder hast du es so gelassen?

Ich bin gerade dabei die Demo mal mit dem GCC zu compilieren. Mal 
schauen wo ich rauskomme

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hi Hmm...
> hast du den "Bug" bei dir gerade gebogen oder hast du es so gelassen?

Da der Report-Deskriptor knapp 600 Byte groß war, bin ich nicht drum 
herum gekommen. Ansatz war, die betreffende Variable auf U16 
umzustellen. Inwiefern noch weitere Änderungen notwendig waren, hab ich 
jetzt nicht mehr in Erinnerung.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nico wrote:

> Was meinst du mit "automatischer Behandlung von VBUS-Änderungen?
> Interrupt oder so wenn man es vom USB-Bus trennt?

Genau, bei den großen USB-AVRs bekommt man einen "Vbus transition
interrupt", wenn sich der Vbus-Pegel (bei aktiviertem Vbus, ähem,
OTG-Pad) ändert (und man den Interrupt freigeschaltet hat).  Das
muss man sich wohl auf den kleinen USB-AVRs irgendwie mit
Externinterrupts emulieren, wenn ich das richtig verstehe.

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem U8, U16 usw hat anscheinend was mit Little/Big-Endian zu 
tun. Hab gerade in der compiler.h die entsprechenden Defines gesehen.

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Genau, bei den großen USB-AVRs bekommt man einen "Vbus transition
>interrupt", wenn sich der Vbus-Pegel (bei aktiviertem Vbus, ähem,
>OTG-Pad) ändert (und man den Interrupt freigeschaltet hat).

Klingt als bräuchte man das nur für den OTG Host. Als Bus Powered Device 
kann man damit eh nix anfangen, oder?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avrfan wrote:

> Als Bus Powered Device
> kann man damit eh nix anfangen, oder?

Das stimmt, aber auch ein Device kann ja self-powered sein, muss ja
nicht gleich ein Host sein dafür.

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ich nehme an Atmel sieht in den USB162 in erster Linie Bus Powered 
Devices. Zielgruppe sind eben HID Geschichten, da juckt das 
normalerweise nicht.

Auf der andere Seite, was passiert, wenn man ein Self Powered Device hat 
und man zieht den USB Stecker, ohne den Fall zu behandeln?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avrfan wrote:

> Auf der andere Seite, was passiert, wenn man ein Self Powered Device hat
> und man zieht den USB Stecker, ohne den Fall zu behandeln?

Wichtiger ist der umgekehrte Fall: wenn man wieder angestöpselt wird,
dann muss man die ganze connect-Prozedur einleiten.

Beim Abziehen will man aus diesem Grunde natürlich alles ,,erden'',
was noch irgendwie mit USB zu tun hat.

Autor: avrfan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade einen Schaltplan von Olimex ausgegraben. Da wurden 
einfach zwei 47k Widerstände zwischen VCC und GND geschaltet und 
dazwischen geht's weiter auf PC4. Ist nur dummerweise kein INT sondern 
höchstens ein PCINT.

Einziger Vorteil von dem Pin, er hat ansonsten keine Sonderfunktion. Der 
Rest ist dann wohl Sache der Software

Naja, mal weiterstricken. Komme gut vorwärts. Hab nur ein Problem, hab 
keine USB162 hier zum Testen :-(. Hoffe die kommen morgen

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.