Forum: Mikrocontroller und Digitale Elektronik Memory MAP - ATMega1284P externes RAM


von Matthias (Gast)


Lesenswert?

Hi,

Also ich hab einen ATMega1284P, dort möchte ich gern 32Kb SRAM 
anschliessen + Latch.
Gehen mir dann von den 32Kb SRAM, die 16Kb SRAM die integriert sind ab ?
Oder ist es möglich sie so anzuschliessen das ich 48Kb Ram habe und 
danach noch Platz für weitere I/O Bausteine ? z.B. DS12807, noch mehr 
I/O..
Oder muss der SRAM gar auf Bank 1 so das die Memory Map etwa so 
aussieht:


- Internal SRAM 16Kb
- Memory Hole (16Kb)
- 32 Kb SRAM IC

Grüsse

Matthias

von Falk B. (falk)


Lesenswert?

@ Matthias (Gast)

>Gehen mir dann von den 32Kb SRAM, die 16Kb SRAM die integriert sind ab ?
>Oder ist es möglich sie so anzuschliessen das ich 48Kb Ram habe und
>danach noch Platz für weitere I/O Bausteine ? z.B. DS12807, noch mehr
>I/O..
>Oder muss der SRAM gar auf Bank 1 so das die Memory Map etwa so
>aussieht:

Nimm einfach einen 64 oder 128kB SRAM, die Dinger kosten nichts und sind 
nicht nennenswert größer, dann hast du fast 64kB.

von Matthias (Gast)


Lesenswert?

Danke ich hab aber bereits 32Kb Chips.

von Mikki M. (mmerten)


Lesenswert?

Der Mega1284P hat kein Businterface zum direkten Anschluss von externem 
SRAM. Über dieses verfügen nur ATmega1280,1281,2560,2561 sowie Mega162

von spess53 (Gast)


Lesenswert?

Hi

>Also ich hab einen ATMega1284P, dort möchte ich gern 32Kb SRAM
>anschliessen + Latch.

Der ATMega1284P hat kein Interface für externen RAM. Also mußt du alles 
zu Fuss machen.

MfG Spess

von Zeitgeist (Gast)


Lesenswert?

Mikki Merten schrieb:
> Der Mega1284P hat kein Businterface zum direkten Anschluss von externem
> SRAM. Über dieses verfügen nur ATmega1280,1281,2560,2561 sowie Mega162

.... und selbst dann muss man noch das Lesen/Schreiben mit
Zugriffs-Makros (ATMEL EBI) durchführen da anscheinend im
Befehlssatz der AVRs keine direkten externen Buszugriffe
implementiert sind die die üblichen Bus-Signale (CS, R/W, OE etc)
automatisch steuern würden.

Also einfach schreiben:

  variable_im_externen_ram = 12345;

geht nicht .....

Vielleicht kennt jemand ein Gegenbeispiel bei einem AVR
neuerer Generation bei dem (denen) das nicht so ist?

von Falk B. (falk)


Lesenswert?

@ Matthias (Gast)

>Danke ich hab aber bereits 32Kb Chips.

1.) Wenn man es mit dem richtigen Prozessor und XMEM Schnittstelle 
machen will, muss man halt das Chip Select vom SRAM aus der Adresse A15 
dekodieren. Wenn das HIGH ist, soll das CS aktiv werden. Dazu braucht 
man einen Inverter. Damit liegen die 32kB in der oberen Häfte des 
Adressbereichs und man verschenkt nix.

2.) Wenn man den SRAM (unsinnigerweise) "zu Fuß" ansteuern will, ist es 
sowieso egal, weil alle Adressen per IO Zugriff gesetzt werden. Da hat 
die CPU mit ihrem internen Adressdekoder nichts mit zu tun.

https://www.mikrocontroller.net/articles/Speicher#SRAM

Nimm den richtigen Prozessor mit XMEM Schnittstelle, alles andere ist 
nicht sonderlich sinnvoll.

von Falk B. (falk)


Lesenswert?

@ Zeitgeist (Gast)

>> Der Mega1284P hat kein Businterface zum direkten Anschluss von externem
>> SRAM. Über dieses verfügen nur ATmega1280,1281,2560,2561 sowie Mega162

Es gibt noch mehr! ATmega64, ATmega8515 und andere.

>.... und selbst dann muss man noch das Lesen/Schreiben mit
>Zugriffs-Makros (ATMEL EBI) durchführen da anscheinend im
>Befehlssatz der AVRs keine direkten externen Buszugriffe
>implementiert sind die die üblichen Bus-Signale (CS, R/W, OE etc)
>automatisch steuern würden.

>Also einfach schreiben:

>  variable_im_externen_ram = 12345;

>geht nicht .....

FALSCH!!!

EBI haben nur die neuen AT_X_mega! DORT ist das Problem, dass man bis zu 
16 MB SDRAM ansteuern kann, die meisten Compiler wie der avr gcc aber 
keine direkte Unterstützung für Adressen >64kB bieten. DORT braucht man 
die Makros!
Kostenpflichtige Compiler wie IAR haben aber direkte Unterstützung OHNE 
Macros!

Beitrag "Re: Viel RAM am kleinen Controller"

>Vielleicht kennt jemand ein Gegenbeispiel bei einem AVR
>neuerer Generation bei dem (denen) das nicht so ist?

Bei den normalen AVRs sind Zugriffe auf den SRAM bis 64kB DIREKT 
machbar.
Man muss lediglich per Option dem Linker sagen, dass der SRAM verfügbar 
ist und er die Variablen dort reinpacken soll.

von Zeitgeist (Gast)


Lesenswert?

Falk Brunner schrieb:
> EBI haben nur die neuen AT_X_mega! DORT ist das Problem, dass man bis zu
> 16 MB SDRAM ansteuern kann, die meisten Compiler wie der avr gcc aber
> keine direkte Unterstützung für Adressen >64kB bieten. DORT braucht man
> die Makros!

Ok, again what learned, hätte Loddar gesagt.

Lasse mich ja belehren und freue mich dass es (mit Einschränkung, RAM
Grösse) so auch geht.

> Kostenpflichtige Compiler wie IAR haben aber direkte Unterstützung OHNE
> Macros!

Na das wäre doch mal ein Feature für den GCC. Warum macht "man" das
nicht?

Und gibt es die direkte lineare Adressierung von externen RAM im GCC
dann bei den (ATMEL-) ARM Prozessoren schon? Oder muss man sich dort
auch explizit auf das interne RAM "beschränken"?

(Fragen über Fragen ... wenn du schon so gut Bescheid weisst ....)

von Falk B. (falk)


Lesenswert?

@ Zeitgeist (Gast)

>> Kostenpflichtige Compiler wie IAR haben aber direkte Unterstützung OHNE
>> Macros!

>Na das wäre doch mal ein Feature für den GCC. Warum macht "man" das
>nicht?

Warum machst DU es nicht? Die Entwickler sehen dafür wenig Nachfrage, 
also lassen sie es bleiben. Ist schließlich auch mit einigem Aufwand 
versehen.

>Und gibt es die direkte lineare Adressierung von externen RAM im GCC
>dann bei den (ATMEL-) ARM Prozessoren schon?

ARM ist eine ganz andere Familie und damit eine ganz andere Version des 
GCC.
Der GCC ist ja recht modular, die Kernfunktionen ist bei allen gleich, 
nur das Backend ist für jeden Prozessor anders (jaja, die Insider werden 
mich jetzt gleich korrigieren)

> Oder muss man sich dort
>auch explizit auf das interne RAM "beschränken"?

Nein, dort ist alles in einem 32 Bit Adressraum direkt ereichbar.

>(Fragen über Fragen ... wenn du schon so gut Bescheid weisst ....)

Nicht wirklich, nur ungesundes Halbwissen. ;-)

von Matthias (Gast)


Lesenswert?

Ok, dann hab ich wohl die Version vom ATMega durcheinander gewürfelt :)
Wenn ich eh zu Fuss gehen muss kann ich ja gleich I2C/SPI Ram nehmen.

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.