basic/flash
不揮発性メモリFeRAMへのデータを書き込み、読み込みの基本的な操作を示すスケッチです。
概要
Wio BG770Aには、一時的にデータを保存するためのFeRAMを搭載しています。FeRAMは電源がオフしてもデータがされる不揮発性メモリで、FlashやEEPROMと比べて書き換え回数や書き換え速度に優れています。(FRAMと他メモリの特性比較)
このスケッチはFeRAMにデータを書き込み、読み込みの基本的な操作を示しています。 USERボタンを押す都度、カウント値を1つ加算します。 カウント値はFeRAMに保存するので、Wio BG770Aの電源を切っても、それまでのカウント値を覚えています。 カウント値はシリアルモニタで確認できます。Wio BG770Aの起動したときと、USERボタンを押したときに表示します。 カウント値をゼロにリセットしたいときは、USERボタンを押しながらWio BG770Aを起動してください。
詳細
FeRAMの操作にAdafruit SPIFlashライブラリを使用します。
#include <Adafruit_SPIFlash.h>
そして、いくつかのグローバル変数を定義すると、Flashインスタンスが使えるようになります。
static const SPIFlash_Device_t SPIFLASH_DEVICE = FERAM_DEVICE_CONFIG;
static SPIClass FlashSpi(FERAM_SPI, PIN_FERAM_SO, PIN_FERAM_SCK, PIN_FERAM_SI);
static Adafruit_FlashTransport_SPI FlashTransport(PIN_FERAM_CS, FlashSpi);
static Adafruit_SPIFlash Flash(&FlashTransport);
次に、初期化です。
FlashインスタンスをFlash.begin()
で初期化します。
また、WPピンとHOLDピンをpinMode()
とdigitalWrite()
で初期化します。
FlashインスタンスはFeRAMのWPピンとHOLDピンを一切操作しないからです。
digitalWrite(PIN_FERAM_WP, HIGH);
digitalWrite(PIN_FERAM_HOLD, HIGH);
pinMode(PIN_FERAM_WP, OUTPUT);
pinMode(PIN_FERAM_HOLD, OUTPUT);
Flash.begin(&SPIFLASH_DEVICE, 1);
以上で準備が整いました。
FeRAMからの読み込みはFlash.readBuffer()
、書き込みはFlash.writeBuffer()
を実行します。
if (Flash.readBuffer(0, reinterpret_cast<uint8_t*>(&value), sizeof(value)) != sizeof(value)) abort();
if (Flash.writeBuffer(0, reinterpret_cast<uint8_t*>(&value), sizeof(value)) != sizeof(value)) abort();