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と同じなので、ほとんど苦労せず使えることができました。
ArduinoでFRAMを使ってみる
スポンサーリンク


Leave a Comment