ArduinoでFRAMを使ってみる

FRAMは日本語では強誘電体メモリと言います。
「RAM」とついていますが、不揮発性メモリの一種です。
FeRAMと呼ぶのが一般的らしいですが、FRAMなどとも呼ばれます。(サイプレスの商標です)

EEPROMよりも圧倒的に書き換え可能回数が多く、書き込み速度も速いのが特徴です。
そんなFRAMをArduinoで使ってみました。

スポンサーリンク

EEPROMは一般的に書き込み寿命は約10万回と言われています。
1秒毎に同じアドレスに書き込みするとなると1日ちょっとで寿命がきてしまいます。
それに対してFRAMの書き込み寿命は100兆回です。
とてもつもない回数ですよね。

ただし、FRAMの仕組上読み出しでもデータが消えます。
ユーザ側はそれに対して別に制御する必要はないですが、読み出しでも書き込みを行うことになります。
それでもちょっとやそっとでは100兆回を超えないと思うので安心ですね。

今回使うFRAMはFM24C16BというFRAMです。
RSオンラインで買いました。

といってもI2CのEEPOMと制御に互換性があるのでそんなに苦労することはありません。

使ったFRAMは「24C16」というEEPROMと同等です。

#define DEVICE_ADDR 0x50

void fram_write(int address, byte data) {
   byte devaddr = DEVICE_ADDR | ((address >> 8) & 0x07);
   byte addr    = address;
	 
   Wire.beginTransmission(devaddr);
   Wire.write(int(addr));
   Wire.write(int(data));
   Wire.endTransmission();
}

int fram_read(unsigned address) {
   byte rdata = -1;
   byte devaddr = DEVICE_ADDR | ((address >> 8) & 0x07);
   byte addr    = address;

   Wire.beginTransmission(devaddr);
   Wire.write(int(addr));
   Wire.endTransmission();
   Wire.requestFrom(int(devaddr), 1);
   if (Wire.available()) {
       rdata = Wire.read();
   }
   return rdata;
}

容量の大きさで制御が微妙に変わってくるので、それに気をつけるくらいですかね。
EEPROMと同じなので、ほとんど苦労せず使えることができました。

スポンサーリンク

Leave a Comment