フラッシュとEEPROM


14

Atmega16データシートには、

a)16 Kバイトのインシステムセルフプログラム可能なフラッシュプログラムメモリおよびb)512バイトのEEPROM。

マイクロコントローラーには、EEPROMテクノロジーとフラッシュテクノロジーを介してプログラムできる2つのROMを搭載できますか?

または、データシートからの私の推論(上記のように)は間違っていますか?

私たちのプログラムはなぜ誰かがEEPROMを必要とするのかよりもフラッシュメモリに保存されていることを知っていますか?プログラム用のフラッシュメモリがある場合、その用途は何ですか?

また、「In-System Self-programmable」という用語について説明することもできます

私が知っていること:EEPROMはバイト単位でデータを書き込むことができますが、フラッシュテクノロジーはデータのブロックでプログラムを書き込むことができます。

回答:


21

今日では、フラッシュメモリはプログラムコードを保持するために使用され、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システムで使用されます。


ご回答ありがとうございます。EEPROM内にデータを入力するには、フラッシュメモリ内のプログラムをダンプするためにUSBASPプログラマのようにEEPROMプログラマが必要ですか?私は正しいです。
ジャッサー

1
@Jasserいいえ、外部プログラマーは必要ありません。プログラム内からEEPROMにアクセスします。ATmega内に一連のレジスタがあり、それらに書き込むことでEEPROMを更新できます。また、通常のアドレスマップには表示されないため、これらのレジスタを使用してEEPROMから読み出す必要があります。EEPROMの消去、書き込み、読み取りの方法に関する情報は、チップのデータシートに記載されています。
tcrosley

マイクロコントローラ内のEEPROMから読み書きできるので、マイクロコントローラはEEPROM内にデータを保存する回路を備えている必要があり、それはEEPROMプログラマに似ているはずです。これは、EEPROMがレジスターを介してEEPROM内にデータを格納することができない場合よりも約100,000回書き込まれる可能性があるため、別の質問に再びつながります。これらのステートメントは意味がありますか?@tcrosley
ジャッサー

1
@Jasser正しい、EEPROMを更新できる回数には制限があります。これは通常、フラッシュを更新できる回数よりもはるかに高い(場合によっては1桁以上)。私は私の答えでそれを言及すべきだったし、それを更新します。あなたが引用した数は、チップメーカーによって保証された最小値です。100,000回の書き込み用に指定されたチップを使用していくつかのテストを行ったところ、エラーが検出される前に500,000を大きく超えました。
tcrosley

1
@Jasserはい、フラッシュにデータを設定するのはもう少し難しいです。また、私の回答の更新で説明したように、フラッシュよりも何倍も(通常10倍)EEPROMを消去および再プログラムできます。
tcrosley

4

@tcrosleyによる優れた回答にさらに情報を追加します。

ATmega16はハーバードアーキテクチャ、つまりデータメモリがプログラムメモリから分離されているシステムトポロジを実装します。Atmega16データシートから関連する段落を引用(8ページ):

パフォーマンスと並列処理を最大化するために、AVRはハーバードアーキテクチャを使用します。プログラムとデータ用に個別のメモリとバスがあります。プログラムメモリ内の命令は、単一レベルのパイプラインで実行されます。1つの命令が実行されている間、次の命令がプログラムメモリからプリフェッチされます。この概念により、すべてのクロックサイクルで命令を実行できます。プログラムメモリは、インシステム再プログラム可能フラッシュメモリです。

ハーバードアーキテクチャには、従来のPCアーキテクチャのようにデータと命令が同じバスを共有しないため、命令フェッチサイクルとデータアクセスサイクルの間にバスの競合がないという利点があります。

したがって、フラッシュメモリはプログラムメモリとして使用されますが、データメモリはSRAM(関数呼び出しスタックやヒープなどの一時データ用-たとえばCでプログラミングしている場合)とEEPROM(永続的なストレージ用)に分割されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.