Größe eines SRAM-ICs ermitteln

Gast #5894264
Ich habe hier mehrere SRAM ICs, die ich gerne mit einem Mikrocontroller 
ansprechen möchte.
Gibt es irgend eine Möglichkeit die Speichergröße der Chips zu 
bestimmen?
Die verwendeten Chips haben 12-16 Adressbits.
Der Mikrocontroller sollte irgendwie die Speichergröße ermitteln um 
keine Adressen zu setzen, die der Chip nicht unterstützt.
Gast #5894270
Paul schrieb:
> Die verwendeten Chips haben 12-16 Adressbits.
> Der Mikrocontroller sollte irgendwie die Speichergröße ermitteln um
> keine Adressen zu setzen, die der Chip nicht unterstützt.

Dann überlege mal, wozu bei SRAM-ICs die Adressbits gut sind - 
gewöhnlich, um den im IC enthaltenen Speicher zu adressieren.

Bei n Adressbits ergibt sich die Speichergröße dann zu 2^n
Gast #5894287
Vielleicht heißt die Aufgabenstellung: Ich schließe einen Speicher an 
und der µC soll die Größe ermitteln?
Wenn der TO sich klarer ausdrücken würde, wüssten wir es.

Ein TiP:

SRAMs kann man schreiben und lesen und dann schauen, ob das geschriebene 
auch da ist, wo es sein sollte. Oder ob ein Schreibvorgang einen Zelle 
überschrieben hat, die man gar nicht adressieren wollte.

Auch bei den einfachsten Aufgabenstellungen brauchts etwas Nachdenken 
und etwas Phantasie.
Gast #5894300
Phantasie schrieb:
> Vielleicht heißt die Aufgabenstellung: Ich schließe einen Speicher an
> und der µC soll die Größe ermitteln?

So hätte ich sie verstanden.

Ein SRAM-Speicher mit 12 Bit hat einen Adressbereich von 0 bis (2^12)-1.
Schreibt man auf 2^12, dann landet der Wert auf Adr. 0.

Man kann z.B. auf die Adresse 0 einen Wert 0 schreiben und anschließend 
auf die Adresse 2^n (n=12, 13, ...) einen von 0 verschiedenen Wert. 
Anschließend prüft man, welcher Wert bei Adr. 0 drin steht.
Ist er noch 0, dann wiederholt man das mit dem nächsten n.
Ist er nicht mehr Null, so ist die Speichergröße 2^n.
Gast #5894303
Phantasie schrieb:
> Ich schließe einen Speicher an und der µC soll die Größe ermitteln?

Genau das habe ich vor.
Ich hatte früher Mal einen Atari Portfolio, dort gab es die 
Speicherkarten, die einfach nur SRAM und eine Knopfzelle waren, in 
unterschiedlichen Größen. Der Portfolio konnte aber die Große anzeigen.

So etwas würde ich auch gern machen. Egal wie groß der angeschlossene 
Chip ist, der uC soll die Große irgendwie ermitteln
#5894310
Das geht nicht, ohne die vorhandenen Daten (teilweise) zu überschreiben. 
Für batteriegepufferten Speicher ist das also keine sinnvolle Option.

Ich bin mir sicher, dass der Atari Portfolio die Erweiterung anderweitig 
identifizieren konnte (z.B. Pullup/Pulldown-Widerstände). Oder er hat 
die Daten vorher woanders zwischengespeichert, d.h. bei einem Absturz in 
der Routine waren die Daten trotzdem kaputt.
Gast #5894404
>Das geht nicht, ohne die vorhandenen Daten (teilweise) zu überschreiben.


Klar geht das. Speicherzelle lesen, in Register oder in anderem Ram 
speichern, Test durchführen, Speicherzelle zurückschreiben.


Programmieren ist immer sich eine Methode ausdenken. Programmieren ist 
nicht copy&paste.
Gast #5894406
HildeK schrieb:
> Man kann z.B. auf die Adresse 0 einen Wert 0 schreiben und anschließend
> auf die Adresse 2^n (n=12, 13, ...) einen von 0 verschiedenen Wert.
> Anschließend prüft man, welcher Wert bei Adr. 0 drin steht.
> Ist er noch 0, dann wiederholt man das mit dem nächsten n.
> Ist er nicht mehr Null, so ist die Speichergröße 2^n.

Njein,
damit prüft man lediglich ob Speicher an der Addresse liegt, aber nicht 
welcher. Beim Speicherkartenbeispiel wäre das das man nicht 
unterscheiden kann, ob zwei Speicherkarten halber Größe hintereinander 
liegen oder nur eine Speicherkarte einfacher Größe. Spassig wird es wenn 
man beim Testen den Arbeitsspeicher des Testprogramms erwischt ...

Aber möglicherweise ist das dem TO wurscht.

Im echten Leben speichert man die Installierte Speichergröße 
nichtflüchtig ab (bspw BIOS, CMOS-RAM, Config-EEPROM, 
Firmeare-datafield) und checkt beim Hochfahren ob man den Speicher in 
der Größe wie konfiguriert beschreieben kann. Anders lassen sich 
teilweise Speicherausfälle nicht entdecken.
Moderator (Firma: Titel) Persönliche Seite #5894416
S. R. schrieb:
> Ich bin mir sicher, dass der Atari Portfolio die Erweiterung anderweitig
> identifizieren konnte (z.B. Pullup/Pulldown-Widerstände).
Nachdem da offenbar nur 3 verschiedene Speicherkarten (namentlich 
HPC-201, HPC-202, HPC-203) angeboten wurden, und der Zustand "keine 
Karte" dazukommt, reichen 2 Leitungen für die Erkennung eines dieser 4 
Zustände aus.
Gast #5894419
Paul schrieb:
> Phantasie schrieb:
>> Ich schließe einen Speicher an und der µC soll die Größe ermitteln?
>
> Genau das habe ich vor.
> Ich hatte früher Mal einen Atari Portfolio, dort gab es die
> Speicherkarten, die einfach nur SRAM und eine Knopfzelle waren, in
> unterschiedlichen Größen. Der Portfolio konnte aber die Große anzeigen.
>
> So etwas würde ich auch gern machen. Egal wie groß der angeschlossene
> Chip ist, der uC soll die Große irgendwie ermitteln

Dann zähl halt durch. Fang bei Adresse 0 an und arbeite dich vor bis 
Adresse whatever, was auch immer das Maximum ist.

Wenn du ausschließen willst, dass derselbe Speicher gespiegelt vorhanden 
ist, musst du halt in jede vorhandene Zelle einen anderen Wert schreiben 
und das zurücklesen und prüfen.
#5894489
Paul schrieb:
> Die verwendeten Chips haben 12-16 Adressbits.

Dann mußt Du erstmal die Datenblätter der fraglichen SRAMs vergleichen, 
welche Funktion die 4 Pins haben, wenn sie keine Adressen sind.

Die Größe zu ermitteln ist ganz einfach. Du schreibst an Adresse 0x0000 
irgendein Datum und dann prüfst Du, wann wieder das gleiche Datum 
ausgelesen wird. An dieser Adresse änderst Du das Datum und prüfst, ob 
es sich an 0x0000 auch geändert hat. Wenn ja, dann ist das Ende 
erreicht.
Du mußt natürlich nicht alle Adressen abklappern. Es reicht, nur die 
Adressbits 12..15 zu prüfen, wenn 4k die kleinste Größe ist. Also 4 
Vergleiche.
#5894506
Paul schrieb:
> Gibt es irgend eine Möglichkeit die Speichergröße der Chips zu
> bestimmen?

Typennummer ablesen, in Datenblatt gucken, und sich ärgern warum man so 
eine idiotisch unklare Frage stellt.

Paul schrieb:
> Genau das habe ich vor.

Wenn alle Adressleitungen an die 16 als Adressausgänge verwendeten 
PortPins in Reihenfolge angeschlossen wurden, die letzten eben nicht 
verbunden, ist es doch simpel: An die letzte Adresse von (12, 13. 14,..) 
bit Adresse etas schreiben (z.B. 0xFFF) und gucken ob sich die 
Speicherstelle bei 2 x Adresse +1 (z.B. 0x1FFF)verändert hat. Wenn ja, 
war der Chip nicht doppelt so gross, sonst weiter probieren.
#5894570
Phantasie schrieb:
>> Das geht nicht, ohne die vorhandenen Daten (teilweise) zu
>> überschreiben.
>
> Klar geht das. Speicherzelle lesen, in Register oder in anderem Ram
> speichern, Test durchführen, Speicherzelle zurückschreiben.

Hättest du bessere Lesekenntnisse, wäre dir aufgefallen, dass ich das 
bereits erwähnt hatte.

Im Übrigen enthält der von dir vorgeschlagene Ablauf "lesen, 
überschreiben, wiederherstellen" den Teil "überschreiben". Ohne den geht 
es also trotzdem nicht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.