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?
@Stefan: Die Daten von Page 0 und 1 sind nicht identisch. Die Adressen stimmen laut Oszilloskop. Hier ist der Code zum Schreiben und Lesen vom EEPROM:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.