F-Ram von Ramtron

Hi Leute!

Ich hab mir vor kurzem ein 4KBit F-Ram (=512Byte) zugelegt und dieses wie meine RTC-DS1307 über I2C angesprochen (mit anderer Slave-Adresse), was auch prächtig funktioniert.
Die Adressierung der ersten 256Byte erfolgt über die Slave-Adresse 0x50 und die zweiten 256Byte über die Slave-Adresse 0x51.

Das macht natürlich Lust auf mehr.... mehr Speicherplatz!
z.B. das 512Kb-Modell.
Nun hab ich das Datenblatt mit meinem wohl nicht ganz perfekten Englisch :blush: studiert, und bin nicht viel klüger geworden.

Bei meiner Version mit 2x256 Byte funtioniert es mit folgenden Funktionen (2 Slave-Adressen á 256-Speicheradressen):

void Write_F_Ram1(byte Adresse, byte Daten)
{
Wire.beginTransmission(0x50);
Wire.send(Adresse);
Wire.send(Daten);
Wire.endTransmission();
}

byte Read_F_Ram1(byte Adresse)
{
Wire.beginTransmission(0x50);
Wire.send(Adresse);
Wire.endTransmission();
Wire.requestFrom(0x50,1);
return (Wire.receive());
}

Aber wie funktioniert das Ganze bei dem 512Kb Ram?
Für die Adressierung sind hier ja ganze 2 Bytes notwendig!
Wie sähe der entsprechende Code aus?

Muß es vielleicht so heißen?
void Write_F_Ram(byte Adresse1, byte Adresse2, byte Daten)
{
Wire.beginTransmission(0x50);
Wire.send(Adresse1);
Wire.send(Adresse2);
Wire.send(Daten);
Wire.endTransmission();
}

Danke im Voraus
ReS

PS.: natürlich habe ich Google bereits gequält, bin aber zu keinem schlüssigen Ergebnis gekommen :frowning:

Hallo spaceball
Bitte genaue Bezeichnung des Frams geben.
Ich hab mit dem FM25256B-G herumexperimentiert, hat aber ein SPI-Inteface.
Ist 1zu1 kompatiben zu EEprom nur viel schneller beim Schreiben.
Grüße Uwe

FM24C04A-G =4Kb
FM24C512-G =512Kb

Hallo spaceball

http://www.ramtron.com/files/datasheets/FM24C512_ds.pdf:
Memory Architecture
The FM24C512 is logically organized as two 32,768
x 8 bit memory arrays for a total of 65,536 locations.
The device should be treated as two banks, each bank
being selectable by the most significant address bit
A15. The MSB is located in the Slave Address byte
and can be considered a bank select bit. See Figure 4.

I2C-Adresse:
1 0 1 0 A2 A1 A15 R/W
wobei A2 und A1 die beiden Adresseingänge sind und A15 die Adressbank des Speichers definiert.
Also gleich wie beim kleineren FRAM: 2 Slave-Adressen á 32768-Speicheradressen.
Grüße Uwe

Soweit so klar.... :wink:
Auf was ich eigentlich hinaus wollte, aber wohl nicht richtig erklärt habe :roll_eyes: :

Als erstes wird die Slave-Adresse gesendet (incl Page-Bit = A15) ...... soweit so klar

Dann das erste Adressbyte: 0+(A14-A8) ......... beim 4Kb-IC reicht ja 1 Byte
nun das zweite Adressbyte: (A7 - A0)

Jetzt das Daten-Byte (bzw mehrere Bytes)
und schliesslich der Abschluß mit endTransmission()

Hab ich das so richtig verstanden???
Vor allem die Aufteilung der Adressbits auf die Bytes?

mfg ReS

PS.: @Uwe: Danke für Deine schnelle Antwort!

Auf Seite 6 und 7 sind die Diagramme.
http://www.ramtron.com/files/datasheets/FM24C512_ds.pdf
Grüße Uwe

Hallo Uwe!
Dieses Datenblatt hab ich nun schon dermassen zerklaubt, daß ich schon davon träume :astonished:

Spaß bei Seite. Im Prinzip hab ich nun die Funktionsweise verstanden (hoffe ich).

Es geht mir jetzt mehr um den Code Arduino-seitig.

heißt es nun z.B:
{
Wire.beginTransmission(0x50);
Wire.send(56);
Wire.send(255);
Wire.send(128);
Wire.endTransmission();
}

oder:
{
Wire.beginTransmission(0x50);
Wire.send(14336);
Wire.send(Daten);
Wire.endTransmission();
}

oder noch ganz anders????
thx ReS

Hallo spaceball

prinzipiell wird das FRAM gleich wie ein I2C EEPROM angesprochen:
http://www.arduino.cc/playground/Code/I2CEEPROM

Der Unterschied ist daß das FRAM keine Pages hat und daß auch keine Wartezyklen zum schreiben eingelegt werden müssen. Du kannst praktisch das halbe FRAM in einem Rutsch mit der Funktion i2c_eeprom_write_page(int deviceaddress, unsigned int eeaddresspage, byte* data, byte length) schreiben. Aufpassen, lengh muß in diesem Fall vom Typ unsigned int sein. Das halbe FRAM deshalb, weil das FM24C512-G zwei Pages mit 2 verschiedenen Adressen hat.

Grüße Uwe