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.
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
p.s. Oft ist die Speichergröße in der Chip-Bezeichnung kodiert und eigentlich immer ist sie im Datenblatt angegeben ;-)
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.
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.
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.
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
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.
>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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.