Forum: Compiler & IDEs externes SRAM am AVR


von Controller (Gast)


Lesenswert?

Hallo zusammen

Ich habe zwei Fragen zur Verwendung von externem RAM am AVR:

1. Welche AVR-Typen haben ein Memory-Interface zum Anschluss von 
externem RAM?

Ich habe diese Information nicht finden können auf der Atmel-Hompage.


2. Gibt es bei AVR-Typen die KEIN solches Interface haben eine 
Möglichkeit trotzdem externes SRAM zu verwenden?

Kann man also ein Memory-Interface in Software implementieren (ähnlich 
wie z. B. ein Software UART als Ersatz eines Hardware UART)? Der externe 
RAM sollte dabei im C-Code möglichst gleich angesprochen werden können 
wie der interne RAM.

Danke für jede Antwort.

von mr.chip (Gast)


Lesenswert?

Hallo

Könnte das der 8515 sein? (Kein Gewähr, ich kann mich nur so an ein paar 
mitgelesene Diskussionen erinnern.)

Natürlich kannst du externes SRAM auch anbinden, wenn der Controller 
kein Memory-Interface hat. Es gibt aber ein paar Probleme:

1. Anzahl Pins: für 16 k * 1 Byte brauchst du 14 Adresspins, 8 Datenpins 
und 3 Steuerpins. Da ist selbst ein Mega32 schon sehr gut belegt. 
Möchtest du weniger Pins verwenden, kannst du natürlich auch externe 
Logik für die Steuerung verwenden, womit wir beim zweiten Problem wären:

2. Ein im internen RAM gehaltenes Byte kannst du in maximal 4 Taktzyklen 
wahlfrei auslesen (2 für die Adresse aufzusetzen, 2 für das lesen). Für 
externes SRAM benötigst du wesentlich mehr. (4 für die Adresse, 2 für 
die Daten, 3 Befehle ung einige 'nops' für die Steuerung, macht ganz 
sicher 10 Zyklen.) Wenn du, um Pins zu sparen noch externe Latches, 
Schieberegister oder Counter (für rein sequentiellen Zugriff) anbindest, 
dauert der Vorgang noch länger.

3. Der avr-gcc kann von Haus aus natürlich nicht mit deinem externen 
SRAM umgehen. AFAIK kann man dem avr-gcc weitere Speichertypen 
beibringen, ich weiss aber nicht wie.

Gruss

Michael

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Controller wrote:

> 1. Welche AVR-Typen haben ein Memory-Interface zum Anschluss von
> externem RAM?

AT90S4414
AT90S8515
ATmega8515
ATmega162
ATmega64
ATmega128
ATmega640/1280/1281/2560/2561
AT90CANxx
AT90USBxx

> 2. Gibt es bei AVR-Typen die KEIN solches Interface haben eine
> Möglichkeit trotzdem externes SRAM zu verwenden?

Im Prinzip ja, aber es ist langsamer und nicht mit normalen
Speicherzugriffen adressierbar.

> Der externe
> RAM sollte dabei im C-Code möglichst gleich angesprochen werden können
> wie der interne RAM.

Genau das geht dabei nicht.

> 3. Der avr-gcc kann von Haus aus natürlich nicht mit deinem externen
> SRAM umgehen.

Den AVR-GCC interessiert es natürlich von Haus aus überhaupt nicht,
ob der RAM, auf den er zugreift, intern oder extern ist.

von Controller (Gast)


Lesenswert?

Hallo

Danke für alle diese extrem schnellen und informativen Antworten.

Vielleicht beschreibe ich meine Situation noch etwas genauer:
Ich verwende im Moment einen ATmega8 mit 128K externem SRAM. Zur 
Einsparung von Pins werden die Adressen von einem externen Zähler 
generiert (sequenzieller Zugriff). Die Software ist bis jetzt in 
AVR-Assembler geschrieben.

Nun möchte ich das ganze mit AVR-GCC verwenden und dabei am liebsten 
auch noch einen wahlfreien Zugriff ermöglichen (z.B. mit 
Schieberegister). Gibt es dazu vielleicht bereits fertige Lösungen oder 
Code-Beispiele an denen man sich orientieren könnte?

Danke für jede Antwort.

von Peter Fleury (Gast)


Lesenswert?

>Ich verwende im Moment einen ATmega8 mit 128K externem SRAM.

Ich würde auf einen ATmega162 migrieren, der hat ein externes SRAM- 
Interface, allerdings kann nur 64K direkt angesprochen werden, da müsste 
man müsste zwei 64K Banks mittels Port-Pin umschalten.

Ich glaube kaum, dass es für deine Spezial-Lösung fertige Code-Beispiele 
gibt.

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.