Hallo,
ich verstehe das Verhalten vom FM24CL16B nicht. Der Speicher ist
organisiert in 3 pages von je 256 Byte, also insgesamt 2048 x 8 Bit. Der
Adresszähler macht immer bei 2047 nach 0 einen Überlauf.
Folgendes Vorgehen:
Ich schreibe 261 Bytes der Werte [0..255,0..5] an page=0, word address=0
in den FM24CL16B.
Ein Auslesen von 512 Bytes an page=0, word address = 0 ergibt, dass das
Schreiben erfolgreich war, ich sehe die geschriebenen Bytes in den
ersten 261 Bytes, der Rest sind Nullen.
Jetzt schreibe ich 80 Bytes mit dem Wert 0 an page=0, word address = 0.
Ein Auslesen von 512 Bytes an page=0, word address = 0 ergibt jetzt dass
die ersten 80 Bytes Nullen sind - OK, jedoch sind die Bytes 256-261
ebenfalls Null!
Vorher war doch an den Stellen 256-261 noch Werte, keine Nullen!
Was ich gar nicht verstehe:
Wenn ich beginnend von page=1 z.B. 5000 Bytes auslese, erhalte ich meine
Werte [80..255,0..4], natürlich mehrfach und umgeben von vielen Nullen.
Lese ich jedoch beginnend von page=0, bekomme ich nur die Werte
[80..255], wieder umgeben von Nullen. Wo sind die Zahlen [0..4] ???
Vielleicht kann mir jemand auf die Sprünge helfen.
Oder ist das ein Bug? So dass der page-Zähler zwar mitzählt, aber wenn
vorher page=0 geschrieben wurde, nicht zur Adressierung verwendet wird,
sondern immer page=0.
Danke,
Martin
Ich glaube, Du hast da ein paar Sachen falsch verstanden. Wenn ich das
richtige Datenblatt vorliegen habe, dann hat der Chip 8 pages a 256
Byte. Entspricht 3 Page-Select Adressleitungen im Slave-Device-Adress
Byte.
Und ich tippe mal, dass Deine Schreib-Lese-Routinen immer auf die Page 0
lesen/schreiben. Das fällt bei Deinem 261-Byte-Test nicht auf, weil die
Daten in Page 0 undd Page 1 identisch sind. Ohne den Code kann man dazu
aber nicht mehr sagen.
Gruß, Stefan
Tschuldigung, mein Schreibfehler. Natürlich sind es 8 pages, ich denke
schon in Bit ;-)
Wenn ich den Speicher sequentiell mehrfach hintereinander auslese (z.B.
3 x 2048), bekomme ich verschiedene Sequenzen, abhängig davon ob ich bei
page 0 oder page 1 starte. Wie ist das zu erklären?
Ich sehe keinen Fehler in Deinem Code.
Kann es sein, dass das FRAM nur die unteren 8 Adressbits einer Page beim
sequentiellen r/w inkrementiert? Steht zwar anders im Datenblatt,
aber...
Ich würde den Code mal so umbauen, dass beim Erreichen einer Pagegrenze
ein neuer r/w Zyklus gestartet wird.
Viele Grüße, Stefan
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.