フラッシュメモリのプログラミングについて説明しますが、フラッシュメモリは1980年代半ばにEEPROMから派生したものであるため、多くの資料はEEPROM(Electrically Erasable Programmable ROM)に似ています。以下で説明するように、物理的な観点から、デフォルトの状態は1です。しかし、もっと重要なのは、なぜデフォルト状態があるのかを説明することです。前回からすでにプログラムされているものの上に勝手にプログラムすることはできません。
インターフェイスはマイクロコントローラーのメモリマップ内にデータを配置するのに最適であるため、プログラムフラッシュにはNORフラッシュがほぼ常に選択されます。フルアドレスおよびデータバスはRAMを模倣し、任意の場所へのランダムアクセスを許可します。データは一度に1ワードずつ読み取ることができます。ワードは、マイクロコントローラーのデータ幅として定義され、通常は8、16、または32ビットです。一方、NANDフラッシュは、ハードドライブを置き換えるために開発され、順次動作します。
ただし、プログラミングはもう少し複雑になります。既に述べたように、NORフラッシュ、NANDフラッシュ、EEPROM、さらにはEPROMなどの他の不揮発性メモリのデフォルト状態はロジック1 です。 これらのデバイスに1をプログラムすることはできません。0のみをプログラムできます。 たとえば、0x0123を含むバイトがあり、それを0x3210に変更する場合、RAM内のバイトを上書きするような直接的な変更はできません。
代わりに、メモリ内のビットを消去する必要があります。これにより、それらのビットは既に説明したデフォルトの1状態になります。これは、言葉ではなくブロックでのみ実行できます。私が最近作業したMicrochip PIC32では、消去できる最小ブロックサイズは4096バイトです。したがって、1ワード(32ビット)だけを変更したい場合は、4Kのメモリを読み取ってブロックを消去し、4Kのメモリをフラッシュに書き戻す必要がありますが、必要に応じて新しい32ビット値を含めます。この消去には時間がかかることがあります-1秒のかなりの部分です。
以下は、フラッシュメモリセルの写真です。フラッシュは、フローティングゲートの電子を除去または配置することでデータを保存します。電子がフローティングゲートに存在する場合、トランジスタに電流は流れず、0を示します。電子がフローティングゲートから除去されると、トランジスタは導通を開始し、1を示します(これは慣例により、他の方法ですが、すべてのデータラインにインバーターが必要になります。)
操作を消去します。 フローティングゲートは負電荷を運ばないため、フラッシュメモリセル(シングルレベルNORフラッシュセル)のデフォルト状態は1です。フラッシュメモリセルの消去(1にリセット)は、ソースとコントロールゲート(ワード線)に電圧を印加することで実現します。電圧の範囲は-9V〜-12Vです。また、ソースに約6Vを印加します。フローティングゲートの電子は引き出され、量子トンネリングによってソースに転送されます。言い換えれば、電子はフローティングゲートからソースと基板にトンネルします。
消去には高電圧が使用されるため、ブロックでの消去にはダイ面積が少なくて済みます。そのため、電圧は一度にトランジスタの行全体にしか印加できません。
書き込みの場合、NORフラッシュセルをプログラムするか、次の手順で0に設定できます。書き込み中、約12Vの高電圧がコントロールゲート(ワード線)に印加されます。7V付近の高電圧がビット線(ドレイン端子)に印加されると、0がセルに保存されます。これでチャネルがオンになり、電子がソースからドレインに流れることができます。ソース-ドレイン電流は、ホット電子注入と呼ばれるプロセスを介して、一部の高エネルギー電子が絶縁層を介してフローティングゲートにジャンプするのに十分な大きさです。
読み取りでは、約5Vの電圧がコントロールゲートに、約1Vがドレインに印加されます。メモリセルの状態は、ドレインとソースの間に流れる電流によって区別されます。
不揮発性メモリの有効寿命は、消去サイクルの観点から測定されます。NORの欠点は、消去サイクルの数がNANDメモリの約1/10であるということです。PIC32の多くのバージョンでは、フラッシュメモリを1000回しか更新できません。これは、EEPROMの一般的な100,000回の消去サイクルよりはるかに少ない回数です。
したがって、設計者がデフォルト状態を1または0にしたかどうかはそれほど重要ではありません(最も簡単な実装を許可する値を選択しました)。重要なことは、最初にフラッシュのブロックを消去し(時間がかかる)、次にブロック全体を再プログラムしなければならないことです(1つのワードが変更される場合でも(かなりのRAMが必要です)。
デバイスのこのブロック消去は、最初のEPROM(Erasable Programmable ROM)に戻り、EEPROMに進みました。コードはチップ(16KB 27128など)にプログラムされ、ソケットに配置されました。これらのチップには上部に小さな窓があり、ダイに光を当てることができました。プログラムを変更する必要がある場合、チップは20分ほどUV消しゴムに入れられ、チップ全体が消去されました。その後、チップは新しいプログラムでプログラムされます。
一部のEEPROMでは、プログラミングの前にメモリブロックを消去する必要があります。他のものは、一度に1バイトずつ書き込むことができます(EEPROMコントローラーは実際にバイトを最初に消去し、プログラムします)。