Forum: Mikrocontroller und Digitale Elektronik ATXmega128A1, SRAM-Anbindung, EBI


von suchender (Gast)


Lesenswert?

Hallo,

ich möchte an einen ATXmega128A1 im TQFP100-Gehäuse einen SRAM 
anschliessen und über das EBI ansteuern.
Momentan stehe ich aber total auf der Leitung und scheitere am Layout.
Betreffender SRAM ist der AS6C1008 von Alliance Memory.

Nun steht im XMEGA A Manual auf Seite 270 das man einen SRAM mit bis zu 
22 Adressleitungen ohne multiplexing anbinden kann (wenn ich da richtig 
liege).
Das gleiche steht in der Appnote AVR1012. Allerdings reichen da im 
3-Port-Mode die Ports H, J und K nicht aus. IMHO hätte ich da 8 
Datenleitungen und 4 Steuerleitungen wodurch dann nur noch 8 
Adressleitungen übrig bleiben würden. Für den SRAM brauche ich aber 17 
Leitungen (A0-A16).

Im Gegensatz dazu befindet sich in der Appnote AVR1312 ist auf Seite 4 
ein Beispiel bei dem 2 Latches im 3-Port-Mode genutzt werden. Das 
widerspricht aber IMHO den Angaben im Manual und der anderen Appnote.

Ich bin jetzt irgendwie verwirrt und komm nciht weiter. Die Suche bei 
Tante Google hat mir auch nicht unbedingt weitergeholfen, weil ich am 
Ende immer wieder bei den schon aufgeführten Appnotes gelandet bin.

Hat vielleicht irgendeiner schoneinmal einen ähnlichen SRAM angebunden? 
Falls ja wie?? Bin für jeden Hinweis dankbar. Ist mein erstes mal das 
ich versuche einen SRAM anzubinden...

Ich hoffe es kann mich jemand von der Leitung schubbsen :-)

MfG R

von suchender (Gast)


Lesenswert?

push

von Pascal H. (pase-h)


Lesenswert?

suchender schrieb:
>       Datum: 09.08.2011 12:04

suchender schrieb:
>       Datum: 09.08.2011 12:28
>
>       push


Ungeduldig?!
Sieht man auch nicht alle tage, dass nach 24Min. gepusht wird.

von suchender (Gast)


Lesenswert?

Ungeduldig?

Ja ein bisschen schon, Entschuldigung! :-|
Ich würde halt gerne weiter machen um die Platine fertig zu machen und 
dann testen zu können...

MfG R

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Aussage dürfte sich auf den 4-Port Modus beziehen, den bisher noch 
kein (?) ATxmega unterstützt.

von Arc N. (arc)


Lesenswert?

suchender schrieb:
> Nun steht im XMEGA A Manual auf Seite 270 das man einen SRAM mit bis zu
> 22 Adressleitungen ohne multiplexing anbinden kann (wenn ich da richtig
> liege).
> Das gleiche steht in der Appnote AVR1012. Allerdings reichen da im
> 3-Port-Mode die Ports H, J und K nicht aus. IMHO hätte ich da 8
> Datenleitungen und 4 Steuerleitungen wodurch dann nur noch 8
> Adressleitungen übrig bleiben würden. Für den SRAM brauche ich aber 17
> Leitungen (A0-A16).
>
> Im Gegensatz dazu befindet sich in der Appnote AVR1312 ist auf Seite 4
> ein Beispiel bei dem 2 Latches im 3-Port-Mode genutzt werden. Das
> widerspricht aber IMHO den Angaben im Manual und der anderen Appnote.
>
> Ich bin jetzt irgendwie verwirrt und komm nciht weiter. Die Suche bei
> Tante Google hat mir auch nicht unbedingt weitergeholfen, weil ich am
> Ende immer wieder bei den schon aufgeführten Appnotes gelandet bin.

Alle (AppNotes + Manual) haben recht...
Einziges Problem (hatte ich in einem anderen Thread zuerst auch 
übersehen): Es gibt z.Z. keinen Xmega mit Vier-Port-EBI, sondern nur mit 
max drei Ports.
D.h. entweder externe/s Latch/es oder, falls das in der Anwendung 
möglich ist, die oberen Adressleitungen mit normalen Ports ansprechen.

von suchender (Gast)


Lesenswert?

Vielen Dank für die Hinweise!

Das mit dem 4. Port fällt mir jetzt auch auf. Da waren wohl vorher 
wieder mal die Tomaten auf den Augen...

Ich denke ich werd mich mal an die Variante 24.6.4 im A-Manual 
herranwagen. (Seite 271) Ist ja in der AVR1312 auf Seite 3 bzw. 4 auch 
so beschrieben.

Danke nochmal!

MfG R

von Hagen (Gast)


Lesenswert?

nimm nicht 24.6.4 sondern 24.6.2 oder 24.6.3. Du solltest zusehen das 
nur die Adressen über das Latch gelatcht werden. Bei 24.6.4 bzw. alle 
LPC Modis werden ein Teil der Adressen über die Datenleitungen gelatcht. 
Wenn du die AppNotes mit dem erzielbaren Timing anschaust dann wirst du 
erkennen das im Besondern bei sequentiellem Adresszugriff die beiden 
ersten Varianten wesentlich performanter sind. In diesem beiden Modis 
kann die CPU defakto mit 1 CPU Taktzyklus das SRAM lesen und schreiben 
wenn sich nur die untersten 8 Adressbits jeweils ändern. Wird eine 
Adresse ausgewählt die in den HighBits sich ändert dann muß 1 SRAM Takt 
zusätzlich eingeschoben werden um das Latch mit der neuen oberen Adresse 
zu laden. Wenn man also zb. 1024 Bytes sequentiell lesen möchte dann muß 
nach jeweils 256 Bytes das Latch neu geladen werden. Somit benötigt man 
1024/256*2+1024 CPU Takte zum Lesen dieses Blockes.

Das geht mit deinem gewählten Modus nicht da dort die Datenleitungen die 
zu latchenden Addressleitungen steuern. Das erkennst du daran das der 
Port AD() für Address-Data benamt wurden.

Davon abgesehen musst du die Waitstates korrekt im EBI einstellen da der 
SRAM von dir mit 55ns bischen langsam ist. Der XMega kann den mit 64MHz 
ansteuern, theoretisch wenn es ein 15ns Typ wäre. Dann hättest du den 
Fall das der XMega mit 32MHz CPU Takt läuft und alle Zugriffe auf das 
externe SRAM würden die meiste Zeit nur 1 CPU Takt benötigen, also 
doppelt so schnell wie bei den alten Megas.

Gruß Hagen

von suchender (Gast)


Lesenswert?

hmmmm.... Also in dem xmega-a-manual welches ich hier hab, ist laut 
Figure 24-5 auf Seite 272 nix außer Daten auf den Datenleitungen? Es 
werden lediglich die Adressen mir Hilfe von ALE1 und ALE2 gelatcht. Die 
geteilte Variante (AD am Port) ist nur bei der LPC-Konfiguration mit 
drinn die als nächstes kommt.
Falls ich mich irre bitte nochmal korrigieren!

Und nach nem neuen SRAM werd ich dann auch nochmal schauen. Den Vorteil 
mit der doppelten clock vom EBI sollte ich schon ausreizen, da hast du 
recht :-)

Danke MfG R

von holger (Gast)


Lesenswert?

Hol dir einen STM32 mit 512kB Flash und 64kB RAM.
Das musst du dir die vergurkten ATXMega nicht antun.

von suchender (Gast)


Lesenswert?

Guten Morgen.

Da ich noch nicht mit ARM-Controllern gearbeitet habe, kein Geld für 
eine teure Entwicklungsumgebung (Crossworks, Keil, IAR...) habe, keine 
Lust habe mir den ganzen Aufwand mit Eclipse zuzumuten und bei mir 
sowohl AVR Studio 5 (kostenlos) als auch AVR Dragon zum debuggen 
vorhanden sind, werde ich wohl bei Atmel bleiben.

MfG R

von Hagen (Gast)


Lesenswert?

suchender schrieb:
> hmmmm.... Also in dem xmega-a-manual welches ich hier hab, ist laut
> Figure 24-5 auf Seite 272 nix außer Daten auf den Datenleitungen?

Dann habe ich wohl ein veraltetes Datenblatt hier vor mir liegen. Ich 
meinte das du nicht die LPC Modis benuzten solltest.

Desweiteren denke ich das bei deinem 128KB SRAM der Mode mit einem Latch 
ausreichend sein sollte. Du kannst dann zwar nur 64Kb am Stück 
adressieren und die höchstwertige Adresse würde ich manuell an einen Pin 
legen. Du hast dann 2x 64Kb Bänke die du manuell umschalten kannst.

Es müsste in diesem Modus möglich sein über die zusätzlichen Chip 
Selects des EBI den 128Kb mit einem Latch zu benutzen. Ein Chip Select 
wird dann als Adressleitung A16 benutzt. Nur in diesem SRAM Modis ist es 
auch möglich zusätzliche Memory Mapped Devices anzuschließen. Im SDRAM 
Modus geht das zb. nicht.

>Falls ich mich irre bitte nochmal korrigieren

Du irrst dich nicht.

Gruß Hagen

von Robert B. (robert_b36)


Lesenswert?

Hallo suchender,

dein Setup ist dem, welches ich derzeit anstrebe, sehr ähnlich. Darf ich 
fragen, ob, und wenn ja, wie du es lietztlich gelöst hast? Man liest 
hier und da, dass von den SRAM-Modi nicht alle wirklich funktionieren. 
Welchen SRAM-Modus hast du verwendet? Und welchen Compiler verwendest 
du? GCC unterstützt ja nur 16bit Pointer. Wäre super, wenn du dein Setup 
mal ein bisschen erläutern könntest.

VG
Robert

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


Lesenswert?

Nimm als Beispiel doch den Schaltplan vom Xplained A1 Board. Dort ist 
ein 8MByte SDRAM an EBI angedockt.
http://www.atmel.com/dyn/products/tools_docs.asp?category_id=163&family_id=607&subfamily_id=1965&tool_id=17168

Das das Board nicht so teuer ist, isses vllt. sogar ne Alternative zum 
Selberbauen

Robert B. schrieb:
> Und welchen Compiler verwendest
> du? GCC unterstützt ja nur 16bit Pointer.

ASF hat dazu die neue HugeMem Library mitgeliefert , die den Zugriff auf 
32 bit addressraum erlaubt. Ist Teil von Studio 5

von Robert B. (robert_b36)


Lesenswert?

Hallo Matthias,

danke für deine Antwort. Der Schaltplan vom Xplained A1 Board ist mir 
wohl bekannt und dient mir gewissermaßen schon ein bisschen als Referenz 
für viele Dinge. Jedoch hat das RAM dort recht wenig mit dem zu tun, was 
ich möchte. Die Unterschiede im Einzelnen:

1. Ich verwende SRAM, das Xplained verwendet SDRAM. Das sind im EBI 
schon unterschiedliche Modi.
2. Ich benötige 17Bit-Adressraum, das Xplained kommt mit 12Bit aus.
3. Aus 2. folgt, dass ich ein zusätzliches Adressbit (A16) benötige, 
welches ich gerne von nichtbenutzten CS-Leitungen nehmen würde, um ein 
zweites Adresslatch einzusparen. Das geht theoretisch laut Datenblatt 
und AppNote AVR1312. Aber mehr, als dass es geht, steht leider nirgends.

Die Möglichkeit, den RAM zu pagen und manuell umzuschalten besteht und 
ich werde es wohl auch vorsehen. Das beseitigt dann auch gleich das 
Problem mit den 16Bit Pointern in GCC. Dennoch würde mich interessieren, 
ob "suchender" den 3-Port-SRAM-Modus planmäßig in Gang bekommen hat und 
wenn ja, wie? LPC-Mode oder nicht?

VG
Robert

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


Lesenswert?

Robert B. schrieb:
> Das beseitigt dann auch gleich das
> Problem mit den 16Bit Pointern in GCC.

Das Problem gibt es in der Form nicht, wenn du Studio 5 mit ASF 
verwendest. Dort gibt es die 'Hugemem' Bibliothek mit 32 bit 
Addresszeigern. Sieht z.B. so aus:
1
// was schreiben
2
  hugemem_write32(writeptr ,time);
3
  writeptr +=4;
4
  hugemem_write16(writeptr ,x);
5
  writeptr +=2;
6
// und was lesen
7
  hugemem_read32(readptr ,time);
8
  readptr +=4;
9
  hugemem_read16(readptr ,x);
10
  readptr +=2;

von Robert B. (robert_b36)


Lesenswert?

Schon mal ein guter Hinweis, danke dafür!
VG Robert

von DG (Gast)


Lesenswert?

Die ATXmega-A1 und ATXmega-A4 unterstützen bezüglich EBI für die ext. 
SRAM-Anbindung im 'EBI Control Register' nicht gleichermaßen alle 'SRAM 
Modes'. Man muss hier zwischen -A1 und -A4 exakt unterscheiden!

Es gibt 3 Manuals für den ATXmega
1. Das globale Manual enthält die Summe alle Funktionen für die XMEGA 
A-Familie, was aber nicht heißt, dass der XMEGA-A1 und -A4 überall 
funktionsgleich sind.
2. Der XMEGA-A1 hat ein eigenes Manual. Es enthält exakt die Teilmenge 
der Funktionen, die nur im XMEGA-A1 gelten, nicht aber unbedingt für 
XMEGA-A4.
3. Der XMEGA-A4 hat ein eigenes Manual. Es enthält exakt die Teilmenge 
der Funktionen, die nur im XMEGA-A4 gelten, nicht aber unbedingt für 
XMEGA-A1.

Man kombiniere die Inhalte von:
1. XMEGA-A-Manual 8077H-AVR-12/09 Seite 279 24.11.1 Table 24-6 ->
"Note: 1. ALE2 and NOALE only available with 4-port EBI interface"
2. XMEGA-A1-Manual 8067M–AVR–09/10 Seite 13 7.4.4
"Supports SRAM up to
– 512K Bytes using 2-port EBI
– 16M Bytes using 3-port EBI
• Supports SDRAM up to
– 128M bit using 3-port EBI"
Der 4-Port-EBI kommt im XMEGA-A1-Manual nicht vor.

Konkret:
Nur der SRMODE 00 (ALE1) und SRMODE 10 (ALE12) funktionieren für 
XMEGA-A1, denn der XMEGA-A1 hat keinen 4-Port-EBI, sondern nur 
2-Port-EBI oder 3-Port-EBI. Schnelle Hardware: LATCH 74LVC573 ; SRAM 
512kB 8Bit 10ns

Vielleicht erklärt das, warum manche mit dem ext. SRAM am EBI 
Hardwareprobleme haben. Die ext. SRAM-Adressierung im Compiler wäre auch 
meine Baustelle.

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.