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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.