変更要約: 初版
2.3不揮発メモリ
電源を切ってもデータを保持する不揮発メモリの代表格であるNORフラッシュとNANDフラッシュの用途の違い、バイト単位で書き換え可能なEEPROM、そして組込みで避けて通れない書換え回数上限と、それを分散させるウェアレベリングの仕組みを学びます。
組込みシステムはファームウェアそのものや設定値・ログを、電源を切っても失われない形で保持しなければなりません。しかし「不揮発メモリなら何でもよい」わけではなく、NORフラッシュ・NANDフラッシュ・EEPROMにはそれぞれ得意な用途がまったく異なります。さらに、フラッシュメモリには書換え回数上限という物理的な制約があり、これを無視した設計は製品寿命を大きく縮めます。この節では、不揮発メモリの選定と寿命管理という2つの実務判断を学びます。
2.3.1NORフラッシュとNANDフラッシュ
- NORフラッシュ=バイト単位のランダムアクセスが可能で、CPUがアドレス指定で直接実行(XIP:eXecute In Place)できる。読み出し速度が速く信頼性も高いが、書き込み・消去は低速でビット単価が高く大容量化に不向き。ブートローダやファームウェア本体の格納に使われる。
- NANDフラッシュ=ページ/ブロック単位でのアクセスが基本で、ランダムなバイトアクセスやXIPには向かない。ビット単価が低く大容量化に有利で書き込みも比較的高速だが、信頼性がNORより低くビット誤りの管理(誤り訂正符号 ECC等)が必要。データログやファイルシステムの格納先として使われる。
2.3.2EEPROMとFRAM
- EEPROM=バイト単位で個別に書き換え可能な不揮発メモリ。フラッシュのようにブロック単位で消去する必要がなく、設定値・校正データ・小容量のパラメータを1バイト単位で頻繁に更新する用途に向く。容量が小さくビット単価が高いため、大容量データの格納には不向き。
- FRAM(強誘電体メモリ)=強誘電体の分極を利用して情報を保持する不揮発メモリ。書き換え速度がフラッシュ・EEPROMより大幅に高速で、書換え回数上限もはるかに大きいが、ビット単価が高く大容量化には向かない。高頻度な書き換えが必要な用途(頻繁なログ更新等)で採用が検討される。
「NORフラッシュ=XIP可能・高信頼・ブートローダ向き」「NANDフラッシュ=ページ/ブロック単位・大容量・データログ向き」「EEPROM=バイト単位書換え・小容量パラメータ向き」の使い分けが最頻出です。「フラッシュメモリは全種類ともXIP可能」という誤解に注意——XIPが可能なのはNORのみです。
あるIoTセンサ機器の設計者が、この機器に搭載する不揮発メモリを、(1)ブートローダとファームウェア本体、(2)機器固有の校正パラメータ(数十バイト・工場出荷時に1回書き込み、以後は稀に更新)、(3)1分ごとに追記されるセンサログ(長期間で数MBに達する)の3用途に分けて選定しています。(1)は起動直後にCPUが直接実行できることが望ましく、頻繁な書き換えも発生しないため、XIPが可能で読み出し信頼性の高いNORフラッシュが適切です。(2)は容量こそ小さいものの、バイト単位でピンポイントに書き換えたい要件があるため、ブロック消去が必須のフラッシュよりEEPROMが扱いやすい選択です。(3)は容量が大きく(数MB)、1分ごとという高頻度な追記が長期間続くため、大容量・低ビット単価のNANDフラッシュが適していますが、ここで書換え回数上限(NAND型で一般に数千〜数万回程度が目安)という制約に直面します。もし同じ物理ブロックへログを単純に追記し続ける実装にすると、ログの先頭付近のブロックだけが集中的に書き換えられ、製品の想定稼働年数に到達する前にそのブロックだけ書換え上限に達して寿命切れ(不良ブロック化)を起こすリスクがあります。これを避けるため、コントローラまたはファイルシステム層でウェアレベリング(書き込み先の物理ブロックを均等にローテーションさせ、特定ブロックへの書き込みが集中しないようにする技術)を適用し、フラッシュ全体の書換え回数を平準化することで、想定稼働年数まで製品寿命を持たせる設計とします。
| 種類 | アクセス単位 | 特徴 | 主な用途 |
|---|---|---|---|
| NORフラッシュ | バイト単位(読み出し) | XIP可能・高信頼・低速書込・高コスト | ブートローダ・ファームウェア |
| NANDフラッシュ | ページ/ブロック単位 | 大容量・低コスト・ECC要 | データログ・ファイルシステム |
| EEPROM | バイト単位(書換え) | 小容量・高コスト・個別書換え容易 | 設定値・校正パラメータ |
ひっかけ: 「フラッシュメモリは書換え回数の制約がないので気にせず使ってよい」は誤りです——NOR/NANDともに物理的な書換え回数上限があり、特定ブロックへの偏った書き込みは製品寿命の途中で不良ブロック化を招くため、ウェアレベリングによる平準化が必須です。また「NANDフラッシュもNORと同じくXIPで直接実行できる」も誤り=XIPが可能なのはNORのみで、NANDはページ/ブロック単位のアクセスしかできずCPUが直接実行することはできません。
2.3.3この節のまとめ
- NORフラッシュ=XIP可能・高信頼でブートローダ向き、NANDフラッシュ=ページ/ブロック単位で大容量・低コストのログ向き
- EEPROMはバイト単位で個別書換え可能な小容量パラメータ向きの不揮発メモリ
- フラッシュには書換え回数上限があり、ウェアレベリングで書き込みを分散させないと想定寿命前に不良ブロック化する
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 起動直後にCPUがブートローダのコードをアドレス指定で直接実行できることが求められ、頻繁な書き換えは発生しない用途に最も適した不揮発メモリはどれか。
Q2. IoTセンサ機器で、1分ごとに追記される数MB規模のセンサログを長期間にわたり保存したい。容量とコストの観点から最も妥当な不揮発メモリの選択はどれか。
Q3. NANDフラッシュにセンサログを1分ごとに追記する実装で、常に同じ先頭ブロックから順に上書きする設計にしたところ、製品の想定稼働年数に到達する前に先頭付近のブロックが不良ブロック化した。この不具合の根本原因と対策として最も適切なものはどれか。

