今日では、フラッシュメモリはプログラムコードを保持するために使用され、EEPROM(電気的消去可能読み取り専用メモリ)は永続的なデータを保持するために使用されます。フラッシュが登場する前の約30年前、プログラムコードを保持するためにEEPROMが使用されていました。
実際にはROM(読み取り専用メモリ)が最初に来て、次にPROM(プログラム可能ROM、1回のみ)、EPROM(UV光で消去可能なPROM)、EEPROM、最後にフラッシュが来ました。ROMは、非常に大容量で低コストのアプリケーション(たとえば、グリーティングカード)に引き続き使用されます。
現在のマイクロコントローラとの重要な違いは、一般にEEPROMからコードを実行できないことです。また、プログラムがデータをフラッシュに保存するのは面倒です。(たとえば、データ宣言で「const」キーワードを使用する場合、または文字列を定義する場合、データはフラッシュに格納されますが、コンパイラーとリンカーによって裏で処理されます。)
EEPROM領域は、マイクロコントローラーの電源が失われ、その後電源が入れ直されたかどうかなど、再起動後に使用可能にする構成またはその他のデータを保持するために使用できます。機能的には、EEPROMは非常に小さなハードドライブまたはSDカードと考えることができます。
EEPROMのないマイクロコントローラーでは、フラッシュメモリに永続的なデータを保存することは可能ですが、マイクロコントローラーは実際にはこのために設計されていないため、これは困難になります。リンカで。さらに、以下で説明するように、通常はフラッシュよりも何度もEEPROMを更新できます。
フラッシュでデータをプログラムする場合、これらの変数がコード内のどこにあるかをコンパイラに伝える方法がないため、Cプログラムで変数としてデータにアクセスできるわけではありません(つまり、constをバインドすることはできません)フラッシュのこの領域への変数。この制限はEEPROMのデータにも適用されるため、この点で利点はありません。
フラッシュまたはEEPROMをプログラムするには、最初にメモリブロックを消去する必要があります。その後、プログラムされます。フラッシュの場合、書き込みも通常は一度に1ブロックずつ行われます。EEPROMの場合、マイクロコントローラーに応じて、ブロック単位またはバイト単位で実行できます。
フラッシュとEEPROMの両方について、メモリを使い果たす前に更新できる最大回数があります。この数値は、最小保証値としてデータシートに記載されています。通常、フラッシュメモリよりもEEPROMの方がはるかに高くなります。フラッシュの場合、私は1000という低い数字を見ました。EEPROMの場合、1,000,000という高い数字を見ました。
EEPROMのフラッシュに対する利点の1つは、フラッシュを消去するよりも何度も消去できることです。
「In-System Self-programmable」は、実行中にマイクロコントローラーが独自のフラッシュを更新できることを意味します。この機能は通常、フィールドのコードを更新するために使用されます。秘Theは、メインプログラムが更新されている間、ブートローダーと呼ばれるコードをシステムに残す必要があるということです。このスキームは、チップをプログラムするためにArduinoシステムで使用されます。