ども!お洒落にカフェで記事作成中のamasawaです!
電気製品に詳しい人や、プログラミングを始めた方々は、聞いたことがあるかもしれないフラッシュメモリについてまとめました!
イマイチわからないって方も記事を読んで理解を深めて頂ければと思います。
フラッシュメモリとは不揮発性メモリの一種
フラッシュメモリは、様々な電子機器に使われているメモリのことで、マイコンにも多く使われています。
メモリには不揮発性メモリと揮発性メモリの2種類あって、フラッシュメモリは不揮発性メモリに分類されます。
元々不揮発性メモリとして世の中で初めて開発されたのは、EEPROMですが、その後、1980年にサザエさんのスポンサーでお馴染みの東芝が、EEPROMの改良版としてフラッシュメモリを開発しました。(最近スポンサーやめちゃったんだっけ?)
フラッシュメモリの名前の由来は、データ消去を「ぱっと一括して」行えることからフラッシュメモリと名付けられたそうです。
元々「揮発」の意味は「通常の温度で、液体が期待になること」を意味します。
揮発性メモリとは電源を入れていないと、メモリに書き込まれていた内容が気体のように消えてなくなってしまうメモリのことを指します。
反対に、不揮発性メモリは、電源が落ちても揮発しない(気体に変化しない)ので、メモリの内容を保持することが可能なメモリを指します。
EEPROMとフラッシュメモリの違い
フラッシュメモリやEEPROMは、マイコンと一緒に使用されたり、マイコンに内臓されたりします。これらの違いは一体なんなのでしょうか。データの消去方法と書き込み方法の違いから見ていきましょう。
消去方法の違いは「消去する範囲」
EEPROMはデータ消去を「バイト」単位で行うのに対して、フラッシュメモリは数十キロバイトの「ブロック」単位でまとめて行います。
「ブロック」単位で消しちゃったら、余計なものまで消去しちゃわない??って思いますが、実は大きなメリットがあるんです。
通常、メモリ操作するためにはデータ消去用の回路を設けなければなりません。
フラッシュメモリの場合、データ消去をブロックごとに一括して行うため、消去用回路を簡略化することができます。
その結果、コスト削減や単位面積あたりの容量アップにつながるんです!
書き込み方法の違いは「上書きできるできないか」
EEPROMの場合は、必要なアドレスに対して新しいデータを書き込むだけで古いデータを書き換えることができますが、フラッシュメモリの場合は、中身のないアドレスにしか書き込むことしかできません。
つまり、EEPROMは上書き可能で、フラッシュメモリは上書き不可能ということです。
フラッシュメモリの場合、元々あるデータを書き換えたい場合は、書き込む前に一旦データ消去を行わなければなりません。
フラッシュメモリの回路構成はNOR型とNAND型がある
フラッシュメモリの回路構造2種類あって、NOR型フラッシュメモリとNAND型フラッシュメモリがあります。
NOR型フラッシュメモリ
NOR型フラッシュメモリは、NAND型に比べて、読み出しが高速という特徴を持っています。
NOR型は書き込みよりも読み出しに重点が置かれる記憶媒体向きです。
フラッシュメモリなので消去はブロック単位になりますが、読み書きがDRAM、SRAM同様1バイト単位で行えるので、主記憶に適しています。
そのため、制御プログラムを読み出して実行する「マイコン」にはNOR型が多く使われています。NOR型フラッシュメモリは、複数のトランジスタが並列に接続されており、ロジックICのNORにも似ています。
各トランジスタに対してビット線と接地線が一本ずつ必要なので、記憶密度はNANDほど高くできません。最大書き換え回数は10万回程度のものが多いです。
NAND型フラッシュメモリ
NAND型フラッシュメモリは、NOR型とは逆で、書き込みが高速という特徴を持つ持つため、データ書き込みに重点が置かれる記憶媒体向きです。
NORとNANDで、読み出しの早さと書き込みの早さがトレードオフの関係になっているんですね。
こちらもフラッシュメモリで、バイト単位でのアクセスは出来ないので、バイト単位で読み出しや書き込みを行います。データ書き込みに重点が置かれるものに向いていますが、書き込み前のブロック消去も必要です。(これは全部のフラッシュメモリで共通ですね)
NAND型フラッシュメモリは主記憶に使用するには不向きのため、SSDやUSB、HDDなどに使われます。
NAND型フラッシュメモリは、複数のトランジスタが直列に接続されていて、ロジックICのNANDに似ています。ビット線と接地線はそれぞれ一本ずつで済むので、記憶密度が高く、低コストで大容量を実現することができます
コードフラッシュとデータフラッシュの違い
マイコンのフラッシュメモリには、データを格納するためのデータ・フラッシュ・メモリとプログラムを実行するためのコード・フラッシュ・メモリが存在します。
コード・フラッシュ・メモリ
コード・フラッシュ・メモリは、一度格納したら書き換える必要のないデータを置く場所で、プログラムの本体などを置く場所になります。
一般的にコード・フラッシュは書き換え回数は1000回程度です。
1000回だと少なく感じますが、組み込みマイコンで、世の中にでた製品プログラムを1000回も書き換えることは、まずありえないでしょう。
データ・フラッシュ・メモリ
データ・フラッシュ・メモリは、電源を切っても消えてほしくないデータの保存に使われます。例えば、エアコンだと一度電源をOFFしても、再び電源ONしたときに、OFFしたときと同じモードから動き出します。
コードフラッシュは一度書き込んだら、ほとんど書き換えの必要性はありませんが、エアコンの例だと、データフラッシュはモードが切り替わる度にデータフラッシュを書き換えなければいけません。
データフラッシュの書き換え回数は約10万回程度のものが多いです。
筆者のつぶやき
同じフラッシュメモリなのにNOR型があったり、NAND型があったり、似たような名前でデータフラッシュメモリがあったりコードフラッシュメモリがあったりと、非常に複雑ですが、一つずつ違いを整理して理解していけば段々わかっていくと思います!