SRAM・DRAM・NOR・NAND・EEPROM・FRAM・MRAM・eMMC:メモリの違いと使い分け
「不揮発で、書き換えられて、速い」メモリはありません。どのメモリも、書き換え回数・容量・速度・価格のどれかを犠牲にしているので、用途から逆引きできるように整理します。
まず 3 つに分ける
メモリは、電源を切ると消える揮発性(SRAM、DRAM)、電源を切っても残りフローティングゲートに電子を蓄えるフラッシュ系(NOR、NAND、eMMC、EEPROM)、電源を切っても残りバイト単位で書ける新しい不揮発メモリ(FRAM、MRAM)の 3 群に分けると見通しがよくなります。EEPROM 以外のフラッシュ系は、消去がブロック単位です。
容量と書き換え回数で比べる
| 種類 | 揮発 | 容量 | 書き換え単位 | 書き換え回数 | 書き込み時間 |
|---|---|---|---|---|---|
| SRAM | する | 数 kB〜数 MB | バイト | 無制限 | 数 ns |
| DRAM / SDRAM / DDR | する | 64MB〜数 GB | バイト(バースト) | 無制限 | 数十 ns |
| NOR フラッシュ | しない | 1MB〜256MB | 書き: バイト、消去: セクタ(4k〜64kB) | 10 万回 | 書き µs、消去 数百 ms |
| NAND フラッシュ(生) | しない | 1GB〜数 TB | 書き: ページ(数 kB)、消去: ブロック(MB) | SLC 10 万、TLC 3 千回 | 書き 数百 µs、消去 数 ms |
| eMMC | しない | 4GB〜256GB | セクタ(512B、内部は NAND) | コントローラが管理 | 数百 µs〜 |
| EEPROM | しない | 1kbit〜4Mbit | バイト | 100 万回 | 5ms(ページ) |
| FRAM | しない | 4kbit〜16Mbit | バイト | 10¹⁴ 回 | 数十 ns(待ちなし) |
| MRAM | しない | 1Mbit〜1Gbit | バイト | 無制限(10¹⁵ 以上) | 数十 ns |
揮発性:SRAM と DRAM
SRAM は 1 ビットにトランジスタ 6 個を使うフリップフロップです。リフレッシュが要らず、数 ns で読み書きできますが、セルが大きく、マイコン内蔵で数十〜数百 kB、外付けで数 MB が上限です。
DRAM は 1 ビットがトランジスタ 1 個とコンデンサ 1 個です。電荷が漏れるので、数十 ms ごとに読み出して書き戻す(リフレッシュ)必要があります。セルが小さく、GB 単位が安く手に入ります。リフレッシュやタイミング制御を行うメモリコントローラがプロセッサ側に要るので、持たないマイコンにはつなげません。Linux を動かすプロセッサには DDR コントローラがあります。
選択の基準は単純で、数 MB 以下なら SRAM、それ以上なら DRAM です。中間の数 MB には、QSPI 接続の疑似 SRAM(PSRAM、内部は DRAM でリフレッシュを内蔵)が使われます。
フラッシュ系:NOR、NAND、EEPROM、eMMC
フラッシュは電子をフローティングゲートに閉じ込めて記憶します。書き込み(電子を入れる)はビット単位でできますが、消去(電子を抜く)はまとまった単位でしか行えません。この制約が、以下の違いのほとんどを生みます。
NOR フラッシュは、セルが並列につながっていて、任意のアドレスをランダムに読めます。プロセッサが命令を直接読み出せる(XIP、Execute In Place)ので、起動コードの置き場になります。消去には数百 ms かかります。
NAND フラッシュは、セルを直列につないで面積を詰めたものです。ビットエラーが日常的に起きるため、ECC(誤り訂正)と不良ブロック管理が必須です。書き換え回数は SLC で 10 万回、MLC で 1 万回、TLC で 3 千回、QLC で 1 千回と、多値化するほど安く、弱くなります。
eMMC は NAND にコントローラを載せ、ECC・ウェアレベリング・不良ブロック管理を内部で済ませたものです。外からは 512B セクタの読み書きだけで、Linux のルートファイルシステムの標準的な置き場です。
EEPROM は、バイト単位で消去・書き込みできる小容量の不揮発メモリです。書き込みに 5ms 程度かかりますが 100 万回書け、設定値・校正値の置き場になります。
FRAM と MRAM:バイト単位で書ける不揮発
FRAM(強誘電体メモリ)は、強誘電体の分極方向で記憶します。バイト単位で待ち時間なしに書け(書き込みサイクル数十 ns)、10¹⁴ 回書き換えられます。EEPROM のような 5ms の書き込み待ちがなく、書き込み中に電源が落ちてもデータがおかしくなりません。容量は 16Mbit 程度までで、EEPROM より高価です。
MRAM(磁気抵抗メモリ)は、磁性層の磁化方向で記憶します。書き換え回数は事実上無制限で、SRAM と同じ速度・インターフェースの品種があり、電池でバックアップした SRAM の置き換えに使われます。1Gbit 級まで出ていますが、価格は DRAM の数十倍です。
どちらも、頻繁に書く、電源断があり得る、容量は小さくてよい、という用途に向きます。フラッシュで同じことをするにはウェアレベリングと電源断対策が要り、FRAM を 1 個足すほうが安く済むことがほとんどです。
用途から選ぶ
| 用途 | 選ぶメモリ | 理由と注意 |
|---|---|---|
| 起動コード・ファームウェア | マイコン内蔵フラッシュ。足りなければ QSPI NOR | XIP でき、ランダム読み出しが速い。NAND なら小さな NOR か eMMC のブートパーティションと組み合わせる |
| 作業用メモリ | 数百 kB までは内蔵 SRAM、数 MB なら PSRAM か外付け SRAM、それ以上は DDR | DDR はメモリコントローラを持つプロセッサが前提 |
| 設定値・校正値(書き換えは年に数回〜日に数回) | I²C EEPROM | 内蔵フラッシュのエミュレーションでもよいが、消去単位と回数を計算する |
| 積算値・カウンタ(秒〜分ごとに書く) | FRAM か MRAM | EEPROM では毎秒書くと、100 万回を約 2 週間で使い切る |
| ログ・測定データ(大量、追記) | SPI NAND、eMMC、SD カード | 生 NAND は ECC と不良ブロック管理を自分で持つ必要がある |
| OS のファイルシステム | eMMC | SD カードは抜き差しと粗悪品のリスクがある |
| 電源断で消えてはいけない直前の状態 | FRAM か MRAM | 書き込み中に電源が落ちてもデータがおかしくならない |
よくある失敗
- フラッシュに毎秒書くと、消去回数の上限に 1〜2 日で達します。4kB セクタに 16 バイトの設定を書くたびに消去する設計も、10 万回で寿命です。RAM に貯めて間隔を空けて書くか、ウェアレベリング(セクタ内で書く位置をずらす)を実装するか、EEPROM か FRAM を別に持ちます。
- EEPROM は書き込み中(5ms)は応答しないので、ACK ポーリングで待ちます。
- 書き込み中に電源が落ちると、フラッシュも EEPROM もそのページが不定になります。2 面に交互に書いて CRC で選ぶか、FRAM を使います。
- 生 NAND は出荷時から不良ブロックがあり、使用中にビット化けするので、SLC でも ECC は必須です。
- eMMC の内部は TLC NAND で、書き込み総量に上限(TBW)があります。高頻度のログは、寿命を計算し、SLC モードや産業用グレードを検討します。
- DDR3 以上は等長・インピーダンス・終端の設計が要り、4 層では厳しくなります。モジュール(SOM)の利用も検討します。
- 磁石(スピーカ、リレー、ホールセンサ用)が近いとデータが化ける MRAM の品種があります。データシートの磁界耐性を確認します。
よくある質問
EEPROM とフラッシュの違いは何ですか。
SDRAM と DDR は別のものですか。
eMMC と SD カードは何が違いますか。
FRAM と MRAM のどちらを選べばよいですか。
参考にした規格・資料
- JEDEC JESD79 シリーズ / JESD84(eMMC) — DDR SDRAM と eMMC の規格
- ONFI(Open NAND Flash Interface)仕様 — 生 NAND のインターフェースと ECC 要件
- 各メモリメーカのデータシート — 書き換え回数、データ保持期間、書き込み時間、TBW