Forum: Mikrocontroller und Digitale Elektronik AT32AP7000 - USB Controller


von Florian (Gast)


Lesenswert?

Hallo allerseits,

ich möchte mir eigentlich nur einmal ein wenig Luft verschaffen. Es ist 
mir doch tatsächlich gelungen, dem AP7000 zwei Bulk-Endpoints (1x OUT, 
1x IN) zu verpassen und eine bidirektionale Kommunikation zwischen dem 
µC und einem Linux-Rechner mit libusb aufzubauen.

Das Ganze hat mich zwei Tage gekostet. Ich frage mich, ob das so 
kompliziert sein muss. Erst bekommt man von Atmel Header-Files mit 
eingebauten Fehlern und sucht sich dumm und dämlich, nachdem man die 
Ergebnisse aus dem ICE nicht nachvollziehen kann und dann kommt die 
Sammlung von Status-Bits dazu, deren genauen Sinn man wahrscheinlich 
erst nach dem Auswendiglernen der 650-seitigen USB 2.0 Dokumentation 
kennt und es bitter bestraft wird, wenn man an bestimmten Stellen 
vergisst, irgendein Bit zurückzusetzen. Mit knapp über 300 Zeilen ist 
mein Quelltext recht kompakt geworden, da die meiste Zeit für 
Trial-And-Error draufging und ich zumindest in der Anfangsphase mit zwei 
Rechnern arbeiten musste, da anscheinend der JTAGICE sehr empfindlich 
reagiert, wenn an denselben USB-Port ein Gerät hängt, dass die 
Kommunikation ein wenig stört. Vielleicht war es auch der Linux-Kernel 
selbst. Auf jeden Fall bliebt der ICE ständig hängen.

So, das ist genug Luft. Auf zu neuen Taten.

Gruß,

Florian

PS: Bei Interesse kann ich den entspr. Quelltext-Teil gerne hier posten.

von Thomas P. (pototschnig)


Lesenswert?

Der AVR32 ist meiner Meinung nach zu neu, um damit wirklich gut arbeite 
zu können. Das war mit den SAM7 schon so furchtbar, ich lass erstmal die 
Finger davon und bau auf den SAM9 :-)

Wenn ich das richtig verstanden hab, läuft auf dem AP7000 kein Linux, 
oder?

Bei solchen Kalibern würde ich selbst wirklich nur noch ungerne an der 
Peripherie rumspielen ... Sowas lässt man doch Linux machen ;-)

Mfg
Thomas Pototschnig

von Florian (Gast)


Lesenswert?

Nein, alles höchstpersönlich eingetippt, sogar Startup-Routinen. 
Außerdem auch auf sämtliche Standard-Libs verzichtet.

Unter Linux müsste auch jemand Treiber für die Peripherie basteln ;-))

Für meine Zwecke ist im Linux-Kernel zuviel Overhead eingebaut, um alle 
Eventualitäten abzudecken. Ich habe vor, das Board als User-Interface 
für einen selbstgebauten Logic-Analyzer zu misbrauchen und da brauche 
ich nur das Nötigste und vermutlich noch Einiges an 'Dampf', um 
Protokolle vernünftig zu dekodieren.

Bin mal gespannt, wie es denn demnächst mit dem LCD-Controller aussieht.

von Thomas P. (pototschnig)


Lesenswert?

> Unter Linux müsste auch jemand Treiber für die Peripherie basteln ;-))

Dachte, dass es da schon ein fertiges Linux von Atmel gibt ...

> Für meine Zwecke ist im Linux-Kernel zuviel Overhead eingebaut, um alle
> Eventualitäten abzudecken. Ich habe vor, das Board als User-Interface
> für einen selbstgebauten Logic-Analyzer zu misbrauchen und da brauche
> ich nur das Nötigste und vermutlich noch Einiges an 'Dampf', um
> Protokolle vernünftig zu dekodieren.
>
> Bin mal gespannt, wie es denn demnächst mit dem LCD-Controller aussieht.

Have fun :-)

Mfg
Thomas Pototschnig

von MNR (Gast)


Lesenswert?

@Thomas

Da dachtest du richtig. Ich habe hier ein NGW100, und da ist alles 
drauf, was man gemeinhin so braucht (außer USB Host).
Siehe 
http://www.avrfreaks.net/wiki/index.php/Documentation:AVR32_General

Gruß, Matthias

von Florian (Gast)


Lesenswert?

@MNR:

USB Host kann der AP7000 an sich nicht. Dafür bräuchte man dann externe 
Peripherie.

Das Problem mit dem Linux, das da drauf ist, ist erstens, dass der 
AP7000 doch ein wenig langsamer getaktet wird, als er könnte (auch wenn 
Atmel bis jetzt kein Maximum angegeben hat, wird doch zumindest auf 150 
MHz verwiesen) und dass die SDRAM- und Flash-Timings doch relativ 
vorsichtig gewählt wurden. Ansonsten natürlich der viel Overhead durch 
den Kernel.

von MNR (Gast)


Lesenswert?

Ja, das mit dem Host finde ich auch bescheiden. Mein Foxboard ist da 
schon besser...

Benutzt du das AVR32 Studio? FreeRTOS oder alles selber programmiert?

von Thomas P. (pototschnig)


Lesenswert?

> USB Host kann der AP7000 an sich nicht. Dafür bräuchte man dann externe
> Peripherie.

Das nervt ja am Allermeisten am AP7000 ... Wieso hat der denn keinen 
USB-Host??? :-)

War ein weiterer Grund mir lieber ein SAM9260-Board zuzulegen ...

Vielleicht ist das Langsamertakten ein ähnlicher Grund wie das Takten 
der SAM7 auf 48MHz, damit die das USB sauber hinkriegen ...

Mfg
Thomas Pototschnig

von Florian (Gast)


Lesenswert?

AVR32 Studio unter Linux und alles selbst programmiert. Bis auf Flash 
(seriell + parallel), SDRAM, USART1 und USB blinkt im Moment nur eine 
LED mit 1 Hz. Wenn ich endlich den passenden Steckverbinder hätte, wäre 
ein TFT dran, das ich irgendwann mal bei eBay geschossen habe.

von MNR (Gast)


Lesenswert?

Hm, jetzt sag auch noch, du hast das Board selbst zusamengelötet ;-)

Wenn du kannst/darfst, wäre ich mal am Code interessiert...

von Florian (Gast)


Lesenswert?

Ne, das ist auch das NGW100. Ich muss den Code gerade mal ein wenig 
aufräumen, dann poste ich den gleich.

von Florian (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Quelltext...

von Florian (Gast)


Angehängte Dateien:

Lesenswert?

... und der Mini-Linux-Test der USB-Übertragung.

von Florian (Gast)


Lesenswert?


von MNR (Gast)


Lesenswert?

Ah, sehr gut, danke! Probiere ich mal aus!

von Thomas P. (pototschnig)


Lesenswert?

Läuft dein Code auch auf den UC3? Weil die sind ja flash-basiert und da 
läuft eh kein Linux drauf. Da könnte man deinen USB-Code dann gut 
gebrauchen.

Mfg
Thomas Pototschnig

edit
Aber ein EBI haben sie, also eigentlich doch Linux möglich. Aber 
interessant ists doch für Systeme, die nicht unbedingt Linux brauchen. 
Die AP7 gibts ja überhaupt nicht mit Flash ...

von Florian (Gast)


Lesenswert?

Mit dem UV3 hatte ich bis jetzt nichts zu tun. Daher kann ich nicht 
sagen, ob der die gleiche Peripherie hat bzw. diese identisch 
angesprochen wird. Der Code selbst setzt erst einmal einen 20 MHz-Quarz 
voraus und taktet die CPU dann über den PLL auf 150 MHz, EBI wird auf 75 
MHz getaktet (soll laut einem anderen Forum das Maximum sein).

Der AP7000 bootet von Adresse A000 0000, was nicht verbiegbar auf 0000 
0000 gemapt ist, das bedeutet EBI CS0 @ 16 bit. Da liegt beim NGW100 ein 
AT49BV642D.

Auf jeden Fall können sich noch nicht allzu viele Menschen mit dem Thema 
der direkten Programmierung des AP7000 auseinandergesetzt haben, sonst 
wäre die Geschichte mit den kaputten Header-Files schon früher 
aufgefallen.

von Benedikt S. (Firma: embedded projects GmbH) (flopper)


Lesenswert?

Hallo Flo,

hast du zufällig ein Makefile oder so noch da?

Gruss Bene

von S. K. (selim42)


Lesenswert?

Hallo Flo,

es ist ne weile her aber ich hätte da noch ein paar Fragen bezüglich 
deinem Projekt.

Wenn du diese Zeilen liest würde ich mich freuen wenn du mir ant. gerne 
auch an meine Mail-Addy: tilki1983@hotmail.de


danke.


LG

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.