View on GitHub

Seeed K.K. Wiki

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();

参考リンク