週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

ArduinoのRAM、フラッシュメモリ、ROM


Arduinoでテストをしていると、スケッチの下に

・「最大2048バイトのRAMのうち、グローバル変数が184バイト(8%)使っていて、ローカル変数で1864バイト使うことができます。」
・「最大32256バイトのフラッシュメモリのうち、スケッチが1514バイト(4%)使っています。」

と出てきました。RAM、フラッシュメモリ、ROM、それぞれ一体何なのか。そして、それらはどのような情報を保存するために使われているのか、ということを中心に説明していきます。

RAM

RAMとはRandom Access Memotyの略で、電源が切れると作業に使用していたデータは消えます。

DRAM

dynamic RAMは、記憶データをコンデンサ電荷として蓄えているため、自然放電によりデータが消えてしまいます。そのため、記憶を保持するためにリフレッシュ(同じデータを書き込む)ことを必要とします。構造が単純なため、安価です。

SRAM

static RAMで、フリップフロップを用いているため、記憶状態が保持されるため、リフレッシュ動作が必要ありません。リフレッシュ動作がないため電力消費はなく、ただし、高価。

ROM

ROMとはRead Only Memoryの略で、電源が切れてもデータは消えません。名前の通り、読み出しのみで、書き込みはできません。しかし、書き換えができるものもあります。書き換えることを完全に禁止しているのはマスクROMと呼ばれています。

フラッシュROM

電気的に内容を消去したり書き換えを行うことが可能な不揮発性メモリです。消去が一括で行える機能から「フラッシュ」と名付けられています。

EEPROM

EEPROMは、内容を書き換え可能なROMです。寿命としては、百万回の書き込みも可能となっています。

なぜRAMがなくならないのか

フラッシュROMがあれば、揮発性であるRAMは必要ないのではないかと思いますが、RAMの方が寿命が長いため、メインメモリとして使用されています。フラッシュメモリがRAMの寿命を超えることがあれば、RAMがなくなるかもしれません。

プログラムを書き込む時

プログラムを書き込む時、ROMに書き込まれます。そうでなければ電源がOFFになった時にプログラムが消えてしまって、次に書き込まれるまでその製品は動作しなくなります。

バージョンアップ時

プログラムを書き換えたくなった時、ROMにそのまま書き込んでいくとうまく通信が行えず失敗した場合、そのプログラムは動作不能状態となってしまいます。
そのため、RAMに書き込みを行い、そのあとにEEPROMに書き込みます。