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.
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?
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?
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.
@ 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
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
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.
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