Forum: Mikrocontroller und Digitale Elektronik XMega EBI ungenutzte CS Pins


von A. N. (netbandit)


Lesenswert?

Hallo,

ich möchte gerade das erste Design von mir mit einem ATxMega128A1 
entwerfen. Dabei habe ich eine Frage zum EBI, vielleicht hat jemand 
damit schon etwas mehr Erfahrung sammeln können.

Die oberen 4 Pins des Ports H sind normalerweise die CS Pins des EBI. 
Nun nutze ich das CS des XMegas nicht und brauche daher auch keine CS 
Signale.
Laut Datenblatt kann man im CTRLA Register das Chip Select komplett 
deaktivieren. Wenn ich dies mache, kann ich die entsprechenden Pins nun 
als ganz normale digital in/out Pins benutzen?

Vielleicht hat das ja schon mal jemand getestet, im Datenblatt habe ich 
speziell zu den CS Signalen keinen Hinweis gefunden.

Dann noch eine Frage: Waitstates werden zwar im CTRLB (Chip Select 
Control Register B) eingestellt, jedoch finde ich hier keinen Hinweis 
darauf, ob diese nur zur Verfügung stehen wenn Chip Select aktiviert 
ist. Ich sehe auch keinen Grund, warum Waitstates an CS gekoppelt sein 
sollten (trotz Registernamen) vielleicht kann mich hier auch jemand kurz 
bestätigen.

Vielen Dank im Voraus,
Netbandit

von A. N. (netbandit)


Lesenswert?

Ich wollte den Beitrag noch einmal nach oben holen.

Vielleicht hat ja jemand, der schon etwas mit dem XMega gemacht hat, 
Erfahrung diesbezüglich (Helmut, Simon, René etc.).

von Simon K. (simon) Benutzerseite


Lesenswert?

Hallo Netbandit.
Im Datenblatt auf Seite 244 ist zu lesen:

The EBI will only override value, but not direction for the I/O pins 
where the EBI address and
control lines are placed. These I/O pins must be configured to output 
when the EBI is used. I/O
pins for unused EBI address and control lines can be used as normal I/O 
pins or for other alter-
nate functions on the pins.

Ich würde deswegen mal stark davon ausgehen, dass du den CS Pin dann als 
normalen IO verwenden kannst. (Wenn das nicht so wäre, warum sollte man 
dann die CS's überhaupt deaktivieren können).

Wegen den Waitstates: Du meinst, du fragst dich warum die Waitstates pro 
Chipselect eingestellt werden. Ich würde mich davon nicht verunsichern 
lassen. Du stellst in den Registern halt für jeden Speicher einzeln ein, 
welche Waitstates er benötigt. Wenn du den CS deaktivierst, gehe ich mal 
nicht davon aus, dass der ganze Speicher deaktiviert ist. Die anderen 
Einstellungen gelten nach wie vor.

Ich muss allerdings gestehen, dass ich mich mit dem EBI noch nicht 
beschäftigt habe. Leider ist das Datenblatt hier ein bisschen spärlich. 
Ich konnte auch noch keine Timing Diagrams zum Lesen oder Schreiben auf 
externen Speicher finden.
Es gibt aber eine AppNote von Atmel zum Thema Xmega EBI:
http://atmel.com/dyn/resources/prod_documents/doc8058.pdf
Vielleicht werden Sie da geholfen.

von A. N. (netbandit)


Lesenswert?

Hi Simon,

danke erst einmal für deine Antwort. Die AppNote und den entsprechenden 
Teil des Datenblattes hab ich natürlich schon gelesen, aber wie du schon 
sagst: Es ist nicht allzu aussagekräftig. Je mehr ich mir das durchlese, 
desto verwirrter werde ich :)

Aber ich glaube jetzt ist der Groschen bei mir gefallen:

In der AppNote auf Seite 8 steht:
"In certain configurations, the Chip Select lines can be used as address 
lines instead. Say, if only Chip Select Block 2 and 3 is used, the Chip 
Select lines CS0 and CS1 are used as address lines A16 and A17 instead. 
Figure 4-1 below shows the possible configurations."

Und dann steht unter dem Bild:
"The figure shows that if only CS3 is enabled, all four CS lines are 
used as address lines."

Wenn ich das richtig verstehe muss ich also mindestens CS3 einschalten 
und meine Waitstates dafür definieren. Dadurch, dass nur CS3 aktiviert 
ist, stehen alle CS Pins (CS0 bis CS3) als Adressleitungen zur 
Verfügung.

Wenn ich nun aber CS3 mit einer Größe von 64KiB definiere, weiß das EBI, 
dass nur 16 Adressleitungen benutzt werden und so stehen mir die 
Leitungen A16 bis A19 (welche ja vorher die CS Leitungen wahren) als 
normale I/Os zur Verfügung.

Oh man, das wäre natürlich toll wenn das so geht. Warum schreiben die 
das nicht etwas deutlicher rein?

Ich denke es bleibt mir nichts anderes übrig als es selbst 
auszuprobieren. Vielleicht entwerfe ich mein Design so, dass ich im 
Notfall, mit Lötbrücken andere Pins nutzen kann anstatt die CS Pins.

Danke dir schon einmal :)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der XMega an sich ist schon ein toller Controller - die Datenblätter und 
AppNotes sind allerdings etwas herzlos zusammengetackert und aufgrund 
fehlender Codesequenzen nicht einfach zu verstehen. An der Stelle hat 
ATMEL bisher leider gespart oder die falschen Leute eingesetzt.

von Peter D. (peda)


Lesenswert?

A. N. wrote:
> ich möchte gerade das erste Design von mir mit einem ATxMega128A1
> entwerfen.

Wo kriegst Du denn die XMega her?
Sind die denn schon in Volume-Production?

Ich hab da schon schlechte Erfahrungen gemacht mit ICs, die es noch 
nicht richtig gibt. Daher lasse ich das lieber.


Peter

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Das sind immer noch Muster, Peter. Die Serie geht im Juni/Juli2009 
los... vorraussichtlich. Wenn Du welche haben möchtest, kann ich Dir 2 
Stück schicken. Vielleicht magst Du ja doch mit spielen.

von A. N. (netbandit)


Lesenswert?

Ja ich hatte auch gehofft, dass ATMEL inzwischen schon etwas weiter 
damit ist. Aber ich bin zufrieden, dass es sie inzwischen schon zu 
kaufen gibt: http://shop.embedit.de/browse_010001007_155__.php

Irgendwann wird das aber auch besser werden, wenn die Chips weiter 
verbreitet sind und wir hier ein paar Erfahrungswerte zusammen getragen 
haben :)

von Helmut R. (heru01)


Lesenswert?

Hallo A.N.,

Deinen Thread habe ich erst jetzt gesehen.

EBI habe ich in Betrieb genommen - um genau zu sein das 3 Port 
Multiplexed EBI mit 16 Bit Adressen und 8 Bit Daten.

Beim EBI gibt es viele viele Ungereimtheiten - das fängt bei fehlendem 4 
Port Mode an; geht über das Thema I/O Port Override (warum muss man die 
Steuerleitungen doch 'von Hand' auf High/Low setzen??) zur 
fehlenden/unzureichenden Doku der Waitstates.

Die Initialisierung kann ich Dir gerne als Codeschnipsel senden - aber 
wie Du die CS Leitungen freibekommst oder Waitstates einfügst weiss ich 
nicht.

EBI war bei mir trial and error. Nun läufts dank -JTAG ICE (Memory 
Bereiche ansehen)  - Oszi für Steuersignale -viel Geduld


Das wünsch ich Dir auch:
Geduld und Zähigkeit. :-)

Gruß
Helmut

von ich (Gast)


Lesenswert?

Hallo zusammen.
Ich weis, das Thema ist in die Tage gekommen, aber ich stehe auch gerade 
vor dem Problem mit waitstates. Hat irendjemand eine Info, wo diese 
waitstates eingefügt werden? Wann konkret wird der waitstate eingefügt?

von Robert B. (robert_b36)


Lesenswert?

Hallo zusammen,

@Helmut: Ich weiß, es ist lange her, aber ich versuche es dennoch. Du 
schreibst, du hast das EBI im 3 Port Modus in Betrieb nehmen können. Ich 
designe gerade ein Board mit einem XMEGA64A1 und möchte auch das EBI in 
diesem Modus verwenden. Leider lese ich gerade 
(http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=79024&start=0&postdays=0&postorder=asc&highlight=sdram), 
dass dieser Modus angeblich nicht funktioniert. Zumindest, wenn du ALE1 
und CS verwendet hast. Bei den anderen Modi mit ALE12 bzw. ohne CS ist 
es nicht geklärt. Da du 16bit Adressbus hast, vermute ich mal, du 
verwendest ALE2 nicht. CS bräuchte ich auch nicht, da nur 1 RAM 
vorgesehen ist. Bin jetzt etwas verunsichert. Vllt. kannst du Klarheit 
schaffen.

Desweiteren würde ich gerne eine CS Leitung als zusätliche Adressleitung 
A16 verwenden, habe dafür auch schon einen eigenen Thread 
(Beitrag "XMEGA EBI mit 17bit Adressbus! CS als A16?") aufgemacht, da kann 
mir leider aber niemand weiterhelfen. Vllt. ja hier?

@A. N.: Wie ist es denn bei dir ausgegangen mit den CS Leitungen? 
Konntest du sie dann als I/O verwenden? Hast du das EBI auch im 
3-Port-Mode mit Adress High-Low-Byte-Multiplexing betrieben? Klappte das 
alles?

Danke schon mal an alle, die sich den alten Thread nochmal anschauen.

VG
Robert

von A. N. (netbandit)


Lesenswert?

Hallo Robert,

das ist jetzt wirklich schon etwas her, aber soweit ich mich erinnert 
kann, konnte ich die ungenutzten CS-Pins ganz normal verwenden. In 
meinem Design hatte ich sicherheitshalber andere Pins verwendet, dann 
aber nach dem Aufbau der Hardware festgestellt, dass die CS-Pins 
problemlos gegangen wären.

Nein ich habe den XMEGA im LPC SRAM Mode betrieben, also kompatibel zum 
Mega-SRAM Interface. Ich hatte damals einen 512KiB SRAM mit 16x32KiB 
Speicherseiten dargestellt. Das hatte folgenden Vorteil:

Wenn man den 24 Bit Adressbus des XMegas benutzt, dann muss ein 
entsprechendes Register die obersten 8 Bit beinhalten. Diese 8 Bit geben 
dann damit an welche der 255 möglichen 64KiB großen Speicherseiten über 
die normalen X, Y, Z Pointer adressiert werden. Allerdings hat damals 
der AVRGCC noch keine 24 Bit Adressierung unterstützt (macht der das 
vielleicht inzwischen?), weswegen dieses "Page"-Register manuell gesetzt 
werden musste.

Hätte ich dann aber von einer Page zur anderen umgeschaltet, dann wäre 
es schwer gewesen Daten von einer Page in die andere zu übertragen, also 
Variablen zu benutzen, die über mehrere Seiten verstreut liegen. Ich 
habe damals damit ein Internetradio realisieren wollen und habe mit 
relativ großen Datenpaketen gerechnet. Daher wäre es für mich wichtig 
gewesen auf bestimmte Variablen immer zugreifen zu können (zum Beispiel 
Variablen zur Programmsteuerung oder zur Ethernet-Steuerung) und dennoch 
viel Speicher zum Auslagern der Datenpakete zu besitzen.

Daher habe ich den 64 KiB Adressraum in zwei Teile unterteilt: Die 
Adressen 0x0000 bis 0x7FFF haben die Register, den Stackspeicher und die 
Variablen beinhaltet, auf die andauernd zugegriffen werden musste.

Ab Adresse 0x8000 bis 0xFFFF war dann der Empfangspuffer untergebracht. 
Über 4 zusätzliche Pins konnte ich auswählen welcher 32 KiB große 
Bereich des SRAMS innerhalb dieses Adressbereiches eingeblendet wird. 
Die empfangenen Datenpakete konnte ich dann dort unterbringen, wobei ich 
immer nur dann die Speicherseite umschalten musste, wenn eine 32 KiB 
Seite voll war (oder vom MP3 Player vollständig ausgelesen wurde). Damit 
konnte ich das Umschalten der Speicherseiten auf ein Minimum reduzieren 
und hatte zudem immer Zugriff zu den wichtigen Variablen im unteren 
Speicherbereich.

Viel Erfolg bei deinem Projekt,
Netbandit

von Robert (Gast)


Lesenswert?

Danke für deine Antwort. Interessante Lösung, passt bei mir aber nicht 
so gut. Den normalen 3-Port-SRAM-Modus hat Du noch nicht eingesetzt 
oder. Ich würde gerne den CS0 als A16 nutzen. Dass das geht, wenn man 
das manuell steuert, weiß ich jetzt, aber im Datenblatt und in der 
AVR1312 klingt das so, als könnten die nicht benötigten CSs auch 
automatisch vom EBI gesteuert werden. Erfahrungen? Danke nochmal!

VG
Robert

von A. N. (netbandit)


Lesenswert?

Hi Robert,

tut mir echt leid, aber ich habe den XMega noch nie so betrieben wie du 
dir das jetzt vorstellst und ich bin schon zu sehr aus der Materie raus, 
um da jetzt aus dem Stehgreif eine geeignete Lösung präsentieren zu 
können.

Ich wünsche dir dennoch viel Erfolg, probiere es doch einfach aus :)

Beste Grüße,
Netbandit

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Robert schrieb:
> im Datenblatt und in der
> AVR1312 klingt das so, als könnten die nicht benötigten CSs auch
> automatisch vom EBI gesteuert werden.

Nur eingeschaltete /CS-Pins werden automatisch vom EBI verwendet. Werden 
sie im betreffenden Control-Register nicht aktiviert, sind es ganz 
normale Portpins. Allerdings können sie auch als erweiterte Adresspins 
A16...A19 genutzt werden. Dies muss alles konfiguriert werden. 
Unkonfiguriert werden die Pins nicht vom EBI benutzt.

von Robert B. (robert_b36)


Lesenswert?

Hallo Knut,

danke erstmal, dass du dich meiner annimmst. Irgendwie verstehe ich es 
leider immer noch nicht. Im DS und in der AN steht, dass im Extremfall 
die ungenutzten /CS0.../CS3 als A16...A19 verwendet werden können. Dafür 
muss man die ungenutzten deaktivieren, soweit ich das verstanden habe. 
Aber wie konfiguriere ich sie denn nun als A16...A19. Wie du schreibst, 
würden sie ja erstmal als normale I/O-Pins zur Verfügung stehen. Das 
würde aber bedeuten, dass ich sie manuell per S/W als A16...A19 bedienen 
müsste. Ist das die einzige Möglichkeit oder können sie auch über das 
EBI also solche genutzt werden. Falls ja, reicht es dann aus, sie 
entsprechend mit dem SRAM zu verbinden und Basisadresse und 
Speicherbereich richtig zu konfigurieren und dann nutzt das EBI sie (in 
Ermangelung eines vierten Ports oder eines zweiten Adresslatches) 
automatisch richtig als A16...A19? Sorry, irgendwie steh ich auf der 
Leitung, glaub ich. Habe auch weiter keine Konfigurationsmöglichkeit 
gefunden.

Sollten sie lediglich als I/O-Ports zur Verfügung stehen und so per S/W 
als Adressleitungen genutzt werden können, wäre die separate Erwähnung 
im Datenblatt und AppNote m. E. nach überflüssig. Dafür kann ich ja auch 
jeden anderen GPIO verwenden, warum also nicht auch die.

VG
Robert

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Robert B. schrieb:
> Aber wie konfiguriere ich sie denn nun als A16...A19. Wie du schreibst,
> würden sie ja erstmal als normale I/O-Pins zur Verfügung stehen.

Richtig.

Robert B. schrieb:
> Das
> würde aber bedeuten, dass ich sie manuell per S/W als A16...A19 bedienen
> müsste.

Entweder das...

Robert B. schrieb:
> oder können sie auch über das
> EBI also solche genutzt werden.

Oder das.

Robert B. schrieb:
> Falls ja, reicht es dann aus, sie
> entsprechend mit dem SRAM zu verbinden und Basisadresse und
> Speicherbereich richtig zu konfigurieren und dann nutzt das EBI sie (in
> Ermangelung eines vierten Ports oder eines zweiten Adresslatches)
> automatisch richtig als A16...A19?

Das EBI kann das automatisch machen, wenn die Basisadresse und der 
Speicherbereich richtig definiert sind. Es gibt für A19 einen 
Sonderfall, dass es nicht einzeln als /CS benutzt werden kann. Man kann 
maximal 1MB direkt adressieren. Dafür muss das RAM aber über eine 
extra-Leitung selektiert werden oder dauerhaft selektiert sein. Bei 
512kB kann man A19 als /CS missbrauchen, wenn man als Basisadresse 1MB 
und als Speicherbereich auch 1MB angibt. Wenn man dann auf die unteren 
512kB zugreift ist A19 für die Zeit des Zugriffs Low, was einem /CS 
gleichkommt ;-)

von Robert B. (robert_b36)


Lesenswert?

DANKE KNUT!

Das ist das, wonach ich schon die ganze Zeit suche. Hast du das durch 
ausprobieren rausgefunden oder hab ich Tomaten auf den Augen?

Habe in den offiziellen Dokumenten von Atmel immer nur gefunden, dass es 
geht (diese äußerst "hilfreiche" Grafik mit den Kästchen mit A16..A19 
und CS0..CS3 ist dir sicher auch bekannt), nicht aber wie. Dass man sich 
quasi keine Gedanken darüber machen muss, sondern es einfach 
funktioniert, ist zwar schön, aber wenn man ein Board entwirft, wäre es 
noch schöner, das würde irgendwo stehen, oder? Aber die Dokumentation 
der XMegas wird ja des Öfteren in Frage gestellt. Trotzdem nochmal 
VIELEN DANK für die finale Information!

VG
Robert

[edit] Die Idee, zwei CS-Blöcke zu nutzen, eine offen zu lassen und die 
zweite als A16 zu nutzen, hatte ich auch schon. Allerdings ist das nicht 
grad "die feine Art", wie ich finde. Und es geht ja so ohne Weiteres nur 
mit einem CS (was mir allerdings auch wieder ausreichen würde bei 128k).

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Robert B. schrieb:
> Das ist das, wonach ich schon die ganze Zeit suche. Hast du das durch
> ausprobieren rausgefunden

Ja. Es ist immer günstig, alles auf einem EvalBoard mit abgesetzten 
Modulen zu probieren, bevor man das endgültige Design für die Schaltung 
macht.

Robert B. schrieb:
> Dass man sich
> quasi keine Gedanken darüber machen muss, sondern es einfach
> funktioniert, ist zwar schön...

Naja, einfach funktionieren tut´s eben nicht. Nur korrekt konfiguriert 
funktioniert es. Sehr hilfreich hat sich auch die kleine aber feine 
Textpassage erwiesen, die dazu auffordert, die Steuerports (/WR, /CS, 
/RD, ALE...) vor der Init des EBI auf den jeweils inaktiven Zustand zu 
setzen, also für Low-aktive Pins auf Ausgang High und umgekehrt. 
Ansonsten werden sie beim EBI-Zugriff falsch gesetzt. Was einerseits 
eine hohe Flexibilität ermöglicht, ist andererseits eine fiese Falle, 
wenn man nicht sehen kann, wo es klemmt. Ein Speicheroszi oder 
Logic-Analyzer bietet beim ersten Umgang mit dem EBI eindeutig Vorteile.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Mittlerweile hilft es auch, die ASF Routinen zu durchforsten, die mit 
Studio 5 installiert werden. Mir ist zwar nicht ganz klar, warum die 
alles so verbuddeln müssen, das man ne Stunde braucht um die 
Wirk-Routinen zu finden, aber immerhin sind se dann da.

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.