Forum: Mikrocontroller und Digitale Elektronik Externen SRAM benutzen SPI/Parallel?


von Dextrose (Gast)


Lesenswert?

Hallo, ich würde gerne ein wenig mit externem SRAM herumspielen.
Nach dem ich ein wenig auf Digi-Key herum gestöbert habe, habe ich auch 
schnell welche gefunden. So wie es aussieht gibt es ja eine Menge 
unterschiedlicher Typen. Um das ganze möglichst einfach zu halten, würde 
ich gerne entweder eine Serielle (SPI) Adressierung oder eine Parallele 
verwenden.
Nur bin ich mir nicht sicher wie genau die Ansteuerung funktioniert.
Nach dem lesen einiger Datenblätter habe ich es nun wie folgt 
aufgegriffen:

Bei dem SRAM mit Paralleler Adressierung:

1. Chip Select auf 0 setzen.
2. Write Enable auf 0 setzen.
3. Output Enable auf 1 setzen.
4. Adresse an "Addresse input" ausgeben.
5. Das Byte an "Data input/ouput" ausgeben.
6. Write Enable auf 1 setzen.

Danach sollte man das Byte an der Adresse haben richtig?

Bei der Version mit Serieller Adressierung habe ich nun das Problem 
nachzuvollziehen wie ich ein Byte an einer bestimmten Adresse auslesen 
kann.
Schließlich ist kein Eingang zum vorgeben einer Adresse vorhanden. 
Funktioniert dies nun so, dass man einen "Stack" hat wie beim internen 
SRAM von Mikrocontrollern, dass man also keine genau Adresse auslesen 
kann? Jedoch mit dem Unterschied, dass man halt einen "Clock" pin hat 
usw.

von Detlef K. (adenin)


Lesenswert?

Dextrose schrieb:
> Um das ganze möglichst einfach zu halten, würde
> ich gerne entweder eine Serielle (SPI) Adressierung oder eine Parallele
> verwenden.

Was wäre die komplizierte dritte Möglichkeit?

Dextrose schrieb:
> Bei der Version mit Serieller Adressierung habe ich nun das Problem
> nachzuvollziehen wie ich ein Byte an einer bestimmten Adresse auslesen
> kann.

Dafür gibts das Datenblatt.
Ansonste frag ich Dich, wie Du wohl serielle EEPROMs benutzt?

von Dextrose (Gast)


Lesenswert?

Detlef Kunz schrieb:
> Dextrose schrieb:
>> Um das ganze möglichst einfach zu halten, würde
>> ich gerne entweder eine Serielle (SPI) Adressierung oder eine Parallele
>> verwenden.
>
> Was wäre die komplizierte dritte Möglichkeit?

Ich hätte vielleicht erwähnen sollen, dass dies für mich einfacher wäre 
weil ich mich schon mal mit Serieller und Paralleler Übertragung von 
Daten beschäftigt habe.

Detlef Kunz schrieb:
> Dextrose schrieb:
>> Bei der Version mit Serieller Adressierung habe ich nun das Problem
>> nachzuvollziehen wie ich ein Byte an einer bestimmten Adresse auslesen
>> kann.
>
> Dafür gibts das Datenblatt.
> Ansonste frag ich Dich, wie Du wohl serielle EEPROMs benutzt?

EEPROMs bislang noch gar nicht.
Ich sehe gerade im Datenblatt, dass es eine Instruction Set Tabelle 
gibt.
Das heißt also, dass man erst die Instruktion ausgibt, dann die Adresse, 
dann das Byte?

von Detlef K. (adenin)


Lesenswert?

Dextrose schrieb:
> Das heißt also, dass man erst die Instruktion ausgibt, dann die Adresse,
> dann das Byte?

Na wenn's so drin steht, wird's wohl so sein.

von Falk B. (falk)


Lesenswert?

@ Dextrose (Gast)

>schnell welche gefunden. So wie es aussieht gibt es ja eine Menge
>unterschiedlicher Typen.

Ja, siehe Speicher.

>1. Chip Select auf 0 setzen.
>2. Write Enable auf 0 setzen.

Nein. Erst Adressen und Daten anlegen.

>3. Output Enable auf 1 setzen.

Das war es meistens schon vorher.

>Danach sollte man das Byte an der Adresse haben richtig?

So in etwa.

>Bei der Version mit Serieller Adressierung habe ich nun das Problem
>nachzuvollziehen wie ich ein Byte an einer bestimmten Adresse auslesen
>kann.

Das läuft über ein serielles Protokoll, welches im Datenblatt 
beschrieben ist. Meist muss man zuerst ein Kommandobyte senden, danach 
die Adresse und dann die Daten. Den Rest macht der serielle RAM selber. 
Bei Lesen ist es sehr ähnlich.

>Funktioniert dies nun so, dass man einen "Stack" hat wie beim internen
>SRAM von Mikrocontrollern, dass man also keine genau Adresse auslesen
>kann?

Nein.

Mfg
Falk

von Georg (Gast)


Lesenswert?

Dextrose schrieb:
> Danach sollte man das Byte an der Adresse haben richtig?

Das parallele Protokoll ist extrem einfach, den Namen Protokoll verdient 
es garnicht, aber dafür brauchst du jede Menge Pins - Das Ram hat 30 
oder mehr, und am µC brauchst du ebensoviele, und Leitungen auf der 
Leiterplatte auch.

Georg

von Peter D. (peda)


Lesenswert?

Am einfachsten ist es, wenn Dein unbekannter MC ein Memoryinterface hat. 
Dann einfach den RAM dort ranpappen und dem Linker die Startadresse und 
Größe sagen.

Ansonsten mußt Du eine Routine schreiben, die Datenblöcke vom echten RAM 
in den Zusatz-RAM und zurück kopiert. Eine direkte Nutzung durch den 
Compiler ist dann natürlich nicht möglich.

von Tobias B. (tobiasz80)


Angehängte Dateien:

Lesenswert?

Ich habe damit auch mal rum gespielt. Bei mir war es das Ziel ein Z80 
System ohne EEPROM zu starten. Dazu hab ich mir mit dem Arduino Uno eine 
art Bootloader geschrieben, der das Programm in den SRAM kopiert und 
dann das System startet.
Dazu habe ich die Datenleitungen des SRAMs direkt an den Arduino 
verbunden. Die Adressleitungen habe ich über die SPI Schnittstelle und 
den Einsatz von Schieberegistern angebunden. So konnte ich an den 
ATmega328 ein 64KByte SRAM mit einem 8 Bit breiten Datenbus anschließen.
Theoretisch hätte ich auch so auch die Datenleitungen an den Arduino 
anbinden können. Ich hätte mir so Pins gespart, jedoch hatte ich noch 
genug an dem Arduino und für die Parallel->SPI und SPI->Parallel 
Umwandlung hätte ich etwa drei zusätzliche ICs gebraucht (1 Logik IC und 
zwei Schieberegister). Das heißt es hätte die Schaltung unnötig größer 
gemacht.

Ich hab dir den Sourcecode von dem Programm und den Schaltplan mal 
angehängt.
Es ist jetzt nichts besonderes. Ich hab das einfach mal für mich gemacht 
ohne es jemals veröffentlichen zu wollen. Aber vielleicht hilft dir das 
hier weiter.
Ich tue in dem Bootloader den Speicher schreiben und lesen.

MfG
Tobias

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.