Größe eines SRAM-ICs ermitteln

Gast #5894264
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren