以下、本発明の一実施例を、図面を用いて説明する。
図1は、本発明を適用して有効な不揮発性半導体記憶装置の一例としてのフラッシュメモリの実施例のブロック図を示す。この実施例のフラッシュメモリは、外部のホストCPUのようなコントローラとの間の信号の入出力を行なうホストインタフェース部101と、該ホストインタフェース部101を制御するインタフェース制御部110と、複数の不揮発性記憶素子(メモリセル)がマトリックス状に配置されたフラッシュ・メモリアレイ121とその周辺回路からなる記憶部120と、不良アドレスの管理などを行なう管理部130とから構成され、これらが単結晶シリコンのような1個の半導体チップ上に形成されている。
既存のフラッシュメモリには、外部端子の仕様が異なる複数種類のチップがあり、本実施例のフラッシュメモリは、このうちNAND型と呼ばれる仕様のチップと、AND型と呼ばれる仕様のチップと、SAND(SuperAND)型と呼ばれる仕様のチップのいずれのチップとしても見かけ上動作できるように構成されており、いずれのチップとして動作するかはボンディングオプションすなわちホストインタフェース部101に接続されている所定のボンディングパッドB.Oの設定状態に応じて決定されるようになっている。仕様が異なると外部端子の種類や配置が異なる。
特に制限されるものでないが、本実施例では記憶部110のフラッシュ・メモリアレイ121は複数のメモリセルがビット線とソース線との間に並列に接続されたAND型で構成されており、上記ボンディングオプションによる設定でインタフェース部110が「AND」に設定されているときは、インタフェース部110へ入力された外部からのコマンドをそのまま記憶部110へ供給する。
インタフェース制御部110は、上記ボンディングオプションによる設定に応じて、インタフェース部110が「NAND」に設定されているときはNAND仕様のコマンドをAND仕様のコマンドに変換し記憶部へ供給するNAND/ANDインタフェース111と、インタフェース部110がSANDに設定されているときはSAND仕様のコマンドを解析して記憶部110と管理部130に対する制御信号を生成するSAND/ANDインタフェース112と、これらのインタフェース111または112を介した信号と管理部130からの信号の記憶部120への選択を行なうインタフェース選択回路113とから構成されている。
記憶部120は、不揮発性記憶素子を含むフラッシュ・メモリアレイ部121と、該メモリアレイ部121に対するデータの書込み、消去に必要な電圧を発生する電源回路122と、フラッシュ・メモリアレイ部121に供給されるライトアドレスとライトデータおよびリードアドレスとフラッシュ・メモリアレイ部121から読み出されたリードデータを一時的に保持する2つのバッファメモリ123A,123Bと、不良メモリセルを含む領域を所定の単位(例えば128セクタからなるセグメント)で正常な領域と代替した場合にアドレスの変換を行なう救済回路124と、上記電源回路122に対する起動信号を生成したり上記ホストインタフェース部101を介して入力されたアドレスを救済回路124に供給したりリードデータやライトデータの変換等を行なうAND制御回路125とから構成されている。
フラッシュ・メモリアレイ部121には、メモリアレイの他、アドレスをデコードしてワード線を選択するデコーダやビット線の信号を増幅するセンスアンプなどが含まれる。メモリアレイ121を構成するメモリセルは、フローティングゲートとコントロールゲートを有するMOSFETからなり、フローティングゲートに注入される電荷の量に応じてしきい値電圧が変化されることにより情報を記憶するようにされる。また、特に制限されるものでないが、バッファメモリ123A,123BはSRAMにより構成されている。救済回路124によるセグメント単位の代替を行なうか否かはウェハテストの結果に基づいて決定される。
管理部130は、インタフェース制御部110と管理部130との間の信号のやり取りを行なう回路ブロック間インタフェース131と、チップ内部の動作を制御するCPUのようなプログラム制御方式のコントローラからなるシーケンサ132と、該シーケンサの動作を制御コードからなるマイクロプログラムのような形式で記憶するシーケンス用ROM133と、シーケンサが使用するレジスタ134と、アドレス変換テーブルを展開したりシーケンサ132の作業領域を提供するワークRAM135と、エラーのチェック及び訂正を行なうECC回路136と、記憶部120とワークRAM135またはECC回路136との間のデータ転送を制御するDMA転送制御回路137とから構成されている。
本実施例のフラッシュメモリにおいては、メモリアレイ121は1本のワード線に接続された2112バイトからなるメモリセル群(以下、セクタと称する)を単位として書込みを行なうように構成されている。また、メモリアレイ121は、通常領域と該通常領域内の不良メモリセルを含むセクタを代替する予備領域とに分けて管理するようにされている。そして、この通常領域内のセクタと予備領域内のセクタとを対応付ける不良アドレス管理テーブルが管理部130によって生成されてフラッシュ・メモリアレイ121内に記憶される。また、不良アドレス管理テーブルは通常動作時はワークRAM135に展開されて参照される。外部から入力されたアドレスが不良メモリセルを含むセクタを指定している場合は、この不良アドレス管理テーブルを参照して予備領域内の代替セクタを指定するアドレスに変換され、この変換アドレスによってフラッシュ・メモリアレイ121がアクセスされる。これにより、不良セクタの代替が行なわれる。
さらに、本実施例のフラッシュメモリにおいては、2種類の方式で代替処理が行なわれる。図2には、第1方式の代替処理の概念が示されている。この第1方式の代替処理では、フラッシュ・メモリアレイ121は、通常領域と該通常領域内の不良メモリセルを含むセクタを代替する予備領域とに分けられている。各セクタは、本来のデータ(ユーザデータ)を記憶するデータ領域と、当該セクタが不良メモリセルを含んでいるか否かを示すMGMコードやエラー訂正コード等を記憶するセクタ管理情報領域とに分けられている。また、通常領域は各々n個(例えばn=128)のセクタを単位とするN個(例えばN=64)のセグメントにより構成されている。予備領域も通常領域のN個のセグメントに対応してN個のセグメント(ただしセクタ数は可変)により構成され、通常領域内のセグメントは予備領域内のセグメントと1:1で対応されている。
管理テーブルのセクタ管理情報は、代替元の不良セクタの位置を示す情報欄ADLと、代替セクタが良セクタまたは不良セクタであるかを示すフラグFLGとからなるエントリENTにより構成される。例えば図2の代替セクタNn+2が不良であった場合には、対応するエントリのフラグに「1」がセットされる。管理テーブルの各エントリには、不良セクタの位置を示す情報が各セグメントの先頭アドレスからのオフセット値OFSとして登録される。また、管理テーブルのセクタ管理情報の各エントリは、予備領域の各セクタと1:1で対応されている。
管理部130は、書込み動作の結果、例えば図2の物理アドレス「2」のセクタが不良セクタであったときは、当該セクタが属する通常領域のセグメント0に対応する代替領域のセグメント0の代替セクタ(例えばNn+1)にデータを格納する。データが無事に格納できると、このセクタに対応する管理テーブルのエントリに、代替元のセクタのオフセット値「0002h」を格納するとともに、フラグを「0」にする。また、管理部130は、通常領域のセグメント0内のセクタをアクセスするときは、当該セクタのアドレスからオフセット値を計算し、管理テーブルのセグメント0のエントリを順に参照して不良セクタであるか否かを判定して、不良セクタとして登録されているときは当該エントリに対応する予備領域内のセクタをアクセスする。このとき、アドレス変換が行なわれる。
この代替方式は、通常領域をセグメントに分けて管理するため不良アドレス管理テーブルに登録するセクタ位置情報として物理アドレスの代わりにオフセット値とすることができるためテーブルのデータ量すなわちワークRAM135の記憶容量を少なくすることができる。また、管理テーブルの検索時間も短縮することができる。
図3には、第2方式の代替処理の概念が示されている。第1方式の代替処理ではフラッシュ・メモリアレイを通常領域と代替領域をそれぞれセグメントに分けているのに対し、第2の代替処理ではセグメントによる分割を行なわずに通常領域全体で生じた不良セクタを1つの代替領域内のいずれかのセクタで代替させるようにしている。この方式では、管理テーブルに登録する不良セクタ位置情報として物理アドレスを使用する必要があるため、テーブルのデータ量すなわちワークRAM135の記憶容量が多くなり、管理テーブルの検索時間も長くなるが、代替領域を効率良く利用できオフセット等の計算も不要であり、代替処理が簡単になるという利点がある。具体的には、第1の方式ではあるセグメントに不良セクタが後から集中して発生したような場合、予備領域のセグメントのサイズの変更が必要になるが、第2の方式ではそのような変更が不要である。
なお、上記第1の代替処理と第2の代替処理のいずれかを選択して適用するのではなく、テストの段階で検出された不良セクタの代替処理には第1の代替処理方式を適用し、出荷後の通常使用状態で生じた不良セクタの代替処理には第2の代替処理方式を適用するようにしてもよい。また、図4に示すように、代替領域に最大代替セクタ数可変の代替セグメント領域と最大代替セクタ数固定の代替セグメント領域と予備の代替領域とを設け、テストの段階で検出された不良セクタの代替処理には最大代替セクタ数可変の代替セグメント領域を用いた第1の代替処理方式を適用し、出荷後の通常使用状態で生じる不良セクタの代替処理には途中の段階まで最大代替セクタ数固定の代替セグメント領域を用いた第1の代替処理方式を適用し、代替セグメントのセクタを全て使用し終えたセグメントが発生した場合には予備の代替領域を用いた第2の代替処理方式を適用するようにしてもよい。
図5には、通常使用状態で生じる不良セクタの代替処理には途中の段階まで最大代替セクタ数固定の代替セグメント領域を用いた第1の代替処理方式を適用し、代替セグメントのセクタを全て使用し終えたセグメントが発生した場合には予備の代替領域を用いた第2の代替処理方式を適用したフラッシュメモリを用いたシステムにおける管理部の処理手順が示されている。ホストCPUのような外部のコントロールデバイス(以下、外部デバイスと称する)がフラッシュメモリにコマンドとアドレスを送信するとフラッシュメモリがこれを受信して先ず受信した論理アドレスに基づいて対応するセグメントとオフセットを計算する(ステップS1,S2)。
次に、不良管理テーブルのセグメント管理情報を参照してアクセスしようとするセクタが不良セクタか否か判定する(ステップS3,S4)。不良セクタであったときはアドレス変換を行なってエントリに対応した代替セグメント内の代替セクタを指定する(ステップS5)。一方、ステップS4の判定で不良セクタでなかったときは、不良管理テーブルの予備代替領域管理情報を参照してアクセスしようとするセクタが不良セクタか否か判定する(ステップS6,S7)。そして、不良セクタであったときはアドレス変換を行なって予備代替領域内の対応する代替セクタを指定する(ステップS8)。
一方、ステップS4及びステップS7の判定で不良セクタでなかったときは、そのまま通常領域の対応するセクタを指定する(ステップS9)。その後、指定されたセクタをアクセスしてデータの読出し又は書込みを行なう(ステップS10)。それから、受信コマンドがリードコマンドの時は読み出されたデータを、また受信コマンドがライトコマンドの時は書込み終了を示す信号もしくはステータスを外部デバイスへ送信して終了する(ステップS11)。
図6には、通常領域と代替領域の各セクタの構成例が示されている。セクタは、例えば2096バイトのデータ領域と16バイトのセクタ管理領域とに分けられており、このうちデータ領域の構成が図6(A)に、またフラッシュメモリがANDまたはNAND仕様に設定された場合のセクタ管理領域の構成が図6(B)に示されている。図6(C)はフラッシュメモリがSAND仕様に設定された場合のセクタ管理領域の構成である。
各セクタのデータ領域は、図6(A)に示されているように、各々512バイトの4つのページ領域Page0〜Page3と各ページ領域に対応されて管理情報を記憶する8バイトの管理領域と、16バイトのエラー訂正コードECC0,ECC1を記憶する領域とから構成される。この実施例のフラッシュメモリにはデータ領域変更コマンドが用意されており、読出しコマンドのみが入力されると512バイトのページ領域Page0〜Page3のデータがチップ外部に読み出される。また、データ領域変更コマンドが入力された後、読出しコマンドが入力されると512バイトのページ領域Page0〜Page3および次の8バイトのデータを含む520バイトのデータがチップ外部に読み出されるようにされている。コマンド用いてデータ単位を替える代わりに、複数のコマンドを用意したり、ボンディングオプションで設定されたモードに応じて読出しのデータ単位が替わるように構成しても良い。また、各ページ領域の後の管理領域には対応するページ領域のデータのECCコードを格納するために使用するようにしても良い。
セクタ管理領域は、図6(B)に示されているように、当該セクタが良セクタか否かを示すMGMコードを記憶する領域と、セクタの識別コードを記憶する領域と、管理領域の履歴を管理する管理ヘッダを記憶する領域と、書換え回数平均化処理(WL処理)用の管理情報(配列、消去回数)を記憶する領域と、エラー訂正コードCECC0,CECC1,HECCを記憶する領域とから構成される。SAND仕様に設定された場合のセクタ管理領域は、図6(C)に示されているように、書換え回数平均化処理用の管理情報を記憶する領域がNANDやANDの場合よりも小さくされ、設定回数が記憶される一方、管理ヘッダを記憶する領域が大きくされている。
図7および図8には、管理テーブル領域の各セクタの構成例が示されている。このうち図7はセクタの全体構成、図8(A)〜(D)は図7に示されている各領域の詳細構成を示す。管理テーブル領域の各セクタは、図7に示されているように、管理テーブルの領域を示す情報を記憶する領域設定領域と、セグメント単位で置き換えを行なう情報を記憶するスワップ管理領域と、代替セグメントの管理情報を記憶する領域と、予備代替領域の管理情報を記憶する領域と、書換え回数平均化処理用の管理情報を記憶する領域とに分けられている。図7には示されていないが、エラー訂正コードを記憶する領域も最後に設けられている。図8(A)はスワップ管理領域の構成、図8(B)は代替セグメント管理領域の構成、図8(C)は予備代替領域管理領域の構成、図8(D)は書換え回数平均化処理管理領域の構成をそれぞれ示す。
次に、書換え回数平均化処理について説明する。
従来のフラッシュメモリにおける書換え回数平均化処理は、あるセクタの書換え回数が所定の回数に達したならば書換え回数の最も少ないセクタを探してアドレスの入れ替えを行なうものである。これに対し、本実施例のフラッシュメモリにおける書換え回数平均化処理は、図9に示されているように、フラッシュ・メモリアレイを例えば1024セクタを1つのブロックとするブロック単位で、あるセクタの書換え回数が所定の回数に達したならばそのセクタのデータを隣接するブロックの同一のオフセット位置のセクタに格納するようにアドレスを順次1ブロックずつローテーションさせる処理とされている。
具体的には、図9において、例えばブロック0のオフセット1のセクタの所定の書換え回数が、(A)→(B)のようにm(例えばm=1000)に達したならば、(C)に示されているように、ブロック0のオフセット1のセクタのデータBをブロック1のオフセット1のセクタに移して書き込み、ブロック1のオフセット1のセクタのデータGをブロック2のオフセット1のセクタに移して書き込み、ブロック2のオフセット1のセクタのデータJをブロック3のオフセット1のセクタに移して書き込むというように、ブロック間で順次シフトしてデータと書換え回数を格納する。また、上記データ書込み領域のシフトに連動して書換え回数平均化処理管理領域には、各オフセットごとにシフトした回数を書き込んで記憶するようにしている。
あるセクタの書換え回数が所定の回数に達したならば書換え回数の最も少ないセクタを探してアドレスの入れ替えを行なうという従来の書換え回数平均化処理は、書換え回数の最も少ないセクタを見つけるまでにかなり時間がかかるとともにアドレス変換テーブルのサイズが大きくなるという欠点がある。これに対し、本実施例のシフト方式の書換え回数平均化処理によれば、データを移すセクタを決定する処理が簡単で短時間に終了するとともに、移転先のアドレスは演算で得ることができるためアドレス変換テーブルが不要になるという利点がある。シフト回数を記憶する書換え回数平均化処理管理領域には数ビットのシフト回数を記憶するだけでよいので、アドレスを記憶する場合よりも記憶領域をはるかに小さくすることができる。
次に、ワークRAM135について説明する。
本実施例のフラッシュメモリにおいては、電源投入時にメモリアレイ121の管理テーブル領域に格納されているテーブルデータをワークRAM135に読み出して展開し、電源オン中はテーブルデータの更新があってもメモリアレイ121の書換えはせず、電源遮断時にワークRAM135内のデータをメモリアレイ121の管理テーブル領域に格納するように構成されている。しかも、本実施例においては、図10に示されているように、メモリアレイに用意された2つの管理テーブル領域を交互に使用してテーブルデータを格納するとともに、各管理テーブル領域をさらに複数の領域(例えば8個)に分けて、順番に格納するように構成されている。なお、電源オン中にテーブルデータの更新があった場合にはワークRAM上の管理テーブルのデータを書き換えるとともにメモリアレイ121の対応する管理テーブル領域のテーブルデータを書き換えるようにしてもよい。
上記のように、フラッシュ・メモリアレイ121の管理テーブル領域に格納されているテーブルデータをワークRAM135に読み出して展開することにより、アクセスアドレスが不良セクタのアドレスか否かの判定および代替セクタのアドレスの取得を短時間に行なうことができる。また、2つの管理テーブル領域に交互にテーブルデータを格納するように構成することにより、書換え中の電源遮断等によって一方の管理テーブル領域のデータがすべて失われても一世代の前の管理テーブルのデータを再現することができる。また、各管理テーブル領域を複数の領域に分けて順番に格納するように構成することにより、管理テーブル領域内での書換え平均化処理が実現され、書換え回数が書換え耐数以上になってデータの信頼性が低下するのを回避することができる。
なお、本実施例の場合、テーブルデータは2096バイトの記憶容量を有する1セクタのデータ領域に収まるデータ量であるため、1つの管理テーブル格納領域は1つのセクタに対応され、管理テーブル領域0と1はそれぞれ1ブロックに対応して設けられている。また、図10において、管理ヘッダは各領域に格納されている管理テーブルの時間的な順番を示している。つまり、最も大きな管理ヘッダがついている領域に格納されている管理テーブルが最新のテーブルで、最も小さな管理ヘッダがついている領域に格納されている管理テーブルが最も古いテーブルであることを意味している。従って、シーケンサ132は、フラッシュ・メモリアレイ121内の管理テーブル領域のすべての管理ヘッダを参照してそのうち最も値が大きなテーブルデータを読み出せばそれが最新の管理テーブルとなる。
図10には、管理テーブル領域(1)の管理ヘッダ「15」の領域に格納されている管理テーブルをワークRAM135に読み出してフラッシュ・メモリアレイへの書込みに応じて更新し、管理テーブル領域(0)の管理ヘッダ「0」の領域に格納する様子が示されている。ワークRAMに読み出した直後の管理テーブルの管理ヘッダには「15」が記述され、メインアドレス欄には当該テーブルが格納されていたセクタアドレス「2007h」が記述され、予備テーブルアドレス欄には一つの前に管理テーブルが格納されていたセクタアドレス「217Fh」(管理ヘッダ=「14」)が記述されている。
そして、このRAM上にロードされた管理テーブルは更新されて、管理テーブルの管理ヘッダは「15」から「16」に変更され、メインテーブルアドレス欄には当該テーブルが次に格納される管理テーブル領域(0)の最も管理ヘッダの値が小さな領域(図10では管理ヘッダ=「0」)のセクタアドレス「2178h」が記述され、予備テーブルアドレス欄には読み出されたときに格納されていたセクタアドレス「2007h」(管理ヘッダ=「15」)が記述される。電源遮断時には、更新後のメインテーブルアドレス欄のセクタアドレスに従ってRAM上の管理テーブルデータが格納される。
ここで、予備テーブルなる語を使用しているのは、本実施例の管理テーブル格納方式に従うと、何らかの原因で現在つまり最新の管理テーブルデータが失われたり損傷したりした場合には、1つの前の管理テーブルを読み出して利用することができるためである。1つ前の管理テーブルデータに異常があれば、さらにその1つ前の管理テーブルデータを利用することができる。これによって、システムにとって重要なデータを修復することができ、メモリを認識できなくなったりシステムが起動しなくなったりするような異常な事態が発生するのを極力回避することができるようになる。
図11には、ワークRAM135の構成例が示されている。図11に示されているように、ワークRAM135は良セクタコード格納領域GCA、識別コード格納領域DCA、管理ヘッダ格納領域MHA、書換え回数平均化処理の設定格納領域RNA、不良管理テーブル格納領域IMA、書換え回数平均化処理管理テーブル格納領域RMA、シーケンサのワーク領域WKA、読出し時の管理テーブルが格納されていたアドレスを示すメインテーブルアドレス格納領域MAA、前回の読出し時の管理テーブルが格納されていたアドレスを示す予備テーブルアドレス格納領域RAAからなる。
ワーク領域WKA以外のデータは電源投入時にフラッシュ・メモリアレイ121から読み出されてワークRAM135の各領域に展開される。動作中に不良セクタが新たに検出された場合における代替処理に伴う不良管理テーブルの更新や、書換え回数が所定の回数に達したセクタが発生した場合における書換え回数平均化処理に伴う管理テーブルの更新は、ワークRAM135上にて行なわれる。メインテーブルアドレスと予備テーブルアドレスの更新は、ワークRAM135のデータをフラッシュ・メモリアレイ121に格納する際に行なわれる。
図12には、電源投入時にフラッシュ・メモリアレイ121からワークRAM135へ管理テーブル領域のデータを読み出す処理の手順が示されている。
シーケンサ132は、先ずフラッシュ・メモリアレイの管理テーブル領域(0)を検索する(ステップS21)。そして、識別コードを調べて有効な管理テーブルデータがあるか否か判定する(ステップS22)。ここで、管理テーブル領域(0)内に有効な管理テーブルデータがないときは、ステップS33へ移行して管理テーブル領域(1)を検索して、識別コードを調べて有効な管理テーブルデータがあるか否か判定する(ステップS34)。ここで、管理テーブル領域(1)内に有効な管理テーブルデータがないときはエラーとして処理を終了する。
一方、ステップS34で管理テーブル領域(1)内に有効な管理テーブルがあったときは、管理ヘッダを参照して管理テーブル領域(1)内で管理ヘッダが最大値であるテーブルのデータをワークRAMへロードし、当該テーブルのアドレスをメインテーブルアドレスとして登録する(ステップS35)。それから、当該テーブルデータを管理テーブル領域(0)に複写するテーブルコピー処理(ステップS40)へ移行する。一方の管理テーブル領域のデータが破壊されてしまったような場合に他方の管理テーブル領域のデータを複写することにより、両方の管理テーブル領域に有効なテーブルデータがなくなってしまう事態を回避するためである。
上記ステップS22で、識別コードを調べて管理テーブル領域(0)内に有効な管理テーブルデータがあると判定したときは、ステップS23へ移行して管理テーブル領域(0)の全セクタから管理ヘッダを読み出し、管理ヘッダが最大値であるテーブルのデータをワークRAMへロードし、当該テーブルのアドレスをメインテーブルアドレスとして登録する(ステップS24)。次に、管理テーブル領域(1)を検索する(ステップS25)。そして、識別コードを調べて有効な管理テーブルデータがあるか否か判定する(ステップS26)。ここで、管理テーブル領域(1)内に有効な管理テーブルデータがないときは、ステップS40のテーブルコピー処理へ移行して管理テーブル領域(1)に管理テーブル領域(0)から読み出したデータをコピーする。
ステップS26で管理テーブル領域(1)内に有効な管理テーブルがあると判定するとステップS27へ移行して、管理テーブル領域(1)の全セクタから管理ヘッダを読み出し、管理テーブル領域(1)の管理ヘッダのうち最大値のものと管理テーブル領域(0)の管理ヘッダのうち最大値のものとを比較する(ステップS28)。そして、管理テーブル領域(1)の管理ヘッダの最大値の方が大きい時はステップS29からステップS30へ移行して管理テーブル領域(1)内の管理ヘッダが最大値であるセクタのテーブルデータをワークRAMへロードし、当該テーブルのアドレスをメインテーブルアドレスとして登録するとともに、管理テーブル領域(0)内の管理ヘッダが最大値であるセクタのテーブルのアドレスを予備テーブルアドレスとして登録する(ステップS31)。一方、ステップS29で管理テーブル領域(0)の管理ヘッダの最大値の方が管理テーブル領域(1)の管理ヘッダの最大値よりも大きいと判定したときは、ステップS32へ移行して管理テーブル領域(1)内の管理ヘッダが最大値であるセクタのテーブルのアドレスを予備テーブルアドレスとして登録する。
図13には、図12のフローチャートのステップS40におけるテーブルコピー処理の詳細な手順が示されている。
このテーブルコピー処理では、先ず発見したテーブルが管理テーブル領域(0)にあるか判定する(ステップS41)。そして、発見したテーブルが管理テーブル領域(0)にあるときはステップS42で領域設定情報の管理テーブル領域(1)の先頭アドレスをフラッシュ・メモリアレイ内のテーブル格納先頭アドレスとする。また、発見したテーブルが管理テーブル領域(1)にあるときはステップS43で領域設定情報の管理テーブル領域(0)の先頭アドレスをフラッシュ・メモリアレイ内のテーブル格納先頭アドレスとする。それから、既にワークRAMにロードされているテーブルデータを上記格納先頭アドレスからフラッシュ・メモリアレイに書き込む(ステップS44)。
そして、正常に書込みが終了したか否か判定し、正常に書込みが終了したときは当該先頭アドレスを予備テーブルアドレスとしてワークRAMの予備テーブルアドレス欄に登録する(ステップS45,S46)。また、ステップS44で正常に書込みが終了しなかったときは、ステップS47で同一管理テーブル領域内における次のセクタをテーブルデータを格納するアドレスとし、ステップS44へ戻ってワークRAMにロードされているテーブルデータを書き込む。そして、管理テーブル領域内の全セクタに対して書込みをトライしても正常にテーブルデータを書き込めなかったときは書込みエラーとして処理を終了する(ステップS48)。
図14には、ワークRAM135からフラッシュ・メモリアレイ121へ管理テーブル領域のデータを格納する処理の手順が示されている。
このテーブル格納処理では、先ずワークRAM上のテーブル管理ヘッダをインクリメント(+1)する(ステップS51)。次に、予備テーブルアドレスの次のアドレスをフラッシュ・メモリアレイ内のテーブル格納先アドレスとする(ステップS52)。それから、ワークRAM上にあるテーブルデータをフラッシュ・メモリアレイの上記格納先アドレスに書き込む(ステップS53)。
そして、正常に書込みが終了したか否か判定し、正常に書込みが終了したときはテーブルアドレスを入れ替える。つまり、メインテーブルアドレスを予備テーブルアドレスとしてワークRAMの予備テーブルアドレス欄に登録し、フラッシュ・メモリアレイの最新テーブルアドレスをメインテーブルアドレスとしてワークRAMの予備テーブルアドレス欄に登録する(ステップS54,S55)。また、ステップS54で正常に書込みが終了しなかったときは、ステップS56で同一管理テーブル領域内における次のセクタをテーブルデータを格納するアドレスとし、ステップS53へ戻ってワークRAMに記憶されているテーブルデータをフラッシュ・メモリアレイに書き込む。そして、管理テーブル領域内の全セクタに対して書込みをトライしても正常にテーブルデータを書き込めなかったときは書込みエラーとして処理を終了する(ステップS57)。なお、電源遮断時に上記テーブル格納処理を実行するときはステップS55のテーブルアドレスの入替えは不要である。
図15には、本実施例のフラッシュメモリにおけるアドレス変換処理の手順が示されている。該アドレス変換処理は、アクセスアドレスを伴うデータの読出し、書込みまたは消去コマンドが入力されると実行される。
アドレス変換処理では、先ず書換え回数平均化処理の管理情報をワークRAMから読み出ししてアクセスアドレスに対応するブロックシフト数を選択する(ステップS61)。次に、選択したブロックシフト数に従って前記アクセスアドレスを変換する(ステップS62)。それから、変換後のアドレスに基づいてオフセット値を計算しそのオフセット値を用いて不良管理テーブル上の対応セグメントの管理情報を選択する(ステップS63)。そして、管理テーブルを検索して当該アドレスのセクタが不良セクタとして登録されているか判定する(ステップS64)。ここで、アクセスしようとするセクタが不良セクタとして登録されていれば、対応する代替セグメントの代替セクタアドレスを得る代替アドレス変換を行なう(ステップS65)。一方、ステップS64でアクセスしようとするセクタが不良セクタとして登録されていないときは、代替アドレス変換をせずに最終アドレスとする(ステップS66)。
次に、本実施例のフラッシュメモリの電源投入時の動作について、図16を用いて説明する。この実施例のフラッシュメモリには、特に制限されないが、電源電圧のレベルを検出する電源電圧検出回路がホストインタフェース部101に設けられており、この電源電圧検出回路による電源電圧の立ち上がり検出信号がインタフェース制御部110に供給され、内部回路が起動される(ステップS71)。インタフェース制御部110が立ち上がり検出信号を受けると管理部130に対して起動コマンドを発行する(ステップS72)。
すると、管理部130では、シーケンサ132が初期化され、フラッシュ部120からワークRAM135へ管理テーブルデータをロードする処理を実行する(ステップS73,S74)。管理テーブルデータのロードが終了すると、管理部130からインタフェース制御部110に対して終了信号が送られ、インタフェース制御部110は外部デバイスから入力されているPRE(プリロードイネーブル)信号が有効レベル(例えばハイレベル)にアサートされているか否かを判定し、PRE信号がアサートされていないときは外部からのコマンド入力を待つスタンバイ状態に移行する(ステップS75,S76)。
一方、PRE信号がアサートされているときはフラッシュ・メモリアレイ121のアドレス0番地のセクタのデータをバッファメモリ123Aを介して外部へ出力可能な自動読出し状態へ移行する(ステップS77)。なお、ステップS76のスタンバイ状態または自動読出し状態に移行すると、所定の外部端子から出力される本動作のレディまたはビジーを示す信号/MRESがレディ状態を示すハイレベル(もしくはロウレベル)に変化されるように構成されている。
図17には、パワーオン時に自動読出しを行なう場合のタイミングが示されている。この自動読み出しは、電源投入時に外部デバイスがPRE信号をハイレベルにアサートしておくことにより実行される。
電源投入時にPRE信号がハイレベルにアサートされた状態でフラッシュメモリが起動されると、管理部130へ起動コマンドが送られて管理部が初期化された後、管理テーブルのロードが行なわれ、ロード完了後にインタフェース制御部110から管理部130に対して自動読出しコマンドと0番地を示すアドレスが供給される。すると、シーケンサ132はこの管理テーブルを参照して必要があるときはアドレス変換を行なって変換後のアドレスとリードコマンドとをフラッシュ部120へ供給する。これによって、フラッシュ・メモリアレイ121の0番地のセクタのデータが読み出されてバッファメモリ123Aに格納される。
次に、シーケンサ132は読み出されたデータをECC回路136へ送ってエラーチェックと訂正を行なわせ、ECC処理が終了すると管理部130からインタフェース制御部110に対して転送可能を示す信号が送られ、インタフェース制御部110はホストインタフェース部101から出力される本動作のレディまたはビジーを示す信号/MRESをハイレベルに変化させる。外部デバイスが、この信号/MRESの変化を検出してリードクロックRCKをフラッシュメモリに入力すると、上記バッファメモリ113Aに保持されているデータがホストインタフェース部101を介して外部デバイスへ転送される。
図18には、書込み処理で書込み異常が発生した場合の手順が示されている。なお、この明細書においては、1セクタのデータ領域の全メモリセルに対してデータを書き込む場合を書込みと称し、1セクタのデータ領域の一部のメモリセルに対してデータを書き込む場合を書換えと称し、書込みと書換えを区別して扱う。
外部デバイスからの書込みコマンドに応じて書込み動作(ステップS81)が終了し、ベリファイ動作によって書込み異常が検出されると記憶部120から管理部130に対して異常終了を知らせる信号が送られる(ステップS82)。すると、管理部は、当該書込みアドレスを不良アドレスとしてワークRAM135内の管理テーブルに登録する(ステップS83)。そして、代替領域の正常セクタと置き換えるアドレス変換を行ない、変換後のアドレスを書込みアドレスとして、記憶部120へ書込みコマンドとアドレスを送る(ステップS84)。すると、記憶部では、代替されたセクタに対して書込みを実行する(ステップS85)。そして、書込みが正常に終了すると記憶部から管理部に対して正常終了を知らせる信号が送られる。
次に、管理部は、消去エラーフラグが立っているかチェックし、フラグが立っている時はワークRAMにある管理テーブルをフラッシュ・メモリアレイに格納する(ステップS86,S87)。消去エラーフラグが立っていないときまたは管理テーブルをフラッシュ・メモリアレイに格納後、管理テーブルの書換えを行なったセクタの書換え回数をチェックして所定回数に達していないときはインタフェース制御部に終了信号を送り、インタフェース制御部はホストインタフェース部を制御してチップ外部へ終了信号を出力する(ステップS88)。書換え回数が所定回数以上になっていたときは、書換え回数平均化処理によってブロックシフトを行なってからインタフェース制御部に終了信号を送り、インタフェース制御部はホストインタフェース部を制御してチップ外部へ終了信号を出力する(ステップS89)。
なお、消去フラグに関しては、ステップS81の書込み動作で先ず書込み対象のセクタのデータ消去を行なうので、そのデータ消去の際に異常が発生すると消去フラグが立てられるとともに代替処理が行なわれてワークRAM内の管理テーブルが更新される。そこで、この実施例では、書込み終了後に消去エラーフラグが立っているかチェックし、消去フラグが立っている時はワークRAMにある管理テーブルをフラッシュ・メモリアレイに格納するようにしている。
図19には、本実施例のフラッシュメモリにおけるデータ消去処理で消去異常が発生した場合の手順が示されている。なお、この消去処理には、外部デバイスからの消去コマンドと書込みコマンドによる書込み前の一旦消去が含まれる。
外部デバイスからの消去コマンドまたは書込みコマンドに応じて指定されたセクタのデータ消去動作(ステップS91)が終了し、ベリファイ動作によって消去異常が検出されると記憶部120から管理部130に対して異常終了を知らせる信号が送られる(ステップS92)。すると、管理部は、当該消去アドレスまたは書込みアドレスを不良アドレスとしてワークRAM内の管理テーブルに登録する(ステップS93)。そして、代替領域の正常セクタと置き換えるアドレス変換を行ない、変換後のアドレスを消去アドレスとして、記憶部へ消去コマンドとアドレスを送る(ステップS94)。すると、記憶部では、代替されたセクタに対して消去を実行する(ステップS95)。そして、消去が正常に終了すると記憶部から管理部に対して正常終了を知らせる信号が送られる。特に制限されないが、管理部はステップS92で異常終了を知らせる信号が送られてきた場合、当該消去動作を行ったセクタのメモリセルのしきい値電圧を高くする処理を行い、しきい値電圧が0v以下(デプリート状態)になっているメモリセルのしきい値電圧を0v以上にするようにしても良い。
次に、管理部は、消去エラーフラグを立ててから、インタフェース制御部に終了信号を送り、インタフェース制御部はホストインタフェース部を制御してチップ外部へ終了信号を出力する(ステップS96)。なお、書込みコマンドに応じて消去を行なったときは、終了信号を出力せずに図18の書込み処理へ移行する。
図20には、本実施例のフラッシュメモリにおける通常のデータ読出し動作の流れが示されている。この通常データ読出しは、外部デバイスからフラッシュメモリに対して読出しコマンドと読出しアドレスが入力されることにより開始される。読出しアドレスはセクタアドレスSAとセクタ内の任意のバイトデータを指定するカラムアドレスCAとからなる。
入力された読出しコマンドはインタフェース制御部を制御して管理部へ送られ、管理部では管理テーブルを用いてアドレス変換を行なう。このアドレス変換には書換え回数平均化処理でブロックシフトされたアドレスと不良アドレス代替処理で代替されたアドレスとが含まれる。アドレス変換後、管理部から記憶部に対して読出しコマンドと変換後のアドレスSA’,CAが送られる。すると、記憶部ではフラッシュ・メモリアレイ121の指定されたセクタのデータとその次のセクタのデータが読み出されてバッファメモリ123Aと123Bにそれぞれ保持される。
バッファメモリへのデータの読出しが完了すると完了を知らせる信号が記憶部から管理部へ送られ、この信号に応じて管理部はDMA制御回路137とECC回路136を制御して先ずバッファメモリ123Aのデータに関してエラー検出訂正処理を行ない、該ECC処理が終了するとインタフェース制御部に対して転送可能を知らせ、インタフェース制御部はレディ/ビジーを示す信号/RBを用いてレディ状態になったことを外部デバイスへ知らせる。
すると、外部デバイスからのクロックの入力に応じてバッファメモリ123A内のデータがチップ外部へ出力され、外部デバイスへ転送される。また、上記データ転送と並行してバッファメモリ123Bのデータに関してエラー検出訂正処理が実行される。このECC処理が終了するとインタフェース制御部に対してバッファメモリ123Bのデータの転送可能が知らされ、バッファメモリ123Aのデータの転送完了が終了すると、外部デバイスからの要求に応じてバッファメモリ123Bのデータの転送が開始される。
図21には、本実施例のフラッシュメモリにおけるシーケンシャル読出し動作の流れが示されている。このシーケンシャル読出しは、外部デバイスからフラッシュメモリに対してシーケンシャル読出しコマンドと読出しアドレスが入力されることにより開始され、外部デバイスがクロックを入力し続ける限り読出しアドレス以降のすべてのデータを読み出せるようにした機能である。シーケンシャル読出しは図20の通常読出しと類似した手順で行なわれる。
図20の通常読出しとの違いは、図20の通常読出しでは最初に第1のバッファメモリ123Aと第2のバッファメモリ123Bにデータを読み出して一方のバッファメモリ123Aのデータを外部へ転送している間に他方のバッファメモリ123Bのデータに対するエラー訂正処理を行なうのに対し、シーケンシャル読出しでは、一方のバッファメモリ123Aへのデータ読出しとエラー訂正を行ない外部デバイスへ転送可能を知らせている間に他方のバッファメモリ123Bへのデータ読出しを行なうとともに、一方のバッファメモリ123Aのデータを外部へ転送している間に他方のバッファメモリ123Bのデータに対するエラー訂正処理を行なう点と、シーケンシャル読出しでは、一方のバッファメモリのデータ転送終了後にインタフェース制御部から管理部に対してその都度シーケンシャル読出しコマンドを送る点にある。
図22には、本実施例のフラッシュメモリにおけるデータの書換え動作の流れが示されている。データの書換えは、外部デバイスからフラッシュメモリに対して書換えコマンドと書換えアドレスおよび書換えデータが入力されることにより開始される。書込みアドレスはセクタを指定するセクタアドレスSAのみであるが、書換えアドレスはセクタアドレスSAとセクタ内の任意のバイトデータを指定するカラムアドレスCAとからなる。入力された書換えデータは第1のバッファメモリ123Aに一旦格納される。インタフェース制御部は、書換えコマンドを受けると管理部に対して読出しコマンドを発行するとともに、入力される書換えデータのバイト数を計数して管理部に対して転送データサイズを知らせる。
すると、管理部は管理テーブルを用いてアドレス変換を行ない、読出しコマンドと変換後のアドレスSA’,CAを記憶部へ送る。記憶部ではフラッシュ・メモリアレイ121の指定されたセクタのデータ領域のデータ(2096バイト)とセクタ管理領域の管理データ(16バイト)が読み出されて第2のバッファメモリ123Bに保持される。バッファメモリ123Bへのデータの読出しが完了すると完了を知らせる信号が記憶部から管理部へ送られ、この信号に応じて管理部はDMA制御回路137とECC回路136を制御してバッファメモリ123Bのデータに関してエラー検出訂正処理を行なう。
そして、該ECC処理が終了すると管理部はDMA制御回路137を制御して第1のバッファメモリ123Aに保持されている書換えデータを第2のバッファメモリ123Bへ転送してデータを合成する。具体的には、フラッシュ・メモリアレイから読み出された1セクタの21162バイトのデータのうち外部デバイスがカラムアドレスCAで指定した位置のデータを、第1のバッファメモリ123Aに保持されている書換えデータに置き換える。それから、管理部はDMA制御回路137とECC回路136を制御して、書換え後の第2のバッファメモリ123B内のデータに対してECCコードの生成を行なう。
その後、記憶部に対して消去コマンドとアドレスを送って書換え対象のセクタのデータ消去を行なわせる。消去が終了すると記憶部から管理部へ終了信号が出力されるので、管理部は記憶部に対して書込みコマンドとアドレスを送って書換え対象のセクタにバッファメモリ123Bのデータを書き込ませる。書込みが終了すると記憶部から管理部へ終了信号が出力されるので、管理部はインタフェース制御部に終了信号を送り、インタフェース制御部はホストインタフェース部を制御して外部デバイスへ終了信号を出力する。
図23には、本実施例のフラッシュメモリにおけるデータの消去動作の流れが示されている。データの消去は、外部デバイスからフラッシュメモリに対して消去コマンドと消去アドレスが入力されることにより開始される。なお、この実施例では、消去はセクタ単位で行なわれる。
消去コマンドが入力されると、インタフェース制御部110から第1のバッファメモリ123Aに対してクリア信号を送って全データをクリアさせるとともに、管理部12に対して読出しコマンドとアドレスを送る。このアドレスは消去対象のセクタを指定するアドレスである。読出しコマンドを送るのは、図6に示されているように、各セクタには本来のデータを記憶するデータ領域の他にセクタ管理情報を記憶する管理領域が設けられており、セクタ単位で消去を実行すると、この管理情報も消去されてしまうので、予めバッファメモリに退避させておくためである。
読出しコマンドを受けると管理部は管理テーブルを用いてアドレス変換を行ない、読出しコマンドと変換後のアドレスSA’,CAを記憶部へ送る。記憶部ではフラッシュ・メモリアレイ121の指定されたセクタのデータ領域のデータ(2096バイト)とセクタ管理領域の管理データ(16バイト)が読み出されて第2のバッファメモリ123Bに保持される。バッファメモリ123Bへのデータの読出しが完了すると完了を知らせる信号が記憶部から管理部へ送られ、この信号に応じて管理部はDMA制御回路137とECC回路136を制御してバッファメモリ123Bのデータに関してエラー検出訂正処理を行なう。
そして、該ECC処理が終了すると管理部はDMA制御回路137を制御して第1のバッファメモリ123Aに保持されているクリアデータ(メモリセルの消去状態に対応したデータ)を第2のバッファメモリ123Bへ転送してデータを合成する。具体的には、フラッシュ・メモリアレイから読み出された1セクタの21162バイトのデータのうちセクタ管理領域に記憶されている16バイトのセクタ管理情報を除く2096バイトのデータを、第1のバッファメモリ123Aに保持されているクリアデータに置き換える。それから、管理部はDMA制御回路137とECC回路136を制御して、書換え後の第2のバッファメモリ123B内のデータに対してECCコードの生成を行なう。
その後、記憶部に対して消去コマンドとアドレスを送って消去対象のセクタのデータ消去を行なわせる。消去が終了すると記憶部から管理部へ終了信号が出力されるので、管理部は記憶部に対して書込みコマンドとアドレスを送って書換え対象のセクタにバッファメモリ123Bのデータを書き込ませる。これによって、指定されたセクタにはECCコードと第2のバッファメモリ123Bに退避されていたセクタ管理情報が書き込まれる。書込みが終了すると記憶部から管理部へ終了信号が出力されるので、管理部はインタフェース制御部に終了信号を送り、インタフェース制御部はホストインタフェース部を制御して外部デバイスへ終了信号を出力する。
図24には、本実施例のフラッシュメモリにおけるディープスタンバイモードへの移行とディープスタンバイモードから通常動作モードへの復帰動作の流れが示されている。
本実施例のフラッシュメモリには、記憶部120の電源回路122内の昇圧用チャージポンプを完全にオフ状態にさせるディープスタンバイモードと、チップを該ディープスタンバイモードへ移行させるためのコマンドとディープスタンバイモードから復帰させるためのコマンドが用意されている。外部デバイスからフラッシュメモリに対してディープスタンバイ移行コマンドが入力されると、インタフェース制御部から記憶部へディープスタンバイモードへの移行を指令するディープスタンバイ信号がアサートされる。
すると、記憶部は電源回路122内の昇圧用チャージポンプへ供給されるクロックを遮断もしくはクロック生成回路の動作を停止させてチャージポンプをオフ状態にさせる。これにより、フラッシュメモリは、消費電力が非常に少ない状態にされる。また、外部デバイスからフラッシュメモリに対してディープスタンバイからの復帰コマンドが入力されると、インタフェース制御部から記憶部へ供給されるディープスタンバイ信号がネゲートされる。すると、記憶部は電源回路122内の昇圧用チャージポンプへのクロックの供給を再開もしくはクロック生成回路を起動させてチャージポンプをオン状態にさせる。これにより、メモリアレイへの書込みや消去に必要な高電圧が発生されるようになる。
図25には、本実施例のフラッシュメモリにおけるいわゆるホットリスタートと呼ばれる電源投入時に行なわれる動作(図17参照)と類似の動作の流れが示されている。
図17のパワーオン時の自動読出しでは、管理テーブルのロード完了後にインタフェース制御部110から管理部130に対して読出しコマンドとメモリアレイ121の0番地を示すアドレスが供給されてメモリアレイの先頭番地のデータが読み出されて外部へ出力されるのに対し、図25のホットリスタートでは、フラッシュメモリの所定の外部端子に入力されるPRE信号がロウレベルに変化されると、本動作のレディまたはビジーを示す信号/MRESをビジー状態を示すロウレベルに変化させた後、管理テーブルをロードせずに管理部に対してリードコマンドとメモリアレイの0番地を示すアドレスが送られてメモリアレイの先頭番地のデータが読み出されて外部へ出力される。管理テーブルをロードしないのは、ホットリスタートは電源投入中に行なわれる動作であり、電源投入時にロードされた管理テーブルがすでにワークRAMに保持されているためである。
PRE信号はホストCPUのような外部デバイスがロウレベルに変化させるようにしてもよいが、図26に示すように、フラッシュメモリ100のPRE信号が入力される外部端子にリセットスイッチR−SWを接続し、フラッシュメモリ100から出力されるレディまたはビジーを示す信号/MRESをホストCPU200のリセット端子に入力させるようにシステムを構成するとともに、フラッシュメモリのメモリアレイの先頭(0番地)にシステムの起動時に最初に実行するプログラムを格納しておくことにより、フラッシュメモリをブートデバイスとして機能させることができる。
例えばリセットスイッチR−SWを図26のように電源電圧端子Vcc側に設定した状態で図示しないパワースイッチをオンさせてシステムの電源を立ち上げると、図27(A)のように電源電圧Vccの上昇とともにPRE信号がハイレベルに立ち上がる。そのため、このときフラッシュメモリは、図17の動作に従ってメモリアレイの0番地のデータを自動的に読み出し、チップ外部へ出力可能な状態になるとレディまたはビジーを示す信号/MRESをレディ状態を示すハイレベルに変化させる。図26のシステムでは、この信号がホストCPUのリセット端子に入力されるため、CPUのリセットが解除されてCPUがフラッシュメモリからデータを読み出すブート動作を開始することができる。
また、電源オン中に、リセットスイッチR−SWをグランド側に切り換えると、図27(B)のようにPRE信号がロウレベルに立ち下がるため、このときフラッシュメモリは、図25のホットリスタートの動作に従って先ず信号/MRESをロウレベルに変化させてから、メモリアレイの0番地のデータを自動的に読み出する。そして、読み出したチップ外部へ出力可能な状態になると、信号/MRESをハイレベルに変化させる。図26のシステムでは、この信号がホストCPUのリセット端子に入力されるため、CPUのリセットが解除されてCPUがフラッシュメモリからデータを読み出すブート動作を開始することができる。
次に、本実施例のフラッシュメモリに設けられている他の機能について説明する。
本実施例のフラッシュメモリは、複数のテスト用コマンドを備えている。図28には、そのうち2つのテスト用コマンドが入力されたときの動作の手順が示されている。第1のテスト用コマンドが入力されると、図28(A)のように、管理部130がフラッシュ・メモリアレイ121内の管理テーブルの予備代替領域管理情報(図7(C))を参照してエントリ数を加算することにより代替セクタの合計数を算出(ステップS101)し、代替領域のうち使用済みの代替セクタ数をフラッシュ・メモリアレイの通常領域に書き込む(ステップS102)。従って、製品選別の際にこの使用済みの代替セクタ数を読み出すことにより、未使用の代替セクタ数が所定数以下の製品は不良品と判定することにより、通常使用状態で発生する不良セクタを代替できる数をある値以上保証して製品の信頼性を向上させることができる。
また、第2のテスト用コマンドが入力されると、図28(B)のように、管理部130がフラッシュ・メモリアレイ121内の管理テーブルの予備代替領域管理情報(図7(C))を参照してエントリ数を加算することにより代替セクタの合計数を算出する(ステップS111)とともに、第1のテスト用コマンドの入力でメモリアレイに書き込まれた使用済みの代替セクタ数を読み出して(ステップS112)、使用済みの代替セクタ数が増加したか否か判定(ステップS113)し、増加した時はフラグをセット(ステップS114)し、増加していないときはフラグをセットせずに終了する。このフラグは、例えばエージング試験を行なう場合に、試験前に第1のテスト用コマンドを入力し、試験後に第2のテスト用コマンドを入力してフラグを確定させ、その後の選別の際にフラグを参照しフラグが立っている製品は不良品と判定することにより、短時間で不良セクタが増加するような製品が良品として出荷されるのを防止することができる。
なお、図28(A)のステップS102で、使用済みの代替セクタ数をフラッシュ・メモリアレイに書き込む代わりにワークRAM135に書き込むようにしてもよい。また、図28(B)のステップS114でセットするフラグも、フラッシュ・メモリアレイ121に設けても良いし、ワークRAM135に設けても良い。また、図28(B)のステップS113で行なう使用済みの代替セクタ数が増加したか否かの判定は、単に増加したか否かの判定でもよいが、所定個数以上増加したか否かを判定するようにしても良い。
次に、本発明のフラッシュメモリの他の実施例を説明する。この実施例は、電源立上がり時にフラッシュ・メモリアレイからワークRAMにロードする管理テーブルが正常に読み出せなかった場合にはメモリアレイへのアクセスを拒否するようにしたものである。これを実現するための手段としては、例えば管理テーブルが正常に読み出せたか否かを判定して正常に読み出せたときにフラグをセットする処理と、図29に示されているように、フラッシュ・メモリアレイへのアクセスコマンドが入力(ステップS121)されたときに管理テーブルロード済みフラグを参照(ステップS122)して正常にロードされているか判定(ステップS123)し、正常にロードされている場合にのみフラッシュ・メモリアレイへのアクセスを許可(ステップS124)し、正常にロードされていない場合にはフラッシュ・メモリアレイへのアクセスを拒否してテーブルエラーを示す信号を出力(ステップS125)またはステータスレジスタの所定のビットをセットする処理とを管理部が実行できるように構成する方法が考えられる。
以上本発明者によってなされた発明を実施例に基づき具体的に説明したが、本発明は上記実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、実施例においては、1つの記憶素子(メモリセル)に1ビットのデータを記憶可能な2値のフラッシュメモリについて説明したが、本発明は1つの記憶素子に2ビット以上のデータを記憶する多値のフラッシュメモリに対しても適用することができる。
さらに、前記実施例においては、メモリアレイの具体的な構成については説明を省略したが、本発明は複数の記憶素子がビット線とソース線との間に並列に接続されたいわゆるAND型もしくはNOR型のフラッシュメモリはもちろん、記憶素子が直列に接続されたいわゆるNAND型のフラッシュメモリに対しても適用することができる。更にはフローティングゲートとコントロールゲートを有する2層ゲート型のメモリセルに限られず、コントロールゲートとチャネルの間に窒化膜からなる電荷蓄積層を有するMONOS型のメモリセルであっても良い。この場合電荷蓄積層全体に電荷を蓄積し1ビット情報を格納するものであっても、電荷蓄積層の部分的に電荷を蓄積し2ビット以上の情報を格納するものであっても良い。
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるフラッシュメモリに適用した場合について説明したが、この発明はそれに限定されるものでなく、本発明は、電圧を印加してしきい値電圧を変化させて情報の記憶を行なう不揮発性記憶素子を有する半導体メモリに広く利用する
ことができる。