Forum: Mikrocontroller und Digitale Elektronik Größe eines SRAM-ICs ermitteln


von Paul (Gast)


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.

von Wolfgang (Gast)


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

von Wolfgang (Gast)


Lesenswert?

p.s.

Oft ist die Speichergröße in der Chip-Bezeichnung kodiert und eigentlich 
immer ist sie im Datenblatt angegeben ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Paul schrieb:
> Ich habe hier mehrere SRAM ICs ...
> Gibt es irgend eine Möglichkeit die Speichergröße der Chips zu
> bestimmen?

Du meinst eine andere Möglichkeit, als die Typbezeichnung auf dem IC zu 
lesen und dann ins Datenblatt zu schauen?

...

Nein. Eher nicht.

von Phantasie (Gast)


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.

von Phantasie (Gast)


Lesenswert?

Aber es geht locker.

von HildeK (Gast)


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.

von Paul (Gast)


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

von S. R. (svenska)


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.

von Phantasie (Gast)


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.

von Schiffe Versenken (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von asdf (Gast)


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.

von Peter D. (peda)


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.

von Michael B. (laberkopp)


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.

von S. R. (svenska)


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.

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.