ROM・FLASH・RAMの違いとは?SRAM・DRAMの種類まで組み込み目線で解説

目次

メモリ領域解説シリーズ

本記事は「メモリ領域解説」シリーズの1つです。

メモリ領域解説シリーズの全体像はこちら

組み込み開発を学び始めると、次のような言葉をよく目にします。

  • RAM
  • ROM
  • FLASH
初心者さん

ROMとFLASHって何が違うの?

初心者さん

プログラムはどこに保存されているの?

初心者さん

RAMは何に使われているの?

と疑問に思う人も多いのではないでしょうか。

この記事では、ROM・FLASH・RAMの違いと、組み込み開発における役割をわかりやすく解説します。

初心者さん

ROMとRAMは聞いたことがありますが、FLASHって何ですか?

エンジニアくん

いい質問だね。実はFLASHはROMの一種なんだ。

初心者さん

えっ、そうなんですか?

エンジニアくん

うん。まずはそれぞれの特徴を見ていこう。

ROM・FLASH・RAMの全体像

まずは全体のイメージを見てみましょう。

FLASH(ROM)
 └ プログラムを保存
RAM
 ├ data領域
 ├ bss領域
 ├ heap
 └ stack

簡単に言うと、

  • FLASH(ROM) → プログラムを保存する場所
  • RAM → プログラム実行中に使う作業メモリ

です。

RAMとは

RAMは Random Access Memory の略で、プログラム実行中に使うメモリです。

特徴は次の通りです。

  • 読み書きができる
  • 電源を切ると内容が消える
  • プログラムの実行中に使用される

例えば次のコード。

int x = 10;

この変数 x は、実行中には RAM上に配置されます。

揮発性メモリと不揮発性メモリ

初心者さん

RAMってなんで電源切ると消えちゃうんですか?

エンジニアくん

RAMは“揮発性メモリ”だからだよ。電気で状態を保っているから、電源が切れると消えちゃうんだ

初心者さん

じゃあROMは消えないんですか?

エンジニアくん

そう。不揮発性メモリだから電源がなくても保持できるんだ

メモリは大きく次の2種類に分けられます。

  • 揮発性メモリ
  • 不揮発性メモリ

揮発性メモリとは、電源を切ると内容が消えてしまうメモリのことです。
一方、不揮発性メモリは、電源を切っても内容が保持されるメモリです。

揮発性メモリ   → RAM
不揮発性メモリ → ROM / FLASH / EEPROM

RAMは揮発性メモリであるため、電源を切るとデータが消えてしまいます。
そのため、プログラムを保存する用途には向いていません。

一方、ROMやFLASHは不揮発性メモリであり、電源を切ってもデータが消えないため、
プログラムの保存に使用されます。

この違いがあるため、組み込みシステムでは「プログラムは不揮発メモリに保存し、実行時は揮発メモリを使う」という構造になっています。


ROMとは

ROMは Read Only Memory の略です。

本来は

読み出し専用メモリ

を意味します。

特徴

  • 電源を切っても内容が消えない
  • 基本的には書き換えない

組み込み開発では、ROMは

プログラムを保存する不揮発メモリ

という意味で使われることが多いです。


FLASHとは

FLASHメモリは、

電気的に書き換え可能なROM

です。

特徴

  • 電源を切っても消えない
  • 書き換え可能
  • プログラムを書き込める

現在の多くのマイコンでは、

ROMとしてFLASHメモリが使われています。

本来のROMは書き換えできないメモリですが、現在の組み込み開発では、電気的に書き換え可能なFLASHメモリがROMとして使われています。

初心者さん

つまりROMとFLASHは同じなんですか?

エンジニアくん

完全に同じではないけど、実務ではほぼ同じ意味で使われることが多いね。

初心者さん

そうなんですね!

エンジニアくん

設計資料ではROMと書いてあっても、実際のハードウェアはFLASHだったりするよ。

EEPROMとは(補足)

初心者さん

EEPROMっていうのも聞いたことがあります

エンジニアくん

いいところに気づいたね。FLASHと同じ“書き換えできるROM”の仲間だよ

初心者さん

じゃあ何が違うんですか?

エンジニアくん

EEPROMは少量のデータを細かく書き換えるのが得意で、FLASHは大きなデータをまとめて扱うのが得意なんだ

FLASHメモリと似たものとして、EEPROMというメモリもあります。

EEPROMは

電気的に書き換え可能なROMの一種で、FLASHと同じく不揮発メモリです。

ROM
 ├ EEPROM
 └ FLASH

主な違いは次の通りです。

  • EEPROM → 少量のデータを細かく書き換える用途
  • FLASH → プログラムなどをまとめて扱う用途

そのため組み込み開発では、

  • プログラム → FLASH
  • 設定値など → EEPROM

のように使い分けられることがあります。



ROM・FLASH・RAM・EEPROMの違い

それぞれの違いを整理すると次の通りです。

メモリ書き込み電源OFF用途
RAM可能消える作業メモリ
ROM基本不可消えないプログラム保存
FLASH可能消えないプログラム保存
EEPROM可能消えない設定値保存など

まとめると

  • RAM → 作業メモリ
  • ROM → 不揮発メモリ
  • FLASH → 書き換え可能なメモリ
  • EEPROM→書き換え可能で設定値など保存するメモリ

です。

起動時に何が起こるのか

組み込みプログラムでは、起動時に次のような処理が行われます。

FLASH

初期値付き変数をコピー

RAM (data領域)

例えば次のコード。

int g = 10;

この 10 という初期値は

FLASHに保存されています。

そしてプログラム起動時に

FLASH → RAM

へコピーされます。

この処理は スタートアップコード が行っています。

スタートアップコードについてはこちらの記事で解説しています。

FLASHからRAMへのコピーについてはこちらの記事で解説しています。

RAMには種類がある(SRAMとDRAM)

RAMにはいくつか種類がありますが、代表的なのが次の2つです。

  • SRAM(Static RAM)
  • DRAM(Dynamic RAM)

それぞれ特徴が異なります。

SRAMとDRAMの違いの詳細についてはこちらの記事で解説しています。

種類速度価格容量用途
SRAM速い高い小さいマイコン内蔵RAM
DRAM遅い安い大きいPCメインメモリ

SRAMとは(組み込みで使うRAM)

SRAMは電源が入っている間、データを保持し続けるRAMです。
リフレッシュが不要で高速にアクセスできます。

そのため、

  • マイコン内蔵RAM
  • スタック領域
  • ヒープ領域
  • .data / .bss

などに使われます。

組み込み開発で「RAM」と言う場合、
多くはこの SRAM を指します。


DRAMとは(PCで使うRAM)

DRAMはデータを保持するために、
定期的にリフレッシュが必要なRAMです。

その代わり、

  • 安価
  • 大容量

という特徴があります。

そのためPCではメインメモリとして使われます。

  • DDR4
  • DDR5
  • LPDDR

これらはすべてDRAMです。


なぜ組み込みはDRAMを使わないの?

理由は3つ。

①制御が複雑
②リフレッシュ必要
③リアルタイム性が悪い

つまり

「扱いにくい」

だからマイコンはSRAM内蔵が多い。



まとめ

ROM・FLASH・RAMの違いを整理すると次の通りです。

  • RAM
    プログラム実行中の作業メモリ(電源OFFで消える)
  • ROM
    プログラムを保存する不揮発メモリ
  • FLASH
    書き換え可能なROMで、多くのマイコンでROMとして使われる

組み込み開発では、

  • FLASHにプログラムを保存し
  • RAMを使ってプログラムを実行する

という構造になっています。

この記事が参考になった方へ

メモリ領域については他の記事でも解説しています。

メモリ領域解説シリーズの全体像はこちら

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする


目次